mirror of
https://github.com/pyMC-dev/pyMC_Repeater.git
synced 2026-07-13 21:31:31 +02:00
2 lines
76 KiB
JavaScript
2 lines
76 KiB
JavaScript
import{A as e,E as t,I as n,K as r,S as i,b as a,c as o,dt as s,f as c,ft as l,g as u,i as d,j as f,k as p,l as m,m as h,o as g,p as _,pt as v,r as y,s as b,u as x,w as S,x as C,z as w}from"./runtime-core.esm-bundler-HnidnMFy.js";import{t as T}from"./api-CbM6k1ZB.js";import{t as E}from"./system-BH4r-ii6.js";import{t as D}from"./packets-C-dzvp0W.js";import{t as O}from"./websocket-nXR7EYbj.js";import{t as k}from"./_plugin-vue_export-helper-B7aGp3iI.js";import{a as A,c as ee,d as te,h as j}from"./index-BFltqMtv.js";import{n as M,t as N}from"./preferences-Bv8i60GL.js";import{a as P,c as F,i as I,l as L,m as ne,s as R,u as re}from"./chart-B1uYMRrx.js";import{t as z}from"./useSignalQuality-BfZWbBxN.js";var ie={class:`sparkline-card`},B={class:`card-header`},ae={class:`card-title`},V={class:`card-values`},H={class:`card-chart`},U=k(u({name:`ChartSparkline`,__name:`ChartSparkline`,props:{title:{},value:{},color:{},data:{default:()=>[]},showChart:{type:Boolean,default:!0},secondaryValue:{default:void 0},secondaryLabel:{default:``},secondaryColor:{default:``},secondaryData:{default:()=>[]}},setup(e){P.register(I,L,re,F,R,ne);let t=e,r=w(null),o=w(null),s=e=>{if(e.length<3)return e;let t=Math.min(15,Math.max(3,Math.floor(e.length*.2))),n=[];for(let r=0;r<e.length;r++){let i=Math.floor(t/2),a=Math.max(0,r-i),o=Math.min(e.length,r+i+1),s=e.slice(a,o);n.push(s.reduce((e,t)=>e+t,0)/s.length)}let r=Math.min(12,n.length),i=n.length/r,a=[];for(let e=0;e<r;e++){let t=Math.floor(e*i);a.push(n[t])}return a},c=g(()=>!t.data||t.data.length===0?[]:s(t.data)),u=g(()=>!t.secondaryData||t.secondaryData.length===0?[]:s(t.secondaryData)),d=()=>{if(!r.value)return;let e=r.value.getContext(`2d`);if(!e)return;o.value&&=(o.value.destroy(),null);let i=c.value;if(i.length<2)return;let a=[{data:i,borderColor:t.color,borderWidth:2.5,fill:!1,tension:.4,pointRadius:0,pointHoverRadius:0}],s=u.value;s.length>=2&&t.secondaryColor&&a.push({data:s,borderColor:t.secondaryColor,borderWidth:2,borderDash:[4,3],fill:!1,tension:.4,pointRadius:0,pointHoverRadius:0}),o.value=n(new P(e,{type:`line`,data:{labels:i.map((e,t)=>t.toString()),datasets:a},options:{responsive:!0,maintainAspectRatio:!1,animation:{duration:800,easing:`easeOutQuart`},plugins:{legend:{display:!1},tooltip:{enabled:!1}},scales:{x:{display:!1,grid:{display:!1}},y:{display:!1,grid:{display:!1},grace:`10%`}},elements:{line:{capBezierPoints:!0}}}}))},f=()=>{if(!o.value){d();return}let e=c.value;if(e.length<2)return;o.value.data.labels=e.map((e,t)=>t.toString()),o.value.data.datasets[0].data=e;let n=u.value;n.length>=2&&t.secondaryColor&&(o.value.data.datasets.length<2?o.value.data.datasets.push({data:n,borderColor:t.secondaryColor,borderWidth:2,borderDash:[4,3],fill:!1,tension:.4,pointRadius:0,pointHoverRadius:0}):o.value.data.datasets[1].data=n),o.value.update(`default`)};return p(()=>t.data,()=>{a(()=>f())},{deep:!0}),p(()=>t.color,()=>{o.value&&(o.value.data.datasets[0].borderColor=t.color,o.value.update(`none`))}),i(()=>{a(()=>d())}),C(()=>{o.value&&=(o.value.destroy(),null)}),(t,n)=>(S(),x(`div`,ie,[b(`div`,B,[b(`p`,ae,v(e.title),1),b(`div`,V,[b(`span`,{class:`card-value`,style:l({color:e.color})},v(typeof e.value==`number`?e.value.toLocaleString():e.value),5),e.secondaryValue===void 0?m(``,!0):(S(),x(`span`,{key:0,class:`card-secondary-value`,style:l({color:e.secondaryColor})},v(e.secondaryLabel)+v(typeof e.secondaryValue==`number`?e.secondaryValue.toLocaleString():e.secondaryValue),5))])]),b(`div`,H,[e.showChart?(S(),x(`canvas`,{key:0,ref_key:`canvasRef`,ref:r},null,512)):m(``,!0)])]))}}),[[`__scopeId`,`data-v-d5c09182`]]),W={class:`grid grid-cols-2 md:grid-cols-3 lg:grid-cols-5 gap-3 lg:gap-4 mb-5 stats-cards-container`},G=k(u({name:`StatsCards`,__name:`StatsCards`,setup(e){let t=D(),n=O(),r=w(null),o=w(!1),s=g(()=>{let e=t.packetStats,n=t.systemStats,r=e=>{let t=Math.floor(e/86400),n=Math.floor(e%86400/3600),r=Math.floor(e%3600/60);return t>0?`${t}d ${n}h`:n>0?`${n}h ${r}m`:`${r}m`},i=e?.total_packets||0,a=e?.dropped_packets||0,o=i>0?Math.round(a/i*100):0;return{packetsReceived:i,packetsForwarded:e?.transmitted_packets||0,uptimeFormatted:n?r(n.uptime_seconds||0):`0m`,uptimeHours:n?Math.floor((n.uptime_seconds||0)/3600):0,droppedPackets:a,dropPercent:`${o}%`,signalQuality:Math.round((e?.avg_rssi||0)+120),crcErrorCount:t.crcErrorCount}}),c=g(()=>t.sparklineData),l=async()=>{if(!o.value)try{o.value=!0,await Promise.all([t.fetchSystemStats(),t.fetchPacketStats({hours:24})]),await a()}catch(e){console.error(`Error fetching stats:`,e)}finally{o.value=!1}};return i(async()=>{await t.initializeSparklineHistory(),l(),r.value=window.setInterval(()=>{t.interpolateRates()},6e4)}),A(l,{intervalMs:3e4,enabled:()=>!n.isConnected,immediate:!1}),C(()=>{r.value&&clearInterval(r.value)}),(e,t)=>(S(),x(`div`,W,[h(U,{title:`Up Time`,value:s.value.uptimeFormatted,color:`#EBA0FC`,data:[],showChart:!1,class:`stat-card`},null,8,[`value`]),h(U,{title:`RX Packets`,value:s.value.packetsReceived,color:`#AAE8E8`,data:c.value.totalPackets,class:`stat-card`},null,8,[`value`,`data`]),h(U,{title:`Forward`,value:s.value.packetsForwarded,color:`#FFC246`,data:c.value.transmittedPackets,class:`stat-card`},null,8,[`value`,`data`]),h(U,{title:`Dropped`,value:s.value.droppedPackets,color:`#FB787B`,data:c.value.droppedPackets,class:`stat-card`},null,8,[`value`,`data`]),h(U,{title:`CRC Errors`,value:s.value.crcErrorCount,color:`#F59E0B`,data:c.value.crcErrors,class:`stat-card`},null,8,[`value`,`data`])]))}}),[[`__scopeId`,`data-v-9aa769d6`]]),K={class:`glass-card rounded-[10px] p-4 lg:p-6`},q={class:`h-48 lg:h-56 relative`},oe={key:0,class:`absolute inset-0 flex items-center justify-center`},J={key:1,class:`absolute inset-0 flex items-center justify-center`},se={class:`text-red-600 dark:text-red-400 text-sm lg:text-base`},ce={key:2,class:`absolute inset-0 flex items-center justify-center`},Y={key:3,class:`h-full flex flex-col`},X={key:0,class:`absolute top-2 left-1/2 -translate-x-1/2 bg-white/95 dark:bg-surface-elevated border border-stroke-subtle dark:border-stroke rounded-lg px-3 py-2 z-10 pointer-events-none min-w-48`},le={class:`text-content-primary dark:text-content-primary text-sm font-medium mb-1`},ue={class:`text-content-primary dark:text-content-primary`},de={class:`flex-1 flex items-end justify-evenly gap-4 px-4`},Z=[`onMouseenter`],fe={class:`text-content-primary dark:text-content-primary text-xs sm:text-sm font-semibold text-center w-full`,style:{"padding-bottom":`5px`}},pe={class:`text-content-secondary dark:text-content-muted text-xs mt-2 text-center`},me={key:0,class:`mt-4 flex flex-wrap justify-center gap-3 sm:gap-4 px-2 sm:px-4 text-[10px] sm:text-xs text-content-secondary dark:text-content-muted`},he={class:`truncate text-left`},ge={key:1,class:`mt-3 text-xs text-content-secondary dark:text-content-muted text-center`},_e=k(u({name:`PacketTypesChart`,__name:`PacketTypesChart`,setup(e){let n=w([]),r=D(),a=O(),o=w(!0),s=w(null),c=w(null),u=[{name:`Payload`,types:[`Plain Text Message`,`Group Text Message`,`Group Datagram`,`Multi-part Packet`],subColors:[`#3B82F6`,`#60A5FA`,`#93C5FD`,`#BFDBFE`]},{name:`Requests`,types:[`Request`,`Response`,`Anonymous Request`],subColors:[`#10B981`,`#34D399`,`#6EE7B7`]},{name:`Control`,types:[`Node Advertisement`,`Acknowledgment`,`Returned Path`],subColors:[`#F59E0B`,`#FBBF24`,`#FCD34D`]},{name:`Routing`,types:[`Trace`],subColors:[`#8B5CF6`]},{name:`Reserved`,types:[`Reserved Type 11`,`Reserved Type 12`,`Reserved Type 13`],subColors:[`#6B7280`,`#9CA3AF`,`#D1D5DB`]}],d=g(()=>u.map(e=>{let t=n.value.filter(t=>e.types.some(e=>t.name.includes(e)||t.name===e)).sort((e,t)=>t.count-e.count).map((t,n)=>({...t,color:e.subColors[n%e.subColors.length]}));return{name:e.name,color:e.subColors[0],items:t,total:t.reduce((e,t)=>e+t.count,0)}}).filter(e=>e.total>0)),f=g(()=>Math.max(...d.value.map(e=>e.total),1)),h=g(()=>d.value.reduce((e,t)=>e+t.total,0)),_=async()=>{try{s.value=null;let e=await T.get(`/packet_type_graph_data`);if(e?.success&&e?.data){let t=e.data;if(t?.series){let e=[];t.series.forEach((t,n)=>{let r=0;t.data&&Array.isArray(t.data)&&(r=t.data.reduce((e,t)=>e+(t[1]||0),0)),r>0&&e.push({name:t.name||`Type ${t.type}`,type:t.type,count:r,color:``})}),n.value=e,o.value=!1}else s.value=`No series data in server response`,o.value=!1}else s.value=`Invalid response from server`,o.value=!1}catch(e){s.value=e instanceof Error?e.message:`Failed to load data`,o.value=!1}},C={0:`Request`,1:`Response`,2:`Plain Text Message`,3:`Acknowledgment`,4:`Node Advertisement`,5:`Group Text Message`,6:`Group Datagram`,7:`Anonymous Request`,8:`Returned Path`,9:`Trace`,10:`Multi-part Packet`,15:`Custom Packet`},E=()=>{let e=r.packetTypeBreakdown;!e||e.length===0||(n.value=e.map(e=>({name:C[Number(e.type)]||`Type ${e.type}`,type:e.type,count:e.count,color:``})),o.value=!1,s.value=null)},k=e=>Math.max(e/f.value*90,2),ee=(e,t)=>t===0?0:e/t*100;return i(()=>{_()}),p(()=>r.packetTypeBreakdown,()=>E(),{deep:!0,immediate:!0}),A(_,{intervalMs:3e4,enabled:()=>!a.isConnected,immediate:!0}),(e,n)=>(S(),x(`div`,K,[n[3]||=b(`div`,{class:`flex items-baseline justify-between mb-3 lg:mb-4`},[b(`h3`,{class:`text-content-primary dark:text-content-primary text-lg lg:text-xl font-semibold`},` Packet Types `),b(`p`,{class:`text-content-secondary dark:text-content-muted text-xs lg:text-sm uppercase`},` Distribution by Type `)],-1),b(`div`,q,[o.value?(S(),x(`div`,oe,[...n[1]||=[b(`div`,{class:`text-content-secondary dark:text-content-primary text-sm lg:text-base`},` Loading packet types... `,-1)]])):s.value?(S(),x(`div`,J,[b(`div`,se,v(s.value),1)])):d.value.length===0?(S(),x(`div`,ce,[...n[2]||=[b(`div`,{class:`text-content-secondary dark:text-content-primary text-sm lg:text-base`},` No packet data available `,-1)]])):(S(),x(`div`,Y,[c.value?(S(),x(`div`,X,[b(`div`,le,v(c.value.name)+` · `+v(c.value.total.toLocaleString()),1),(S(!0),x(y,null,t(c.value.items,e=>(S(),x(`div`,{key:e.type,class:`flex justify-between gap-4 text-xs text-content-secondary dark:text-content-muted`},[b(`span`,null,v(e.name),1),b(`span`,ue,v(e.count.toLocaleString()),1)]))),128))])):m(``,!0),b(`div`,de,[(S(!0),x(y,null,t(d.value,e=>(S(),x(`div`,{key:e.name,class:`flex flex-col items-center flex-1 max-w-32 h-full justify-end cursor-pointer`,onMouseenter:t=>c.value=e,onMouseleave:n[0]||=e=>c.value=null},[b(`span`,fe,v(e.total.toLocaleString()),1),b(`div`,{class:`w-full rounded-[5px] transition-all duration-300 ease-out hover:opacity-90 overflow-hidden flex flex-col-reverse`,style:l({height:k(e.total)+`%`,minHeight:`8px`})},[(S(!0),x(y,null,t(e.items,t=>(S(),x(`div`,{key:t.type,style:l({height:ee(t.count,e.total)+`%`,backgroundColor:t.color})},null,4))),128))],4),b(`span`,pe,v(e.name),1)],40,Z))),128))])]))]),d.value.length>0?(S(),x(`div`,me,[(S(!0),x(y,null,t(d.value,e=>(S(),x(`div`,{key:`legend-`+e.name,class:`flex flex-col gap-0.5 min-w-[100px] max-w-[140px] flex-shrink-0`},[(S(!0),x(y,null,t(e.items,e=>(S(),x(`div`,{key:e.type,class:`flex items-center gap-1.5`},[b(`span`,{class:`w-2 h-2 rounded-sm shrink-0`,style:l({backgroundColor:e.color})},null,4),b(`span`,he,v(e.name),1)]))),128))]))),128))])):m(``,!0),d.value.length>0?(S(),x(`div`,ge,` Total: `+v(h.value.toLocaleString())+` packets `,1)):m(``,!0)]))}}),[[`__scopeId`,`data-v-fdd759f8`]]),ve={class:`glass-card rounded-[10px] p-4 lg:p-6`},ye={class:`relative h-40 lg:h-48`},be={class:`mt-3 lg:mt-4 grid grid-cols-2 gap-3 lg:gap-4`},xe={class:`text-center`},Se={class:`text-lg lg:text-2xl font-bold text-content-primary dark:text-content-primary`},Ce={class:`text-center`},we={class:`text-lg lg:text-2xl font-bold text-content-primary dark:text-content-primary`},Te={class:`mt-2 lg:mt-3 grid grid-cols-3 gap-2 lg:gap-3 text-center`},Ee={class:`text-xs lg:text-sm font-semibold text-accent-purple flex items-center justify-center gap-1`},De={key:0,class:`inline-block w-1.5 h-1.5 rounded-full bg-secondary opacity-70`,title:`Early data - limited uptime`},Oe={class:`text-xs text-content-secondary dark:text-content-muted`},ke={class:`text-xs lg:text-sm font-semibold text-accent-red flex items-center justify-center gap-1`},Ae={key:0,class:`inline-block w-1.5 h-1.5 rounded-full bg-secondary opacity-70`,title:`Early data - limited uptime`},je={class:`text-xs text-content-secondary dark:text-content-muted`},Me={class:`text-xs lg:text-sm font-semibold text-white`},Ne=k(u({name:`AirtimeUtilizationChart`,__name:`AirtimeUtilizationChart`,setup(e){let t=D(),n=E(),o=w(null),s=w([]),l=w(!0),u=w(null),d=w(30),f=w({totalReceived:0,totalTransmitted:0,dropped:0,firstPacketTime:0}),p=w({sf:9,bwHz:62500,cr:5,preamble:17}),h=(e,t=60)=>{if(e.length===0)return[];let n=1-.5**(1/t),r=Math.min(e.length,Math.max(10,Math.floor(t/3))),i=0,a=0;for(let t=0;t<r;t++)i+=e[t].rxUtil,a+=e[t].txUtil;return i/=r,a/=r,e.map(e=>(i=n*e.rxUtil+(1-n)*i,a=n*e.txUtil+(1-n)*a,{...e,rxUtil:i,txUtil:a}))},y=g(()=>{let e=t.packetStats?.total_packets||0,r=t.packetStats?.transmitted_packets||0,i=n.stats?.uptime_seconds||0,a=e||f.value.totalReceived,o=r||f.value.totalTransmitted,s=f.value.firstPacketTime>0?Math.floor(Date.now()/1e3)-f.value.firstPacketTime:0,c=i||s,l=Math.max(c/3600,.1);if(l<1){let e=Math.max(c/60,1);return{rxRate:{value:Math.round(a/e*100)/100,label:l<.5?`RX/min (early)`:`RX/min`},txRate:{value:Math.round(o/e*100)/100,label:l<.5?`TX/min (early)`:`TX/min`},confidence:`low`}}let u=Math.round(a/l*100)/100,d=Math.round(o/l*100)/100,p,m;return l<6?(p=`RX/hr (${Math.round(l)}h)`,m=`medium`):l<24?(p=`RX/hr (${Math.round(l)}h)`,m=`high`):(p=`RX/hr`,m=`high`),{rxRate:{value:u,label:p},txRate:{value:d,label:p.replace(`RX`,`TX`)},confidence:m}}),O=async()=>{l.value=!0;try{let e=60*1e3,t=Math.floor(Date.now()/1e3),n=t-24*3600,r=0;try{let e=await T.get(`/stats`);if(e.success&&e.data){let t=e.data,n=t.config;if(n?.radio){let e=n.radio;p.value={sf:e.spreading_factor??9,bwHz:e.bandwidth??62500,cr:e.coding_rate??5,preamble:e.preamble_length??17}}r=t.dropped_count??0}}catch{}let i=await T.get(`/airtime_chart_data`,{start_timestamp:n,end_timestamp:t,bucket_seconds:60,sf:p.value.sf,bw_hz:p.value.bwHz,cr:p.value.cr,preamble:p.value.preamble});if(!i.success){s.value=[],l.value=!1,a(()=>k());return}let o=i.data,c=o.buckets||[];f.value={totalReceived:o.rx_total||0,totalTransmitted:o.tx_total||0,dropped:r,firstPacketTime:c.length>0?c[0].timestamp:t};let u=24*3600/60,m=new Float64Array(u),g=new Float64Array(u);for(let t of c){let r=Math.floor((t.timestamp-n)/60);r>=0&&r<u&&(m[r]=t.rx_ms/e*100,g[r]=t.tx_ms/e*100)}let _=[];for(let e=0;e<u;e++)_.push({timestamp:n+e*60,rxUtil:m[e],txUtil:g[e]});let v=h(_,10),y=Math.max(1,Math.floor(v.length/400)),b=[];for(let e=0;e<v.length;e+=y){let t=0,n=0,r=0,i=v[e].timestamp;for(let i=e;i<Math.min(e+y,v.length);i++)t+=v[i].rxUtil,n+=v[i].txUtil,r++;b.push({timestamp:i,rxUtil:t/r,txUtil:n/r})}s.value=b;let x=Math.max(...b.flatMap(e=>[e.rxUtil,e.txUtil]))*1.05;d.value=Math.max(5,Math.ceil(x/5)*5),l.value=!1,a(()=>k())}catch(e){console.error(`Failed to fetch airtime data:`,e),s.value=[],l.value=!1,a(()=>k())}},k=()=>{if(!o.value)return;let e=o.value,t=e.getContext(`2d`);if(!t)return;let n=e.parentElement;if(!n)return;let r=n.getBoundingClientRect(),i=r.width,a=r.height;if(e.width=i*window.devicePixelRatio,e.height=a*window.devicePixelRatio,e.style.width=i+`px`,e.style.height=a+`px`,t.scale(window.devicePixelRatio,window.devicePixelRatio),t.clearRect(0,0,i,a),l.value){t.fillStyle=`#666`,t.font=`16px system-ui`,t.textAlign=`center`,t.fillText(`Loading chart data...`,i/2,a/2);return}if(s.value.length===0){t.fillStyle=`#666`,t.font=`16px system-ui`,t.textAlign=`center`,t.fillText(`No data available`,i/2,a/2);return}let c=i-45-20,u=a-40,f=d.value,p=d.value;t.strokeStyle=`rgba(255, 255, 255, 0.1)`,t.lineWidth=1,t.font=`10px system-ui`,t.textAlign=`right`;for(let e=0;e<=5;e++){let n=20+u*e/5;t.beginPath(),t.moveTo(45,n),t.lineTo(i-20,n),t.stroke();let r=f-e/5*p;t.fillStyle=`rgba(255, 255, 255, 0.5)`,t.fillText(`${r.toFixed(0)}%`,40,n+3)}for(let e=0;e<=6;e++){let n=45+c*e/6;t.beginPath(),t.moveTo(n,20),t.lineTo(n,a-20),t.stroke()}s.value.length>1&&(t.strokeStyle=`#EBA0FC`,t.lineWidth=2,t.beginPath(),s.value.forEach((e,n)=>{let r=45+c*n/(s.value.length-1),i=a-20-Math.min(e.rxUtil,d.value)/p*u;n===0?t.moveTo(r,i):t.lineTo(r,i)}),t.stroke()),s.value.length>1&&(t.strokeStyle=`#FB787B`,t.lineWidth=2,t.beginPath(),s.value.forEach((e,n)=>{let r=45+c*n/(s.value.length-1),i=a-20-Math.min(e.txUtil,d.value)/p*u;n===0?t.moveTo(r,i):t.lineTo(r,i)}),t.stroke())};return i(()=>{O(),u.value=window.setInterval(O,3e4),a(()=>{k(),setTimeout(()=>k(),100)}),window.addEventListener(`resize`,k)}),C(()=>{u.value&&clearInterval(u.value),window.removeEventListener(`resize`,k)}),(e,n)=>(S(),x(`div`,ve,[n[3]||=c(`<h3 class="text-content-primary dark:text-content-primary text-lg lg:text-xl font-semibold mb-3 lg:mb-4" data-v-51cd61e9> Airtime Utilization </h3><p class="text-content-secondary dark:text-content-primary text-xs lg:text-sm uppercase mb-3 lg:mb-4" data-v-51cd61e9> Activity (Last 24 Hours) </p><div class="flex items-center gap-4 lg:gap-6 mb-3 lg:mb-4" data-v-51cd61e9><div class="flex items-center gap-2" data-v-51cd61e9><div class="w-5 lg:w-7 h-2 rounded bg-accent-purple" data-v-51cd61e9></div><span class="text-content-secondary dark:text-content-primary text-xs lg:text-sm" data-v-51cd61e9>Rx Util</span></div><div class="flex items-center gap-2" data-v-51cd61e9><div class="w-5 lg:w-7 h-2 rounded bg-accent-red" data-v-51cd61e9></div><span class="text-content-secondary dark:text-content-primary text-xs lg:text-sm" data-v-51cd61e9>Tx Util</span></div></div>`,3),b(`div`,ye,[b(`canvas`,{ref_key:`chartRef`,ref:o,class:`absolute inset-0 w-full h-full`},null,512)]),b(`div`,be,[b(`div`,xe,[b(`div`,Se,v(r(t).packetStats?.total_packets||f.value.totalReceived),1),n[0]||=b(`div`,{class:`text-xs text-content-secondary dark:text-content-muted uppercase tracking-wide`},` Total Received `,-1)]),b(`div`,Ce,[b(`div`,we,v(r(t).packetStats?.transmitted_packets||f.value.totalTransmitted),1),n[1]||=b(`div`,{class:`text-xs text-content-secondary dark:text-content-muted uppercase tracking-wide`},` Total Transmitted `,-1)])]),b(`div`,Te,[b(`div`,null,[b(`div`,Ee,[_(v(y.value.rxRate.value)+` `,1),y.value.confidence===`low`?(S(),x(`span`,De)):m(``,!0)]),b(`div`,Oe,v(y.value.rxRate.label),1)]),b(`div`,null,[b(`div`,ke,[_(v(y.value.txRate.value)+` `,1),y.value.confidence===`low`?(S(),x(`span`,Ae)):m(``,!0)]),b(`div`,je,v(y.value.txRate.label),1)]),b(`div`,null,[b(`div`,Me,v(r(t).packetStats?.dropped_packets||f.value.dropped),1),n[2]||=b(`div`,{class:`text-xs text-white/60`},`Dropped`,-1)])])]))}}),[[`__scopeId`,`data-v-51cd61e9`]]),Pe={class:`bg-white dark:bg-surface-elevated backdrop-blur-xl rounded-[20px] shadow-2xl border border-stroke-subtle dark:border-white/20 flex flex-col h-full overflow-hidden`},Fe={class:`flex items-center justify-between p-8 pb-4 flex-shrink-0`},Ie={class:`text-content-secondary dark:text-content-muted text-sm`},Le={class:`flex items-center gap-2`},Re=[`title`],ze={class:`flex-1 overflow-y-auto custom-scrollbar px-8`},Be={class:`mb-6`},Ve={class:`glass-card bg-white/5 rounded-[15px] p-4`},He={class:`grid grid-cols-1 md:grid-cols-2 gap-4`},Ue={class:`space-y-3`},We={class:`flex justify-between py-2 border-b border-stroke-subtle dark:border-stroke/10`},Ge={class:`text-content-primary dark:text-content-primary font-mono text-sm`},Ke={class:`flex justify-between py-2 border-b border-stroke-subtle dark:border-stroke/10`},qe={class:`text-content-primary dark:text-content-primary font-mono text-xs break-all`},Je={key:0,class:`flex justify-between py-2 border-b border-stroke-subtle dark:border-stroke/10`},Ye={class:`text-content-primary dark:text-content-primary font-mono text-xs`},Xe={class:`space-y-3`},Ze={class:`flex justify-between py-2 border-b border-stroke-subtle dark:border-stroke/10`},Qe={class:`text-content-primary dark:text-content-primary font-semibold`},$e={class:`flex justify-between py-2 border-b border-stroke-subtle dark:border-stroke/10`},et={class:`text-content-primary dark:text-content-primary font-semibold`},tt={class:`flex justify-between py-2 border-b border-stroke-subtle dark:border-stroke/10`},nt={class:`mb-6`},rt={class:`bg-gray-50 dark:bg-white/5 rounded-[15px] p-4 border border-stroke-subtle dark:border-stroke/10`},it={class:`space-y-3`},at={class:`flex justify-between py-2 border-b border-stroke-subtle dark:border-stroke/10`},ot={class:`text-content-primary dark:text-content-primary`},st={key:0,class:`pt-2`},ct={class:`glass-card bg-background-mute dark:bg-black/30 rounded-[10px] p-4 mb-4`},lt={class:`w-full overflow-x-auto`},ut={class:`text-content-primary dark:text-content-primary/90 text-xs font-mono whitespace-pre leading-relaxed min-w-full`},dt={class:`flex items-center justify-between mb-3`},ft={class:`text-content-secondary dark:text-content-primary/80 text-sm font-semibold`},pt={class:`text-content-muted dark:text-content-muted text-xs`},mt={class:`bg-background-mute dark:bg-black/40 rounded-[8px] p-3 mb-3`},ht={class:`font-mono text-xs text-content-primary dark:text-content-primary break-all whitespace-pre-wrap leading-relaxed`},gt={class:`bg-gray-50 dark:bg-white/5 rounded-[10px] overflow-hidden`},_t={key:0,class:`min-w-0`},vt={class:`text-cyan-500 text-sm font-mono break-words min-w-0`},yt={class:`text-content-primary dark:text-content-primary text-sm break-words min-w-0`},bt={class:`text-content-primary dark:text-content-primary text-sm font-semibold break-all min-w-0 overflow-hidden`},xt=[`title`],St={key:0,class:`text-orange-500 text-xs font-mono break-all min-w-0 overflow-hidden`},Ct=[`title`],wt={class:`grid grid-cols-2 gap-2`},Tt={class:`text-cyan-500 text-sm font-mono break-words`},Et={class:`text-content-primary dark:text-content-primary text-sm break-words`},Dt=[`title`],Ot={key:0},kt=[`title`],At={key:0,class:`text-content-muted dark:text-content-muted text-xs italic mt-2 px-1`},jt={key:1,class:`py-2`},Mt={class:`mb-6`},Nt={class:`bg-gray-50 dark:bg-white/5 rounded-[15px] p-4 border border-stroke-subtle dark:border-stroke/10`},Pt={class:`space-y-4`},Ft={class:`grid grid-cols-1 md:grid-cols-2 gap-4`},It={class:`flex justify-between py-2 border-b border-stroke-subtle dark:border-stroke/10`},Lt={class:`flex justify-between py-2 border-b border-stroke-subtle dark:border-stroke/10`},Rt={key:0,class:`py-2`},zt={class:`bg-background-mute dark:bg-black/20 rounded-[10px] p-4`},Bt={class:`flex items-center flex-wrap gap-2`},Vt={class:`relative group`},Ht={class:`relative px-3 py-2 bg-gradient-to-br from-blue-500/20 to-cyan-500/20 border border-cyan-400/40 rounded-lg transform transition-all hover:scale-105`},Ut={class:`font-mono text-[10px] font-semibold tracking-tight text-content-primary dark:text-content-primary/90 sm:text-xs`},Wt={class:`pointer-events-none absolute bottom-full left-1/2 z-50 mb-2 -translate-x-1/2 transform whitespace-nowrap rounded-md bg-neutral-900 px-2 py-1 font-mono text-xs text-white opacity-0 shadow-lg ring-1 ring-white/10 transition-opacity group-hover:opacity-100`},Gt={key:0,class:`mx-2 text-cyan-600 dark:text-cyan-400/60`},Kt={key:1,class:`py-2`},qt={class:`text-content-secondary dark:text-content-muted text-sm mb-2 flex items-center`},Jt={key:0,class:`w-4 h-4 ml-2 text-yellow-500`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},Yt={key:1,class:`text-yellow-500 text-xs ml-1`},Xt={class:`bg-background-mute dark:bg-black/20 rounded-[10px] p-4`},Zt={class:`flex items-center flex-wrap gap-2`},Qt={class:`relative group`},$t={key:0,class:`absolute -top-1 -right-1 w-2 h-2 bg-yellow-400 rounded-full animate-pulse`},en={class:`pointer-events-none absolute bottom-full left-1/2 z-50 mb-2 -translate-x-1/2 transform whitespace-nowrap rounded-md bg-neutral-900 px-2 py-1 font-mono text-xs text-white opacity-0 shadow-lg ring-1 ring-white/10 transition-opacity group-hover:opacity-100`},tn={key:0,class:`mx-1 text-orange-600 dark:text-orange-400/60`},nn={class:`mb-6`},rn={class:`glass-card bg-gray-50 dark:bg-white/5 rounded-[15px] p-4`},an={class:`grid grid-cols-1 md:grid-cols-3 gap-4 mb-4`},on={class:`text-center p-3 glass-card bg-background-mute dark:bg-black/20 rounded-[10px]`},sn={class:`text-lg font-bold text-content-primary dark:text-content-primary`},cn={class:`text-center p-3 glass-card bg-background-mute dark:bg-black/20 rounded-[10px]`},ln={class:`text-center p-3 glass-card bg-background-mute dark:bg-black/20 rounded-[10px]`},un={class:`text-lg font-bold text-content-primary dark:text-content-primary`},dn={key:0,class:`mb-4`},fn={class:`flex items-center gap-3`},pn={class:`flex gap-1`},mn={class:`text-content-secondary dark:text-content-primary/80 text-sm capitalize`},hn={key:1,class:`mb-4`},gn={key:2,class:`mb-4`},_n={class:`text-content-secondary dark:text-content-muted text-sm mb-3`},vn={class:`space-y-2`},yn={class:`flex items-center gap-3`},bn={class:`text-content-muted dark:text-content-muted text-sm`},xn={key:3,class:`mt-6 pt-4 border-t border-stroke-subtle dark:border-stroke/10`},Sn={class:`grid grid-cols-1 md:grid-cols-3 gap-3 mb-4`},Cn={class:`text-center p-3 glass-card bg-background-mute dark:bg-black/20 rounded-[10px]`},wn={class:`text-2xl font-bold text-content-primary dark:text-content-primary`},Tn={class:`text-center p-3 glass-card bg-background-mute dark:bg-black/20 rounded-[10px]`},En={class:`text-2xl font-bold text-content-primary dark:text-content-primary`},Dn={class:`text-content-muted dark:text-content-muted text-xs mt-1`},On={class:`text-center p-3 glass-card bg-background-mute dark:bg-black/20 rounded-[10px]`},kn={class:`text-content-muted dark:text-content-muted text-xs mt-1`},An={key:0,class:`glass-card bg-background-mute dark:bg-black/20 rounded-[10px] p-4`},jn={class:`space-y-3`},Mn={class:`flex-shrink-0 w-16 text-right`},Nn={class:`text-content-secondary dark:text-content-muted text-xs`},Pn={class:`flex-1 relative`},Fn={class:`h-8 rounded-lg overflow-hidden bg-background-mute dark:bg-stroke/5 relative`},In={class:`absolute inset-0 flex items-center px-3`},Ln={class:`text-content-primary dark:text-content-primary text-xs font-mono font-semibold`},Rn={class:`flex-shrink-0 w-12 text-left`},zn={class:`text-content-muted dark:text-content-muted text-xs`},Bn={class:`grid grid-cols-1 md:grid-cols-2 gap-4`},Vn={class:`space-y-2`},Hn={class:`flex justify-between py-2 border-b border-stroke-subtle dark:border-stroke/10`},Un={class:`text-content-primary dark:text-content-primary`},Wn={class:`flex justify-between py-2 border-b border-stroke-subtle dark:border-stroke/10`},Gn={class:`space-y-2`},Kn={class:`flex justify-between py-2 border-b border-stroke-subtle dark:border-stroke/10`},qn={key:0,class:`flex justify-between py-2 border-b border-stroke-subtle dark:border-stroke/10`},Jn={class:`text-red-600 dark:text-red-400 text-sm`},Yn={class:`p-8 pt-4 border-t border-stroke-subtle dark:border-stroke/10 flex justify-end flex-shrink-0`},Xn=k(u({name:`PacketDetailsModal`,__name:`PacketDetailsModal`,props:{packet:{},isOpen:{type:Boolean},localHash:{}},emits:[`close`],setup(n,{emit:r}){let{getSignalQuality:i}=z(),a=n,c=r,u=w(!1),f=e=>new Date(e*1e3).toLocaleString(),g=e=>e.transmitted?e.is_duplicate?`text-amber-600 dark:text-amber-400`:e.drop_reason?`text-red-600 dark:text-red-400`:`text-green-600 dark:text-green-400`:`text-red-600 dark:text-red-400`,C=e=>e.transmitted?e.is_duplicate?`Duplicate`:e.drop_reason?`Dropped`:`Forwarded`:`Dropped`,T=e=>({0:`Request`,1:`Response`,2:`Plain Text Message`,3:`Acknowledgment`,4:`Node Advertisement`,5:`Group Text Message`,6:`Group Datagram`,7:`Anonymous Request`,8:`Returned Path`,9:`Trace`,10:`Multi-part Packet`,15:`Custom Packet`})[e]||`Unknown Type (${e})`,E=e=>({0:`Transport Flood`,1:`Flood`,2:`Direct`,3:`Transport Direct`})[e]||`Unknown Route (${e})`,D=e=>{if(!e)return`None`;let t=e.replace(/\s+/g,``).toUpperCase().match(/.{2}/g)||[],n=[];for(let e=0;e<t.length;e+=32){let r=t.slice(e,e+32).join(` `);n.push(r)}return n.join(`
|
||
`)||e},O=(e,t,n)=>{try{let r=0,i=t.length/2;if(i>=100){if(t.length>=r+64){let i=t.slice(r,r+64);e.push({name:`Public Key`,byteRange:`${(n+r)/2}-${(n+r+63)/2}`,hexData:i.match(/.{8}/g)?.join(` `)||i,description:`Ed25519 public key of the node (32 bytes)`,fields:[{bits:`0-255`,name:`Ed25519 Public Key`,value:`${i.slice(0,16)}...${i.slice(-16)}`,binary:`32 bytes (256 bits)`}]}),r+=64}if(t.length>=r+8){let i=t.slice(r,r+8),a=parseInt(i,16),o=new Date(a*1e3);e.push({name:`Timestamp`,byteRange:`${(n+r)/2}-${(n+r+7)/2}`,hexData:i.match(/.{2}/g)?.join(` `)||i,description:`Unix timestamp of advertisement`,fields:[{bits:`0-31`,name:`Unix Timestamp`,value:`${a} (${o.toLocaleString()})`,binary:a.toString(2).padStart(32,`0`)}]}),r+=8}if(t.length>=r+128){let i=t.slice(r,r+128);e.push({name:`Signature`,byteRange:`${(n+r)/2}-${(n+r+127)/2}`,hexData:i.match(/.{8}/g)?.join(` `)||i,description:`Ed25519 signature of public key, timestamp, and appdata`,fields:[{bits:`0-511`,name:`Ed25519 Signature`,value:`${i.slice(0,16)}...${i.slice(-16)}`,binary:`64 bytes (512 bits)`}]}),r+=128}t.length>r&&k(e,t.slice(r),n+r)}else e.push({name:`ADVERT AppData (Partial)`,byteRange:`${n/2}-${n/2+i-1}`,hexData:t.match(/.{2}/g)?.join(` `)||t,description:`Partial ADVERT data - appears to be just AppData portion (${i} bytes)`,fields:[{bits:`0-${i*8-1}`,name:`Partial Data`,value:`${i} bytes - attempting to decode as AppData`,binary:`${i} bytes (${i*8} bits)`}]}),k(e,t,n)}catch(n){e.push({name:`ADVERT Parse Error`,byteRange:`N/A`,hexData:t.slice(0,32)+`...`,description:`Failed to parse ADVERT payload structure`,fields:[{bits:`N/A`,name:`Error`,value:`Parse error: ${n instanceof Error?n.message:`Unknown error`}`,binary:`Invalid`}]})}},k=(e,t,n)=>{try{let r=t.length/2;e.push({name:`AppData`,byteRange:`${n/2}-${n/2+r-1}`,hexData:t.match(/.{2}/g)?.join(` `)||t,description:`Node advertisement application data (${r} bytes)`,fields:[{bits:`0-${r*8-1}`,name:`Application Data`,value:`${r} bytes (contains flags, location, name, etc.)`,binary:`${r} bytes (${r*8} bits)`}]});let i=0;if(t.length>=2){let r=parseInt(t.slice(i,i+2),16),a=[],o=!!(r&16),s=!!(r&32),c=!!(r&64),l=!!(r&128);if(r&1&&a.push(`is chat node`),r&2&&a.push(`is repeater`),r&4&&a.push(`is room server`),r&8&&a.push(`is sensor`),o&&a.push(`has location`),s&&a.push(`has feature 1`),c&&a.push(`has feature 2`),l&&a.push(`has name`),e.push({name:`AppData Flags`,byteRange:`${(n+i)/2}`,hexData:`0x${t.slice(i,i+2)}`,description:`Flags indicating which optional fields are present`,fields:[{bits:`0-7`,name:`Flags`,value:a.join(`, `)||`none`,binary:r.toString(2).padStart(8,`0`)}]}),i+=2,o&&t.length>=i+16){let r=t.slice(i,i+8),a=[];for(let e=6;e>=0;e-=2)a.push(r.slice(e,e+2));let o=parseInt(a.join(``),16),s=o>2147483647?o-4294967296:o,c=s/1e6,l=t.slice(i+8,i+16),u=[];for(let e=6;e>=0;e-=2)u.push(l.slice(e,e+2));let d=parseInt(u.join(``),16),f=d>2147483647?d-4294967296:d,p=f/1e6;e.push({name:`Location Data`,byteRange:`${(n+i)/2}-${(n+i+15)/2}`,hexData:`${r.match(/.{2}/g)?.join(` `)||r} ${l.match(/.{2}/g)?.join(` `)||l}`,description:`GPS coordinates (latitude and longitude)`,fields:[{bits:`0-31`,name:`Latitude`,value:`${c.toFixed(6)}° (raw: ${s})`,binary:s.toString(2).padStart(32,`0`)},{bits:`32-63`,name:`Longitude`,value:`${p.toFixed(6)}° (raw: ${f})`,binary:f.toString(2).padStart(32,`0`)}]}),i+=16}if(s&&t.length>=i+4){let r=t.slice(i,i+4),a=parseInt(r,16);e.push({name:`Feature 1`,byteRange:`${(n+i)/2}-${(n+i+3)/2}`,hexData:r.match(/.{2}/g)?.join(` `)||r,description:`Reserved feature 1 (2 bytes)`,fields:[{bits:`0-15`,name:`Feature 1 Value`,value:`${a}`,binary:a.toString(2).padStart(16,`0`)}]}),i+=4}if(c&&t.length>=i+4){let r=t.slice(i,i+4),a=parseInt(r,16);e.push({name:`Feature 2`,byteRange:`${(n+i)/2}-${(n+i+3)/2}`,hexData:r.match(/.{2}/g)?.join(` `)||r,description:`Reserved feature 2 (2 bytes)`,fields:[{bits:`0-15`,name:`Feature 2 Value`,value:`${a}`,binary:a.toString(2).padStart(16,`0`)}]}),i+=4}if(l&&t.length>i){let r=t.slice(i),a=r.match(/.{2}/g)||[],o=a.map(e=>{let t=parseInt(e,16);return t>=32&&t<=126?String.fromCharCode(t):`.`}).join(``).replace(/\.+$/,``);e.push({name:`Node Name`,byteRange:`${(n+i)/2}-${(n+t.length-1)/2}`,hexData:r.match(/.{2}/g)?.join(` `)||r,description:`Node name string (${a.length} bytes)`,fields:[{bits:`0-${a.length*8-1}`,name:`Node Name`,value:`"${o}"`,binary:`ASCII text (${a.length} bytes)`}]})}}}catch(n){e.push({name:`AppData Parse Error`,byteRange:`N/A`,hexData:t.slice(0,Math.min(32,t.length)),description:`Failed to parse AppData structure`,fields:[{bits:`N/A`,name:`Error`,value:`Parse error: ${n instanceof Error?n.message:`Unknown error`}`,binary:`Invalid`}]})}},A=e=>{if(!e)return[];if(Array.isArray(e))return e;if(typeof e==`string`)try{return JSON.parse(e)}catch{return[]}return[]},te=e=>{let t=[];if(!e)return t;try{let n=e.raw_packet;if(n){let e=n.replace(/\s+/g,``).toUpperCase(),r=0;if(e.length>=2){let n=e.slice(r,r+2),i=parseInt(n,16),a=i&3,o=(i&60)>>2,s=(i&192)>>6;if(t.push({name:`Header`,byteRange:`0`,hexData:`0x${n}`,description:`Contains routing type, payload type, and payload version`,fields:[{bits:`0-1`,name:`Route Type`,value:{0:`Transport Flood`,1:`Flood`,2:`Direct`,3:`Transport Direct`}[a]||`Unknown`,binary:a.toString(2).padStart(2,`0`)},{bits:`2-5`,name:`Payload Type`,value:{0:`REQ`,1:`RESPONSE`,2:`TXT_MSG`,3:`ACK`,4:`ADVERT`,5:`GRP_TXT`,6:`GRP_DATA`,7:`ANON_REQ`,8:`PATH`,9:`TRACE`,10:`MULTIPART`,15:`RAW_CUSTOM`}[o]||`Unknown`,binary:o.toString(2).padStart(4,`0`)},{bits:`6-7`,name:`Version`,value:s.toString(),binary:s.toString(2).padStart(2,`0`)}]}),r+=2,(a===0||a===3)&&e.length>=r+8){let n=e.slice(r,r+8),i=parseInt(n.slice(0,4),16),a=parseInt(n.slice(4,8),16);t.push({name:`Transport Codes`,byteRange:`1-4`,hexData:`${n.slice(0,4)} ${n.slice(4,8)}`,description:`2x 16-bit transport codes for routing optimization`,fields:[{bits:`0-15`,name:`Code 1`,value:i.toString(),binary:i.toString(2).padStart(16,`0`)},{bits:`16-31`,name:`Code 2`,value:a.toString(),binary:a.toString(2).padStart(16,`0`)}]}),r+=8}if(e.length>=r+2){let n=e.slice(r,r+2),i=parseInt(n,16),a=(i>>6)+1,o=i&63,s=o*a;if(t.push({name:`Path Length`,byteRange:`${r/2}`,hexData:`0x${n}`,description:`${o} hop${o===1?``:`s`}, ${a}-byte hash${a>1?`es`:``} (${s} bytes)`,fields:[{bits:`6-7`,name:`Hash Size`,value:`${a}-byte`,binary:(i>>6&3).toString(2).padStart(2,`0`)},{bits:`0-5`,name:`Hop Count`,value:`${o}`,binary:(i&63).toString(2).padStart(6,`0`)}]}),r+=2,s>0&&e.length>=r+s*2){let n=e.slice(r,r+s*2),i=RegExp(`.{${a*2}}`,`g`),c=n.match(i)||[];t.push({name:`Path Data`,byteRange:`${r/2}-${(r+s*2-2)/2}`,hexData:c.join(` `)||n,description:`${o} × ${a}-byte routing hash${o===1?``:`es`}`,fields:c.map((e,t)=>({bits:`${t*a*8}-${(t+1)*a*8-1}`,name:`Hop ${t+1}`,value:e.toUpperCase(),binary:`${a} byte${a>1?`s`:``}`}))}),r+=s*2}}if(e.length>r){let n=e.slice(r),i=n.length/2;o===4?O(t,n,r):t.push({name:`Payload Data`,byteRange:`${r/2}-${r/2+i-1}`,hexData:n.match(/.{2}/g)?.join(` `)||n,description:`Application data content`,fields:[{bits:`0-${i*8-1}`,name:`Application Data`,value:`${i} bytes`,binary:`${i} bytes (${i*8} bits)`}]})}}}else{if(e.header){let n=e.header.replace(/0x/gi,``).replace(/\s+/g,``).toUpperCase(),r=parseInt(n,16),i=r&3,a=(r&60)>>2,o=(r&192)>>6;t.push({name:`Header`,byteRange:`0`,hexData:`0x${n}`,description:`Contains routing type, payload type, and payload version`,fields:[{bits:`0-1`,name:`Route Type`,value:{0:`Transport Flood`,1:`Flood`,2:`Direct`,3:`Transport Direct`}[i]||`Unknown`,binary:i.toString(2).padStart(2,`0`)},{bits:`2-5`,name:`Payload Type`,value:{0:`REQ`,1:`RESPONSE`,2:`TXT_MSG`,3:`ACK`,4:`ADVERT`,5:`GRP_TXT`,6:`GRP_DATA`,7:`ANON_REQ`,8:`PATH`,9:`TRACE`,10:`MULTIPART`,15:`RAW_CUSTOM`}[a]||`Unknown`,binary:a.toString(2).padStart(4,`0`)},{bits:`6-7`,name:`Version`,value:o.toString(),binary:o.toString(2).padStart(2,`0`)}]}),e.transport_codes&&t.push({name:`Transport Codes`,byteRange:`1-4`,hexData:e.transport_codes,description:`2x 16-bit transport codes for routing optimization`,fields:[{bits:`0-31`,name:`Transport Codes`,value:e.transport_codes,binary:`Available in separate field`}]}),e.original_path&&e.original_path.length>0&&t.push({name:`Original Path`,byteRange:`?`,hexData:e.original_path.join(` `),description:`Original routing path (${e.original_path.length} nodes)`,fields:[{bits:`0-?`,name:`Path Nodes`,value:`${e.original_path.length} nodes`,binary:`Available as node list`}]}),e.forwarded_path&&e.forwarded_path.length>0&&t.push({name:`Forwarded Path`,byteRange:`?`,hexData:e.forwarded_path.join(` `),description:`Forwarded routing path (${e.forwarded_path.length} nodes)`,fields:[{bits:`0-?`,name:`Path Nodes`,value:`${e.forwarded_path.length} nodes`,binary:`Available as node list`}]})}if(e.payload){let n=e.payload.replace(/\s+/g,``).toUpperCase(),r=n.length/2;e.type===4?O(t,n,0):t.push({name:`Payload Data`,byteRange:`0-${r-1}`,hexData:n.match(/.{2}/g)?.join(` `)||n,description:`Application data content (${r} bytes)`,fields:[{bits:`0-${r*8-1}`,name:`Application Data`,value:`${r} bytes`,binary:`${r} bytes (${r*8} bits)`}]})}}}catch{t.push({name:`Parse Error`,byteRange:`N/A`,hexData:`Error`,description:`Unable to parse packet structure`,fields:[{bits:`N/A`,name:`Error`,value:`Parse failed`,binary:`Invalid`}]})}return t},M=(e,t)=>e==null||t==null?`text-content-muted dark:text-content-muted`:i(t).color,N=e=>{if(e==null)return{level:0,className:`signal-none`};let t=i(e),n,r;return t.bars>=5?(n=4,r=`signal-excellent`):t.bars>=4?(n=3,r=`signal-good`):t.bars>=2?(n=2,r=`signal-fair`):t.bars>=1?(n=1,r=`signal-poor`):(n=0,r=`signal-none`),{level:n,className:r}},P=e=>{if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}},F=e=>e>=1e3?`${(e/1e3).toFixed(2)}s`:`${Math.round(e)}ms`,I=e=>{e.key===`Escape`&&c(`close`)},L=e=>{e.target===e.currentTarget&&c(`close`)};return p(()=>a.isOpen,e=>{e?document.body.style.overflow=`hidden`:document.body.style.overflow=``},{immediate:!0}),(r,i)=>(S(),o(d,{to:`body`},[h(ee,{name:`modal`,appear:``},{default:e(()=>[n.isOpen&&n.packet?(S(),x(`div`,{key:0,class:`fixed inset-0 z-50 flex items-center justify-center p-4 overflow-hidden`,onClick:L,onKeydown:I,tabindex:`0`},[i[51]||=b(`div`,{class:`absolute inset-0 bg-black/60 backdrop-blur-md pointer-events-none`},null,-1),b(`div`,{class:`relative w-full max-w-4xl max-h-[90vh] flex flex-col`,onClick:i[3]||=j(()=>{},[`stop`])},[b(`div`,Pe,[b(`div`,Fe,[b(`div`,null,[i[4]||=b(`h2`,{class:`text-2xl font-bold text-content-primary dark:text-content-primary mb-1`},` Packet Details `,-1),b(`p`,Ie,v(T(n.packet.type))+` - `+v(E(n.packet.route)),1)]),b(`div`,Le,[b(`button`,{onClick:i[0]||=e=>u.value=!u.value,class:s([`flex items-center gap-2 px-3 py-1.5 rounded-lg transition-all duration-200`,u.value?`bg-cyan-500/20 border border-cyan-400/30 text-cyan-600 dark:text-cyan-400`:`bg-background-mute dark:bg-white/10 border border-stroke-subtle dark:border-stroke/20 text-content-secondary dark:text-content-muted`]),title:u.value?`Hide binary values`:`Show binary values`},[...i[5]||=[b(`svg`,{class:`w-4 h-4`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[b(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4`})],-1),b(`span`,{class:`text-xs font-medium`},`Binary`,-1)]],10,Re),b(`button`,{onClick:i[1]||=e=>c(`close`),class:`w-8 h-8 flex items-center justify-center rounded-full bg-background-mute dark:bg-white/10 hover:bg-stroke-subtle dark:hover:bg-white/20 transition-colors duration-200 text-content-secondary dark:text-content-muted hover:text-content-primary dark:hover:text-content-primary`},[...i[6]||=[b(`svg`,{class:`w-5 h-5`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[b(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M6 18L18 6M6 6l12 12`})],-1)]])])]),b(`div`,ze,[b(`div`,Be,[i[13]||=b(`h3`,{class:`text-lg font-semibold text-content-primary dark:text-content-primary mb-4 flex items-center`},[b(`div`,{class:`w-2 h-2 rounded-full bg-cyan-400 mr-3`}),_(` Basic Information `)],-1),b(`div`,Ve,[b(`div`,He,[b(`div`,Ue,[b(`div`,We,[i[7]||=b(`span`,{class:`text-content-secondary dark:text-content-muted text-sm`},`Timestamp`,-1),b(`span`,Ge,v(f(n.packet.timestamp)),1)]),b(`div`,Ke,[i[8]||=b(`span`,{class:`text-content-secondary dark:text-content-muted text-sm`},`Packet Hash`,-1),b(`span`,qe,v(n.packet.packet_hash),1)]),n.packet.header?(S(),x(`div`,Je,[i[9]||=b(`span`,{class:`text-content-secondary dark:text-content-muted text-sm`},`Header`,-1),b(`span`,Ye,v(n.packet.header),1)])):m(``,!0)]),b(`div`,Xe,[b(`div`,Ze,[i[10]||=b(`span`,{class:`text-content-secondary dark:text-content-muted text-sm`},`Type`,-1),b(`span`,Qe,v(n.packet.type)+` (`+v(T(n.packet.type))+`)`,1)]),b(`div`,$e,[i[11]||=b(`span`,{class:`text-content-secondary dark:text-content-muted text-sm`},`Route`,-1),b(`span`,et,v(n.packet.route)+` (`+v(E(n.packet.route))+`)`,1)]),b(`div`,tt,[i[12]||=b(`span`,{class:`text-content-secondary dark:text-content-muted text-sm`},`Status`,-1),b(`span`,{class:s([`font-semibold`,g(n.packet)])},v(C(n.packet)),3)])])])])]),b(`div`,nt,[i[25]||=b(`h3`,{class:`text-lg font-semibold text-content-primary dark:text-content-primary mb-4 flex items-center`},[b(`div`,{class:`w-2 h-2 rounded-full bg-orange-400 mr-3`}),_(` Payload Data `)],-1),b(`div`,rt,[b(`div`,it,[b(`div`,at,[i[14]||=b(`span`,{class:`text-content-secondary dark:text-content-muted text-sm`},`Payload Length`,-1),b(`span`,ot,v(n.packet.payload_length||n.packet.length)+` bytes`,1)]),n.packet.payload?(S(),x(`div`,st,[i[23]||=b(`div`,{class:`text-content-secondary dark:text-content-muted text-sm mb-3`},` Payload Analysis `,-1),b(`div`,ct,[i[15]||=b(`div`,{class:`text-content-secondary dark:text-content-muted text-xs mb-2 font-semibold`},` Raw Hex Data `,-1),b(`div`,lt,[b(`pre`,ut,v(D(n.packet.payload)),1)])]),(S(!0),x(y,null,t(te(n.packet).filter(e=>!e.name.includes(`Parse Error`)),(e,n)=>(S(),x(`div`,{key:n,class:`mb-4`},[b(`div`,dt,[b(`h4`,ft,v(e.name),1),b(`span`,pt,`Bytes `+v(e.byteRange),1)]),b(`div`,mt,[b(`div`,ht,v(e.hexData),1)]),b(`div`,gt,[b(`div`,{class:s([`hidden md:grid gap-3 p-3 bg-background-mute dark:bg-white/10 text-content-secondary dark:text-content-muted text-xs font-semibold uppercase tracking-wide`,u.value?`grid-cols-4`:`grid-cols-3`])},[i[16]||=b(`div`,{class:`min-w-0`},`Bits`,-1),i[17]||=b(`div`,{class:`min-w-0`},`Field`,-1),i[18]||=b(`div`,{class:`min-w-0`},`Value`,-1),u.value?(S(),x(`div`,_t,`Binary`)):m(``,!0)],2),(S(!0),x(y,null,t(e.fields,(e,t)=>(S(),x(`div`,{key:t,class:s([`hidden md:grid gap-3 p-3 border-b border-stroke-subtle dark:border-stroke/5 last:border-b-0 hover:bg-background-mute dark:hover:bg-stroke/5 transition-colors`,u.value?`grid-cols-4`:`grid-cols-3`])},[b(`div`,vt,v(e.bits),1),b(`div`,yt,v(e.name),1),b(`div`,bt,[b(`span`,{class:`block`,title:e.value},v(e.value),9,xt)]),u.value?(S(),x(`div`,St,[b(`span`,{class:`block`,title:e.binary},v(e.binary),9,Ct)])):m(``,!0)],2))),128)),(S(!0),x(y,null,t(e.fields,(e,t)=>(S(),x(`div`,{key:`mobile-${t}`,class:`md:hidden p-3 border-b border-stroke-subtle dark:border-stroke/5 last:border-b-0 space-y-2`},[b(`div`,wt,[b(`div`,null,[i[19]||=b(`span`,{class:`text-content-secondary dark:text-content-muted text-xs uppercase tracking-wide`},`Bits:`,-1),b(`div`,Tt,v(e.bits),1)]),b(`div`,null,[i[20]||=b(`span`,{class:`text-content-secondary dark:text-content-muted text-xs uppercase tracking-wide`},`Field:`,-1),b(`div`,Et,v(e.name),1)])]),b(`div`,null,[i[21]||=b(`span`,{class:`text-content-secondary dark:text-content-muted text-xs uppercase tracking-wide`},`Value:`,-1),b(`div`,{class:`text-content-primary dark:text-content-primary text-sm font-semibold break-all`,title:e.value},v(e.value),9,Dt)]),u.value?(S(),x(`div`,Ot,[i[22]||=b(`span`,{class:`text-content-secondary dark:text-content-muted text-xs uppercase tracking-wide`},`Binary:`,-1),b(`div`,{class:`text-orange-500 text-xs font-mono break-all`,title:e.binary},v(e.binary),9,kt)])):m(``,!0)]))),128))]),e.description?(S(),x(`div`,At,v(e.description),1)):m(``,!0)]))),128))])):(S(),x(`div`,jt,[...i[24]||=[b(`span`,{class:`text-content-secondary dark:text-content-muted text-sm`},`Payload:`,-1),b(`span`,{class:`text-content-muted dark:text-content-muted ml-2`},`None`,-1)]]))])])]),b(`div`,Mt,[i[33]||=b(`h3`,{class:`text-lg font-semibold text-content-primary dark:text-content-primary mb-4 flex items-center`},[b(`div`,{class:`w-2 h-2 rounded-full bg-purple-400 mr-3`}),_(` Path Information `)],-1),b(`div`,Nt,[b(`div`,Pt,[b(`div`,Ft,[b(`div`,It,[i[26]||=b(`span`,{class:`text-content-secondary dark:text-content-muted text-sm`},`Source Hash`,-1),b(`span`,{class:s([`text-content-primary dark:text-content-primary font-mono text-xs`,a.localHash&&n.packet.src_hash===a.localHash?`bg-cyan-400/20 text-cyan-600 dark:text-cyan-300 px-1 rounded`:``])},v(n.packet.src_hash||`Unknown`),3)]),b(`div`,Lt,[i[27]||=b(`span`,{class:`text-content-secondary dark:text-content-muted text-sm`},`Destination Hash`,-1),b(`span`,{class:s([`text-content-primary dark:text-content-primary font-mono text-xs`,a.localHash&&n.packet.dst_hash===a.localHash?`bg-cyan-400/20 text-cyan-600 dark:text-cyan-300 px-1 rounded`:``])},v(n.packet.dst_hash||`Broadcast`),3)])]),A(n.packet.original_path).length>0?(S(),x(`div`,Rt,[i[29]||=b(`div`,{class:`text-content-secondary dark:text-content-muted text-sm mb-2`},` Original Path `,-1),b(`div`,zt,[b(`div`,Bt,[(S(!0),x(y,null,t(A(n.packet.original_path),(e,t)=>(S(),x(`div`,{key:t,class:`flex items-center`},[b(`div`,Vt,[b(`div`,Ht,[b(`div`,Ut,v(e.toUpperCase()),1)]),b(`div`,Wt,` Node: `+v(e.toUpperCase()),1)]),t<A(n.packet.original_path).length-1?(S(),x(`div`,Gt,[...i[28]||=[b(`svg`,{class:`w-5 h-5`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[b(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`3`,d:`M9 5l7 7-7 7`})],-1)]])):m(``,!0)]))),128))])])])):m(``,!0),n.packet.transmitted&&A(n.packet.forwarded_path).length>0?(S(),x(`div`,Kt,[b(`div`,qt,[i[31]||=_(` Forwarded Path `,-1),JSON.stringify(A(n.packet.original_path))===JSON.stringify(A(n.packet.forwarded_path))?m(``,!0):(S(),x(`svg`,Jt,[...i[30]||=[b(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z`},null,-1)]])),JSON.stringify(A(n.packet.original_path))===JSON.stringify(A(n.packet.forwarded_path))?m(``,!0):(S(),x(`span`,Yt,`(Modified)`))]),b(`div`,Xt,[b(`div`,Zt,[(S(!0),x(y,null,t(A(n.packet.forwarded_path),(e,t)=>(S(),x(`div`,{key:t,class:`flex items-center`},[b(`div`,Qt,[b(`div`,{class:s([`relative px-3 py-2 bg-gradient-to-br from-orange-500/20 to-yellow-500/20 border border-orange-500 dark:border-orange-400/40 rounded-lg transform transition-all hover:scale-105`,a.localHash&&e===a.localHash?`bg-gradient-to-br from-yellow-400/30 to-orange-400/30 border-yellow-300 shadow-yellow-400/20 shadow-lg`:`hover:border-orange-500 dark:border-orange-400/60`])},[b(`div`,{class:s([`font-mono text-[10px] font-semibold tracking-tight sm:text-xs`,a.localHash&&e===a.localHash?`text-yellow-200`:`text-white/90`])},v(e.toUpperCase()),3),a.localHash&&e===a.localHash?(S(),x(`div`,$t)):m(``,!0)],2),b(`div`,en,v(e.toUpperCase()),1)]),t<A(n.packet.forwarded_path).length-1?(S(),x(`div`,tn,[...i[32]||=[b(`svg`,{class:`w-4 h-4`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[b(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M9 5l7 7-7 7`})],-1)]])):m(``,!0)]))),128))])])])):m(``,!0)])])]),b(`div`,nn,[i[50]||=b(`h3`,{class:`text-lg font-semibold text-content-primary dark:text-content-primary mb-4 flex items-center`},[b(`div`,{class:`w-2 h-2 rounded-full bg-green-400 mr-3`}),_(` Signal & Processing `)],-1),b(`div`,rn,[b(`div`,an,[b(`div`,on,[i[34]||=b(`div`,{class:`text-content-secondary dark:text-content-muted text-xs mb-1`},` RSSI `,-1),b(`div`,sn,v(typeof n.packet.rssi==`number`?n.packet.rssi:`N/A`),1),i[35]||=b(`div`,{class:`text-content-muted dark:text-content-muted text-xs`},`dBm`,-1)]),b(`div`,cn,[i[36]||=b(`div`,{class:`text-content-secondary dark:text-content-muted text-xs mb-1`},` SNR `,-1),b(`div`,{class:s([`text-lg font-bold`,M(n.packet.snr,n.packet.rssi)])},v(typeof n.packet.snr==`number`?n.packet.snr.toFixed(1):`N/A`),3),i[37]||=b(`div`,{class:`text-content-muted dark:text-content-muted text-xs`},`dB`,-1)]),b(`div`,ln,[i[38]||=b(`div`,{class:`text-content-secondary dark:text-content-muted text-xs mb-1`},` Score `,-1),b(`div`,un,v(typeof n.packet.score==`number`?n.packet.score.toFixed(3):`N/A`),1)])]),n.packet.rssi==null?(S(),x(`div`,hn,[...i[40]||=[b(`div`,{class:`text-content-secondary dark:text-content-muted text-sm mb-2`},` Signal Quality `,-1),b(`div`,{class:`text-content-muted dark:text-content-muted text-sm italic`},` N/A (TX Packet) `,-1)]])):(S(),x(`div`,dn,[i[39]||=b(`div`,{class:`text-content-secondary dark:text-content-muted text-sm mb-2`},` Signal Quality `,-1),b(`div`,fn,[b(`div`,pn,[(S(),x(y,null,t(4,e=>b(`div`,{key:e,class:s([`w-2 h-6 rounded-sm transition-all duration-300`,e<=N(n.packet.rssi).level?{"signal-excellent":`bg-green-400`,"signal-good":`bg-cyan-400`,"signal-fair":`bg-yellow-400`,"signal-poor":`bg-red-400`}[N(n.packet.rssi).className]:`bg-stroke-subtle dark:bg-stroke/10`])},null,2)),64))]),b(`span`,mn,v(N(n.packet.rssi).className.replace(`signal-`,``)),1)])])),n.packet.is_trace&&n.packet.path_snr_details&&n.packet.path_snr_details.length>0?(S(),x(`div`,gn,[b(`div`,_n,` Path SNR Details (`+v(n.packet.path_snr_details.length)+` hops) `,1),b(`div`,vn,[(S(!0),x(y,null,t(n.packet.path_snr_details,(e,t)=>(S(),x(`div`,{key:t,class:`flex items-center justify-between p-2 glass-card bg-background-mute dark:bg-black/20 rounded-[8px]`},[b(`div`,yn,[b(`span`,bn,v(t+1)+`.`,1),b(`span`,{class:s([`font-mono text-xs text-content-primary dark:text-content-primary`,a.localHash&&e.hash===a.localHash?`bg-cyan-400/20 text-cyan-600 dark:text-cyan-300 px-1 rounded`:``])},v(e.hash.toUpperCase()),3)]),b(`span`,{class:s([`text-sm font-bold`,M(e.snr_db,null)])},v(e.snr_db.toFixed(1))+`dB `,3)]))),128))])])):m(``,!0),n.packet.transmitted&&n.packet.lbt_attempts!==void 0?(S(),x(`div`,xn,[i[45]||=b(`div`,{class:`text-content-secondary dark:text-content-muted text-sm mb-3 flex items-center`},[b(`svg`,{class:`w-4 h-4 mr-2`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[b(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z`})]),_(` Listen Before Talk (LBT) Metrics `)],-1),b(`div`,Sn,[b(`div`,Cn,[i[41]||=b(`div`,{class:`text-content-secondary dark:text-content-muted text-xs mb-1`},` CAD Attempts `,-1),b(`div`,wn,v(n.packet.lbt_attempts),1)]),b(`div`,Tn,[i[42]||=b(`div`,{class:`text-content-secondary dark:text-content-muted text-xs mb-1`},` Total LBT Delay `,-1),b(`div`,En,v(F(P(n.packet.lbt_backoff_delays_ms).reduce((e,t)=>e+t,0))),1),b(`div`,Dn,v(P(n.packet.lbt_backoff_delays_ms).length)+` backoffs `,1)]),b(`div`,On,[i[43]||=b(`div`,{class:`text-content-secondary dark:text-content-muted text-xs mb-1`},` Channel Status `,-1),b(`div`,{class:s([`text-lg font-bold`,n.packet.lbt_channel_busy?`text-yellow-600 dark:text-yellow-400`:`text-green-600 dark:text-green-400`])},v(n.packet.lbt_channel_busy?`BUSY`:`CLEAR`),3),b(`div`,kn,v(n.packet.lbt_channel_busy?`Waited for clear`:`Immediate TX`),1)])]),P(n.packet.lbt_backoff_delays_ms).length>0?(S(),x(`div`,An,[i[44]||=b(`div`,{class:`text-content-secondary dark:text-content-muted text-xs mb-3 font-semibold`},` Backoff Pattern (Exponential with Jitter) `,-1),b(`div`,jn,[(S(!0),x(y,null,t(P(n.packet.lbt_backoff_delays_ms),(e,t)=>(S(),x(`div`,{key:t,class:`flex items-center gap-3`},[b(`div`,Mn,[b(`span`,Nn,`Attempt `+v(t+1),1)]),b(`div`,Pn,[b(`div`,Fn,[b(`div`,{class:s([`h-full rounded-lg transition-all duration-300`,[t===0?`bg-gradient-to-r from-cyan-500/50 to-cyan-600/50`:t===1?`bg-gradient-to-r from-yellow-500/50 to-yellow-600/50`:t===2?`bg-gradient-to-r from-orange-500/50 to-orange-600/50`:`bg-gradient-to-r from-red-500/50 to-red-600/50`]]),style:l({width:`${Math.min(100,e/Math.max(...P(n.packet.lbt_backoff_delays_ms))*100)}%`})},[b(`div`,In,[b(`span`,Ln,v(F(e)),1)])],6)])]),b(`div`,Rn,[b(`span`,zn,v(Math.round(e/P(n.packet.lbt_backoff_delays_ms).reduce((e,t)=>e+t,0)*100))+`% `,1)])]))),128))])])):m(``,!0)])):m(``,!0),b(`div`,Bn,[b(`div`,Vn,[b(`div`,Hn,[i[46]||=b(`span`,{class:`text-content-secondary dark:text-content-muted text-sm`},`TX Delay`,-1),b(`span`,Un,v(Number(n.packet.tx_delay_ms)>0?Number(n.packet.tx_delay_ms).toFixed(1)+`ms`:`-`),1)]),b(`div`,Wn,[i[47]||=b(`span`,{class:`text-content-secondary dark:text-content-muted text-sm`},`Transmitted`,-1),b(`span`,{class:s(n.packet.transmitted?`text-green-600 dark:text-green-400`:`text-red-600 dark:text-red-400`)},v(n.packet.transmitted?`Yes`:`No`),3)])]),b(`div`,Gn,[b(`div`,Kn,[i[48]||=b(`span`,{class:`text-content-secondary dark:text-content-muted text-sm`},`Is Duplicate`,-1),b(`span`,{class:s(n.packet.is_duplicate?`text-amber-600 dark:text-amber-400`:`text-content-muted dark:text-content-muted`)},v(n.packet.is_duplicate?`Yes`:`No`),3)]),n.packet.drop_reason?(S(),x(`div`,qn,[i[49]||=b(`span`,{class:`text-content-secondary dark:text-content-muted text-sm`},`Drop Reason`,-1),b(`span`,Jn,v(n.packet.drop_reason),1)])):m(``,!0)])])])])]),b(`div`,Yn,[b(`button`,{onClick:i[2]||=e=>c(`close`),class:`px-6 py-2 bg-gradient-to-r from-cyan-500/20 to-cyan-400/20 hover:from-cyan-500/30 hover:to-cyan-400/30 border border-cyan-400/30 rounded-[10px] text-content-primary dark:text-content-primary transition-all duration-200 backdrop-blur-sm`},` Close `)])])])],32)):m(``,!0)]),_:1})]))}}),[[`__scopeId`,`data-v-c8711b75`]]),Zn={class:`glass-card rounded-[20px] p-6`},Qn={class:`flex flex-col lg:flex-row lg:justify-between lg:items-center mb-6 gap-4 filter-container`},$n={class:`flex items-center gap-2 header-info relative`},er={class:`text-content-secondary dark:text-content-muted text-sm packet-count`},tr=[`title`],nr={class:`hidden sm:inline`},rr={key:1,class:`text-accent-red text-sm error-indicator`},ir={class:`flex items-center gap-3 lg:flex filter-controls`},ar={class:`flex flex-col`},or=[`value`],sr={class:`flex flex-col`},cr=[`value`],lr={class:`flex flex-col`},ur={class:`flex flex-col reset-container`},dr=[`disabled`],fr={class:`space-y-4 overflow-hidden`},pr={class:`space-y-4`},mr=[`onClick`],hr={class:`hidden lg:grid grid-cols-12 gap-2 items-center`},gr={class:`col-span-1 text-content-primary dark:text-content-primary text-sm`},_r={class:`col-span-1 flex items-center gap-2`},vr={class:`flex flex-col`},yr={class:`text-content-primary dark:text-content-primary text-xs`},br=[`title`],xr={class:`col-span-2`},Sr={class:`col-span-1 text-content-primary dark:text-content-primary text-xs`},Cr={class:`col-span-2`},wr={class:`space-y-1`},Tr={key:0,class:`flex items-center gap-0.5 flex-wrap`},Er=[`title`],Dr={key:0,class:`w-2.5 h-2.5 text-content-muted dark:text-content-muted/60`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},Or={key:0,class:`text-[9px] text-content-muted dark:text-content-muted ml-1`},kr={key:1,class:`flex items-center gap-1`},Ar={class:`inline-block px-2 py-0.5 rounded bg-badge-cyan-bg text-badge-cyan-text text-xs font-mono`},jr={class:`col-span-1 text-content-primary dark:text-content-primary text-xs`},Mr={class:`col-span-1 text-content-primary dark:text-content-primary text-xs`},Nr={class:`col-span-1 text-content-primary dark:text-content-primary text-xs`},Pr={class:`col-span-1 text-content-primary dark:text-content-primary text-xs`},Fr={key:0,class:`flex items-center gap-1`},Ir={class:`col-span-1`},Lr={key:0,class:`text-accent-red text-[8px] italic truncate`},Rr={class:`lg:hidden space-y-2`},zr={class:`flex items-center justify-between`},Br={class:`flex items-center gap-2`},Vr={class:`flex flex-col`},Hr={class:`text-content-primary dark:text-content-primary text-sm font-medium`},Ur=[`title`],Wr={class:`flex items-center gap-2 text-right`},Gr={class:`text-content-secondary dark:text-content-muted text-xs`},Kr={class:`flex items-center justify-between`},qr={class:`flex items-center gap-1.5`},Jr={key:0,class:`flex flex-wrap items-center gap-0.5`},Yr=[`title`],Xr={key:0,class:`w-2.5 h-2.5 text-content-muted dark:text-content-muted/60`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},Zr={key:0,class:`text-[9px] text-content-muted dark:text-content-muted ml-1`},Qr={class:`flex items-center gap-1`},$r={class:`inline-block px-2 py-0.5 rounded bg-badge-cyan-bg text-badge-cyan-text text-xs font-mono font-semibold`},ei={class:`flex items-center gap-0.5 text-content-muted dark:text-content-muted/60`},ti={key:0,class:`text-[9px] font-medium`,title:`Multi-hop path`},ni={class:`flex items-center gap-1`},ri={class:`flex items-center gap-2`},ii={class:`flex items-center gap-1`},ai={key:0,class:`flex gap-0.5`},oi={class:`text-content-primary dark:text-content-primary text-xs`},si={class:`flex items-center justify-between text-content-secondary dark:text-content-muted text-xs`},ci={class:`flex items-center gap-3`},li={class:`flex items-center gap-2`},ui={key:0,class:`flex items-center gap-1`},di={key:0,class:`text-accent-red text-xs italic`},fi={key:0,class:`flex justify-between items-center mt-6 pt-4 border-t border-stroke-subtle dark:border-stroke pagination-container`},pi={class:`flex items-center gap-4 pagination-info`},mi={class:`text-content-secondary dark:text-content-muted text-sm`},hi={key:0,class:`flex items-center gap-2 load-more-section`},gi=[`disabled`],_i={class:`text-content-secondary dark:text-content-muted text-xs load-more-count`},vi={class:`flex items-center gap-2 pagination-controls`},yi=[`disabled`],bi={class:`flex items-center gap-1 page-numbers`},xi={key:1,class:`text-content-secondary dark:text-content-muted text-sm px-2 ellipsis`},Si=[`onClick`],Ci={key:2,class:`text-content-secondary dark:text-content-muted text-sm px-2 ellipsis`},wi=[`disabled`],Ti={key:1,class:`flex justify-center mt-6 pt-4 border-t border-stroke-subtle dark:border-stroke`},Ei={class:`flex items-center gap-4`},Di={class:`text-content-secondary dark:text-content-muted text-sm`},Oi={class:`text-content-secondary dark:text-content-muted text-xs`},ki={key:2,class:`flex justify-center mt-6 pt-4 border-t border-stroke-subtle dark:border-stroke`},Q=10,$=1e3,Ai=k(u({name:`PacketTable`,__name:`PacketTable`,setup(e){let n=D(),a=O(),o=w(1),l=w(100),u=w(!1),d=w(!1),_=null;p(()=>n.isLoading,e=>{e?(_&&=(clearTimeout(_),null),d.value=!0):_=window.setTimeout(()=>{d.value=!1,_=null},600)});let T=w(null),E=w(!1),k=async e=>{if(T.value=e,E.value=!0,e.packet_hash&&(!e.header||!e.raw_packet))try{let t=await n.getPacketByHash(e.packet_hash);t&&T.value?.packet_hash===e.packet_hash&&(T.value={...T.value,...t})}catch{}},ee=()=>{E.value=!1,T.value=null},j=w(N(`packetTable_selectedType`,`all`)),P=w(N(`packetTable_selectedRoute`,`all`)),F=w(!1),I=w(null),L=[`all`,`0`,`1`,`2`,`3`,`4`,`5`,`6`,`7`,`8`,`9`,`10`,`11`],ne=[`all`,`1`,`2`];p(j,e=>{M(`packetTable_selectedType`,e),o.value=1}),p(P,e=>{M(`packetTable_selectedRoute`,e),o.value=1}),p(F,()=>{o.value=1});let R=g(()=>{let e=n.recentPackets;if(j.value!==`all`){let t=parseInt(j.value);e=e.filter(e=>e.type===t)}if(P.value!==`all`){let t=parseInt(P.value);e=e.filter(e=>e.route===t)}return F.value&&I.value!==null&&(e=e.filter(e=>e.timestamp>=I.value)),e}),re=g(()=>{let e=(o.value-1)*Q,t=e+Q;return R.value.slice(e,t)}),z=g(()=>Math.ceil(R.value.length/Q)),ie=g(()=>o.value===z.value),B=g(()=>n.recentPackets.length>=l.value&&l.value<$),ae=g(()=>ie.value&&B.value&&!u.value),V=e=>new Date(e*1e3).toLocaleTimeString(void 0,{hour12:!0}),H=e=>({0:`REQ`,1:`RESPONSE`,2:`TXT_MSG`,3:`ACK`,4:`ADVERT`,5:`GRP_TXT`,6:`GRP_DATA`,7:`ANON_REQ`,8:`PATH`,9:`TRACE`,10:`MULTI_PART`,11:`CONTROL`})[e]||`TYPE_${e}`,U=e=>({0:`T-Flood`,1:`Flood`,2:`Direct`,3:`T-Direct`})[e]||`Route ${e}`,W=e=>e.transmitted?`text-accent-green`:`text-primary`,G=e=>e.drop_reason?`Dropped`:e.transmitted?`Forward`:`Received`,K=e=>e===1?`bg-badge-cyan-bg text-badge-cyan-text`:`bg-badge-neutral-bg text-badge-neutral-text`,q=e=>({0:`bg-primary`,1:`bg-accent-green`,2:`bg-secondary`,3:`bg-accent-purple`,4:`bg-accent-red`,5:`bg-accent-cyan`,6:`bg-primary`,7:`bg-accent-purple`,8:`bg-accent-green`,9:`bg-secondary`})[e]||`bg-gray-500`,oe=e=>({0:`border-l-primary`,1:`border-l-accent-green`,2:`border-l-secondary`,3:`border-l-accent-purple`,4:`border-l-accent-red`,5:`border-l-accent-cyan`,6:`border-l-primary`,7:`border-l-accent-purple`,8:`border-l-accent-green`,9:`border-l-secondary`})[e]||`border-l-gray-500`,J=e=>!e.transmitted||!e.lbt_attempts||e.lbt_attempts===0?`bg-green-400`:e.lbt_attempts===1?`bg-cyan-400`:e.lbt_attempts===2?`bg-yellow-400`:`bg-orange-400`,se=e=>e>=1e3?(e/1e3).toFixed(2)+`s`:e.toFixed(1)+`ms`,ce=e=>{if(!e)return[];if(Array.isArray(e))return e;if(typeof e==`string`)try{let t=JSON.parse(e);return typeof t==`string`?JSON.parse(t):Array.isArray(t)?t:[]}catch{return[]}return[]},Y=e=>{let t=ce(e.original_path),n=ce(e.forwarded_path),r=t.length>0?t:n;return r.length===0?null:{hops:r.length-1,nodes:r.map(e=>e.toUpperCase())}},X=e=>{if(e.type!==4||!e.payload)return null;try{let t=e.payload.replace(/\s+/g,``).toUpperCase(),n=t,r=0;if(t.length/2>=100)if(t.length>200)n=t.slice(200),r=0;else return null;if(n.length>=2){let e=parseInt(n.slice(0,2),16);r+=2;let t=!!(e&16),i=!!(e&32),a=!!(e&64);if(!(e&128))return null;if(t&&n.length>=r+16&&(r+=16),i&&n.length>=r+4&&(r+=4),a&&n.length>=r+4&&(r+=4),n.length>r){let e=(n.slice(r).match(/.{2}/g)||[]).map(e=>{let t=parseInt(e,16);return t>=32&&t<=126?String.fromCharCode(t):`.`}).join(``).replace(/\.*$/,``);return e.length>0?e:null}}}catch(e){console.error(`Error parsing ADVERT node name:`,e)}return null},le=()=>{j.value=`all`,P.value=`all`,F.value=!1,I.value=null,o.value=1},ue=()=>{F.value?(F.value=!1,I.value=null):(F.value=!0,I.value=Date.now()/1e3),o.value=1},de=g(()=>I.value?new Date(I.value*1e3).toLocaleTimeString(void 0,{hour12:!0}):``),Z=async e=>{try{let t=e||l.value;await n.fetchRecentPackets({limit:t})}catch(e){console.error(`Error fetching packet data:`,e)}},fe=async()=>{if(!(u.value||l.value>=$)){u.value=!0;try{let e=Math.min(l.value+200,$);l.value=e,await Z(e)}catch(e){console.error(`Error loading more records:`,e)}finally{u.value=!1}}};return i(async()=>{await Z()}),A(()=>Z(),{intervalMs:1e4,enabled:()=>!a.isConnected,immediate:!1}),C(()=>{_&&clearTimeout(_)}),(e,i)=>(S(),x(y,null,[b(`div`,Zn,[b(`div`,Qn,[b(`div`,$n,[i[7]||=b(`h3`,{class:`text-content-primary dark:text-content-primary text-xl font-semibold`},` Recent Packets `,-1),b(`span`,er,` (`+v(R.value.length)+` of `+v(r(n).recentPackets.length)+`) `,1),F.value?(S(),x(`span`,{key:0,class:`text-primary text-xs sm:text-sm bg-primary/10 px-2 py-1 rounded-md border border-primary/20 live-mode-badge whitespace-nowrap`,title:`Filter activated at ${de.value}`},[b(`span`,nr,`Live Mode (since `+v(de.value)+`)`,1),i[6]||=b(`span`,{class:`sm:hidden`},`Live`,-1)],8,tr)):m(``,!0),r(n).error?(S(),x(`span`,rr,v(r(n).error),1)):m(``,!0)]),b(`div`,ir,[b(`div`,ar,[i[8]||=b(`label`,{class:`text-content-secondary dark:text-content-muted text-xs mb-1`},`Type`,-1),f(b(`select`,{"onUpdate:modelValue":i[0]||=e=>j.value=e,class:`glass-card border border-stroke-subtle dark:border-stroke rounded-[10px] px-3 py-2 text-content-primary dark:text-content-primary text-sm focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary/20 transition-all duration-200 min-w-[120px] cursor-pointer hover:border-primary/50`},[(S(),x(y,null,t(L,e=>b(`option`,{key:e,value:e,class:`bg-surface dark:bg-surface-elevated text-content-primary dark:text-content-primary`},v(e===`all`?`All Types`:`Type ${e} (${H(parseInt(e))})`),9,or)),64))],512),[[te,j.value]])]),b(`div`,sr,[i[9]||=b(`label`,{class:`text-content-secondary dark:text-content-muted text-xs mb-1`},`Route`,-1),f(b(`select`,{"onUpdate:modelValue":i[1]||=e=>P.value=e,class:`glass-card border border-stroke-subtle dark:border-stroke rounded-[10px] px-3 py-2 text-content-primary dark:text-content-primary text-sm focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary/20 transition-all duration-200 min-w-[120px] cursor-pointer hover:border-primary/50`},[(S(),x(y,null,t(ne,e=>b(`option`,{key:e,value:e,class:`bg-surface dark:bg-surface-elevated text-content-primary dark:text-content-primary`},v(e===`all`?`All Routes`:`Route ${e} (${U(parseInt(e))})`),9,cr)),64))],512),[[te,P.value]])]),b(`div`,lr,[i[10]||=b(`label`,{class:`text-content-secondary dark:text-content-muted text-xs mb-1`},`Filter`,-1),b(`button`,{onClick:ue,class:s([`glass-card border rounded-[10px] px-4 py-2 text-sm transition-all duration-200 focus:outline-none focus:ring-1 focus:ring-primary/20 min-w-[120px]`,{"border-primary bg-primary/10 text-primary":F.value,"border-stroke-subtle dark:border-stroke text-content-secondary dark:text-content-muted hover:border-primary hover:text-content-primary dark:hover:text-content-primary hover:bg-primary/5":!F.value}])},v(F.value?`New Only`:`Show New`),3)]),b(`div`,ur,[i[11]||=b(`label`,{class:`text-transparent text-xs mb-1`},`.`,-1),b(`button`,{onClick:le,class:s([`glass-card border border-stroke-subtle dark:border-stroke hover:border-primary rounded-[10px] px-4 py-2 text-content-secondary dark:text-content-muted hover:text-content-primary dark:hover:text-content-primary text-sm transition-all duration-200 focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary/20`,{"opacity-50 cursor-not-allowed hover:border-stroke-subtle dark:hover:border-stroke hover:text-content-secondary dark:hover:text-content-muted":j.value===`all`&&P.value===`all`&&!F.value,"hover:bg-primary/10":j.value!==`all`||P.value!==`all`||F.value}]),disabled:j.value===`all`&&P.value===`all`&&!F.value},` Reset `,10,dr)])])]),i[25]||=c(`<div class="hidden lg:grid grid-cols-12 gap-2 pb-3 border-b border-stroke-subtle dark:border-stroke text-content-secondary dark:text-content-muted text-xs uppercase mb-4" data-v-8961931d><div class="col-span-1" data-v-8961931d>Time</div><div class="col-span-1" data-v-8961931d>Type</div><div class="col-span-2" data-v-8961931d>Route</div><div class="col-span-1" data-v-8961931d>LEN</div><div class="col-span-2" data-v-8961931d>Path/Hashes</div><div class="col-span-1" data-v-8961931d>RSSI</div><div class="col-span-1" data-v-8961931d>SNR</div><div class="col-span-1" data-v-8961931d>Score</div><div class="col-span-1" data-v-8961931d>TX Delay</div><div class="col-span-1" data-v-8961931d>Status</div></div>`,1),b(`div`,fr,[b(`div`,pr,[(S(!0),x(y,null,t(re.value,(e,n)=>(S(),x(`div`,{key:`${e.packet_hash}_${e.timestamp}_${n}`,class:s([`packet-row border-b border-stroke-subtle dark:border-dark-border/50 pb-4 hover:bg-background-mute dark:hover:bg-stroke/5 transition-colors duration-150 cursor-pointer rounded-[10px] p-2 border-l-4`,oe(e.type)]),onClick:t=>k(e)},[b(`div`,hr,[b(`div`,gr,v(V(e.timestamp)),1),b(`div`,_r,[b(`div`,{class:s([`w-2 h-2 rounded-full`,q(e.type)])},null,2),b(`div`,vr,[b(`span`,yr,v(H(e.type)),1),e.type===4&&X(e)?(S(),x(`span`,{key:0,class:`text-accent-red/70 text-[10px] font-medium max-w-[80px] truncate`,title:X(e)||void 0},v(X(e)),9,br)):m(``,!0)])]),b(`div`,xr,[b(`span`,{class:s([`inline-block px-2 py-1 rounded text-xs font-medium`,K(e.route)])},v(U(e.route)),3)]),b(`div`,Sr,v(e.length)+`B `,1),b(`div`,Cr,[b(`div`,wr,[Y(e)?(S(),x(`div`,Tr,[(S(!0),x(y,null,t(Y(e).nodes,(t,n)=>(S(),x(y,{key:n},[b(`span`,{class:s([`inline-block max-w-full truncate px-1.5 py-0.5 rounded text-[9px] font-mono font-semibold leading-tight tracking-tight`,n===0?`bg-badge-cyan-bg text-badge-cyan-text`:`bg-gray-500/20 text-content-muted dark:text-content-muted`]),title:t},v(t),11,Er),n<Y(e).nodes.length-1?(S(),x(`svg`,Dr,[...i[12]||=[b(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`3`,d:`M9 5l7 7-7 7`},null,-1)]])):m(``,!0)],64))),128)),Y(e).hops>0?(S(),x(`span`,Or,` (`+v(Y(e).hops)+` hop`+v(Y(e).hops>1?`s`:``)+`) `,1)):m(``,!0)])):(S(),x(`div`,kr,[b(`span`,Ar,v(e.src_hash?.slice(-4).toUpperCase()||`????`),1),i[13]||=b(`svg`,{class:`w-3 h-3 text-content-muted dark:text-content-muted/60`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[b(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2.5`,d:`M9 5l7 7-7 7`})],-1),b(`span`,{class:s([`inline-block px-2 py-0.5 rounded text-xs font-mono`,e.dst_hash?`bg-badge-cyan-bg text-badge-cyan-text`:`bg-yellow-500/20 text-yellow-700 dark:text-yellow-300`])},v(e.dst_hash?e.dst_hash.slice(-4).toUpperCase():`BCAST`),3)]))])]),b(`div`,jr,v(e.rssi==null?`N/A`:e.rssi.toFixed(0)),1),b(`div`,Mr,v(e.snr==null?`N/A`:e.snr.toFixed(1)+`dB`),1),b(`div`,Nr,v(e.score==null?`N/A`:e.score.toFixed(2)),1),b(`div`,Pr,[Number(e.tx_delay_ms)>0?(S(),x(`div`,Fr,[e.transmitted?(S(),x(`div`,{key:0,class:s([`w-1.5 h-1.5 rounded-full flex-shrink-0`,J(e)])},null,2)):m(``,!0),b(`span`,null,v(se(Number(e.tx_delay_ms))),1)])):m(``,!0)]),b(`div`,Ir,[b(`div`,null,[b(`span`,{class:s([`text-xs font-medium`,W(e)])},v(G(e)),3),e.drop_reason?(S(),x(`p`,Lr,v(e.drop_reason),1)):m(``,!0)])])]),b(`div`,Rr,[b(`div`,zr,[b(`div`,Br,[b(`div`,{class:s([`w-2 h-2 rounded-full flex-shrink-0`,q(e.type)])},null,2),b(`div`,Vr,[b(`span`,Hr,v(H(e.type)),1),e.type===4&&X(e)?(S(),x(`span`,{key:0,class:`text-accent-red/70 text-[10px] font-medium leading-tight`,title:X(e)||void 0},v(X(e)),9,Ur)):m(``,!0)]),b(`span`,{class:s([`inline-block px-2 py-1 rounded text-xs font-medium ml-2`,K(e.route)])},v(U(e.route)),3)]),b(`div`,Wr,[b(`span`,Gr,v(V(e.timestamp)),1),b(`span`,{class:s([`text-xs font-medium`,W(e)])},v(G(e)),3)])]),b(`div`,Kr,[b(`div`,qr,[Y(e)?(S(),x(`div`,Jr,[i[15]||=b(`span`,{class:`text-content-muted dark:text-content-muted text-[10px] font-medium`},`PATH`,-1),(S(!0),x(y,null,t(Y(e).nodes,(t,n)=>(S(),x(y,{key:n},[b(`span`,{class:s([`inline-block max-w-full truncate px-1.5 py-0.5 rounded text-[9px] font-mono font-semibold leading-tight tracking-tight`,n===0?`bg-badge-cyan-bg text-badge-cyan-text`:`bg-gray-500/20 text-content-muted dark:text-content-muted`]),title:t},v(t),11,Yr),n<Y(e).nodes.length-1?(S(),x(`svg`,Xr,[...i[14]||=[b(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`3`,d:`M9 5l7 7-7 7`},null,-1)]])):m(``,!0)],64))),128)),Y(e).hops>0?(S(),x(`span`,Zr,` (`+v(Y(e).hops)+` hop`+v(Y(e).hops>1?`s`:``)+`) `,1)):m(``,!0)])):(S(),x(y,{key:1},[b(`div`,Qr,[i[16]||=b(`span`,{class:`text-content-muted dark:text-content-muted text-[10px] font-medium`},`SRC`,-1),b(`span`,$r,v(e.src_hash?.slice(-4)||`????`),1)]),b(`div`,ei,[i[18]||=b(`svg`,{class:`w-3 h-3`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[b(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2.5`,d:`M9 5l7 7-7 7`})],-1),e.route===1?(S(),x(`span`,ti,[...i[17]||=[b(`svg`,{class:`w-2.5 h-2.5 inline`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[b(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M13 5l7 7-7 7M5 5l7 7-7 7`})],-1)]])):m(``,!0)]),b(`div`,ni,[b(`span`,{class:s([`inline-block px-2 py-0.5 rounded text-xs font-mono font-semibold`,e.dst_hash?`bg-badge-cyan-bg text-badge-cyan-text`:`bg-yellow-500/20 text-yellow-700 dark:text-yellow-300`])},v(e.dst_hash?e.dst_hash.slice(-4).toUpperCase():`BCAST`),3),i[19]||=b(`span`,{class:`text-content-muted dark:text-content-muted text-[10px] font-medium`},`DST`,-1)])],64))]),b(`div`,ri,[b(`div`,ii,[e.snr==null?m(``,!0):(S(),x(`div`,ai,[b(`div`,{class:s([`w-1 h-3 rounded-sm`,e.snr>=-10?`bg-green-400`:`bg-white/20`])},null,2),b(`div`,{class:s([`w-1 h-4 rounded-sm`,e.snr>=-5?`bg-green-400`:`bg-white/20`])},null,2),b(`div`,{class:s([`w-1 h-5 rounded-sm`,e.snr>=0?`bg-green-400`:`bg-white/20`])},null,2),b(`div`,{class:s([`w-1 h-6 rounded-sm`,e.snr>=10?`bg-green-400`:`bg-white/20`])},null,2)])),b(`span`,oi,v(e.rssi==null?`TX`:e.rssi.toFixed(0)+`dBm`),1)])])]),b(`div`,si,[b(`div`,ci,[b(`span`,null,v(e.length)+`B`,1),b(`span`,null,`SNR: `+v(e.snr==null?`N/A`:e.snr.toFixed(1)+`dB`),1),b(`span`,null,`Score: `+v(e.score==null?`N/A`:e.score.toFixed(2)),1)]),b(`div`,li,[Number(e.tx_delay_ms)>0?(S(),x(`span`,ui,[e.transmitted?(S(),x(`div`,{key:0,class:s([`w-1.5 h-1.5 rounded-full flex-shrink-0`,J(e)])},null,2)):m(``,!0),b(`span`,null,v(se(Number(e.tx_delay_ms))),1)])):m(``,!0)])]),e.drop_reason?(S(),x(`div`,di,v(e.drop_reason),1)):m(``,!0)])],10,mr))),128))])]),z.value>1?(S(),x(`div`,fi,[b(`div`,pi,[b(`span`,mi,` Showing `+v((o.value-1)*Q+1)+` - `+v(Math.min(o.value*Q,R.value.length))+` of `+v(R.value.length)+` packets `,1),ae.value?(S(),x(`div`,hi,[i[20]||=b(`span`,{class:`text-content-secondary dark:text-content-muted text-xs`},`•`,-1),b(`button`,{onClick:fe,disabled:u.value,class:s([`glass-card border border-primary rounded-[8px] px-3 py-1.5 text-xs transition-all duration-200 focus:outline-none focus:ring-1 focus:ring-primary/20 hover:bg-primary/5`,{"text-primary border-primary cursor-pointer":!u.value,"text-content-secondary dark:text-content-muted border-stroke-subtle dark:border-stroke cursor-not-allowed opacity-50":u.value}])},v(u.value?`Loading...`:`Load ${Math.min(200,$-l.value)} more`),11,gi),b(`span`,_i,`(`+v(l.value)+`/`+v($)+` max)`,1)])):m(``,!0)]),b(`div`,vi,[b(`button`,{onClick:i[2]||=e=>--o.value,disabled:o.value<=1,class:s([`glass-card border rounded-[10px] px-3 py-2 text-sm transition-all duration-200 focus:outline-none focus:ring-1 focus:ring-primary/20 prev-next-btn`,{"border-stroke-subtle dark:border-stroke text-content-muted dark:text-content-muted cursor-not-allowed opacity-50":o.value<=1,"border-stroke-subtle dark:border-stroke text-content-primary dark:text-content-primary hover:border-primary hover:text-primary hover:bg-primary/5":o.value>1}])},[...i[21]||=[b(`span`,{class:`hidden sm:inline`},`Previous`,-1),b(`span`,{class:`sm:hidden`},`‹`,-1)]],10,yi),b(`div`,bi,[o.value>3?(S(),x(`button`,{key:0,onClick:i[3]||=e=>o.value=1,class:`glass-card border border-stroke-subtle dark:border-stroke hover:border-primary rounded-[8px] px-3 py-2 text-sm text-content-primary dark:text-content-primary hover:text-primary hover:bg-primary/5 transition-all duration-200 focus:outline-none focus:ring-1 focus:ring-primary/20`},` 1 `)):m(``,!0),o.value>4?(S(),x(`span`,xi,`...`)):m(``,!0),(S(!0),x(y,null,t(Array.from({length:Math.min(5,z.value)},(e,t)=>Math.max(1,Math.min(o.value-2,z.value-4))+t).filter(e=>e<=z.value),e=>(S(),x(`button`,{key:e,onClick:t=>o.value=e,class:s([`glass-card border rounded-[8px] px-3 py-2 text-sm transition-all duration-200 focus:outline-none focus:ring-1 focus:ring-primary/20 page-number`,{"border-primary bg-primary/10 text-primary":o.value===e,"border-stroke-subtle dark:border-stroke text-content-primary dark:text-content-primary hover:border-primary hover:text-primary hover:bg-primary/5":o.value!==e}])},v(e),11,Si))),128)),o.value<z.value-3?(S(),x(`span`,Ci,`...`)):m(``,!0),o.value<z.value-2?(S(),x(`button`,{key:3,onClick:i[4]||=e=>o.value=z.value,class:`glass-card border border-stroke-subtle dark:border-stroke hover:border-primary rounded-[8px] px-3 py-2 text-sm text-content-primary dark:text-content-primary hover:text-primary hover:bg-primary/5 transition-all duration-200 focus:outline-none focus:ring-1 focus:ring-primary/20`},v(z.value),1)):m(``,!0)]),b(`button`,{onClick:i[5]||=e=>o.value+=1,disabled:o.value>=z.value,class:s([`glass-card border rounded-[10px] px-3 py-2 text-sm transition-all duration-200 focus:outline-none focus:ring-1 focus:ring-primary/20 prev-next-btn`,{"border-stroke-subtle dark:border-stroke text-content-muted dark:text-content-muted cursor-not-allowed opacity-50":o.value>=z.value,"border-stroke-subtle dark:border-stroke text-content-primary dark:text-content-primary hover:border-primary hover:text-primary hover:bg-primary/5":o.value<z.value}])},[...i[22]||=[b(`span`,{class:`hidden sm:inline`},`Next`,-1),b(`span`,{class:`sm:inline`},`›`,-1)]],10,wi)])])):B.value&&!u.value?(S(),x(`div`,Ti,[b(`div`,Ei,[b(`span`,Di,` Showing `+v(R.value.length)+` packets `,1),i[23]||=b(`span`,{class:`text-content-secondary dark:text-content-muted text-xs`},`•`,-1),b(`button`,{onClick:fe,class:`glass-card border border-primary rounded-[8px] px-4 py-2 text-sm text-primary hover:bg-primary/5 transition-all duration-200 focus:outline-none focus:ring-1 focus:ring-primary/20`},` Load `+v(Math.min(200,$-l.value))+` more records `,1),b(`span`,Oi,`(`+v(l.value)+`/`+v($)+` max)`,1)])])):u.value?(S(),x(`div`,ki,[...i[24]||=[b(`div`,{class:`flex items-center gap-2`},[b(`div`,{class:`w-4 h-4 border-2 border-primary border-t-transparent rounded-full animate-spin`}),b(`span`,{class:`text-primary text-sm`},`Loading more records...`)],-1)]])):m(``,!0)]),h(Xn,{packet:T.value,isOpen:E.value,onClose:ee},null,8,[`packet`,`isOpen`])],64))}}),[[`__scopeId`,`data-v-8961931d`]]),ji={class:`grid grid-cols-1 lg:grid-cols-2 gap-4 mb-2`},Mi=u({name:`DashboardView`,__name:`Dashboard`,setup(e){return(e,t)=>(S(),x(`div`,null,[h(G),b(`div`,ji,[h(Ne),h(_e)]),h(Ai)]))}});export{Mi as default}; |