mirror of
https://github.com/TheBinaryNinja/tvapp2.git
synced 2026-06-11 19:05:41 -04:00
2 lines
21 KiB
JavaScript
2 lines
21 KiB
JavaScript
import{v as j,r,z as X,o as s,F as I,K as P,s as K,n as h,H as i,D as W,B as Y,t as n,N as e,O as U,A as Z,u as a,y as O,h as q,i as D,q as f,p as E,X as c,_ as g,e as w,S as Q,f as _,Z as ss,J as B,C as ts,c as es,g as ls,j as os,M as is}from"./index-CQPQcDLN.js";const as={style:{width:"100%"}},ns=["viewBox"],ds=["x2","y1","y2"],rs=["x2","y1","y2"],vs=["d"],us=["points"],ps=["cx","cy"],cs=["cx","cy"],N=760,C=90,x=6,ms=j({__name:"Sparkline",props:{series:{},target:{}},setup(H){const u=H,F=h(()=>Math.max(u.target*1.4,...u.series)),b=m=>x+m/(u.series.length-1)*(N-x*2),S=m=>C-x-(m-0)/(F.value-0)*(C-x*2),k=h(()=>u.series.map((m,l)=>`${b(l)},${S(m)}`).join(" ")),M=h(()=>`M${b(0)},${C} L ${k.value} L ${b(u.series.length-1)},${C} Z`),R=h(()=>S(u.target)),o=h(()=>b(u.series.length-1)),z=h(()=>S(u.series[u.series.length-1])),p=[.25,.5,.75];return(m,l)=>(i(),r("div",as,[(i(),r("svg",{viewBox:`0 0 ${N} ${C}`,preserveAspectRatio:"none",style:X({width:"100%",height:C+"px",display:"block"})},[l[0]||(l[0]=s("defs",null,[s("linearGradient",{id:"spark-grad",x1:"0",y1:"0",x2:"0",y2:"1"},[s("stop",{offset:"0%","stop-color":"oklch(0.82 0.13 220)","stop-opacity":"0.35"}),s("stop",{offset:"100%","stop-color":"oklch(0.82 0.13 220)","stop-opacity":"0"})])],-1)),(i(),r(I,null,P(p,V=>s("line",{key:V,x1:x,x2:N-x,y1:x+V*(C-x*2),y2:x+V*(C-x*2),stroke:"var(--hairline)","stroke-width":"1","stroke-dasharray":"2 4"},null,8,ds)),64)),s("line",{x1:x,x2:N-x,y1:R.value,y2:R.value,stroke:"oklch(0.82 0.13 220 / 0.5)","stroke-dasharray":"3 3","stroke-width":"1"},null,8,rs),s("path",{d:M.value,fill:"url(#spark-grad)"},null,8,vs),s("polyline",{fill:"none",stroke:"oklch(0.82 0.13 220)","stroke-width":"1.8","stroke-linejoin":"round","stroke-linecap":"round",points:k.value},null,8,us),s("circle",{cx:o.value,cy:z.value,r:"3.5",fill:"oklch(0.82 0.13 220)"},null,8,ps),s("circle",{cx:o.value,cy:z.value,r:"7",fill:"oklch(0.82 0.13 220 / 0.25)"},null,8,cs)],12,ns)),l[1]||(l[1]=K('<div class="row" style="justify-content:space-between;font-size:10px;color:var(--text-3);margin-top:4px;"><span class="mono">−60m</span><span class="mono">−45m</span><span class="mono">−30m</span><span class="mono">−15m</span><span class="mono">now</span></div>',1))]))}}),ys={class:"col",style:{height:"100%","min-height":"0"}},fs={class:"stats"},gs={class:"card stat"},_s={class:"val"},xs={style:{color:"var(--text-3)","font-size":"16px","font-weight":"500"}},hs={class:"card stat"},bs={class:"val"},ks={class:"delta"},ws={class:"card stat"},zs={class:"val"},Ss={class:"card stat"},$s={class:"val"},Cs={class:"streams-grid"},Is={class:"streams-list"},Ms={class:"toolbar"},Es={class:"body"},Fs=["onClick"],Vs={style:{"min-width":"0"}},Bs={class:"nm"},Rs={style:{"white-space":"nowrap",overflow:"hidden","text-overflow":"ellipsis"}},Ls={key:0,class:"dot good pulse",style:{width:"6px",height:"6px"}},Ts={key:1,class:"dot warn",style:{width:"6px",height:"6px"}},Ns={key:2,class:"dot bad",style:{width:"6px",height:"6px"}},As={class:"meta"},Ds={class:"mono"},Ps={class:"mono"},Hs={class:"viewer"},Gs={class:"stream-detail"},Us={style:{padding:"var(--pad-card)",display:"flex",flexDirection:"column",gap:"16px"}},Os={class:"row",style:{gap:"14px"}},js={style:{flex:"1"}},Xs={class:"row",style:{gap:"10px"}},Js={style:{margin:"0","font-size":"17px","font-weight":"600"}},Ks={key:0,class:"live-pill"},Ws={class:"mono muted",style:{"font-size":"var(--fs-xs)","margin-top":"4px"}},Ys={style:{color:"var(--text-1)"}},Zs={class:"metric-grid"},qs={class:"metric"},Qs={class:"val"},st={class:"sub"},tt={class:"metric"},et={class:"val"},lt={key:0,style:{"font-size":"12px",color:"var(--text-2)","font-weight":"500"}},ot={class:"sub"},it={class:"metric"},at={class:"val"},nt={class:"sub"},dt={class:"metric"},rt={class:"val"},vt={class:"sub"},ut={class:"card",style:{background:"var(--bg-2)",padding:"14px"}},pt={class:"row",style:{"margin-bottom":"8px"}},ct={style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"14px"}},mt={class:"card",style:{background:"var(--bg-2)",padding:"14px"}},yt={class:"kv-list"},ft={class:"v mono"},gt={class:"v mono"},_t={class:"v mono"},xt={class:"v mono"},ht={class:"v mono"},bt={class:"v mono"},kt={key:0,style:{color:"var(--bad)","margin-left":"8px"}},wt={class:"card",style:{background:"var(--bg-2)",padding:"14px"}},zt={class:"kv-list"},St={class:"v mono",style:{"font-size":"11px","word-break":"break-all"}},$t={class:"v mono"},Ct={class:"v mono"},It={key:1,style:{color:"var(--text-3)"}},Mt={class:"v"},Et={class:"v"},Ft={class:"card flush",style:{background:"var(--bg-2)"}},Vt={class:"card-hd",style:{padding:"12px 14px"}},Bt={key:0,class:"empty",style:{padding:"28px"}},Rt={key:1,class:"tbl"},Lt={class:"mono"},Tt={class:"muted"},Nt={class:"mono"},At={class:"muted"},Dt={class:"stream-view-hd"},Pt={style:{"min-width":"0",flex:"1"}},Ht={class:"row",style:{gap:"8px"}},Gt={style:{"font-weight":"600","font-size":"15px","white-space":"nowrap",overflow:"hidden","text-overflow":"ellipsis"}},Ut={key:0,class:"live-pill"},Ot={class:"mono muted",style:{"font-size":"var(--fs-xs)","margin-top":"3px"}},jt={class:"stream-view-body"},Xt={class:"player",style:{"border-radius":"12px"}},Jt={key:0,style:{position:"absolute",inset:"0",display:"grid","place-items":"center",color:"var(--text-2)","font-size":"13px"}},Kt={style:{"text-align":"center"}},Wt={style:{"margin-top":"16px"}},Yt={class:"label mono"},Zt={class:"play-btn"},qt={class:"controls"},Qt={class:"mono",style:{"font-size":"11px"}},se={class:"player-ctrl",title:"Fullscreen"},te={key:0,class:"card flush",style:{background:"var(--bg-2)"}},ee={key:0,style:{padding:"10px 12px","border-radius":"8px",background:"var(--accent-soft)",border:"1px solid oklch(0.82 0.13 220 / 0.4)"}},le={style:{"font-weight":"600","font-size":"14px","margin-top":"4px",color:"var(--accent-hi)"}},oe={class:"mono muted",style:{"font-size":"11px","margin-top":"4px"}},ie={key:1,style:{padding:"10px 12px","border-radius":"8px",background:"var(--bg-3)",border:"1px solid var(--hairline)"}},ae={style:{"font-weight":"600","font-size":"14px","margin-top":"4px",color:"var(--text-0)"}},ne={class:"mono muted",style:{"font-size":"11px","margin-top":"4px"}},de={class:"metric-grid",style:{"grid-template-columns":"repeat(4, 1fr)"}},re={class:"metric"},ve={class:"val",style:{"font-size":"17px"}},ue={class:"metric"},pe={class:"val",style:{"font-size":"17px"}},ce={class:"metric"},me={class:"val",style:{"font-size":"17px"}},ye={class:"metric"},fe={class:"val",style:{"font-size":"17px"}},ge={class:"card flush",style:{background:"var(--bg-2)"}},_e={class:"card-hd",style:{padding:"12px 14px"}},xe={style:{padding:"14px"}},he={class:"kv-list"},be={class:"v mono"},ke={class:"v mono"},we={class:"v mono"},ze={class:"v mono"},Se={class:"v mono"},$e={key:0,style:{color:"var(--bad)","margin-left":"8px"}},Ce={class:"v mono"},Ie={class:"v mono"},Me={class:"v mono",style:{"font-size":"11px","word-break":"break-all"}},Ee={class:"v mono"},Fe={key:1,style:{color:"var(--text-3)"}},Ve={class:"v"},Be={class:"row",style:{gap:"8px"}},Le=j({__name:"ActiveStreamsScreen",setup(H){const u=Z,F=B(u[0].id),b=B("all"),S=B(null),k=B(!0),M=B(!1),R=h(()=>u.filter(v=>b.value==="all"?!0:b.value==="issues"?v.status!=="good":b.value==="live"?v.status==="good":!0)),o=h(()=>u.find(v=>v.id===F.value)||u[0]),z=h(()=>({streams:u.filter(v=>v.status!=="bad").length,viewers:u.reduce((v,t)=>v+t.viewers,0),bandwidth:u.reduce((v,t)=>v+t.bandwidth,0),issues:u.filter(v=>v.status!=="good").length}));function p(v){return ts.find(t=>t.id===v.channelId)}const m=h(()=>is(o.value.uptimeMin+1,o.value.targetBitrate||5)),l=h(()=>u.find(v=>v.id===S.value));function V(){S.value=o.value.id,k.value=o.value.status!=="bad",M.value=!1}function A(){S.value=null}function G(v){v.key==="Escape"&&S.value&&A()}W(()=>window.addEventListener("keydown",G)),Y(()=>window.removeEventListener("keydown",G));function L(v){const t=Math.floor(v),d=Math.round((v-t)*60);return String(t).padStart(2,"0")+":"+String(d).padStart(2,"0")}function y(v){const t=es[v]||[],d=new Date().getHours()+new Date().getMinutes()/60,$=t.find(T=>d>=T.start&&d<T.end),J=t.find(T=>T.start>=($?$.end:d));return{live:$,next:J}}return(v,t)=>(i(),r("div",ys,[s("div",fs,[s("div",gs,[t[5]||(t[5]=s("div",{class:"lbl"},"Live now",-1)),s("div",_s,[n(e(z.value.streams),1),s("span",xs," / "+e(U(u).length),1)]),t[6]||(t[6]=s("div",{class:"delta"},[s("span",{class:"dot good pulse",style:{width:"6px",height:"6px"}}),n("relaying")],-1))]),s("div",hs,[t[8]||(t[8]=s("div",{class:"lbl"},"Viewers",-1)),s("div",bs,e(z.value.viewers),1),s("div",ks,[a(_,{name:"check",size:12}),t[7]||(t[7]=n("peak 412 today",-1))])]),s("div",ws,[t[10]||(t[10]=s("div",{class:"lbl"},"Egress",-1)),s("div",zs,[n(e((z.value.bandwidth/1e3).toFixed(2)),1),t[9]||(t[9]=s("span",{style:{"font-size":"14px",color:"var(--text-2)","font-weight":"500"}}," Gbps",-1))]),t[11]||(t[11]=s("div",{class:"delta"},"across 3 edge nodes",-1))]),s("div",Ss,[t[14]||(t[14]=s("div",{class:"lbl"},"Issues",-1)),s("div",$s,e(z.value.issues),1),s("div",{class:O(["delta",{bad:z.value.issues}])},[z.value.issues?(i(),r(I,{key:0},[a(_,{name:"warn",size:12}),t[12]||(t[12]=n("needs attention",-1))],64)):(i(),r(I,{key:1},[a(_,{name:"check",size:12}),t[13]||(t[13]=n("all healthy",-1))],64))],2)])]),s("div",Cs,[s("div",Is,[s("div",Ms,[a(os,{value:"",onChange:()=>{},placeholder:"Search streams",width:180}),t[15]||(t[15]=s("span",{class:"spacer"},null,-1)),a(q,{value:b.value,onChange:t[0]||(t[0]=d=>b.value=d),options:[{value:"all",label:"All"},{value:"live",label:"Live"},{value:"issues",label:"Issues"}]},null,8,["value"])]),s("div",Es,[(i(!0),r(I,null,P(R.value,d=>(i(),r("div",{key:d.id,class:O(["stream-item",{selected:F.value===d.id}]),onClick:$=>F.value=d.id},[a(D,{ch:p(d)},null,8,["ch"]),s("div",Vs,[s("div",Bs,[s("span",Rs,e(p(d).tvg_name),1),d.status==="good"?(i(),r("span",Ls)):d.status==="warn"?(i(),r("span",Ts)):(i(),r("span",Ns))]),s("div",As,[s("span",Ds,e(d.status==="bad"?"offline":d.resolution),1),t[16]||(t[16]=s("span",null,"·",-1)),s("span",Ps,e(d.status==="bad"?"—":d.bitrate.toFixed(1)+" Mbps"),1),t[17]||(t[17]=s("span",null,"·",-1)),s("span",null,e(d.uptime),1)])]),s("div",Hs,[s("b",null,e(d.viewers),1),t[18]||(t[18]=s("span",null,"viewers",-1))])],10,Fs))),128))])]),s("div",Gs,[s("div",Us,[s("div",Os,[a(D,{ch:p(o.value),size:"lg"},null,8,["ch"]),s("div",js,[s("div",Xs,[s("h2",Js,e(p(o.value).tvg_name),1),o.value.status!=="bad"?(i(),r("span",Ks,[...t[19]||(t[19]=[s("span",{class:"dot"},null,-1),n("LIVE",-1)])])):f("",!0),o.value.status==="bad"?(i(),E(g,{key:1,tone:"bad"},{default:c(()=>[a(_,{name:"warn",size:11}),t[20]||(t[20]=n("offline",-1))]),_:1})):f("",!0),o.value.status==="warn"?(i(),E(g,{key:2,tone:"warn"},{default:c(()=>[a(_,{name:"warn",size:11}),t[21]||(t[21]=n("degraded",-1))]),_:1})):f("",!0)]),s("div",Ws,[n(" #"+e(p(o.value).channel)+" · "+e(p(o.value).group)+" · stream-id ",1),s("span",Ys,e(o.value.id),1)])]),a(w,{variant:"ghost",size:"sm",icon:"refresh"},{default:c(()=>[...t[22]||(t[22]=[n("Restart",-1)])]),_:1}),a(w,{variant:o.value.status==="bad"?"primary":"ghost",size:"sm",icon:o.value.status==="bad"?"play":"stop"},{default:c(()=>[n(e(o.value.status==="bad"?"Start":"Stop"),1)]),_:1},8,["variant","icon"]),a(w,{variant:"primary",size:"sm",icon:"tv",onClick:V},{default:c(()=>[...t[23]||(t[23]=[n("View channel",-1)])]),_:1})]),s("div",Zs,[s("div",qs,[t[24]||(t[24]=s("div",{class:"lbl"},"Viewers",-1)),s("div",Qs,e(o.value.viewers),1),s("div",st,"peak "+e(o.value.peakViewers)+" · session",1)]),s("div",tt,[t[25]||(t[25]=s("div",{class:"lbl"},"Bitrate",-1)),s("div",et,[n(e(o.value.status==="bad"?"—":o.value.bitrate.toFixed(1)),1),o.value.status!=="bad"?(i(),r("span",lt," Mbps")):f("",!0)]),s("div",ot,"target "+e(o.value.targetBitrate.toFixed(1))+" Mbps",1)]),s("div",it,[t[26]||(t[26]=s("div",{class:"lbl"},"Uptime",-1)),s("div",at,e(o.value.uptime),1),s("div",nt,"since "+e(o.value.status==="bad"?"—":"started"),1)]),s("div",dt,[t[28]||(t[28]=s("div",{class:"lbl"},"Bandwidth",-1)),s("div",rt,[n(e(o.value.bandwidth),1),t[27]||(t[27]=s("span",{style:{"font-size":"12px",color:"var(--text-2)","font-weight":"500"}}," Mbps",-1))]),s("div",vt,"egress · "+e(o.value.viewers)+" client"+e(o.value.viewers===1?"":"s"),1)])]),s("div",ut,[s("div",pt,[t[29]||(t[29]=s("div",{style:{"font-size":"var(--fs-sm)","font-weight":"600"}},"Bitrate · last 60 min",-1)),t[30]||(t[30]=s("span",{class:"spacer"},null,-1)),a(g,{tone:"cyan"},{default:c(()=>[n("avg "+e((m.value.reduce((d,$)=>d+$,0)/m.value.length).toFixed(1))+" Mbps",1)]),_:1}),a(g,null,{default:c(()=>[n("min "+e(Math.min(...m.value).toFixed(1)),1)]),_:1}),a(g,null,{default:c(()=>[n("max "+e(Math.max(...m.value).toFixed(1)),1)]),_:1})]),a(ms,{series:m.value,target:o.value.targetBitrate},null,8,["series","target"])]),s("div",ct,[s("div",mt,[t[37]||(t[37]=s("div",{style:{"font-size":"var(--fs-sm)","font-weight":"600","margin-bottom":"12px"}},"Technical",-1)),s("div",yt,[t[31]||(t[31]=s("div",{class:"k"},"Video",-1)),s("div",ft,e(o.value.codec),1),t[32]||(t[32]=s("div",{class:"k"},"Audio",-1)),s("div",gt,e(o.value.audio),1),t[33]||(t[33]=s("div",{class:"k"},"Container",-1)),s("div",_t,e(o.value.container),1),t[34]||(t[34]=s("div",{class:"k"},"Resolution",-1)),s("div",xt,e(o.value.resolution)+" @ "+e(o.value.fps)+"fps",1),t[35]||(t[35]=s("div",{class:"k"},"Latency",-1)),s("div",ht,e(o.value.latency.toFixed(1))+" s",1),t[36]||(t[36]=s("div",{class:"k"},"Dropped",-1)),s("div",bt,[n(e(o.value.droppedFrames)+" frames · "+e((o.value.droppedRatio*100).toFixed(2))+"% ",1),o.value.droppedRatio>.1?(i(),r("span",kt,"● high")):f("",!0)])])]),s("div",wt,[t[47]||(t[47]=s("div",{style:{"font-size":"var(--fs-sm)","font-weight":"600","margin-bottom":"12px"}},"Source",-1)),s("div",zt,[t[40]||(t[40]=s("div",{class:"k"},"Upstream",-1)),s("div",St,e(o.value.sourceUrl),1),t[41]||(t[41]=s("div",{class:"k"},"Edge node",-1)),s("div",$t,e(o.value.sourceHost),1),t[42]||(t[42]=s("div",{class:"k"},"Protocol",-1)),t[43]||(t[43]=s("div",{class:"v mono"},"HLS · HTTPS",-1)),t[44]||(t[44]=s("div",{class:"k"},"TVG-ID",-1)),s("div",Ct,[p(o.value).tvg_id?(i(),r(I,{key:0},[n(e(p(o.value).tvg_id),1)],64)):(i(),r("span",It,"—"))]),t[45]||(t[45]=s("div",{class:"k"},"Source",-1)),s("div",Mt,[a(g,{tone:"cyan"},{default:c(()=>[n(e(p(o.value).source),1)]),_:1})]),t[46]||(t[46]=s("div",{class:"k"},"EPG",-1)),s("div",Et,[p(o.value).epg==="matched"?(i(),E(g,{key:0,tone:"good"},{default:c(()=>[a(_,{name:"check",size:11}),t[38]||(t[38]=n("matched",-1))]),_:1})):(i(),E(g,{key:1,tone:"warn"},{default:c(()=>[...t[39]||(t[39]=[n("unmatched",-1)])]),_:1}))])])])]),s("div",Ft,[s("div",Vt,[t[48]||(t[48]=s("h2",{style:{"font-size":"13px"}},"Connected sessions",-1)),a(g,{tone:"cyan"},{default:c(()=>[n(e(o.value.status==="bad"?0:o.value.viewers),1)]),_:1}),t[49]||(t[49]=s("span",{class:"spacer"},null,-1)),a(w,{variant:"ghost",size:"sm",icon:"more"})]),o.value.status==="bad"?(i(),r("div",Bt,[...t[50]||(t[50]=[s("div",{class:"muted"},"No viewers — stream is offline.",-1)])])):(i(),r("table",Rt,[t[51]||(t[51]=s("thead",null,[s("tr",null,[s("th",null,"IP"),s("th",null,"Region"),s("th",null,"Client"),s("th",null,"Bitrate"),s("th",{style:{width:"90px"}},"Joined"),s("th",{style:{width:"50px"}})])],-1)),s("tbody",null,[(i(!0),r(I,null,P(U(Q).slice(0,Math.min(o.value.viewers,6)),(d,$)=>(i(),r("tr",{key:$},[s("td",Lt,e(d.ip),1),s("td",Tt,e(d.region),1),s("td",null,e(d.client),1),s("td",Nt,e(d.bitrate),1),s("td",At,e(d.joined),1),s("td",null,[a(w,{variant:"ghost",size:"sm",icon:"x",title:"Disconnect"})])]))),128))])]))])])])]),l.value?(i(),r("div",{key:0,class:"stream-view-bg",onClick:A},[s("div",{class:"stream-view",onClick:t[4]||(t[4]=ss(()=>{},["stop"]))},[s("div",Dt,[a(D,{ch:p(l.value)},null,8,["ch"]),s("div",Pt,[s("div",Ht,[s("span",Gt,e(p(l.value).tvg_name),1),l.value.status!=="bad"?(i(),r("span",Ut,[...t[52]||(t[52]=[s("span",{class:"dot"},null,-1),n("LIVE",-1)])])):(i(),E(g,{key:1,tone:"bad"},{default:c(()=>[a(_,{name:"warn",size:11}),t[53]||(t[53]=n("offline",-1))]),_:1}))]),s("div",Ot," #"+e(p(l.value).channel)+" · "+e(p(l.value).group)+" · "+e(l.value.status==="bad"?"no signal":l.value.resolution+" · "+l.value.bitrate.toFixed(1)+" Mbps"),1)]),a(w,{variant:"ghost",size:"sm",icon:"x",onClick:A,title:"Close (Esc)"})]),s("div",jt,[s("div",Xt,[l.value.status==="bad"?(i(),r("div",Jt,[s("div",Kt,[a(_,{name:"warn",size:32}),t[55]||(t[55]=s("div",{style:{"margin-top":"12px","font-weight":"600",color:"var(--text-1)","font-size":"15px"}},"Stream offline",-1)),t[56]||(t[56]=s("div",{class:"mono",style:{"font-size":"11px","margin-top":"6px"}},"upstream returned HTTP 503",-1)),s("div",Wt,[a(w,{variant:"primary",size:"sm",icon:"refresh"},{default:c(()=>[...t[54]||(t[54]=[n("Retry source",-1)])]),_:1})])])])):(i(),r(I,{key:1},[t[59]||(t[59]=s("div",{class:"stripes"},null,-1)),s("div",Yt,e(l.value.resolution)+" · "+e(l.value.fps)+"fps · "+e(l.value.bitrate.toFixed(1))+" Mbps",1),k.value?f("",!0):(i(),r("div",{key:0,class:"play",onClick:t[1]||(t[1]=d=>k.value=!0)},[s("div",Zt,[a(_,{name:"play",size:28})])])),s("div",qt,[s("button",{class:"player-ctrl",onClick:t[2]||(t[2]=d=>k.value=!k.value)},[a(_,{name:k.value?"pause":"play",size:14},null,8,["name"])]),s("span",Qt,e(k.value?"01:42":"00:00"),1),t[57]||(t[57]=s("div",{class:"track"},null,-1)),s("button",{class:"player-ctrl",onClick:t[3]||(t[3]=d=>M.value=!M.value)},[a(_,{name:M.value?"x":"check",size:13},null,8,["name"])]),t[58]||(t[58]=s("span",{class:"mono",style:{"font-size":"11px"}},"LIVE",-1)),s("button",se,[a(_,{name:"grid",size:13})])])],64))]),l.value.status!=="bad"?(i(),r("div",te,[t[62]||(t[62]=s("div",{class:"card-hd",style:{padding:"12px 14px"}},[s("h2",{style:{"font-size":"13px"}},"From the guide"),s("span",{class:"spacer"}),s("span",{class:"muted",style:{"font-size":"var(--fs-xs)"}},"EPG-matched")],-1)),s("div",{style:X({padding:"14px",display:"grid",gridTemplateColumns:y(l.value.channelId).live&&y(l.value.channelId).next?"1fr 1fr":"1fr",gap:"12px"})},[y(l.value.channelId).live?(i(),r("div",ee,[t[60]||(t[60]=s("div",{class:"mono",style:{"font-size":"10px","letter-spacing":"0.08em",color:"var(--accent-hi)","font-weight":"600"}},"ON NOW",-1)),s("div",le,e(y(l.value.channelId).live.title),1),s("div",oe,e(L(y(l.value.channelId).live.start))+"–"+e(L(y(l.value.channelId).live.end))+" · "+e(y(l.value.channelId).live.cat),1)])):f("",!0),y(l.value.channelId).next?(i(),r("div",ie,[t[61]||(t[61]=s("div",{class:"mono",style:{"font-size":"10px","letter-spacing":"0.08em",color:"var(--text-2)","font-weight":"600"}},"UP NEXT",-1)),s("div",ae,e(y(l.value.channelId).next.title),1),s("div",ne,e(L(y(l.value.channelId).next.start))+"–"+e(L(y(l.value.channelId).next.end))+" · "+e(y(l.value.channelId).next.cat),1)])):f("",!0)],4)])):f("",!0),s("div",de,[s("div",re,[t[63]||(t[63]=s("div",{class:"lbl"},"Viewers",-1)),s("div",ve,e(l.value.viewers),1)]),s("div",ue,[t[64]||(t[64]=s("div",{class:"lbl"},"Bitrate",-1)),s("div",pe,e(l.value.status==="bad"?"—":l.value.bitrate.toFixed(1)+" Mbps"),1)]),s("div",ce,[t[65]||(t[65]=s("div",{class:"lbl"},"Latency",-1)),s("div",me,e(l.value.status==="bad"?"—":l.value.latency.toFixed(1)+"s"),1)]),s("div",ye,[t[66]||(t[66]=s("div",{class:"lbl"},"Uptime",-1)),s("div",fe,e(l.value.uptime),1)])]),s("div",ge,[s("div",_e,[t[67]||(t[67]=s("h2",{style:{"font-size":"13px"}},"Stream details",-1)),t[68]||(t[68]=s("span",{class:"spacer"},null,-1)),a(g,{tone:l.value.status==="bad"?"bad":"good"},{default:c(()=>[a(ls,{status:l.value.status,pulse:l.value.status!=="bad"},null,8,["status","pulse"]),n(" "+e(l.value.status==="bad"?"offline":l.value.status==="warn"?"degraded":"healthy"),1)]),_:1},8,["tone"])]),s("div",xe,[s("div",he,[t[69]||(t[69]=s("div",{class:"k"},"Video",-1)),s("div",be,e(l.value.codec),1),t[70]||(t[70]=s("div",{class:"k"},"Audio",-1)),s("div",ke,e(l.value.audio),1),t[71]||(t[71]=s("div",{class:"k"},"Container",-1)),s("div",we,e(l.value.container),1),t[72]||(t[72]=s("div",{class:"k"},"Resolution",-1)),s("div",ze,e(l.value.resolution)+" @ "+e(l.value.fps)+"fps",1),t[73]||(t[73]=s("div",{class:"k"},"Dropped",-1)),s("div",Se,[n(e(l.value.droppedFrames)+" frames · "+e((l.value.droppedRatio*100).toFixed(2))+"% ",1),l.value.droppedRatio>.1?(i(),r("span",$e,"● high")):f("",!0)]),t[74]||(t[74]=s("div",{class:"k"},"Bandwidth",-1)),s("div",Ce,e(l.value.bandwidth)+" Mbps egress",1),t[75]||(t[75]=s("div",{class:"k"},"Edge node",-1)),s("div",Ie,e(l.value.sourceHost),1),t[76]||(t[76]=s("div",{class:"k"},"Source URL",-1)),s("div",Me,e(l.value.sourceUrl),1),t[77]||(t[77]=s("div",{class:"k"},"TVG-ID",-1)),s("div",Ee,[p(l.value).tvg_id?(i(),r(I,{key:0},[n(e(p(l.value).tvg_id),1)],64)):(i(),r("span",Fe,"—"))]),t[78]||(t[78]=s("div",{class:"k"},"Source",-1)),s("div",Ve,[a(g,{tone:"cyan"},{default:c(()=>[n(e(p(l.value).source),1)]),_:1})])])])]),s("div",Be,[a(w,{variant:"ghost",icon:"refresh"},{default:c(()=>[...t[79]||(t[79]=[n("Restart stream",-1)])]),_:1}),a(w,{variant:"ghost",icon:"edit"},{default:c(()=>[...t[80]||(t[80]=[n("Edit channel",-1)])]),_:1}),t[82]||(t[82]=s("span",{class:"spacer"},null,-1)),l.value.status!=="bad"?(i(),E(w,{key:0,variant:"ghost",icon:"stop"},{default:c(()=>[...t[81]||(t[81]=[n("Stop",-1)])]),_:1})):f("",!0)])])])])):f("",!0)]))}});export{Le as default};
|