@serifpersia/dango 3.4.2 → 3.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/client/dist/assets/{AnimeCard-CIwTZI3D.js → AnimeCard-4CEz8Buu.js} +1 -1
- package/client/dist/assets/AnimeInfo-DyX9qTwg.js +1 -0
- package/client/dist/assets/AnimeInfoPage-Dvp_c8vK.js +2 -0
- package/client/dist/assets/Asmr-qg3lMAJn.js +2 -0
- package/client/dist/assets/{AsmrResetProgressModal-BDpA07Fa.js → AsmrResetProgressModal-BpPlg_Vv.js} +1 -1
- package/client/dist/assets/AvSyncCalibrator-C2wu1ydI.css +1 -0
- package/client/dist/assets/AvSyncCalibrator-FJllOgOH.js +10 -0
- package/client/dist/assets/Home-A7gCeEST.js +1 -0
- package/client/dist/assets/Insights-G9IXepHJ.js +1 -0
- package/client/dist/assets/{LibraryListPage-DWbcek1i.js → LibraryListPage-Bh2qCJPh.js} +1 -1
- package/client/dist/assets/{ListeningList-CcuxBzy1.js → ListeningList-Czv4cTRl.js} +1 -1
- package/client/dist/assets/{Manga-DpLaW39C.js → Manga-qdAAS1z7.js} +1 -1
- package/client/dist/assets/MangaInfoPage-1rTgZzf2.js +1 -0
- package/client/dist/assets/MangaReadPage-CeyxPG6w.js +1 -0
- package/client/dist/assets/{MangaResetProgressModal-CYguBG2f.js → MangaResetProgressModal-C_ppotmh.js} +1 -1
- package/client/dist/assets/Mature-Bkhxnr3K.js +1 -0
- package/client/dist/assets/{MediaCard-p29DqyKX.js → MediaCard-BQZsutEo.js} +1 -1
- package/client/dist/assets/Music-C0rGzSbi.js +1 -0
- package/client/dist/assets/{OptionListMenu-C1pvpu8X.js → OptionListMenu-CyfpCBEy.js} +1 -1
- package/client/dist/assets/Player-yhiTlpYU.js +56 -0
- package/client/dist/assets/PlayerSettings-icy4SfQa.js +1 -0
- package/client/dist/assets/{QueueOptionsButton-CWdoe1_I.js → QueueOptionsButton-5eloKF5J.js} +1 -1
- package/client/dist/assets/{QueueRail-BBpn9CII.js → QueueRail-DaMjlKL4.js} +1 -1
- package/client/dist/assets/Radio-FxGqCxR4.js +1 -0
- package/client/dist/assets/{ReadingList-D4xQ9tlw.js → ReadingList-CCm3IAbt.js} +1 -1
- package/client/dist/assets/{ResetProgressModal-JFlbXy7W.js → ResetProgressModal-CeI4V3Y5.js} +1 -1
- package/client/dist/assets/{Search-D-ocogP-.js → Search-qpILaAiQ.js} +1 -1
- package/client/dist/assets/Settings-Bw9M3NGz.js +21 -0
- package/client/dist/assets/{SkeletonGrid-N67HqYXx.js → SkeletonGrid-0dY_xMq3.js} +1 -1
- package/client/dist/assets/{Trackers-C_SPMGKx.js → Trackers-Zy5GOs0P.js} +2 -2
- package/client/dist/assets/Tv-Bx7tGS57.css +1 -0
- package/client/dist/assets/Tv-DREwc7BX.js +4 -0
- package/client/dist/assets/TvInfo-CHIsVzZ0.js +1 -0
- package/client/dist/assets/{TvPopup-DEB6Ufq4.js → TvPopup-D_tVTyZ2.js} +1 -1
- package/client/dist/assets/{TvSearch-grOUL0Bc.js → TvSearch-BVxedBW-.js} +1 -1
- package/client/dist/assets/{TvWatchlist-CBI21Vge.js → TvWatchlist-BEIwq9R9.js} +1 -1
- package/client/dist/assets/{Watchlist-5cDHUoC8.js → Watchlist-CSngjqlz.js} +1 -1
- package/client/dist/assets/{hls-DySVERd_.js → hls-D48GVTkk.js} +1 -1
- package/client/dist/assets/index-CVB5dYhT.js +178 -0
- package/client/dist/assets/{useAnimeInfoData-BMwVSGhZ.js → useAnimeInfoData-DxdOg_B7.js} +1 -1
- package/client/dist/assets/useAsmr-ClckxnPe.js +1 -0
- package/client/dist/assets/{useAsmrPopup-CY-6b88q.js → useAsmrPopup-Bbgxefy_.js} +1 -1
- package/client/dist/assets/useMangaLibrary-B3_BUKVk.js +1 -0
- package/client/dist/assets/{useMangaPopup-_pNXvRYJ.js → useMangaPopup-Celk4lzf.js} +1 -1
- package/client/dist/assets/{useProviders-CKSedfqb.js → useProviders-pwxPZPHh.js} +1 -1
- package/client/dist/assets/useTv-D9sQrDop.js +1 -0
- package/client/dist/assets/useTvLibrary-UsQpgBTB.js +1 -0
- package/client/dist/index.html +1 -1
- package/package.json +3 -3
- package/server/dist/app-hono.js +15 -37
- package/server/dist/db/drizzle.js +2 -18
- package/server/dist/db.js +3 -2
- package/server/dist/hono/tv.js +9 -5
- package/server/dist/hono/watchlist.js +10 -108
- package/server/dist/lib/migration.js +0 -5
- package/server/dist/providers/remote-loader.js +40 -1
- package/server/dist/providers/remote-types.js +9 -2
- package/server/dist/server.js +50 -182
- package/server/dist/sync.js +173 -704
- package/server/dist/trpc/routers/auth.js +2 -71
- package/server/dist/trpc/routers/continue-watching.js +0 -2
- package/server/dist/trpc/routers/data.js +0 -1
- package/server/dist/trpc/routers/discord.js +8 -0
- package/server/dist/trpc/routers/progress.js +95 -1
- package/server/dist/trpc/routers/queue.js +0 -2
- package/server/dist/trpc/routers/watchlist.js +0 -7
- package/server/dist/trpc/validation.js +64 -0
- package/server/package.json +2 -2
- package/client/dist/assets/AnimeInfo-DlfvDaR8.js +0 -1
- package/client/dist/assets/AnimeInfoPage-B3EPwtzx.js +0 -2
- package/client/dist/assets/Asmr-DCirAWM6.js +0 -2
- package/client/dist/assets/AvSyncCalibrator-BPa6KaGC.css +0 -1
- package/client/dist/assets/AvSyncCalibrator-BroSW86T.js +0 -10
- package/client/dist/assets/Home-DEjYtHbs.js +0 -1
- package/client/dist/assets/Insights-B3b6u8RW.js +0 -1
- package/client/dist/assets/MangaInfoPage-B7FPC4a_.js +0 -1
- package/client/dist/assets/MangaReadPage-Dx0qAAFe.js +0 -1
- package/client/dist/assets/Mature-AScDPmWW.js +0 -1
- package/client/dist/assets/Music-DFInMskb.js +0 -1
- package/client/dist/assets/Player-D-8zY3cx.js +0 -56
- package/client/dist/assets/PlayerSettings-CfJjs_0Q.js +0 -1
- package/client/dist/assets/Radio-DCgO5hAS.js +0 -1
- package/client/dist/assets/Settings-BsFbgkdy.js +0 -21
- package/client/dist/assets/Tv-D7s0Kqqx.js +0 -4
- package/client/dist/assets/Tv-ZEA45gXK.css +0 -1
- package/client/dist/assets/TvInfo-CrmCSFDF.js +0 -1
- package/client/dist/assets/index-HZNJp28e.js +0 -178
- package/client/dist/assets/useAsmr-BLc7FwPm.js +0 -1
- package/client/dist/assets/useMangaLibrary-XFRTq5Qg.js +0 -1
- package/client/dist/assets/useMatureConsent-Cra09TA0.js +0 -1
- package/client/dist/assets/useTv-Dizj6G4R.js +0 -1
- package/client/dist/assets/useTvLibrary-twjHQ89n.js +0 -1
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{d as b,A as x,h as S,u as t,S as Ae,o as Wr,p as zr,a as Hr,T as Ce,q as C}from"./vendor-core-DfaOB3Rn.js";import{u as Ur}from"./vendor-query-BBT5_sHx.js";import{e as Pn,t as tt,z as qr,M as mn,B as Te}from"./index-HZNJp28e.js";import{I as D}from"./vendor-icons-DrybRNxP.js";import{M as Kr,t as mr,f as Dn,d as jr,C as Yr,S as Qr,U as Gr,a as Jr,p as On,u as Xr,b as Zr,c as es,l as ts,q as ns,i as Ln,v as rs,w as ss,x as dr,s as Rn,e as as,g as os,h as is,r as ls,j as nt,k as cs,E as ds,A as us,P as ms,m as ye,o as hs}from"./AvSyncCalibrator-BroSW86T.js";import{O as pn,S as ps,a as gs,A as fs}from"./OptionListMenu-C1pvpu8X.js";import{u as vs}from"./useMatureConsent-Cra09TA0.js";import{u as bs}from"./useProviders-CKSedfqb.js";import{d as ys,g as Ss,h as _s,f as Cs,e as Ts,j as ks,k as xs}from"./useTvLibrary-twjHQ89n.js";import{l as Es,c as Ns}from"./hls-DySVERd_.js";import{u as ws}from"./useIsMobile-Dvx1uJ82.js";import{S as Is}from"./SynopsisText-B3Sa5pRv.js";const Bs="_fullscreenFlat_11xhe_1",Ms="_timeDisplay_11xhe_15",As="_bottomControls_11xhe_19",Ps="_leftControls_11xhe_23",Ls="_rightControls_11xhe_24",Rs="_controlBtn_11xhe_28",$s="_controlsOverlay_11xhe_47",Ds="_hidden_11xhe_67",Os="_topControls_11xhe_73",Vs="_backBtn_11xhe_93",Fs="_videoTitleInfo_11xhe_113",Ws="_animeTitle_11xhe_119",zs="_episodeLabel_11xhe_127",Hs="_speedBoostBadge_11xhe_134",Us="_progressBarContainer_11xhe_180",qs="_progressBar_11xhe_180",Ks="_thumb_11xhe_199",js="_bufferedBar_11xhe_217",Ys="_watchedBar_11xhe_227",Qs="_scrubbing_11xhe_252",Gs="_timeBubble_11xhe_256",Js="_bottomControlsRow_11xhe_270",Xs="_nextEpisodeBtn_11xhe_293",Zs="_active_11xhe_346",ea="_settingsPanel_11xhe_421",ta="_settingsHeader_11xhe_440",na="_settingsBackBtn_11xhe_448",ra="_settingsTitle_11xhe_466",sa="_settingsContent_11xhe_477",aa="_currentValue_11xhe_486",oa="_menuItem_11xhe_501",ia="_menuNote_11xhe_534",la="_loadingOverlay_11xhe_547",ca="_loadingDots_11xhe_558",da="_dot_11xhe_563",ua="_bufferingOverlay_11xhe_592",ma="_bufferingSpinner_11xhe_601",a={fullscreenFlat:Bs,timeDisplay:Ms,bottomControls:As,leftControls:Ps,rightControls:Ls,controlBtn:Rs,controlsOverlay:$s,hidden:Ds,topControls:Os,backBtn:Vs,videoTitleInfo:Fs,animeTitle:Ws,episodeLabel:zs,speedBoostBadge:Hs,progressBarContainer:Us,progressBar:qs,thumb:Ks,bufferedBar:js,watchedBar:Ys,scrubbing:Qs,timeBubble:Gs,bottomControlsRow:Js,nextEpisodeBtn:Xs,active:Zs,settingsPanel:ea,settingsHeader:ta,settingsBackBtn:na,settingsTitle:ra,settingsContent:sa,currentValue:aa,menuItem:oa,menuNote:ia,loadingOverlay:la,loadingDots:ca,dot:da,bufferingOverlay:ua,bufferingSpinner:ma},hn=-1e4,$n=1e4,ur=500,ha=({classes:u,delayMs:w,onDelayChange:J})=>{const[U,F]=b(null),O=U??w,r=x(J);r.current=J;const L=x(w);L.current=w;const ae=x(null);ae.current=U,S(()=>{F(null)},[w]),S(()=>()=>{const q=ae.current;q!==null&&q!==L.current&&r.current(q)},[]);const he=q=>{L.current=q,ae.current=null,r.current(q),F(null)},i=q=>{const re=ae.current??L.current,Ve=Math.max(hn,Math.min($n,re+q));he(Ve)};return t(Ae,{children:[t("div",{style:{display:"flex",gap:6,padding:"0.5rem 0.75rem 0.25rem"},children:[t("button",{type:"button",className:u.item,onClick:()=>i(-ur),"aria-label":"Show subtitles 0.5 seconds earlier",style:{flex:1,justifyContent:"center"},children:t("span",{children:"-0.5s"})}),t("button",{type:"button",className:u.item,onClick:()=>i(ur),"aria-label":"Show subtitles 0.5 seconds later",style:{flex:1,justifyContent:"center"},children:t("span",{children:"+0.5s"})}),t("button",{type:"button",className:u.item,onClick:()=>he(0),disabled:O===0,"aria-label":"Reset subtitle timing",style:{flex:1,justifyContent:"center"},children:t("span",{children:"Reset"})})]}),t(Kr,{label:"Subtitle timing",display:mr(O),min:hn,max:$n,step:100,value:O,percent:(O-hn)/($n-hn)*100,onChange:q=>{const re=Math.round(q);ae.current=re,F(re)},onCommit:()=>{const q=ae.current;q!==null&&he(q)}}),t("div",{className:u.note,children:"Positive delays subtitles (show later). Negative shows them earlier. 0.0s is default."})]})},pa=({classes:u,tracks:w,selected:J,onChange:U})=>t(pn,{classes:u,options:w.map((F,O)=>({key:String(O),label:F.label||F.language,selected:O===J})),onSelect:F=>U(Number(F))}),ga=({player:u,title:w,episodeLabel:J,audioTracks:U,selectedAudioTrack:F,onAudioTrackChange:O,subtitles:r,selectedSubtitle:L,onSubtitleChange:ae,streams:he,qualityIdx:i,onQualityChange:q,onBack:re,children:Ve,movyServers:f=[],selectedMovyServer:Se="atlanta",onMovyServerSelect:$,isMovySource:Dt=!1,videoDelayEnabled:oe=!1,onVideoDelayToggle:Fe,videoDelayMs:Ct=0,onVideoDelayChange:Tt,onCalibrateAvSync:Ot,subtitleDelayMs:Vt=0,onSubtitleDelayChange:gn,showNextEpisodeButton:Ft=!1,onNextEpisode:ie,isLoading:We=!1})=>{const{state:T,refs:rt,actions:M}=u,K=rt.videoRef,{subtitleFontSize:j,subtitlePosition:Pe,subtitleBgOpacity:st,subtitleBgColor:ke,subtitleTextColor:ze,subtitleEdge:pe,subtitleBold:He}=T,[y,Q]=b(null),Le=x(null),[Wt,at]=b(0);S(()=>{const l=K.current;if(!l)return;const c=()=>at(l.clientHeight||0);c();const te=new ResizeObserver(c);return te.observe(l),()=>te.disconnect()},[K,he]);const ge=(l,c)=>{try{localStorage.setItem(l,String(c))}catch{}},ot=(l,c)=>{switch(l){case"fontSize":typeof c=="number"&&(M.setSubtitleFontSize(c),ge("subtitleFontSize",c));break;case"position":typeof c=="number"&&(M.setSubtitlePosition(c),ge("subtitlePosition",c));break;case"bgOpacity":typeof c=="number"&&(M.setSubtitleBgOpacity(c),ge("subtitleBgOpacity",c));break;case"bgColor":typeof c=="string"&&(M.setSubtitleBgColor(c),ge("subtitleBgColor",c));break;case"textColor":typeof c=="string"&&(M.setSubtitleTextColor(c),ge("subtitleTextColor",c));break;case"edge":(c==="shadow"||c==="outline"||c==="none")&&(M.setSubtitleEdge(c),ge("subtitleEdge",c));break;case"bold":typeof c=="boolean"&&(M.setSubtitleBold(c),ge("subtitleBold",c));break}};S(()=>{const l="tv-player-subtitle-style";let c=document.getElementById(l);c||(c=document.createElement("style"),c.id=l,document.head.appendChild(c));const te={fontSize:j,position:Pe,bgOpacity:st,bgColor:ke,textColor:ze,edge:pe,bold:He},Z=K.current,Et=Dn(j,Wt||Z?.clientHeight||720);if(c.textContent=jr({...te,fontSize:Et}),Z){const Be=()=>{const E=Number(Pe);return isNaN(E)?0:Math.max(0,Math.min(100,E))},Nt=(E,I)=>{try{const ee=E;ee.snapToLines=!1,ee.line=I}catch{}},wt=()=>{const E=Et*16,I=Z.videoHeight||Z.clientHeight||720,ee=Z.videoWidth||Z.clientWidth||1280;return{step:E*1.3/I*100,chars:Math.max(20,Math.floor(ee/(E*.55)))}},Yt=E=>{const I=Math.max(0,Math.min(100,100-Be())),ee=Array.from(E.activeCues??[]);if(ee.length<=1){ee.forEach(fe=>Nt(fe,I));return}const{step:mt,chars:ht}=wt();let Jt=I;for(let fe=ee.length-1;fe>=0;fe--){const pt=String(ee[fe].text??"").replace(/<[^>]*>/g,"").split(`
|
|
2
|
-
`).reduce((Xt,gt)=>Xt+Math.max(1,Math.ceil(gt.length/ht)),0),R=Jt-pt*mt;Nt(ee[fe],Math.max(0,R)),Jt=R-mt*.4}},It=()=>{const E=Math.max(0,Math.min(100,100-Be()));Array.from(Z.textTracks).forEach(I=>{I.cues&&(Array.from(I.cues).forEach(ee=>Nt(ee,E)),I.mode==="showing"&&Yt(I))})};It();const dt=E=>{const I=E.target;I.mode==="showing"&&Yt(I)},Qt=()=>{Array.from(Z.textTracks).forEach(E=>{E.removeEventListener("cuechange",dt),E.addEventListener("cuechange",dt)}),It()};Array.from(Z.textTracks).forEach(E=>{E.addEventListener("cuechange",dt)}),Z.textTracks.addEventListener("addtrack",Qt);const Gt=Array.from(Z.querySelectorAll("track")),ut=()=>It();return Gt.forEach(E=>E.addEventListener("load",ut)),()=>{Array.from(Z.textTracks).forEach(E=>{E.removeEventListener("cuechange",dt)}),Z.textTracks.removeEventListener("addtrack",Qt),Gt.forEach(E=>E.removeEventListener("load",ut))}}},[j,Pe,st,ke,ze,pe,He,L,r,K,Wt]);const fn=l=>{const c=K.current;!c||isNaN(T.duration)||T.duration===0||(c.currentTime=l*T.duration)},kt=()=>{K.current&&(M.setIsScrubbing(!0),M.wasPlayingBeforeScrub.current=!K.current.paused,K.current.pause())},Ue=l=>{const c=K.current;c&&T.duration&&(c.currentTime=l*T.duration)},X=()=>{M.setIsScrubbing(!1),M.wasPlayingBeforeScrub.current&&K.current?.play().catch(()=>{})},zt=l=>{const c=K.current;c&&(c.volume=l,c.muted=l===0,localStorage.setItem("playerVolume",l.toString()))},xt=()=>{M.toggleMute()},A=r.length>0,W=L>=0,Ht=()=>{Q("main"),M.setShowControls(!0)},Ut=()=>{if(W){ae(-1);return}let l=null;try{l=localStorage.getItem("tvLastSubtitle")}catch{}ae(On(r,{lastKey:l,enabled:!0}))},it=()=>{Q(null)},vn=()=>t(Ae,{children:[he.length>1&&t("button",{className:a.menuItem,onClick:()=>Q("quality"),children:[t("span",{children:"Quality"}),t("span",{className:a.currentValue,children:he[i]?.quality||"Auto"})]}),Dt&&f.length>0&&t("button",{className:a.menuItem,onClick:()=>Q("server"),children:[t("span",{style:{display:"flex",alignItems:"center",gap:6},children:[t(D,{name:"server",size:12})," Movy Server"]}),t("span",{className:a.currentValue,style:{textTransform:"capitalize"},children:Se})]}),A&&t("button",{className:a.menuItem,onClick:()=>Q("subtitles"),children:[t("span",{children:"Subtitles"}),t("span",{className:a.currentValue,children:W?r[L]?.label||r[L]?.language:"Off"})]}),A&&t("button",{className:a.menuItem,onClick:()=>Q("subtitle-style"),children:[t("span",{children:"Subtitle Style"}),t("span",{className:a.currentValue,children:[j.toFixed(1),"x · ",Pe]})]}),A&&t("button",{className:a.menuItem,onClick:()=>Q("subtitle-timing"),children:[t("span",{children:"Subtitle Timing"}),t("span",{className:a.currentValue,children:mr(Vt)})]}),U.length>0&&t("button",{className:a.menuItem,onClick:()=>Q("audio"),children:[t("span",{children:"Audio Track"}),t("span",{className:a.currentValue,children:U[F]?.label||U[F]?.language})]}),t("button",{className:a.menuItem,onClick:()=>Q("av-sync"),children:[t("span",{children:"A/V Sync"}),t("span",{className:a.currentValue,children:oe?`${Ct}ms`:"Off"})]})]}),_=()=>t(pn,{classes:{item:a.menuItem,active:a.active},options:he.map((l,c)=>({key:String(c),label:l.quality,selected:c===i})),onSelect:l=>q(Number(l))}),d=()=>t(pn,{classes:{item:a.menuItem,active:a.active},options:[{key:"off",label:"Off",selected:!W},...r.map((l,c)=>({key:String(c),label:l.label||l.language,selected:c===L}))],onSelect:l=>ae(l==="off"?-1:Number(l))}),le=()=>t(gs,{classes:{item:a.menuItem,active:a.active},values:{fontSize:j,position:Pe,bgOpacity:st,bgColor:ke,textColor:ze,edge:pe,bold:He},onChange:ot}),ce=()=>t(ha,{classes:{item:a.menuItem,active:a.active,note:a.menuNote},delayMs:Vt,onDelayChange:l=>gn?.(l)}),qt=()=>t(pa,{classes:{item:a.menuItem,active:a.active},tracks:U,selected:F,onChange:O}),Kt=()=>t(pn,{classes:{item:a.menuItem,active:a.active},options:f.map(l=>({key:l,label:t("span",{style:{textTransform:"capitalize"},children:l}),selected:Se===l})),onSelect:l=>$?.(l)}),qe=()=>t(fs,{classes:{item:a.menuItem,active:a.active,note:a.menuNote},enabled:oe,delayMs:Ct,onToggle:l=>Fe?.(l),onDelayChange:l=>Tt?.(l),onCalibrate:()=>{Q(null),Ot?.()}}),jt=T.isMuted?t(D,{name:"volume-mute"}):T.volume<.5?t(D,{name:"volume-down"}):t(D,{name:"volume-up"}),Ke=t("div",{className:`${a.controlsOverlay} ${!T.showControls&&!y?a.hidden:""}`,"data-speed-boost-ignore":"true",style:{pointerEvents:"none",background:"none"},children:t("div",{className:a.topControls,onClick:l=>l.stopPropagation(),children:[t("button",{className:a.backBtn,onClick:re,title:"Back","aria-label":"Back",children:t(D,{name:"chevron-left"})}),t("div",{className:a.videoTitleInfo,children:[t("span",{className:a.animeTitle,children:w}),J&&t("span",{className:a.episodeLabel,children:J})]})]})}),lt=!We&&!T.isBuffering&&T.duration>0?t(Yr,{isPlaying:T.isPlaying,onTogglePlay:M.togglePlay,onSkipBack:()=>M.seek(-10),onSkipForward:()=>M.seek(10)}):null,bn=t("div",{className:`${a.controlsOverlay} ${!T.showControls&&!y?a.hidden:""}`,"data-speed-boost-ignore":"true",style:{pointerEvents:"none",background:"none",justifyContent:"flex-end"},children:t("div",{className:a.bottomControls,onClick:l=>l.stopPropagation(),children:[t(Qr,{classes:{container:a.progressBarContainer,scrubbing:a.scrubbing,timeBubble:a.timeBubble,bar:a.progressBar,buffered:a.bufferedBar,watched:a.watchedBar,thumb:a.thumb},videoRef:K,duration:T.duration,formatTime:Pn,isScrubbing:T.isScrubbing,buffered:"full",onSeek:fn,onScrubStart:kt,onScrubMove:Ue,onScrubEnd:X,timeLabelRef:Le}),t("div",{className:a.bottomControlsRow,children:[t("div",{className:a.leftControls,children:[t("button",{className:a.controlBtn,onClick:M.togglePlay,"aria-label":T.isPlaying?"Pause":"Play",children:T.isPlaying?t(D,{name:"pause"}):t(D,{name:"play"})}),t(Gr,{muted:T.isMuted,volume:T.volume,volumeIcon:jt,buttonClassName:a.controlBtn,onToggleMute:xt,onVolumeChange:zt,onExpandedChange:l=>M.setShowVolumeSlider(l)}),t("span",{className:a.timeDisplay,ref:Le,children:[Pn(0)," / ",Pn(T.duration)]})]}),t("div",{className:a.rightControls,children:[Ft&&t("button",{className:a.nextEpisodeBtn,onClick:ie,title:"Play next episode",children:"Next EP"}),A&&t("button",{className:`${a.controlBtn} ${W?a.active:""}`,onClick:Ut,"aria-label":W?"Turn subtitles off":"Turn subtitles on",children:t(D,{name:"closed-captioning"})}),t("button",{className:`${a.controlBtn} ${y?a.active:""}`,onClick:()=>y?it():Ht(),"aria-label":"Settings",children:t(D,{name:"cog"})}),t("button",{className:a.controlBtn,onClick:M.toggleFullscreen,"aria-label":T.isFullscreen?"Exit Fullscreen":"Fullscreen",children:T.isFullscreen?t(D,{name:"compress"}):t(D,{name:"expand"})})]})]})]})}),ct=y?t("div",{"data-speed-boost-ignore":"true",onClick:l=>l.stopPropagation(),children:t(ps,{classes:{panel:a.settingsPanel,header:a.settingsHeader,backBtn:a.settingsBackBtn,title:a.settingsTitle,content:a.settingsContent},title:y==="main"?"Settings":y==="subtitle-style"?"Subtitle Style":y==="subtitle-timing"?"Subtitle Timing":y==="audio"?"Audio Track":y==="server"?"Movy Server":y==="av-sync"?"A/V Sync":y.charAt(0).toUpperCase()+y.slice(1),onBack:()=>y==="main"?it():Q("main"),children:[y==="main"&&vn(),y==="quality"&&_(),y==="subtitles"&&d(),y==="subtitle-style"&&le(),y==="subtitle-timing"&&ce(),y==="audio"&&qt(),y==="server"&&Kt(),y==="av-sync"&&qe()]})}):null,_e=t(Ae,{children:[We&&t("div",{className:a.loadingOverlay,"aria-hidden":"true",children:t("div",{className:a.loadingDots,children:[t("div",{className:a.dot}),t("div",{className:a.dot}),t("div",{className:a.dot})]})}),T.isBuffering&&!We&&t("div",{className:a.bufferingOverlay,"aria-hidden":"true",children:t("div",{className:a.bufferingSpinner})}),T.isSpeedBoostActive&&t("div",{className:a.speedBoostBadge,"aria-hidden":"true",children:[t("span",{children:"2x"}),t(D,{name:"forward",size:12})]})]});return t(Jr,{player:u,topBar:Ke,centerControls:lt,bottomBar:!We&&!T.isBuffering&&T.duration>0?bn:null,settingsPanel:ct,overlays:_e,isInteracting:!!y,className:T.isFullscreen?a.fullscreenFlat:"",children:Ve})};function fa(u,w,J){const U=()=>{const O=Array.isArray(u.audioTracks)?u.audioTracks.length:0,r=J.getWant(),L=O>0?Math.min(Math.max(0,r),O-1):r;u.audioTrack=L,L!==r&&J.onResolve(L)},F=(O,r)=>{const L=J.getWant(),ae=Array.isArray(u.audioTracks)?u.audioTracks.length:0;if(r.id!==L&&L>=0&&L<ae){u.audioTrack!==L&&(u.audioTrack=L);return}J.onResolve(r.id)};return u.on(w.MANIFEST_PARSED,U),u.on(w.AUDIO_TRACK_SWITCHED,F),()=>{u.off(w.MANIFEST_PARSED,U),u.off(w.AUDIO_TRACK_SWITCHED,F)}}const va="_page_263ma_1",ba="_header_263ma_7",ya="_pageTitle_263ma_11",Sa="_searchForm_263ma_21",_a="_searchInput_263ma_27",Ca="_searchBtn_263ma_42",Ta="_suggestions_263ma_58",ka="_suggestionPill_263ma_65",xa="_statusMsg_263ma_81",Ea="_error_263ma_87",Na="_textOnly_263ma_91",wa="_spinner_263ma_96",Ia="_spin_263ma_96",Ba="_grid_263ma_110",Ma="_skeletonCard_263ma_116",Aa="_skeletonThumb_263ma_121",Pa="_skeletonLine_263ma_127",La="_shimmer_263ma_134",Ra="_backBtn_263ma_154",$a="_meta_263ma_172",Da="_headerActions_263ma_180",Oa="_watchlistBtn_263ma_187",Va="_active_263ma_205",Fa="_year_263ma_215",Wa="_rating_263ma_220",za="_typeBadge_263ma_229",Ha="_tv_263ma_237",Ua="_movie_263ma_242",qa="_tvSeries_263ma_247",Ka="_tvMiniSeries_263ma_252",ja="_overview_263ma_257",Ya="_controls_263ma_264",Qa="_controlLabel_263ma_272",Ga="_select_263ma_282",Ja="_playerSection_263ma_293",Xa="_video_263ma_297",Za="_videoHidden_263ma_319",eo="_delayCanvas_263ma_324",to="_delayCanvasActive_263ma_337",no="_subtitleOverlay_263ma_341",ro="_videoIframe_263ma_360",so="_retryButton_263ma_368",ao="_sidebarSeason_263ma_383",oo="_mobileSeasonRow_263ma_399",io="_sidebarPosterCard_263ma_413",lo="_sidebarPosterMeta_263ma_428",co="_providerSelectWrap_263ma_445",uo="_genreRow_263ma_457",mo="_genreChip_263ma_464",ho="_metaRow_263ma_474",po="_detailGrid_263ma_483",go="_detailItem_263ma_490",fo="_imdbLink_263ma_512",p={page:va,header:ba,pageTitle:ya,searchForm:Sa,searchInput:_a,searchBtn:Ca,suggestions:Ta,suggestionPill:ka,statusMsg:xa,error:Ea,textOnly:Na,spinner:wa,spin:Ia,grid:Ba,skeletonCard:Ma,skeletonThumb:Aa,skeletonLine:Pa,shimmer:La,backBtn:Ra,meta:$a,headerActions:Da,watchlistBtn:Oa,active:Va,year:Fa,rating:Wa,typeBadge:za,tv:Ha,movie:Ua,tvSeries:qa,tvMiniSeries:Ka,overview:ja,controls:Ya,controlLabel:Qa,select:Ga,playerSection:Ja,video:Xa,videoHidden:Za,delayCanvas:eo,delayCanvasActive:to,subtitleOverlay:no,videoIframe:ro,retryButton:so,sidebarSeason:ao,mobileSeasonRow:oo,sidebarPosterCard:io,sidebarPosterMeta:lo,providerSelectWrap:co,genreRow:uo,genreChip:mo,metaRow:ho,detailGrid:po,detailItem:go,imdbLink:fo},vo=[],Mo=()=>{const{id:u}=Wr(),[w]=zr(),J=x(w);J.current=w;const U=Hr(),F=Ur(),O=w.get("type"),[r,L]=b(null),[ae,he]=b(!1),[i,q]=b(()=>parseInt(w.get("s")||"1",10)||1),[re,Ve]=b([]),[f,Se]=b(()=>parseInt(w.get("e")||"1",10)||1),[$,Dt]=b(()=>{try{return localStorage.getItem("tvProvider")||""}catch{return""}}),[oe,Fe]=b([]),[Ct,Tt]=b(""),{options:Ot,isFallback:Vt,isLoading:gn}=bs(),Ft=Ce(()=>Ot.filter(e=>(e.kind??"tv")==="tv").map(e=>({id:e.value,label:e.label,tier:e.tier==="embed"?"embed":"direct",servers:e.servers})),[Ot]),ie=Vt||Ft.length===0?vo:Ft,We=ie.filter(e=>e.tier==="direct"),T=ie.filter(e=>e.tier==="embed"),[rt,M]=b(!1),[K,j]=b(""),[Pe,st]=b([]),[ke,ze]=b(0),[pe,He]=b([]),[y,Q]=b(-1),[Le,Wt]=b("all"),[at,ge]=b(0),[ot,fn]=b(""),[kt,Ue]=b(""),[X,zt]=b(()=>{try{return localStorage.getItem("movyServer")||""}catch{return""}}),xt=Ce(()=>ie.find(e=>e.id===$),[ie,$]),A=xt?.tier==="embed",W=Ce(()=>xt?.servers??[],[xt]),Ht=x([]);S(()=>{Ht.current=oe},[oe]);const Ut=x(ke);S(()=>{Ut.current=ke},[ke]);const it=x(y);S(()=>{it.current=y},[y]);const vn=Ce(()=>[],[]),_=Xr({skipIntervals:vn}),d=_.refs.videoRef,le=x(null),ce=x([]),qt=x(null),Kt=x(null),[qe,jt]=b(()=>{try{const e=Number(localStorage.getItem("playerVideoDelayMs"));if(Number.isFinite(e)&&e>=0&&e<=500)return Math.round(e)}catch{}return 180}),[Ke,lt]=b(()=>{try{return localStorage.getItem("playerVideoDelayEnabled")==="true"}catch{return!1}}),[bn,ct]=b(!1),[_e,l]=b(!1),c=x(null),te=x(null),Z=(e,n)=>{try{localStorage.setItem("playerVideoDelayMs",String(e)),localStorage.setItem("playerVideoDelayEnabled",String(n))}catch{}},Et=e=>{const n=Math.max(0,Math.min(500,Math.round(e)));jt(n);try{localStorage.setItem("playerVideoDelayMs",String(n))}catch{}},[Be,Nt]=b(()=>{try{const e=Number(localStorage.getItem("tvSubtitleDelayMs"));if(Number.isFinite(e)&&e>=-1e4&&e<=1e4)return Math.round(e)}catch{}return 0}),wt=x(Be);wt.current=Be;const Yt=C(e=>{const n=Math.max(-1e4,Math.min(1e4,Math.round(e)));if(wt.current!==n){wt.current=n,Nt(n);try{localStorage.setItem("tvSubtitleDelayMs",String(n))}catch{}}},[]),It=()=>{c.current={enabled:Ke,ms:qe},lt(!0);try{localStorage.setItem("playerVideoDelayEnabled","true")}catch{}ct(!0)},dt=()=>{const e=c.current;c.current=null,e&&(jt(e.ms),lt(e.enabled),Z(e.ms,e.enabled)),l(!1),ct(!1)},Qt=()=>{c.current=null,lt(!0),Z(qe,!0),l(!1),ct(!1)},Gt=()=>{if(_e){l(!1);return}const e=d.current;e&&!isNaN(e.currentTime)&&(te.current=e.currentTime),l(!0)},ut=Ke?qe:0;Zr({videoRef:d,canvasRef:qt,delayMs:ut,enabled:Ke});const E=Ke,I=E||Be!==0,ee=x(I);ee.current=I;const mt=C(()=>{if(!ee.current)return;const e=d.current;e&&Array.from(e.textTracks).forEach(n=>{n.mode!=="hidden"&&(n.mode="hidden")})},[d]),{hasConsent:ht,grant:Jt}=vs(),fe=x("");fe.current||(fe.current=`tv-${Date.now()}-${Math.random().toString(36).slice(2)}`);const h=O==="movie",pt=u?ys(O||"tv",u):"",R=pt,Xt=Ss(),gt=_s(),{toggle:Vn,bookmarkedIds:hr,pending:pr}=Cs(),{data:Fn}=Ts(r?pt:void 0),Zt=Fn?!!Fn.inLibrary:pt?hr.has(pt):!1,gr=C(()=>{!r||!u||Vn({tmdbId:Number(u),mediaType:O||"tv",title:r.title,poster:r.poster,year:r.year,adult:r.adult})},[r,u,O,Vn]),{data:je,isFetched:Wn,isPending:zn}=ks(R||void 0,i,f),en=Ce(()=>re.map(e=>e.episode_number).sort((e,n)=>e-n),[re]),Ye=en.indexOf(f),yn=Ye>0?en[Ye-1]:null,N=Ye>=0&&Ye<en.length-1?en[Ye+1]:null,tn=Ce(()=>(r?.seasons??[]).map(e=>e.season_number).filter(e=>Number.isFinite(e)).sort((e,n)=>e-n),[r]),ve=Ce(()=>{if(h||N!=null)return null;const e=tn.indexOf(i);return e>=0&&e<tn.length-1?tn[e+1]:(r?.number_of_seasons??0)>i?i+1:null},[h,N,tn,i,r?.number_of_seasons]),Hn=je?.currentTime??0,Un=je?.duration??0,Sn=je?.completed===!0||je?.completed===1||Ln(Hn,Un),[xe,Me]=b(!1),Ee=x(!1),_n=x(null),Bt=x(null);S(()=>{Ee.current=!1,Bt.current=null,Me(!1)},[R,i,f]);const[Ne,nn]=b(!1),[ft,qn]=b(0),[Qe,Kn]=b(!1),[Re,Ge]=b(!1),[fr,Cn]=b(!1),[vr,jn]=b(""),[rn,br]=b(!1),[yr,Tn]=b(!1);es(_,(oe.length>0||kt!=="")&&!Ne&&!xe&&!Re);const Sr=ws(),[vt,_r]=b(ts),Cr=C(e=>{_r(e),ns(e)},[]),de=x(!1),Je=x(null),kn=x(0),Yn=x(!1),Qn=x(0),ne=x(null),Mt=x(""),Tr=dr(Hn,Un),At=!de.current&&!Ee.current&&(Ne||xe||Re||Sn||Tr),bt=x(At);bt.current=At;const yt=x(!1);S(()=>{yt.current=Qe},[Qe]);const kr=e=>{const n=Math.floor(e/3600),s=Math.floor(e%3600/60),o=Math.floor(e%60);return n>0?`${n}:${String(s).padStart(2,"0")}:${String(o).padStart(2,"0")}`:`${s}:${String(o).padStart(2,"0")}`},$e=C((e,n)=>{if(!R||!n||n<30)return;const s=Ln(e,n),o=s?n:e;Math.abs(o-kn.current)<10&&!s||(kn.current=o,Xt.mutate({mediaId:R,season:i,episode:f,currentTime:Math.floor(o),duration:Math.floor(n),completed:s,title:r?.title??null,poster:r?.poster??null,backdrop:r?.backdrop??null,year:r?.year??null,overview:r?.overview??null,tmdbId:r?.id??null,mediaType:O||"tv",adult:r?.adult?1:0}))},[R,i,f,Xt,r,O]),we=C((e,n)=>{l(!1),ct(!1);const s=new URLSearchParams(w);s.set("type",w.get("type")||"tv"),s.set("s",String(e)),s.set("e",String(n)),U(`${window.location.pathname}?${s.toString()}`)},[w,U]),Pt=C(()=>{const e=d.current;if(!e||h||N==null){Cn(!1);return}const n=e.duration||0,s=e.currentTime||0;Cn(n>0&&s/n>=.8)},[h,N,d]),sn=C((e,n)=>["tv-sources",$,h?"movie":"tv",u,e,n,X],[$,h,u,X]),an=C(async(e,n)=>{if(!r||!u||!$)return{valid:!1,sources:[]};const s=h?"movie":"tv",o=await tt.tv.sources.query({provider:$,type:s,tmdbId:String(u),season:e,episode:n,title:r.title||"",year:r.year||"",totalSeasons:String(r.number_of_seasons||1),imdbId:r.imdb_id||"",...W.length>0&&X?{server:X}:{}});return{valid:"valid"in o?o.valid:!1,error:"error"in o?o.error:void 0,sources:o.sources,referer:"referer"in o?o.referer:void 0,audioTracks:o.audioTracks,subtitles:"subtitles"in o?o.subtitles:void 0}},[r,u,$,h,W,X]),Gn=C(()=>{if(h||!r||!u||!$||A||N==null)return;const e=sn(i,N);F.getQueryState(e)?.status!=="success"&&F.prefetchQuery({queryKey:e,queryFn:()=>an(i,N),staleTime:300*1e3,gcTime:1800*1e3})},[h,r,u,$,A,N,i,F,sn,an]),xr=C(()=>{if(_e)return;Pt();const e=d.current;!e||e.paused||e.ended||(e.duration>0&&e.duration-e.currentTime<=60&&Gn(),Je.current&&clearTimeout(Je.current),Je.current=setTimeout(()=>{$e(e.currentTime,e.duration||0)},5e3))},[$e,d,_e,Pt,Gn]),Er=C(()=>{const e=d.current;if(!e||!r)return;Je.current&&clearTimeout(Je.current),$e(e.currentTime,e.duration||0),Yn.current=!0;const n=rs({seekInduced:Date.now()-Qn.current<ss,autoplayEnabled:vt,hasNext:!h&&N!=null,isFinal:h||N==null});n==="advance"&&N!=null?(Se(N),we(i,N)):n==="prompt-next"?(Ee.current=!1,de.current=!0,Me(!0)):n==="prompt-complete"&&(jn(h?r.title:`${r.title} — Season ${i}`),Ge(!0),Ee.current=!0,de.current=!0)},[h,r,i,N,vt,$e,we,d]),Nr=C(()=>{Yn.current=!1,_.actions.onPlay()},[_.actions]),wr=C(()=>{_.actions.onPause();const e=d.current;e&&!e.ended&&$e(e.currentTime,e.duration||0)},[_.actions,$e,d]),Ir=C(()=>{_.actions.onLoadedMetadata();const e=d.current;if(e){try{const n=parseFloat(localStorage.getItem("playerVolume")||"");isNaN(n)||(e.volume=Math.max(0,Math.min(1,n))),e.muted=localStorage.getItem("playerMuted")==="true"}catch{}if(ne.current!=null&&ne.current>0){try{e.currentTime=ne.current}catch{}ne.current=null}Pt()}},[_.actions,d,Pt]),St=C(()=>{const e=d.current;if(e&&ne.current!=null&&ne.current>0){try{e.currentTime=ne.current}catch{}ne.current=null}},[d]),Br=C(()=>{ft>0&&(ne.current=ft);const e=d.current;if(e&&ft>0){try{e.currentTime=ft,ne.current=null}catch{}e.play().catch(()=>{})}nn(!1),de.current=!0},[ft,d]),Jn=C(()=>{ne.current=null;const e=d.current;e&&(e.currentTime=0,e.play().catch(()=>{})),nn(!1),de.current=!0},[d]),Mr=C(()=>{Ee.current=!0,Me(!1),de.current=!0},[]),Ar=C(()=>{Ee.current=!0,Me(!1),de.current=!0,ne.current=null;const e=d.current;if(e){try{e.currentTime=0}catch{}e.play().catch(()=>{})}},[d]),Xn=C(()=>{N!=null&&(Ee.current=!0,Me(!1),de.current=!0,Se(N),we(i,N))},[N,i,we]),Zn=C(()=>{ve!=null&&(Ee.current=!0,Me(!1),Ge(!1),de.current=!0,q(ve),Se(1),we(ve,1))},[ve,we]),Pr=C(async()=>{if(R)try{await gt.mutateAsync({id:R,status:"Completed"}),Ge(!1),Me(!1),U("/")}catch{}},[R,gt,U]);S(()=>{de.current=!1,_n.current=null,nn(!1),Cn(!1),qn(0),Kn(!1),yt.current=!1,ne.current=null,Mt.current=`${R}:${i}:${f}`,kn.current=0},[R,i,f]),S(()=>{Wn&&(Kn(!0),yt.current=!0)},[Wn,R,i,f]),S(()=>{if(!je||de.current)return;const e=`${R}:${i}:${f}`;if(_n.current===e)return;_n.current=e;const n=je,s=n.currentTime??0,o=n.duration??0;dr(s,o)&&(qn(s),nn(!0))},[je,R,i,f]),S(()=>{if(!Qe||de.current||Ee.current||Ne||Re||xe)return;const e=`${R}:${i}:${f}`;if(Bt.current!==e){if(!Sn){zn||(Bt.current=e);return}if(h){Bt.current=e,Me(!0);return}if(!(!r||Ye<0||re.length===0)){if(Bt.current=e,N==null&&ve==null){r&&re.length>0&&(jn(`${r.title} — Season ${i}`),Ge(!0),Ee.current=!0,de.current=!0);return}Me(!0)}}},[Qe,Sn,zn,Ne,Re,xe,h,N,ve,r,Ye,re.length,R,i,f]),S(()=>{(Ne||xe)&&d.current&&d.current.pause()},[Ne,xe,d]),S(()=>{const e=d.current;return()=>{Je.current&&clearTimeout(Je.current),e&&!e.ended&&$e(e.currentTime,e.duration||0)}},[$e,d]);const xn=C(e=>{let n=null,s=!0;try{n=localStorage.getItem("tvLastSubtitle"),s=localStorage.getItem("tvSubtitlesEnabled")!=="false"}catch{}return On(e,{lastKey:n,enabled:s})},[]),En=C(e=>{if(!(e<0))try{localStorage.setItem("tvSubtitlesEnabled","true"),localStorage.setItem("tvSelectedSubtitle",String(e))}catch{}},[]),er=C(e=>{if(e.length===0)return 0;let n=null;try{n=localStorage.getItem("tvLastAudio")}catch{}if(n){const s=e.findIndex(g=>Rn(g)===n);if(s>=0)return s;const o=n.indexOf("|||"),m=o>=0?n.slice(0,o):n,P=o>=0?n.slice(o+3):n,v=e.findIndex(g=>g.language===m||g.label===P);if(v>=0)return v}return On(e,{lastKey:null,enabled:!0})},[]),{data:tr}=xs(R||void 0),nr=Ce(()=>(tr?.progress??[]).filter(n=>n.season===i&&(n.completed===!0||n.completed===1||Ln(n.currentTime,n.duration))).map(n=>String(n.episode)),[tr,i]),rr=Ce(()=>re.map(e=>({id:String(e.episode_number),label:`Episode ${e.episode_number}`,sublabel:e.name||void 0,thumbnail:e.still_path?`https://image.tmdb.org/t/p/w185${e.still_path}`:void 0})),[re]),sr=Ce(()=>(r?.genres??[]).map(e=>e.name).slice(0,5),[r]),Nn=Ce(()=>[r?.year,r?.status,r?.number_of_seasons?`${r.number_of_seasons} Season${r.number_of_seasons>1?"s":""}`:null,r?.number_of_episodes?`${r.number_of_episodes} Episodes`:null].filter(Boolean),[r]);S(()=>{if(ie.length!==0&&!ie.some(e=>e.id===$)){const e=ie.find(n=>n.tier==="direct")?.id??ie[0].id;Dt(e);try{localStorage.setItem("tvProvider",e)}catch{}}},[ie,$]),S(()=>{if(W.length!==0&&!W.includes(X)){zt(W[0]);try{localStorage.setItem("movyServer",W[0])}catch{}}},[W,X]),S(()=>{if(!u){L(null),Fe([]),Tt(""),j(""),Ue("");return}const e=Number(u),n=O||"tv";he(!0),L(null),Fe([]),Tt(""),j(""),Ue("");const s=parseInt(J.current.get("s")||"",10),o=parseInt(J.current.get("e")||"",10);q(isNaN(s)?1:s),Se(isNaN(o)?1:o),ge(0),tt.tv.details.query({type:n,id:String(e)}).then(m=>{const P={id:m.id,title:m.title||"",overview:m.overview||"",vote_average:m.vote_average,year:m.year,poster:m.poster,backdrop:m.backdrop,imdb_id:m.imdb_id||void 0,adult:m.adult,seasons:m.seasons,number_of_seasons:m.number_of_seasons};L(P),he(!1),P.seasons&&P.seasons.length>0&&isNaN(s)&&q(P.seasons[0].season_number)}).catch(()=>{he(!1)})},[u,O]),S(()=>{if(!r||!u)return;if(!(r.seasons!==void 0||r.number_of_seasons!==void 0)){Ve([]);return}const n=parseInt(w.get("e")||"",10);tt.tv.episodes.query({id:String(u),season:String(i)}).then(s=>{const o=(s.episodes||[]).map(m=>({episode_number:m.episode_number,name:m.name||"",vote_average:m.vote_average,overview:m.overview||"",still_path:m.still_path||""}));if(Ve(o),o.length>0){const m=!isNaN(n)&&o.find(P=>P.episode_number===n)?n:o[0].episode_number;Se(m)}}).catch(()=>{})},[r,u,i,w]),S(()=>{!r||!u||h||tt.tv.episodes.query({id:String(u),season:String(i)}).then(e=>{const n=(e.episodes||[]).map(s=>({episode_number:s.episode_number,name:s.name||"",vote_average:s.vote_average,overview:s.overview||"",still_path:s.still_path||""}));Ve(n),n.length>0&&!n.find(s=>s.episode_number===f)&&Se(n[0].episode_number)}).catch(()=>{})},[i,r,u,h,f]),S(()=>{if(!A||!r||!u)return;fetch(`/api/tv/embed/${$}/${h?"movie":"tv"}/${u}?season=${i}&episode=${f}`).then(n=>n.json()).then(n=>{if(n.url)return Ue(n.url),fetch(`/api/resolve?url=${encodeURIComponent(n.url)}`).then(s=>s.json()).then(s=>{s.finalUrl&&Ue(s.finalUrl)})}).catch(()=>{})},[$,r,u,i,f,h,A]);const on=C(async()=>{if(!r||!u||!$||A||r.adult&&!ht)return;const e=`${R}:${i}:${f}`;Ht.current.length>0?j(""):(M(!0),j(""),Fe([]),ge(0),st([]),He([]));try{const s=await F.fetchQuery({queryKey:sn(i,f),queryFn:()=>an(i,f),staleTime:3e5,gcTime:18e5});if(Mt.current!==e)return;if(M(!1),!s.valid||!s.sources?.length){j(s.error?`${s.error}`:W.length>0?`No streams from ${X}. Try another server.`:"No streams available.");return}Fe(s.sources),Tt(e),Wt("all"),ge(0),s.referer&&fn(s.referer);const o=s.audioTracks||[];st(o),ze(o.length>0?er(o):0);const m=s.subtitles||[];if(He(m),m.length>0){const g=xn(m);Q(g),En(g)}else Q(-1);const P=h?"movie":"tv",v=u;tt.tv.subtitles.query({type:P,tmdbId:String(v),season:String(i),episode:String(f)}).then(g=>{if(Mt.current!==e)return;const se=Array.isArray(g.subtitles)?g.subtitles:[];se.length!==0&&He(be=>{const V=[...be,...se.filter(B=>!be.some(k=>k.url===B.url))];if(be.length===0){const B=xn(V);Q(B),En(B)}return V})}).catch(()=>{}),j("")}catch{if(Mt.current!==e)return;M(!1),j("Failed to load streams.")}},[r,u,$,i,f,h,A,ht,W,X,xn,En,er,R,F,sn,an]),wn=C(e=>{const n=e.toLowerCase();zt(n);try{localStorage.setItem("movyServer",n)}catch{}j("")},[]),Lr=C(e=>{Dt(e);try{localStorage.setItem("tvProvider",e)}catch{}},[]);S(()=>{$&&r&&!A&&on()},[$,r,on,A]),S(()=>{if(!d.current||(le.current&&(le.current.destroy(),le.current=null),A))return;let e=!1;if(_e){const v=d.current;return v&&(v.pause(),v.removeAttribute("src"),v.load(),v.src="/av-sync-test.mp4",bt.current||v.play().catch(()=>{})),()=>{e=!0}}const n=Le==="all"?oe:oe.filter(v=>v.type===Le),s=Ct===`${R}:${i}:${f}`&&n[at]?.url||"";if(!s){try{d.current?.pause()}catch{}return}const o=d.current;if(Mt.current===`${R}:${i}:${f}`&&ne.current==null&&!bt.current)try{!o.ended&&o.currentTime>1&&(ne.current=o.currentTime)}catch{}o.pause(),o.removeAttribute("src"),o.load(),_.actions.resetMediaState();const m=`/api/tv/stream-proxy?url=${encodeURIComponent(s)}&referer=${encodeURIComponent(ot)}`;n[at]?.type==="hls"?(async()=>{const v=await Es();if(!e)if(v&&v.isSupported()){const g=new v({enableWorker:!0});le.current=g,g.on(v.Events.ERROR,(V,B)=>{B.fatal&&(j(`Stream failed (${B.details}). Try another source or reload.`),M(!1),g.destroy(),le.current=null)}),g.loadSource(m),g.attachMedia(o);const se=()=>{let V=!1,B=0;try{V=localStorage.getItem("tvSubtitlesEnabled")==="true";const k=parseInt(localStorage.getItem("tvSelectedSubtitle")||"0",10);!isNaN(k)&&k>=0&&(B=k)}catch{}return{enabled:V,index:B}},be=()=>{if(typeof g.subtitleTrack!="number")return;if(ce.current.length>0){g.subtitleTrack=-1;return}const V=Array.isArray(g.subtitleTracks)?g.subtitleTracks:[];if(V.length===0){g.subtitleTrack=-1;return}const B=se();if(B.enabled){const k=B.index<V.length?B.index:0;g.subtitleTrack=k,Q(k),mt()}else g.subtitleTrack=-1};fa(g,v.Events,{getWant:()=>Ut.current,onResolve:V=>ze(V)}),g.on(v.Events.MANIFEST_PARSED,()=>{be(),te.current!=null&&(o.currentTime=te.current,te.current=null),St(),!bt.current&&yt.current&&o.play().catch(()=>{})}),g.on(v.Events.SUBTITLE_TRACKS_UPDATED,()=>{be()}),g.on(v.Events.SUBTITLE_TRACK_SWITCH,(V,B)=>{if(ce.current.length>0){if(B.id!==-1)try{g.subtitleTrack=-1}catch{}return}const k=Array.isArray(g.subtitleTracks)?g.subtitleTracks:[];if(k.length!==0){if(B.id===-1){const Y=se();if(Y.enabled){const G=Y.index<k.length?Y.index:0;g.subtitleTrack=G;return}}Q(B.id),mt()}})}else Ns(o)&&(o.src=m,te.current!=null&&(o.currentTime=te.current,te.current=null),St(),!bt.current&&yt.current&&o.play().catch(()=>{j("Failed to play stream. Try another source.")}))})():(o.src=m,te.current!=null&&(o.currentTime=te.current,te.current=null),St(),!bt.current&&yt.current&&o.play().catch(()=>{j("Failed to play stream. Try another source.")}));const P=()=>{const se=o.error?.code===4?"Video source not supported or not found":"Failed to load video stream";j(`${se}. The source may be invalid or expired. Try switching source or reloading.`),M(!1)};return o.addEventListener("error",P),()=>{e=!0,o.removeEventListener("error",P)}},[oe,Ct,at,Le,$,ot,A,d,_e,R,i,f,St,mt,_.actions]),S(()=>{if(!Qe||Ne||xe||Re||At||A||_e)return;const e=d.current;!e||!e.paused||e.ended||e.readyState<1||(St(),e.play().catch(()=>{}))},[Qe,Ne,xe,Re,At,A,_e,St,d]),S(()=>{const e=le.current;!e||typeof e.audioTrack!="number"||(e.audioTrack=ke)},[ke]),S(()=>{const e=le.current;!e||typeof e.subtitleTrack!="number"||!Array.isArray(e.subtitleTracks)||e.subtitleTracks.length===0||ce.current.length>0||(y>=0?e.subtitleTrack=y:e.subtitleTrack=-1)},[y]),S(()=>{const e=d.current;if(!(!e||A)&&(e.querySelectorAll("track").forEach(n=>n.remove()),ce.current=[],pe.length!==0&&(pe.forEach(n=>{const s=document.createElement("track");s.kind="subtitles",s.label=n.label||n.language||"Unknown",s.srclang=n.language||n.label||"en";const o=`/api/subtitle-proxy?url=${encodeURIComponent(n.url)}&referer=${encodeURIComponent(ot)}`;s.src=o,s.addEventListener("load",()=>{const m=ce.current.indexOf(s),P=s.track;if(P&&m>=0){const v=m===it.current;P.mode=v&&!ee.current?"showing":"hidden"}}),e.appendChild(s),ce.current.push(s)}),pe.length>0)))try{const n=le.current;n&&typeof n.subtitleTrack=="number"&&n.subtitleTrack!==-1&&(n.subtitleTrack=-1)}catch{}},[pe,ot,A,$,d]),S(()=>{const e=d.current;if(!e||A)return;const n=le.current;ce.current.length>0&&n&&typeof n.subtitleTrack=="number"&&Array.isArray(n.subtitleTracks)&&n.subtitleTracks.length>0&&(n.subtitleTrack=-1);const s=()=>{const P=Dn(_.state.subtitleFontSize,e.clientHeight||720),v=Math.max(0,Math.min(100,100-_.state.subtitlePosition)),g=()=>{const k=P*16,Y=e.videoHeight||e.clientHeight||720,G=e.videoWidth||e.clientWidth||1280;return{step:k*1.3/Y*100,chars:Math.max(20,Math.floor(G/(k*.55)))}},se=(k,Y)=>{const G=k;G.snapToLines=!1,G.line=Y},be=k=>{if(!k.cues)return;Array.from(k.cues).forEach(ue=>se(ue,v));const Y=Array.from(k.activeCues??[]);if(Y.length<=1){Y.forEach(ue=>se(ue,v));return}const{step:G,chars:z}=g();let Xe=v;for(let ue=Y.length-1;ue>=0;ue--){const De=String(Y[ue].text??"").replace(/<[^>]*>/g,"").split(`
|
|
3
|
-
`).reduce((dn,Rt)=>dn+Math.max(1,Math.ceil(Rt.length/z)),0);Xe=Math.max(0,Xe-De*G),se(Y[ue],Xe),Xe-=G*.4}},V=ce.current;if(V.length>0){V.forEach((k,Y)=>{const G=k.track;if(!G)return;const z=Y===y;G.mode=z&&!I?"showing":"hidden",z&&!I&&be(G)});return}const B=Array.from(e.textTracks);B.length!==0&&B.forEach((k,Y)=>{const G=Y===y;k.mode=G&&!I?"showing":"hidden",G&&!I&&be(k)})};s();const o=()=>s();e.textTracks.addEventListener("addtrack",o),e.addEventListener("loadedmetadata",s,{once:!0});const m=window.setTimeout(s,600);return()=>{e.textTracks.removeEventListener("addtrack",o),e.removeEventListener("loadedmetadata",s),window.clearTimeout(m)}},[y,pe,A,$,d,I,_.state.subtitleFontSize,_.state.subtitlePosition]),S(()=>{if(!I)return;const e=d.current,n=Kt.current;if(!e||!n)return;const s=Be/1e3,o=ut/1e3,m=new Set;let P=[],v=-1,g=-1,se=-1,be=-1,V=0,B=0,k=!1;const Y=()=>{const H=it.current;if(H<0)return null;const Oe=ce.current;return Oe.length>0?Oe[H]?.track??null:Array.from(e.textTracks)[H]??null},G=(H,Oe)=>{const me=H.cues;if(!me||me.length===0)return Array.from(H.activeCues??[]);let Ze=0,et=me.length;for(;Ze<et;){const Ie=Ze+et>>>1;me[Ie].endTime+s<Oe?Ze=Ie+1:et=Ie}const $t=[];for(let Ie=Ze;Ie<me.length;Ie++){const un=me[Ie];if(un.startTime+s>Oe)break;un.endTime+s>=Oe&&$t.push(un)}return $t},z=()=>{const H=Y(),Oe=e.currentTime-o,me=H?G(H,Oe):[],Ze=e.clientWidth,et=e.clientHeight,$t=e.videoWidth,Ie=e.videoHeight;if(me.length===P.length&&me.every((Bn,Mn)=>Bn===P[Mn])&&Ze===v&&et===g&&$t===se&&Ie===be||(P=me,v=Ze,g=et,se=$t,be=Ie,n.textContent="",me.length===0))return;const lr={fontSize:Dn(_.state.subtitleFontSize,et),position:_.state.subtitlePosition,bgOpacity:_.state.subtitleBgOpacity,bgColor:_.state.subtitleBgColor,textColor:_.state.subtitleTextColor,edge:_.state.subtitleEdge,bold:_.state.subtitleBold},Or=as(lr),Vr=os(e,lr.position);me.forEach((Bn,Mn)=>{const cr=String(Bn.text??"");if(!is(cr).trim())return;const An=document.createElement("div"),Fr=(me.length-1-Mn)*1.7;An.style.cssText=`${Or}
|
|
4
|
-
bottom: calc(${Vr}px + ${Fr}em);`,An.innerHTML=ls(cr),n.appendChild(An)})},Xe=()=>{Array.from(e.textTracks).forEach(H=>{m.has(H)||(m.add(H),H.addEventListener("cuechange",z))})},ue=()=>{Xe(),z()},In=()=>{if(k||B)return;const H=()=>{B=0,!(k||e.paused||e.ended)&&(z(),In())};B=window.requestAnimationFrame(H)},De=e,dn=()=>{V=0,z(),!k&&De.requestVideoFrameCallback&&(V=De.requestVideoFrameCallback(dn))},Rt=()=>{z(),De.requestVideoFrameCallback?V||(V=De.requestVideoFrameCallback(dn)):In()};Xe(),e.textTracks.addEventListener("addtrack",ue),e.textTracks.addEventListener("removetrack",ue),e.addEventListener("timeupdate",z),e.addEventListener("seeked",z),e.addEventListener("loadedmetadata",z),e.addEventListener("play",Rt);const or=Array.from(e.querySelectorAll("track"));or.forEach(H=>H.addEventListener("load",z));const ir=typeof ResizeObserver>"u"?null:new ResizeObserver(()=>z());return ir?.observe(e),z(),Rt(),()=>{k=!0,m.forEach(H=>H.removeEventListener("cuechange",z)),e.textTracks.removeEventListener("addtrack",ue),e.textTracks.removeEventListener("removetrack",ue),e.removeEventListener("timeupdate",z),e.removeEventListener("seeked",z),e.removeEventListener("loadedmetadata",z),e.removeEventListener("play",Rt),or.forEach(H=>H.removeEventListener("load",z)),ir?.disconnect(),B&&window.cancelAnimationFrame(B),V&&De.cancelVideoFrameCallback&&De.cancelVideoFrameCallback(V),n.textContent=""}},[I,Be,y,pe,ut,d,_.state.subtitleFontSize,_.state.subtitlePosition,_.state.subtitleBgOpacity,_.state.subtitleBgColor,_.state.subtitleTextColor,_.state.subtitleEdge,_.state.subtitleBold]);const ln=()=>{L(null),Fe([]),Ue(""),U(-1)},Rr=C(e=>{q(e),Se(1),we(e,1)},[we]),cn=!h&&r?.seasons&&r.seasons.length>1?t("label",{className:p.sidebarSeason,children:[t("span",{children:"Season"}),t("select",{value:i,onChange:e=>Rr(parseInt(e.target.value,10)||1),className:p.select,children:r.seasons.map(e=>t("option",{value:e.season_number,children:["Season ",e.season_number," (",e.episode_count," ep)"]},e.season_number))})]}):null,_t=C(e=>{const n=parseInt(e,10);if(!isNaN(n)){try{d.current?.pause()}catch{}Se(n),we(i,n)}Tn(!1)},[i,we,d]);S(()=>{if(h)return;const e=n=>{n.target.closest('input, textarea, button, select, a, [role="button"], [contenteditable="true"]')||n.key.toLowerCase()==="n"&&(N!=null?_t(String(N)):qr.error("No next episode available"))};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[h,N,_t]);const $r=e=>{ze(e);try{const s=Pe[e];s&&localStorage.setItem("tvLastAudio",Rn(s))}catch{}const n=le.current;n&&n.audioTrack!==void 0&&(n.audioTrack=e)},Dr=e=>{Q(e);try{if(e===-1)localStorage.setItem("tvSubtitlesEnabled","false");else{localStorage.setItem("tvSubtitlesEnabled","true"),localStorage.setItem("tvSelectedSubtitle",String(e));const m=pe[e];m&&localStorage.setItem("tvLastSubtitle",Rn(m))}}catch{}const n=d.current,s=le.current;if(s&&typeof s.subtitleTrack=="number"&&Array.isArray(s.subtitleTracks)&&s.subtitleTracks.length>0&&(s.subtitleTrack=ce.current.length>0||e<0?-1:e),!n)return;const o=ce.current;if(o.length>0){o.forEach((m,P)=>{const v=m.track;if(!v)return;const g=P===e;v.mode=g&&!I?"showing":"hidden"});return}Array.from(n.textTracks).forEach((m,P)=>{const v=P===e;m.mode=v&&!I?"showing":"hidden"})},Lt=C(()=>{if(!r)return;const e=d.current,n=h?"":`S${String(i).padStart(2,"0")}E${String(f).padStart(2,"0")}`;tt.discord.tvPresence.mutate({title:r.title,episodeLabel:n,isPlaying:e?!e.paused&&!e.ended:!0,thumbnail:r.poster,currentTime:e?e.currentTime:0,duration:e&&e.duration||0,isAdult:r.adult===!0,sessionId:fe.current}).catch(()=>{}),tt.discord.heartbeat.mutate({sessionId:fe.current}).catch(()=>{})},[r,h,i,f,d]);S(()=>{if(!r)return;Lt();const e=window.setInterval(()=>{const n=d.current;(!n||!n.paused)&&Lt()},15e3);return()=>window.clearInterval(e)},[Lt,r,d]),S(()=>{if(!r||A||rt||K||oe.length===0)return;const e=d.current;if(!e)return;const n=()=>Lt();return e.addEventListener("play",n),e.addEventListener("pause",n),e.addEventListener("seeked",n),()=>{e.removeEventListener("play",n),e.removeEventListener("pause",n),e.removeEventListener("seeked",n)}},[r,A,rt,K,oe,Lt,d]),S(()=>{const e=fe.current,n=()=>{const o=JSON.stringify({sessionId:e});navigator.sendBeacon?(navigator.sendBeacon("/api/discord/clear",new Blob([o],{type:"application/json"})),navigator.sendBeacon("/api/discord/heartbeat",new Blob([JSON.stringify({sessionId:e,bye:!0})],{type:"application/json"}))):fetch("/api/discord/clear",{method:"POST",headers:{"Content-Type":"application/json"},body:o,keepalive:!0}).catch(()=>{})},s=()=>n();return window.addEventListener("pagehide",s),window.addEventListener("beforeunload",s),()=>{window.removeEventListener("pagehide",s),window.removeEventListener("beforeunload",s),n()}},[]);const ar=Le==="all"?oe:oe.filter(e=>e.type===Le);return S(()=>{if(!r){document.title="TV & Movies - dango";return}document.title=h?`${r.title} - dango`:`${r.title} - Season ${i} Episode ${f} - dango`},[r,h,i,f]),S(()=>{if(!r||h)return;const e=new URLSearchParams(w),n=e.get("s"),s=e.get("e"),o=String(i),m=String(f);n===o&&s===m||(e.set("type",w.get("type")||"tv"),e.set("s",o),e.set("e",m),U(`${window.location.pathname}?${e.toString()}`,{replace:!0}))},[r,h,i,f,w,U]),t("div",{className:nt.playerPageLayout,children:[t("aside",{className:nt.episodeSidebar,children:r?h?t("div",{className:p.sidebarPosterCard,children:[r.poster&&t("img",{src:`https://image.tmdb.org/t/p/w342${r.poster}`,alt:r.title,loading:"lazy",decoding:"async"}),t("div",{className:p.sidebarPosterMeta,children:[t("strong",{children:r.title}),t("span",{children:r.year})]})]}):t(cs,{episodes:rr,currentEpisode:String(f),watchedEpisodes:nr,onEpisodeClick:_t,header:cn}):h?t("div",{className:p.statusMsg,children:[t(D,{name:"spinner",className:p.spinner})," Loading..."]}):t(ds,{variant:"sidebar"})}),t("div",{className:nt.playerMain,children:[r&&t("div",{className:p.playerSection,onContextMenu:e=>e.preventDefault(),style:r.adult&&!ht?{filter:"blur(14px)",pointerEvents:"none",userSelect:"none"}:void 0,children:A&&kt?t("iframe",{src:kt,className:p.videoIframe,allow:"autoplay; fullscreen",allowFullScreen:!0}):!A&&(ar.length>0||rt)?t(Ae,{children:[K&&t("div",{className:`${p.statusMsg} ${p.error}`,style:{flexDirection:"column",alignItems:"stretch",gap:8},children:[t("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[t("span",{style:{flex:1},children:K}),t("button",{className:p.retryButton,onClick:on,children:"Retry"})]}),W.length>0&&t("div",{style:{display:"flex",flexWrap:"wrap",gap:6,alignItems:"center",marginTop:4},children:[t("span",{style:{fontSize:"0.8rem",opacity:.9,fontWeight:600},children:"Servers:"}),W.map(e=>t("button",{onClick:()=>wn(e),className:p.retryButton,style:{padding:"4px 8px",fontSize:"0.75rem",textTransform:"capitalize",background:X===e?"var(--accent)":void 0,color:X===e?"white":void 0},children:e},e))]})]}),t(ga,{player:_,title:r.title,episodeLabel:h?void 0:`S${i} E${f}`,audioTracks:Pe,selectedAudioTrack:ke,onAudioTrackChange:$r,subtitles:pe,selectedSubtitle:y,onSubtitleChange:Dr,streams:ar,qualityIdx:at,onQualityChange:ge,onBack:ln,movyServers:W,selectedMovyServer:X,onMovyServerSelect:wn,isMovySource:W.length>0,videoDelayEnabled:Ke,onVideoDelayToggle:e=>{lt(e);try{localStorage.setItem("playerVideoDelayEnabled",String(e))}catch{}},videoDelayMs:qe,onVideoDelayChange:Et,onCalibrateAvSync:It,subtitleDelayMs:Be,onSubtitleDelayChange:Yt,showNextEpisodeButton:fr&&!Ne&&!xe&&!Re,onNextEpisode:Xn,isLoading:rt,children:[t("video",{ref:d,autoPlay:Qe&&!At,playsInline:!0,disablePictureInPicture:!0,className:`${p.video} ${E?p.videoHidden:""}`,onTimeUpdate:xr,onEnded:()=>{_e||Er()},onPlay:Nr,onPause:wr,onSeeked:()=>{Qn.current=Date.now(),Pt()},onLoadedMetadata:Ir,onVolumeChange:_.actions.onVolumeChange,onWaiting:_.actions.onWaiting,onPlaying:_.actions.onPlaying,onContextMenu:e=>e.preventDefault(),onError:()=>{j("Video failed to load. Try another server or reload."),M(!1)}}),t("canvas",{ref:qt,className:`${p.delayCanvas} ${E?p.delayCanvasActive:""}`}),I&&t("div",{ref:Kt,className:p.subtitleOverlay}),t(us,{isOpen:bn,ms:qe,onChange:Et,onApply:Qt,onClose:dt,testClipActive:_e,onTestClip:Gt})]})]}):K&&!A?t("div",{className:`${p.statusMsg} ${p.error}`,style:{flexDirection:"column",alignItems:"stretch",gap:8},children:[t("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[t("span",{style:{flex:1},children:K}),t("button",{className:p.retryButton,onClick:on,children:"Retry"})]}),W.length>0&&t("div",{style:{display:"flex",flexWrap:"wrap",gap:6,alignItems:"center",marginTop:4},children:[t("span",{style:{fontSize:"0.8rem",opacity:.9,fontWeight:600},children:"Servers:"}),W.map(e=>t("button",{onClick:()=>wn(e),className:p.retryButton,style:{padding:"4px 8px",fontSize:"0.75rem",textTransform:"capitalize",background:X===e?"var(--accent)":void 0,color:X===e?"white":void 0},children:e},e))]})]}):null}),r&&t(ms,{showTheater:!1}),cn&&t("div",{className:p.mobileSeasonRow,children:cn}),r&&t("div",{className:p.providerSelectWrap,children:t("label",{className:p.controlLabel,children:["Source",t("select",{value:$,onChange:e=>Lr(e.target.value),className:p.select,disabled:ie.length===0,children:gn?t("option",{value:"",children:"Loading…"}):ie.length===0?t("option",{value:"",children:"No providers available"}):t(Ae,{children:[We.length>0&&t("optgroup",{label:"Direct HLS",children:We.map(e=>t("option",{value:e.id,children:e.label},e.id))}),T.length>0&&t("optgroup",{label:"Embeds",children:T.map(e=>t("option",{value:e.id,children:e.label},e.id))})]})})]})}),r&&t("div",{className:nt.playerInfoContainer,children:[t("div",{className:nt.playerInfoHeader,children:[t("div",{className:nt.playerAnimeCard,children:r.poster&&t("img",{src:`https://image.tmdb.org/t/p/w342${r.poster}`,alt:r.title,loading:"lazy",decoding:"async"})}),t("div",{className:nt.videoTitleSection,children:[t("div",{className:ye.titleContainer,children:[t("h1",{children:r.title}),t("div",{className:p.meta,children:[t("span",{className:p.year,children:r.year}),r.vote_average!=null&&r.vote_average>0&&t("span",{className:p.rating,children:[t(D,{name:"star",size:12}),Number(r.vote_average).toFixed(1)]}),t("span",{className:`${p.typeBadge} ${p[h?"movie":"tv"]}`,children:h?"Movie":"TV Show"})]}),sr.length>0&&t("div",{className:p.genreRow,children:sr.map(e=>t("span",{className:p.genreChip,children:e},e))}),Nn.length>0&&t("div",{className:p.metaRow,children:Nn.map((e,n)=>t("span",{children:[e,n<Nn.length-1?" · ":""]},`${e}-${n}`))})]}),t("div",{className:ye.controls,children:[t("button",{className:`${ye.watchlistBtn} ${Zt?ye.inList:""}`,onClick:gr,disabled:pr,type:"button",children:[Zt?t(D,{name:"check",size:14}):t(D,{name:"plus",size:14}),Zt?"In Watchlist":"Add to Watchlist"]}),!h&&t(Ae,{children:[t("button",{className:`${ye.watchlistBtn}`,onClick:()=>yn!=null&&_t(String(yn)),disabled:yn==null,type:"button",children:[t(D,{name:"chevron-left",size:14}),"Prev EP"]}),t("button",{className:`${ye.watchlistBtn}`,onClick:()=>N!=null&&_t(String(N)),disabled:N==null,type:"button",children:["Next EP",t(D,{name:"chevron-right",size:14})]}),!h&&t("button",{className:`${ye.watchlistBtn} ${ye.modeToggleBtn} ${vt?ye.modeToggleActive:""}`,onClick:()=>Cr(!vt),type:"button","aria-pressed":vt,children:vt?"AUTOPLAY: ON":"AUTOPLAY: OFF"}),Sr&&t("button",{className:`${ye.watchlistBtn}`,onClick:()=>Tn(!0),type:"button",children:[t(D,{name:"list-ul",size:14}),"Episodes"]})]})]})]})]}),t("div",{className:ye.descriptionSection,children:[t("h3",{children:"Synopsis"}),t(Is,{text:r.overview,emptyText:"No description available."})]}),t("button",{className:ye.detailsToggleBtn,onClick:()=>br(!rn),type:"button",children:[rn?t(D,{name:"chevron-up"}):t(D,{name:"chevron-down"}),rn?"Hide Details":"Show Details"]}),rn&&t("div",{className:p.detailGrid,children:[r.first_air_date&&t("div",{className:p.detailItem,children:[t("strong",{children:h?"Release Date":"First Air Date"}),t("span",{children:r.first_air_date})]}),r.last_air_date&&t("div",{className:p.detailItem,children:[t("strong",{children:"Last Air Date"}),t("span",{children:r.last_air_date})]}),r.networks&&r.networks.length>0&&t("div",{className:p.detailItem,children:[t("strong",{children:"Networks"}),t("span",{children:r.networks.map(e=>e.name).join(", ")})]}),r.created_by&&r.created_by.length>0&&t("div",{className:p.detailItem,children:[t("strong",{children:"Created By"}),t("span",{children:r.created_by.map(e=>e.name).join(", ")})]}),r.episode_run_time&&r.episode_run_time.length>0&&t("div",{className:p.detailItem,children:[t("strong",{children:"Episode Runtime"}),t("span",{children:[r.episode_run_time[0]," min"]})]}),r.imdb_id&&t("div",{className:p.detailItem,children:[t("strong",{children:"IMDb"}),t("a",{href:`https://www.imdb.com/title/${r.imdb_id}`,target:"_blank",rel:"noopener noreferrer",className:p.imdbLink,children:"View on IMDb"})]})]})]}),!h&&t(hs,{isOpen:yr,onClose:()=>Tn(!1),episodes:rr,currentEpisode:String(f),watchedEpisodes:nr,onEpisodeClick:_t,header:cn}),r?.adult&&!ht&&t(mn,{isOpen:!0,title:"Content Warning",onClose:ln,children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t("p",{children:"This title contains mature content intended for adult audiences."}),t("p",{children:["By proceeding, you confirm that you are ",t("strong",{children:"18 years of age or older"})," ","(or the age of majority in your jurisdiction) and wish to view this content."]}),t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center"},children:[t(Te,{variant:"secondary",onClick:ln,children:"Go Back"}),t(Te,{onClick:Jt,children:"I'm 18+, Continue"})]})]})}),t(mn,{isOpen:Ne,onClose:Jn,title:"Resume Watching",children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t("p",{children:["You were at ",t("strong",{children:kr(ft)})]}),t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center"},children:[t(Te,{variant:"secondary",onClick:Jn,children:"Start from Beginning"}),t(Te,{onClick:Br,children:"Resume"})]})]})}),t(mn,{isOpen:xe,onClose:Mr,title:h?"Movie Completed":"Episode Completed",children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t("p",{children:h?t(Ae,{children:"You've already watched this movie."}):t(Ae,{children:["You've already watched"," ",t("strong",{children:["Season ",i," Episode ",f]}),". Would you like to continue?"]})}),t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center",flexWrap:"wrap"},children:[t(Te,{variant:"secondary",onClick:Ar,children:"Replay"}),N!=null?t(Te,{onClick:Xn,children:["Watch EP ",N]}):ve!=null?t(Te,{onClick:Zn,children:["Start Season ",ve]}):null]})]})}),t(mn,{isOpen:Re,onClose:()=>Ge(!1),title:h?"Movie Completed!":ve!=null?"Season Complete!":"Show Completed!",children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t(D,{name:"check-circle",size:48,style:{color:"var(--accent-lighter)",marginBottom:"0.5rem"}}),t("p",{style:{fontSize:"1.1rem",fontWeight:600},children:vr}),t("p",{style:{color:"var(--text-secondary)"},children:h?"You finished this movie!":ve!=null?`You finished Season ${i}.`:"Congratulations! You finished all available episodes."}),t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center",flexWrap:"wrap"},children:[t(Te,{variant:"secondary",onClick:()=>Ge(!1),children:"Close"}),ve!=null?t(Te,{onClick:Zn,children:["Start Season ",ve]}):t(Ae,{children:[t(Te,{onClick:()=>{Ge(!1),ln()},children:"Back to Details"}),Zt&&t(Te,{onClick:Pr,disabled:gt.isPending,children:gt.isPending?"Saving...":"Move to Completed"})]})]})]})}),!r&&t("div",{className:p.statusMsg,children:[t(D,{name:"spinner",className:p.spinner})," Loading..."]})]})]})};export{Mo as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
._fullscreenFlat_11xhe_1,._fullscreenFlat_11xhe_1 ._video_11xhe_2,._fullscreenFlat_11xhe_1 ._delayCanvas_11xhe_3,._fullscreenFlat_11xhe_1 ._subtitleOverlay_11xhe_4{border-radius:0}@media(max-width:900px)and (orientation:landscape){._fullscreenFlat_11xhe_1{border-radius:0}}@container (max-width: 26rem){._timeDisplay_11xhe_15{display:none}._bottomControls_11xhe_19{padding:.75rem}._leftControls_11xhe_23,._rightControls_11xhe_24{gap:.2rem}._controlBtn_11xhe_28{padding:5px;min-width:2.125rem;min-height:2.125rem}}._video_11xhe_2{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:contain;display:block;background:#000;border:none}._controlsOverlay_11xhe_47{position:absolute;inset:0;opacity:1;transition:opacity .4s cubic-bezier(.4,0,.2,1);z-index:50;pointer-events:none;display:flex;flex-direction:column;justify-content:space-between;background:radial-gradient(circle,transparent 20%,rgba(0,0,0,.4) 100%)}._controlsOverlay_11xhe_47>*{pointer-events:auto}._controlsOverlay_11xhe_47._hidden_11xhe_67{opacity:0;pointer-events:none;cursor:none}._topControls_11xhe_73{position:absolute;top:0;left:0;right:0;display:flex;align-items:center;gap:var(--space-6);background:linear-gradient(to bottom,rgba(0,0,0,.85) 0%,rgba(0,0,0,.45) 60%,transparent 100%);padding:var(--space-8) var(--space-10);transition:transform .4s cubic-bezier(.2,.8,.2,1);z-index:10;pointer-events:auto}._backBtn_11xhe_93{background:transparent;border:none;color:#ffffffd9;font-size:1.6rem;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--transition-fast);padding:8px;border-radius:50%}._backBtn_11xhe_93:hover{background:#0f0f1199;color:#fff;transform:scale(1.1)}._videoTitleInfo_11xhe_113{display:flex;flex-direction:column;gap:.25rem}._animeTitle_11xhe_119{font-size:1.4rem;font-weight:800;color:#fff;letter-spacing:-.01em;text-shadow:0 2px 4px rgba(0,0,0,.5)}._episodeLabel_11xhe_127{font-size:.85rem;font-weight:600;color:#ffffffbf;text-shadow:0 2px 4px rgba(0,0,0,.5)}._speedBoostBadge_11xhe_134{position:absolute;top:1.5rem;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:.7rem;padding:.65rem 1rem;border:1px solid color-mix(in srgb,var(--accent) 45%,transparent);border-radius:var(--radius-md);background:#121216eb;color:#f5f3ff;font-size:.85rem;font-weight:800;letter-spacing:.06em;z-index:11;pointer-events:none}._speedBoostBadge_11xhe_134 span{line-height:1}._speedBoostBadge_11xhe_134 svg{display:block;flex-shrink:0}._bottomControls_11xhe_19{position:absolute;bottom:0;left:0;right:0;background:linear-gradient(to top,rgba(0,0,0,.85) 0%,rgba(0,0,0,.45) 60%,transparent 100%);padding:clamp(1rem,4cqw,2.5rem) clamp(1rem,4cqw,2.5rem) clamp(.75rem,2.5cqw,1.5rem);z-index:10;pointer-events:auto;transition:transform .4s cubic-bezier(.2,.8,.2,1)}._progressBarContainer_11xhe_180{width:100%;height:20px;display:flex;align-items:center;cursor:pointer;position:relative;touch-action:pan-y}@media(pointer:coarse){._progressBarContainer_11xhe_180{height:28px}._progressBarContainer_11xhe_180 ._progressBar_11xhe_180{height:6px}._progressBarContainer_11xhe_180 ._thumb_11xhe_199{opacity:1}}._progressBar_11xhe_180{width:100%;height:4px;background:#fff3;border-radius:2px;position:relative;transition:height .15s ease}._progressBarContainer_11xhe_180:hover ._progressBar_11xhe_180{height:6px}._bufferedBar_11xhe_217{position:absolute;top:0;left:0;height:100%;background:#ffffff4d;border-radius:2px;pointer-events:none}._watchedBar_11xhe_227{position:absolute;top:0;left:0;height:100%;background:var(--accent);border-radius:2px;pointer-events:none}._thumb_11xhe_199{position:absolute;top:50%;width:12px;height:12px;background:#fff;border-radius:50%;transform:translate(-50%,-50%);box-shadow:0 0 4px #0006;pointer-events:none;opacity:0;transition:opacity .15s ease}._progressBarContainer_11xhe_180:hover ._thumb_11xhe_199,._progressBarContainer_11xhe_180._scrubbing_11xhe_252 ._thumb_11xhe_199{opacity:1}._timeBubble_11xhe_256{position:absolute;bottom:24px;background:#000000d9;color:#fff;padding:4px 8px;border-radius:4px;font-size:.8rem;font-weight:500;transform:translate(-50%);pointer-events:none;white-space:nowrap}._bottomControlsRow_11xhe_270{display:flex;align-items:center;justify-content:space-between;gap:.75rem;margin-top:8px}._leftControls_11xhe_23{display:flex;align-items:center;gap:1rem;gap:clamp(.5rem,2.5cqw,1rem);min-width:0}._rightControls_11xhe_24{display:flex;align-items:center;gap:.75rem;gap:clamp(.5rem,2cqw,.75rem)}._nextEpisodeBtn_11xhe_293{background:#ffffff0f;border:1px solid rgba(255,255,255,.12);border-radius:var(--radius-md);padding:.45rem .8rem;color:#fffc;font-weight:600;font-size:.9rem;display:inline-flex;align-items:center;gap:.5rem;cursor:pointer;transition:all var(--transition-fast);white-space:nowrap}._nextEpisodeBtn_11xhe_293:hover{background:#ffffff1a;color:#fff;transform:translateY(-1px);border-color:#fff3}._controlBtn_11xhe_28{background:transparent;border:none;color:#ffffffd9;font-size:1.1rem;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:8px;border-radius:4px;transition:all var(--transition-fast);min-width:2.125rem;min-height:2.125rem;flex:0 0 auto}@media(pointer:coarse){._controlBtn_11xhe_28{padding:10px;min-width:2.75rem;min-height:2.75rem}}._controlBtn_11xhe_28:hover{color:#fff;background:#ffffff1a}._controlBtn_11xhe_28._active_11xhe_346{color:var(--accent)}._volumeContainer_11xhe_350{display:flex;align-items:center;position:relative}._volumeSlider_11xhe_356{width:0;opacity:0;transform:scaleX(0);transform-origin:left;transition:all .3s cubic-bezier(.4,0,.2,1);cursor:pointer;margin-left:8px;-webkit-appearance:none;appearance:none;background:transparent;height:20px}._volumeContainer_11xhe_350:hover ._volumeSlider_11xhe_356,._volumeSlider_11xhe_356:focus{width:80px;opacity:1;transform:scaleX(1)}._volumeSlider_11xhe_356::-webkit-slider-runnable-track{width:100%;height:4px;background:linear-gradient(to right,var(--accent) 0%,var(--accent) var(--volume-percent, 0%),rgba(255,255,255,.2) var(--volume-percent, 0%),rgba(255,255,255,.2) 100%);border-radius:4px}._volumeSlider_11xhe_356::-moz-range-track{width:100%;height:4px;background:#fff3;border-radius:4px}._volumeSlider_11xhe_356::-moz-range-progress{height:4px;background:var(--accent);border-radius:4px}._volumeSlider_11xhe_356::-webkit-slider-thumb{-webkit-appearance:none;height:12px;width:12px;border-radius:50%;background:#fff;margin-top:-4px;box-shadow:0 0 5px #00000080}._timeDisplay_11xhe_15{color:#fffc;font-size:.85rem;font-weight:500;font-variant-numeric:tabular-nums;min-width:100px}._settingsPanel_11xhe_421{position:absolute;bottom:clamp(6rem,15vh,8rem);right:clamp(1rem,3vw,2rem);background:#141418f2;border:1px solid var(--border-secondary);border-radius:var(--radius-md);width:max-content;min-width:12rem;max-width:min(19rem,calc(100vw - 1.5rem));font-size:.85rem;z-index:60;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);box-shadow:0 8px 32px #00000080;display:flex;flex-direction:column;overflow:hidden}._settingsHeader_11xhe_440{display:flex;align-items:center;padding:.55rem .75rem;border-bottom:1px solid var(--border-secondary);gap:.625rem}._settingsBackBtn_11xhe_448{background:transparent;border:none;color:#ffffffd9;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:4px;border-radius:4px;transition:all var(--transition-fast)}._settingsBackBtn_11xhe_448:hover{background:#ffffff1a;color:#fff}._settingsTitle_11xhe_466{font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}._settingsContent_11xhe_477{overflow-y:auto;padding:.375rem;display:flex;flex-direction:column;gap:.125rem;max-height:min(56vh,22rem)}._currentValue_11xhe_486{color:var(--text-tertiary);font-size:.8rem;font-weight:500}._settingsLabel_11xhe_492{padding:var(--space-2) var(--space-4);font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--text-secondary)}._menuItem_11xhe_501{display:flex;align-items:center;justify-content:space-between;gap:.75rem;width:100%;min-height:2rem;padding:.5rem .75rem;background:transparent;border:none;color:var(--text-primary);font-size:.85rem;cursor:pointer;border-radius:var(--radius-sm);transition:background-color var(--transition-fast);text-align:left;white-space:nowrap}._menuItem_11xhe_501:hover{background:var(--bg-tertiary)}._menuItem_11xhe_501._active_11xhe_346{background:var(--bg-tertiary);color:var(--accent)}._currentValue_11xhe_486{color:var(--text-secondary);font-size:.85rem}._menuNote_11xhe_534{padding:.5rem .75rem;font-size:.7rem;line-height:1.5;color:var(--text-tertiary);white-space:normal;overflow-wrap:break-word}._spin_11xhe_543{animation:_spin_11xhe_543 1s linear infinite}._loadingOverlay_11xhe_547{position:absolute;inset:0;display:flex;justify-content:center;align-items:center;z-index:10;background:#00000080;border-radius:inherit}._loadingDots_11xhe_558{display:flex;gap:10px}._dot_11xhe_563{width:12px;height:12px;border-radius:50%;background-color:var(--accent);animation:_bounce_11xhe_1 1.4s infinite ease-in-out both;box-shadow:0 0 10px var(--accent-glow)}._dot_11xhe_563:nth-child(1){animation-delay:-.32s}._dot_11xhe_563:nth-child(2){animation-delay:-.16s}@keyframes _bounce_11xhe_1{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}._bufferingOverlay_11xhe_592{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);pointer-events:none;z-index:20}._bufferingSpinner_11xhe_601{width:50px;height:50px;border:4px solid rgba(255,255,255,.3);border-radius:50%;border-top-color:var(--accent);animation:_spin_11xhe_543 1s ease-in-out infinite}@keyframes _spin_11xhe_543{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media(pointer:coarse){._settingsPanel_11xhe_421{font-size:.9rem;bottom:calc(env(safe-area-inset-bottom,0px) + 7rem);right:max(.75rem,env(safe-area-inset-right,0px))}._menuItem_11xhe_501{min-height:2.75rem}._settingsContent_11xhe_477{max-height:52vh}}@media(max-width:480px){._settingsPanel_11xhe_421{min-width:9rem;max-width:calc(100vw - 2rem);font-size:.75rem;bottom:calc(env(safe-area-inset-bottom,0px) + 6rem)}._settingsHeader_11xhe_440{padding:.4rem .625rem}._settingsTitle_11xhe_466{font-size:.64rem}._menuItem_11xhe_501{min-height:2.25rem;padding:.45rem .625rem;font-size:.75rem;gap:.5rem}._settingsContent_11xhe_477{max-height:min(40vh,15rem)}}@media(max-height:500px)and (orientation:landscape){._settingsPanel_11xhe_421{bottom:7.25rem;right:2rem;min-width:10rem;max-width:min(15rem,calc(100vw - 1.5rem));font-size:.8rem}._menuItem_11xhe_501{min-height:2.5rem;font-size:.8rem}._settingsContent_11xhe_477{max-height:50vh;overflow-y:auto}}._page_263ma_1{max-width:1200px;margin:0 auto;padding:1.5rem}._header_263ma_7{margin-bottom:1.5rem}._pageTitle_263ma_11{font-size:1.75rem;font-weight:700;margin:0 0 1rem;display:flex;align-items:center;gap:.5rem;color:var(--text-primary)}._searchForm_263ma_21{display:flex;gap:.5rem;max-width:600px}._searchInput_263ma_27{flex:1;padding:.6rem 1rem;border-radius:8px;border:1px solid var(--border-primary);background:var(--bg-elevated);color:var(--text-primary);font-size:.95rem;outline:none}._searchInput_263ma_27:focus{border-color:var(--accent)}._searchBtn_263ma_42{padding:.6rem 1rem;border-radius:8px;border:none;background:var(--accent);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center}._searchBtn_263ma_42:hover{opacity:.9}._suggestions_263ma_58{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:1.5rem}._suggestionPill_263ma_65{padding:.4rem .8rem;border-radius:20px;border:1px solid var(--border-primary);background:var(--bg-elevated);color:var(--text-secondary);cursor:pointer;font-size:.85rem;transition:all .15s ease}._suggestionPill_263ma_65:hover{border-color:var(--accent);color:var(--text-primary)}._statusMsg_263ma_81{padding:1rem;text-align:center;color:var(--text-secondary)}._statusMsg_263ma_81._error_263ma_87{color:#f87171}._statusMsg_263ma_81._textOnly_263ma_91{background:none;padding:.5rem}._spinner_263ma_96{animation:_spin_263ma_96 1s linear infinite;margin-right:.5rem}@keyframes _spin_263ma_96{0%{transform:rotate(0)}to{transform:rotate(360deg)}}._grid_263ma_110{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:1rem}._skeletonCard_263ma_116{border-radius:8px;overflow:hidden}._skeletonThumb_263ma_121{aspect-ratio:2 / 3;background:var(--bg-secondary);border-radius:8px}._skeletonLine_263ma_127{height:12px;background:var(--bg-secondary);border-radius:4px;margin-top:.5rem}._shimmer_263ma_134{background:linear-gradient(90deg,var(--bg-secondary) 25%,var(--bg-elevated) 50%,var(--bg-secondary) 75%);background-size:200% 100%;animation:_shimmer_263ma_134 1.5s infinite}@keyframes _shimmer_263ma_134{0%{background-position:200% 0}to{background-position:-200% 0}}._backBtn_263ma_154{display:inline-flex;align-items:center;gap:.4rem;padding:.4rem .8rem;border-radius:6px;border:1px solid var(--border-primary);background:var(--bg-elevated);color:var(--text-primary);cursor:pointer;font-size:.85rem;margin-bottom:1rem}._backBtn_263ma_154:hover{border-color:var(--accent)}._meta_263ma_172{display:flex;align-items:center;gap:.75rem;margin:.5rem 0;flex-wrap:wrap}._headerActions_263ma_180{display:flex;gap:.5rem;margin:.75rem 0 0;flex-wrap:wrap}._watchlistBtn_263ma_187{display:inline-flex;align-items:center;gap:.4rem;padding:.5rem 1rem;border-radius:6px;border:1px solid var(--border-primary);background:var(--bg-elevated);color:var(--text-primary);cursor:pointer;font-size:.85rem;font-weight:600}._watchlistBtn_263ma_187:hover:not(:disabled){border-color:var(--accent)}._watchlistBtn_263ma_187._active_263ma_205{border-color:var(--color-success);color:var(--color-success)}._watchlistBtn_263ma_187:disabled{opacity:.6;cursor:default}._year_263ma_215{color:var(--text-secondary);font-size:.9rem}._rating_263ma_220{display:inline-flex;align-items:center;gap:4px;color:var(--accent-lighter);font-weight:600;font-size:.9rem}._typeBadge_263ma_229{padding:2px 10px;border-radius:4px;font-size:.75rem;font-weight:600;text-transform:uppercase}._typeBadge_263ma_229._tv_263ma_237{background:color-mix(in srgb,var(--accent) 20%,transparent);color:var(--accent)}._typeBadge_263ma_229._movie_263ma_242{background:color-mix(in srgb,var(--accent-lighter) 20%,transparent);color:var(--accent-lighter)}._typeBadge_263ma_229._tvSeries_263ma_247,._typeBadge_263ma_229._tvMiniSeries_263ma_252{background:color-mix(in srgb,var(--accent) 20%,transparent);color:var(--accent)}._overview_263ma_257{color:var(--text-secondary);line-height:1.6;margin:.5rem 0 0;max-width:800px}._controls_263ma_264{display:flex;flex-wrap:wrap;gap:1rem;margin:1rem 0;align-items:flex-end}._controlLabel_263ma_272{display:flex;flex-direction:column;gap:.3rem;font-size:.8rem;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}._select_263ma_282{padding:.5rem .75rem;border-radius:6px;border:1px solid var(--border-primary);background:var(--bg-elevated);color:var(--text-primary);font-size:.9rem;cursor:pointer;min-width:160px}._playerSection_263ma_293{margin:1.5rem 0;border-radius:0;overflow:hidden;overflow:clip;isolation:isolate;background:#000;position:relative}._video_263ma_297{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:contain;display:block;background:#000;border:none;border-radius:inherit}._videoHidden_263ma_319{opacity:0;pointer-events:none}._delayCanvas_263ma_324{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:contain;opacity:0;pointer-events:none;z-index:2;border-radius:inherit}._delayCanvasActive_263ma_337{opacity:1}._subtitleOverlay_263ma_341{position:absolute;top:0;left:0;width:100%;height:100%;z-index:3;pointer-events:none;overflow:hidden;border-radius:inherit}@media(max-width:900px)and (orientation:landscape){._playerSection_263ma_293{margin:0;border-radius:0}}._videoIframe_263ma_360{width:100%;aspect-ratio:16 / 9;min-height:400px;border:none;background:#000}._retryButton_263ma_368{margin-left:8px;padding:4px 10px;border-radius:4px;border:1px solid var(--border-primary);background:var(--bg-elevated);color:var(--text-primary);cursor:pointer;font-size:.8rem}._retryButton_263ma_368:hover{border-color:var(--accent)}._sidebarSeason_263ma_383{display:flex;flex-direction:column;gap:.4rem;font-size:.75rem;font-weight:700;color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.1em;margin-bottom:var(--space-4)}._sidebarSeason_263ma_383 ._select_263ma_282{width:100%}._mobileSeasonRow_263ma_399{display:none}@media(max-width:768px){._mobileSeasonRow_263ma_399{display:block}._mobileSeasonRow_263ma_399 ._sidebarSeason_263ma_383{margin-bottom:0}}._sidebarPosterCard_263ma_413{padding:1rem;display:flex;flex-direction:column;gap:.75rem}._sidebarPosterCard_263ma_413 img{width:100%;border-radius:var(--radius-md);aspect-ratio:2 / 3;object-fit:cover;background:#ffffff0f}._sidebarPosterMeta_263ma_428{display:flex;flex-direction:column;gap:.25rem}._sidebarPosterMeta_263ma_428 strong{color:var(--text-primary);font-size:.95rem;line-height:1.3}._sidebarPosterMeta_263ma_428 span{color:var(--text-secondary);font-size:.85rem}._providerSelectWrap_263ma_445{display:flex;align-items:flex-end;gap:1rem;flex-wrap:wrap;min-width:0}._providerSelectWrap_263ma_445 ._backBtn_263ma_154{margin-bottom:0}._genreRow_263ma_457{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.6rem}._genreChip_263ma_464{padding:.2rem .7rem;border-radius:20px;border:1px solid var(--glass-border);background:#ffffff0d;color:var(--text-secondary);font-size:.78rem;font-weight:600}._metaRow_263ma_474{display:flex;flex-wrap:wrap;gap:.35rem;margin-top:.6rem;color:var(--text-secondary);font-size:.9rem}._detailGrid_263ma_483{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:.75rem;margin-top:1rem}._detailItem_263ma_490{display:flex;flex-direction:column;gap:.2rem;padding:.75rem 1rem;border-radius:var(--radius-md);border:1px solid var(--glass-border);background:#ffffff08}._detailItem_263ma_490 strong{font-size:.75rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-tertiary)}._detailItem_263ma_490 span{color:var(--text-primary);font-size:.9rem}._imdbLink_263ma_512{color:var(--accent-light);font-size:.9rem;text-decoration:none}._imdbLink_263ma_512:hover{text-decoration:underline}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as R,a as q,p as E,d as l,h as C,T,u as e,g as F}from"./vendor-core-DfaOB3Rn.js";import{I as a}from"./vendor-icons-DrybRNxP.js";import{t as j,B as w}from"./index-HZNJp28e.js";import{u as U}from"./useMatureConsent-Cra09TA0.js";import{n as H,d as J,e as K,f as Q,t as I}from"./useTvLibrary-twjHQ89n.js";import"./vendor-query-BBT5_sHx.js";const X="_container_198yg_1",Y="_heroSection_198yg_11",Z="_bannerContainer_198yg_17",ee="_banner_198yg_17",ne="_bannerOverlay_198yg_37",te="_heroContent_198yg_49",se="_posterContainer_198yg_62",ae="_poster_198yg_62",oe="_infoGlass_198yg_86",ie="_title_198yg_100",re="_quickMeta_198yg_110",le="_metaItem_198yg_118",ce="_iconStar_198yg_126",de="_iconTv_198yg_130",me="_iconType_198yg_134",_e="_genres_198yg_139",he="_genre_198yg_139",ge="_metaRow_198yg_156",ve="_metaValue_198yg_164",pe="_metaDivider_198yg_168",ue="_synopsisSection_198yg_173",ye="_sectionTitleSmall_198yg_179",ke="_synopsis_198yg_173",be="_actions_198yg_196",Ne="_watchBtn_198yg_202",Se="_watchlistBtn_198yg_226",fe="_active_198yg_250",Ce="_seasonPickerLabel_198yg_256",Te="_seasonSelect_198yg_267",we="_detailsToggleBtn_198yg_286",Ie="_expandedContent_198yg_304",Be="_detailGrid_198yg_309",De="_detailItem_198yg_315",Me="_imdbLink_198yg_333",Le="_heroSkeleton_198yg_343",Pe="_skeletonBanner_198yg_347",$e="_skeletonContent_198yg_354",Ge="_skeletonPoster_198yg_365",xe="_skeletonInfo_198yg_373",Oe="_skeletonTitle_198yg_380",Ae="_skeletonMeta_198yg_388",Ve="_skeletonDesc_198yg_396",We="_skeletonActions_198yg_404",ze="_errorState_198yg_413",Re="_matureOverlay_198yg_434",qe="_matureContent_198yg_444",n={container:X,heroSection:Y,bannerContainer:Z,banner:ee,bannerOverlay:ne,heroContent:te,posterContainer:se,poster:ae,infoGlass:oe,title:ie,quickMeta:re,metaItem:le,iconStar:ce,iconTv:de,iconType:me,genres:_e,genre:he,metaRow:ge,metaValue:ve,metaDivider:pe,synopsisSection:ue,sectionTitleSmall:ye,synopsis:ke,actions:be,watchBtn:Ne,watchlistBtn:Se,active:fe,seasonPickerLabel:Ce,seasonSelect:Te,detailsToggleBtn:we,expandedContent:Ie,detailGrid:Be,detailItem:De,imdbLink:Me,heroSkeleton:Le,skeletonBanner:Pe,skeletonContent:$e,skeletonPoster:Ge,skeletonInfo:xe,skeletonTitle:Oe,skeletonMeta:Ae,skeletonDesc:Ve,skeletonActions:We,errorState:ze,matureOverlay:Re,matureContent:qe};function Ke(){const{id:o}=R(),c=q(),[B]=E(),i=H(B.get("type")),{hasConsent:D}=U(),[t,M]=l(null),[L,_]=l(!0),[u,y]=l(""),[d,P]=l(!1),[h,$]=l(1),G=J(i,o),x=Number(o),{data:O}=K(t?G:void 0),g=!!O?.inLibrary,{toggle:A}=Q();C(()=>{o&&(_(!0),y(""),j.tv.details.query({type:i,id:String(o)}).then(s=>{const m={id:s.id,title:s.title||"",overview:s.overview||"",vote_average:s.vote_average,year:s.year,poster:s.poster,backdrop:s.backdrop,imdb_id:s.imdb_id||void 0,adult:s.adult,seasons:s.seasons?.map(z=>({...z,name:""})),number_of_seasons:s.number_of_seasons};M(m),_(!1)}).catch(s=>{y(s.message),_(!1)}))},[o,i]),C(()=>{document.title=t?.title?`${t.title} - dango`:"TV & Movies - dango"},[t?.title]);const V=()=>{!o||!t||c(r?I(i,o):I(i,o,h,1))},W=()=>{t&&A({tmdbId:x,mediaType:i,title:t.title,poster:t.poster,year:t.year,adult:t.adult})},r=i==="movie",v=!r,k=t?.backdrop?`https://image.tmdb.org/t/p/w1280${t.backdrop}`:"",b=t?.poster?`https://image.tmdb.org/t/p/w500${t.poster}`:"",N=T(()=>t?.genres?t.genres.map(s=>s.name).slice(0,5):[],[t?.genres]),S=T(()=>t?.seasons?t.seasons.filter(s=>s.season_number>0):[],[t?.seasons]),p=[t?.year,t?.status,v&&t?.number_of_seasons?`${t.number_of_seasons} Season${t.number_of_seasons>1?"s":""}`:null,v&&t?.number_of_episodes?`${t.number_of_episodes} Episodes`:null].filter(Boolean);if(L)return e("div",{className:n.container,children:e("div",{className:n.heroSkeleton,children:[e("div",{className:n.skeletonBanner}),e("div",{className:n.skeletonContent,children:[e("div",{className:n.skeletonPoster}),e("div",{className:n.skeletonInfo,children:[e("div",{className:n.skeletonTitle}),e("div",{className:n.skeletonMeta}),e("div",{className:n.skeletonDesc}),e("div",{className:n.skeletonActions})]})]})]})});if(u||!t)return e("div",{className:n.container,children:e("div",{className:n.errorState,children:[e(a,{name:"exclamation-triangle",size:48}),e("h2",{children:"Failed to load details"}),e("p",{children:u||"Something went wrong"}),e(w,{onClick:()=>c(-1),children:"Go Back"})]})});const f=t.adult&&!D;return e("div",{className:n.container,style:f?{filter:"blur(14px)",pointerEvents:"none",userSelect:"none"}:void 0,children:[e("div",{className:n.heroSection,children:[e("div",{className:n.bannerContainer,children:[k&&e("div",{className:n.banner,style:{backgroundImage:`url(${k})`}}),e("div",{className:n.bannerOverlay})]}),e("div",{className:n.heroContent,children:[e("div",{className:n.posterContainer,children:b&&e("img",{src:b,alt:t.title,className:n.poster,decoding:"async"})}),e("div",{className:n.infoGlass,children:[e("div",{className:n.topInfo,children:[e("h1",{className:n.title,children:t.title}),e("div",{className:n.quickMeta,children:[t.vote_average!=null&&t.vote_average>0&&e("div",{className:n.metaItem,children:[e(a,{name:"star",className:n.iconStar}),e("span",{children:Number(t.vote_average).toFixed(1)})]}),e("div",{className:n.metaItem,children:[e(a,{name:"tv",className:n.iconTv}),e("span",{children:r?"Movie":"TV Show"})]}),t.vote_count!=null&&e("div",{className:n.metaItem,children:[e(a,{name:"users",className:n.iconType}),e("span",{children:[t.vote_count.toLocaleString()," votes"]})]})]}),N.length>0&&e("div",{className:n.genres,children:N.map(s=>e("span",{className:n.genre,children:s},s))})]}),p.length>0&&e("div",{className:n.metaRow,children:p.map((s,m)=>e(F.Fragment,{children:[e("span",{className:n.metaValue,children:s}),m<p.length-1&&e("span",{className:n.metaDivider,children:"·"})]},m))}),t.overview&&e("div",{className:n.synopsisSection,children:[e("h2",{className:n.sectionTitleSmall,children:"Synopsis"}),e("p",{className:n.synopsis,children:t.overview})]}),e("div",{className:n.actions,children:[e("button",{className:n.watchBtn,onClick:V,children:[e(a,{name:"play",size:14}),r?"Watch Now":`Start S${h}`]}),e("button",{className:`${n.watchlistBtn} ${g?n.active:""}`,onClick:W,children:[g?e(a,{name:"check",size:14}):e(a,{name:"plus",size:14}),g?"In Watchlist":"Add to Watchlist"]})]}),v&&S.length>1&&e("label",{className:n.seasonPickerLabel,children:[e("span",{children:"Season"}),e("select",{value:h,onChange:s=>$(parseInt(s.target.value,10)||1),className:n.seasonSelect,children:S.map(s=>e("option",{value:s.season_number,children:["Season ",s.season_number," (",s.episode_count," Episodes)"]},s.season_number))})]}),e("button",{className:n.detailsToggleBtn,onClick:()=>P(!d),children:[d?e(a,{name:"chevron-up"}):e(a,{name:"chevron-down"}),d?"Hide Details":"Show Details"]}),d&&e("div",{className:n.expandedContent,children:e("div",{className:n.detailGrid,children:[t.first_air_date&&e("div",{className:n.detailItem,children:[e("strong",{children:r?"Release Date":"First Air Date"}),e("span",{children:t.first_air_date})]}),t.last_air_date&&e("div",{className:n.detailItem,children:[e("strong",{children:"Last Air Date"}),e("span",{children:t.last_air_date})]}),t.networks&&t.networks.length>0&&e("div",{className:n.detailItem,children:[e("strong",{children:"Networks"}),e("span",{children:t.networks.map(s=>s.name).join(", ")})]}),t.created_by&&t.created_by.length>0&&e("div",{className:n.detailItem,children:[e("strong",{children:"Created By"}),e("span",{children:t.created_by.map(s=>s.name).join(", ")})]}),t.episode_run_time&&t.episode_run_time.length>0&&e("div",{className:n.detailItem,children:[e("strong",{children:"Episode Runtime"}),e("span",{children:[t.episode_run_time[0]," min"]})]}),t.imdb_id&&e("div",{className:n.detailItem,children:[e("strong",{children:"IMDb"}),e("a",{href:`https://www.imdb.com/title/${t.imdb_id}`,target:"_blank",rel:"noopener noreferrer",className:n.imdbLink,children:"View on IMDb"})]})]})})]})]})]}),f&&e("div",{className:n.matureOverlay,children:e("div",{className:n.matureContent,children:[e(a,{name:"exclamation-triangle",size:48}),e("h2",{children:"Content Warning"}),e("p",{children:"This content may contain mature themes."}),e(w,{onClick:()=>c("/"),children:"Go Back"})]})})]})}export{Ke as default};
|