@serifpersia/dango 3.5.2 → 3.5.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-BVnAhrys.js → AnimeCard-Cw_PS4ev.js} +1 -1
- package/client/dist/assets/{AnimeInfo-DYBLIXmE.js → AnimeInfo-C_a0TTXe.js} +1 -1
- package/client/dist/assets/{AnimeInfoPage-DnXV4EMC.js → AnimeInfoPage-BB2RY_yn.js} +2 -2
- package/client/dist/assets/{Asmr-Dwlv-Af8.js → Asmr-oc1NaBzW.js} +1 -1
- package/client/dist/assets/{AsmrResetProgressModal-CnF9ZTJQ.js → AsmrResetProgressModal-cYbhZUTn.js} +1 -1
- package/client/dist/assets/AvSyncCalibrator-DyT8IH_y.js +10 -0
- package/client/dist/assets/{AvSyncCalibrator-gEONBv5a.css → AvSyncCalibrator-ieaRTs3u.css} +1 -1
- package/client/dist/assets/{Home-CUZPz_wy.js → Home-D3BVXJ5-.js} +1 -1
- package/client/dist/assets/{Insights-hvaO1jbY.js → Insights-BmBDfdDO.js} +1 -1
- package/client/dist/assets/{LibraryListPage-BeYz_I1y.js → LibraryListPage-C463kkiG.js} +1 -1
- package/client/dist/assets/{ListeningList-D-D-W7JK.js → ListeningList--EcSwlrV.js} +1 -1
- package/client/dist/assets/{Manga-DqIR2B6F.js → Manga-BhOs1yu_.js} +1 -1
- package/client/dist/assets/{MangaInfoPage-CWqxWbb3.js → MangaInfoPage-BP-kWQoG.js} +1 -1
- package/client/dist/assets/{MangaReadPage-BlyJ-OdY.js → MangaReadPage-CWCo81Qx.js} +1 -1
- package/client/dist/assets/{MangaResetProgressModal-gvz9_X7z.js → MangaResetProgressModal-DZGo5ZOV.js} +1 -1
- package/client/dist/assets/{Mature-B1Cuj67a.js → Mature-2wFvZ1Ix.js} +1 -1
- package/client/dist/assets/{MediaCard-GwFTnacn.js → MediaCard-BjnksiL1.js} +1 -1
- package/client/dist/assets/{Music-BEmRDuSo.js → Music-Bkz_ZyA4.js} +1 -1
- package/client/dist/assets/OptionListMenu-DIEBUA77.js +1 -0
- package/client/dist/assets/{Player-khTFa_o1.js → Player-BX_Skj8G.js} +6 -6
- package/client/dist/assets/{Player-B036Ic3m.css → Player-DBLl-bj_.css} +1 -1
- package/client/dist/assets/{PlayerSettings-B16FnAO_.js → PlayerSettings-B5ebT96a.js} +1 -1
- package/client/dist/assets/{QueueOptionsButton-DjBOibpt.js → QueueOptionsButton-iynUiGDS.js} +1 -1
- package/client/dist/assets/{QueueRail-DcLtEU46.js → QueueRail-D2RYa8Lf.js} +1 -1
- package/client/dist/assets/{Radio-rpaFuI72.js → Radio-DuFCL4ru.js} +1 -1
- package/client/dist/assets/{ReadingList-DTnI5411.js → ReadingList-CTOkZdFF.js} +1 -1
- package/client/dist/assets/{ResetProgressModal-Bcv92v7c.js → ResetProgressModal-Cjzd8-mT.js} +1 -1
- package/client/dist/assets/{Search-DNxPl_On.js → Search-CY6kxAYD.js} +1 -1
- package/client/dist/assets/{Settings-CQ-ykTG3.js → Settings-B2cCZBVq.js} +1 -1
- package/client/dist/assets/{SkeletonGrid-ZN-kS9re.js → SkeletonGrid-D98PFdEd.js} +1 -1
- package/client/dist/assets/{Trackers-EN1_ol5G.js → Trackers-CE2fejJC.js} +1 -1
- package/client/dist/assets/{Tv-Bx7tGS57.css → Tv-BlVIanQL.css} +1 -1
- package/client/dist/assets/Tv-BrwGG26Z.js +4 -0
- package/client/dist/assets/{TvInfo-Mpzun3PF.js → TvInfo-Dg_hN9lr.js} +1 -1
- package/client/dist/assets/{TvPopup-YYgg9-7r.js → TvPopup-CuR-CXOg.js} +1 -1
- package/client/dist/assets/{TvSearch-CdL9EA-S.js → TvSearch-DertJ9Je.js} +1 -1
- package/client/dist/assets/{TvWatchlist-DD6nRESU.js → TvWatchlist-DAp6XFbP.js} +1 -1
- package/client/dist/assets/{Watchlist-CD8UqukO.js → Watchlist-C5eiD8Nw.js} +1 -1
- package/client/dist/assets/{hls-E94cMCjR.js → hls-s6kEkfvo.js} +1 -1
- package/client/dist/assets/{index-CZW1But9.js → index-GAU-R8jU.js} +2 -2
- package/client/dist/assets/{useAnimeInfoData-C9tOyy6E.js → useAnimeInfoData-9eudX-hq.js} +1 -1
- package/client/dist/assets/{useAsmr-B4HAapZD.js → useAsmr-Dj8QioSc.js} +1 -1
- package/client/dist/assets/{useAsmrPopup-trIV7nUr.js → useAsmrPopup-QhQCU1HG.js} +1 -1
- package/client/dist/assets/{useMangaLibrary-CZ2Gke8p.js → useMangaLibrary-B6HQI4jU.js} +1 -1
- package/client/dist/assets/{useMangaPopup-80Daa4y-.js → useMangaPopup-BC8Mg08o.js} +1 -1
- package/client/dist/assets/{useProviders-CqMq_6ue.js → useProviders-DoJoJR_4.js} +1 -1
- package/client/dist/assets/{useTv-CHDhiKWu.js → useTv-C0AAHhYE.js} +1 -1
- package/client/dist/assets/{useTvLibrary-DWUGDtld.js → useTvLibrary-B1csgiZ_.js} +1 -1
- package/client/dist/index.html +1 -1
- package/package.json +2 -2
- package/server/dist/hono/tv.js +31 -14
- package/server/dist/lib/ytmusic.js +28 -2
- package/server/dist/trpc/routers/music.js +25 -3
- package/server/dist/trpc/routers/tv.js +1 -0
- package/server/package.json +1 -1
- package/client/dist/assets/AvSyncCalibrator-Cr9n1euF.js +0 -10
- package/client/dist/assets/OptionListMenu-Dlk9eHM7.js +0 -1
- package/client/dist/assets/Tv-C-4wd-BS.js +0 -4
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{u as t,d as k,A as B,h as S,S as Oe,o as $r,p as Or,a as Dr,T as $e,q as C}from"./vendor-core-DfaOB3Rn.js";import{u as Fr}from"./vendor-query-BBT5_sHx.js";import{g as dn,e as jr,t as St,z as Vr,O as zr,M as Nn,B as Ke}from"./index-CZW1But9.js";import{I as $}from"./vendor-icons-DrybRNxP.js";import{S as Wr,U as Hr,p as Pn,M as Ur,B as ir,k as An,j as Kr,C as qr,a as Yr,b as Qr,u as Gr,c as Xr,d as Jr,h as Zr,e as es,g as ts,l as ns,z as rs,i as In,D as ss,F as as,G as sr,s as Bn,m as os,n as is,o as ls,r as cs,q as Ze,A as ds,t as us,E as ms,x as hs,P as ps,v as ke,y as gs,R as fs}from"./AvSyncCalibrator-Cr9n1euF.js";import{S as vs,O as ln,a as bs,A as ys,b as _s}from"./OptionListMenu-Dlk9eHM7.js";import{u as Ss}from"./useProviders-CqMq_6ue.js";import{d as Cs,g as Ts,h as ks,f as Es,e as xs,j as Ns,k as Is}from"./useTvLibrary-DWUGDtld.js";import{l as Bs,c as ws}from"./hls-E94cMCjR.js";import{u as Ps}from"./useIsMobile-Dvx1uJ82.js";import{S as As}from"./SynopsisText-B3Sa5pRv.js";const Ms="_fullscreenFlat_1xij1_1",Ls="_timeDisplay_1xij1_15",Rs="_bottomControls_1xij1_19",$s="_leftControls_1xij1_23",Os="_rightControls_1xij1_24",Ds="_controlBtn_1xij1_28",Fs="_controlsOverlay_1xij1_47",js="_hidden_1xij1_67",Vs="_topControls_1xij1_73",zs="_backBtn_1xij1_93",Ws="_videoTitleInfo_1xij1_113",Hs="_animeTitle_1xij1_119",Us="_episodeLabel_1xij1_127",Ks="_speedBoostBadge_1xij1_134",qs="_progressBarContainer_1xij1_180",Ys="_progressBar_1xij1_180",Qs="_thumb_1xij1_199",Gs="_bufferedBar_1xij1_217",Xs="_watchedBar_1xij1_227",Js="_scrubbing_1xij1_252",Zs="_timeBubble_1xij1_256",ea="_bottomControlsRow_1xij1_270",ta="_nextEpisodeBtn_1xij1_293",na="_active_1xij1_346",ra="_settingsPanel_1xij1_421",sa="_settingsHeader_1xij1_440",aa="_settingsBackBtn_1xij1_448",oa="_settingsTitle_1xij1_466",ia="_settingsContent_1xij1_477",la="_currentValue_1xij1_486",ca="_menuItem_1xij1_501",da="_menuNote_1xij1_534",ua="_loadingOverlay_1xij1_547",ma="_loadingDots_1xij1_558",ha="_dot_1xij1_563",pa="_bufferingOverlay_1xij1_592",ga="_bufferingSpinner_1xij1_601",a={fullscreenFlat:Ms,timeDisplay:Ls,bottomControls:Rs,leftControls:$s,rightControls:Os,controlBtn:Ds,controlsOverlay:Fs,hidden:js,topControls:Vs,backBtn:zs,videoTitleInfo:Ws,animeTitle:Hs,episodeLabel:Us,speedBoostBadge:Ks,progressBarContainer:qs,progressBar:Ys,thumb:Qs,bufferedBar:Gs,watchedBar:Xs,scrubbing:Js,timeBubble:Zs,bottomControlsRow:ea,nextEpisodeBtn:ta,active:na,settingsPanel:ra,settingsHeader:sa,settingsBackBtn:aa,settingsTitle:oa,settingsContent:ia,currentValue:la,menuItem:ca,menuNote:da,loadingOverlay:ua,loadingDots:ma,dot:ha,bufferingOverlay:pa,bufferingSpinner:ga},fa=({player:o,visible:g,settingsOpen:D,onOpenSettings:F,onCloseSettings:H,hasSubtitles:T,isSubtitleActive:r,subtitles:I,onSubtitleChange:i,showNextEpisodeButton:ee,onNextEpisode:Y,isTheaterMode:P,onTheaterModeToggle:u,timeLabelRef:q})=>{const{state:m,refs:De,actions:A}=o,j=De.videoRef,Ne=L=>{const te=j.current;!te||isNaN(m.duration)||m.duration===0||(te.currentTime=L*m.duration)},Fe=()=>{j.current&&(A.setIsScrubbing(!0),A.wasPlayingBeforeScrub.current=!j.current.paused,j.current.pause())},je=L=>{const te=j.current;te&&m.duration&&(te.currentTime=L*m.duration)},et=()=>{A.setIsScrubbing(!1),A.wasPlayingBeforeScrub.current&&j.current?.play().catch(()=>{})},qe=L=>{const te=j.current;te&&(te.volume=L,te.muted=L===0)},Ye=()=>{if(r){i(-1);return}let L=null;try{L=localStorage.getItem("tvLastSubtitle")}catch{}i(Pn(I,{lastKey:L,enabled:!0}))},Q=m.isMuted?t($,{name:"volume-mute"}):m.volume<.5?t($,{name:"volume-down"}):t($,{name:"volume-up"});return t("div",{className:`${a.controlsOverlay} ${g?"":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(Wr,{classes:{container:a.progressBarContainer,scrubbing:a.scrubbing,timeBubble:a.timeBubble,bar:a.progressBar,buffered:a.bufferedBar,watched:a.watchedBar,thumb:a.thumb},videoRef:j,duration:m.duration,formatTime:dn,isScrubbing:m.isScrubbing,buffered:"full",onSeek:Ne,onScrubStart:Fe,onScrubMove:je,onScrubEnd:et,timeLabelRef:q}),t("div",{className:a.bottomControlsRow,children:[t("div",{className:a.leftControls,children:[t("button",{className:a.controlBtn,onClick:A.togglePlay,"aria-label":m.isPlaying?"Pause":"Play",children:m.isPlaying?t($,{name:"pause"}):t($,{name:"play"})}),t(Hr,{muted:m.isMuted,volume:m.volume,volumeIcon:Q,buttonClassName:a.controlBtn,onToggleMute:A.toggleMute,onVolumeChange:qe,onExpandedChange:L=>A.setShowVolumeSlider(L)}),t("span",{className:a.timeDisplay,ref:q,children:[dn(0)," / ",dn(m.duration)]})]}),t("div",{className:a.rightControls,children:[ee&&t("button",{className:a.nextEpisodeBtn,onClick:Y,title:"Play next episode",children:"Next EP"}),T&&t("button",{className:`${a.controlBtn} ${r?a.active:""}`,onClick:Ye,"aria-label":r?"Turn subtitles off":"Turn subtitles on",children:t($,{name:"closed-captioning"})}),t("button",{className:`${a.controlBtn} ${D?a.active:""}`,onClick:()=>D?H():F(),"aria-label":"Settings",children:t($,{name:"cog"})}),t("button",{className:`${a.controlBtn} ${P?a.active:""}`,onClick:L=>{L.stopPropagation(),u()},title:P?"Exit Theater Mode":"Theater Mode","aria-label":P?"Exit Theater Mode":"Theater Mode",children:t($,{name:"tv"})}),t("button",{className:a.controlBtn,onClick:A.toggleFullscreen,"aria-label":m.isFullscreen?"Exit Fullscreen":"Fullscreen",children:m.isFullscreen?t($,{name:"compress"}):t($,{name:"expand"})})]})]})]})})},cn=-6e4,wn=6e4,ar=500,va=({classes:o,delayMs:g,onDelayChange:D})=>{const[F,H]=k(null),T=F??g,r=B(D);r.current=D;const I=B(g);I.current=g;const i=B(null);i.current=F,S(()=>{H(null)},[g]),S(()=>()=>{const P=i.current;P!==null&&P!==I.current&&r.current(P)},[]);const ee=P=>{I.current=P,i.current=null,r.current(P),H(null)},Y=P=>{const u=i.current??I.current,q=Math.max(cn,Math.min(wn,u+P));ee(q)};return t(Oe,{children:[t("div",{style:{display:"flex",gap:6,padding:"0.5rem 0.75rem 0.25rem"},children:[t("button",{type:"button",className:o.item,onClick:()=>Y(-ar),"aria-label":"Show subtitles 0.5 seconds earlier",style:{flex:1,justifyContent:"center"},children:t("span",{children:"-0.5s"})}),t("button",{type:"button",className:o.item,onClick:()=>Y(ar),"aria-label":"Show subtitles 0.5 seconds later",style:{flex:1,justifyContent:"center"},children:t("span",{children:"+0.5s"})}),t("button",{type:"button",className:o.item,onClick:()=>ee(0),disabled:T===0,"aria-label":"Reset subtitle timing",style:{flex:1,justifyContent:"center"},children:t("span",{children:"Reset"})})]}),t(Ur,{label:"Subtitle timing",display:ir(T),min:cn,max:wn,step:100,value:T,percent:(T-cn)/(wn-cn)*100,onChange:P=>{const u=Math.round(P);i.current=u,H(u)},onCommit:()=>{const P=i.current;P!==null&&ee(P)}}),t("div",{className:o.note,children:"Positive delays subtitles (show later). Negative shows them earlier. 0.0s is default."})]})},ba=({view:o,onSelectView:g,onClose:D,player:F,onSubtitleStyleChange:H,streams:T,qualityIdx:r,onQualityChange:I,isMovySource:i,movyServers:ee,selectedMovyServer:Y,onMovyServerSelect:P,hasSubtitles:u,subtitles:q,selectedSubtitle:m,isSubtitleActive:De,onSubtitleChange:A,audioTracks:j,selectedAudioTrack:Ne,onAudioTrackChange:Fe,videoDelayEnabled:je,onVideoDelayToggle:et,videoDelayMs:qe,onVideoDelayChange:Ye,onCalibrate:Q,subtitleDelayMs:L,onSubtitleDelayChange:te,ambientSettings:me,onAmbientChange:Se})=>{const{state:U}=F,G=()=>t(Oe,{children:[T.length>1&&t("button",{className:a.menuItem,onClick:()=>g("quality"),children:[t("span",{children:"Quality"}),t("span",{className:a.currentValue,children:T[r]?.quality||"Auto"})]}),i&&ee.length>0&&t("button",{className:a.menuItem,onClick:()=>g("server"),children:[t("span",{style:{display:"flex",alignItems:"center",gap:6},children:[t($,{name:"server",size:12})," Movy Server"]}),t("span",{className:a.currentValue,style:{textTransform:"capitalize"},children:Y})]}),u&&t("button",{className:a.menuItem,onClick:()=>g("subtitles"),children:[t("span",{children:"Subtitles"}),t("span",{className:a.currentValue,children:De?q[m]?.label||q[m]?.language:"Off"})]}),u&&t("button",{className:a.menuItem,onClick:()=>g("subtitle-style"),children:[t("span",{children:"Subtitle Style"}),t("span",{className:a.currentValue,children:[U.subtitleFontSize.toFixed(1),"x · ",U.subtitlePosition]})]}),u&&t("button",{className:a.menuItem,onClick:()=>g("subtitle-timing"),children:[t("span",{children:"Subtitle Timing"}),t("span",{className:a.currentValue,children:ir(L)})]}),j.length>0&&t("button",{className:a.menuItem,onClick:()=>g("audio"),children:[t("span",{children:"Audio Track"}),t("span",{className:a.currentValue,children:j[Ne]?.label||j[Ne]?.language})]}),t("button",{className:a.menuItem,onClick:()=>g("av-sync"),children:[t("span",{children:"A/V Sync"}),t("span",{className:a.currentValue,children:je?`${qe}ms`:"Off"})]}),me&&Se&&t("button",{className:a.menuItem,onClick:()=>g("ambient"),children:[t("span",{children:"Ambient Light"}),t("span",{className:a.currentValue,children:me.enabled?"On":"Off"})]})]}),ht=()=>t(ln,{classes:{item:a.menuItem,active:a.active},options:T.map((b,ne)=>({key:String(ne),label:b.quality,selected:ne===r})),onSelect:b=>I(Number(b))}),he=()=>t(ln,{classes:{item:a.menuItem,active:a.active},options:[{key:"off",label:"Off",selected:!De},...q.map((b,ne)=>({key:String(ne),label:b.label||b.language,selected:ne===m}))],onSelect:b=>A(b==="off"?-1:Number(b))}),Ie=()=>t(bs,{classes:{item:a.menuItem,active:a.active},values:{fontSize:U.subtitleFontSize,position:U.subtitlePosition,bgOpacity:U.subtitleBgOpacity,bgColor:U.subtitleBgColor,textColor:U.subtitleTextColor,edge:U.subtitleEdge,bold:U.subtitleBold},onChange:H}),X=()=>t(va,{classes:{item:a.menuItem,active:a.active,note:a.menuNote},delayMs:L,onDelayChange:b=>te?.(b)}),oe=()=>t(ln,{classes:{item:a.menuItem,active:a.active},options:j.map((b,ne)=>({key:String(ne),label:b.label||b.language,selected:ne===Ne})),onSelect:b=>Fe(Number(b))}),Ve=()=>t(ln,{classes:{item:a.menuItem,active:a.active},options:ee.map(b=>({key:b,label:t("span",{style:{textTransform:"capitalize"},children:b}),selected:Y===b})),onSelect:b=>P?.(b)}),J=()=>t(ys,{classes:{item:a.menuItem,active:a.active,note:a.menuNote},enabled:je,delayMs:qe,onToggle:b=>et?.(b),onDelayChange:b=>Ye?.(b),onCalibrate:Q}),Ee=()=>me&&Se?t(_s,{classes:{item:a.menuItem,active:a.active,note:a.menuNote},values:me,onChange:Se}):null;return t("div",{"data-speed-boost-ignore":"true",onClick:b=>b.stopPropagation(),children:t(vs,{classes:{panel:a.settingsPanel,header:a.settingsHeader,backBtn:a.settingsBackBtn,title:a.settingsTitle,content:a.settingsContent},title:o==="main"?"Settings":o==="subtitle-style"?"Subtitle Style":o==="subtitle-timing"?"Subtitle Timing":o==="audio"?"Audio Track":o==="server"?"Movy Server":o==="av-sync"?"A/V Sync":o==="ambient"?"Ambient Light":o.charAt(0).toUpperCase()+o.slice(1),onBack:()=>o==="main"?D():g("main"),children:[o==="main"&&G(),o==="quality"&&ht(),o==="subtitles"&&he(),o==="subtitle-style"&&Ie(),o==="subtitle-timing"&&X(),o==="audio"&&oe(),o==="server"&&Ve(),o==="av-sync"&&J(),o==="ambient"&&Ee()]})})},ya=({player:o,title:g,episodeLabel:D,audioTracks:F,selectedAudioTrack:H,onAudioTrackChange:T,subtitles:r,selectedSubtitle:I,onSubtitleChange:i,streams:ee,qualityIdx:Y,onQualityChange:P,onBack:u,children:q,movyServers:m=[],selectedMovyServer:De="atlanta",onMovyServerSelect:A,isMovySource:j=!1,videoDelayEnabled:Ne=!1,onVideoDelayToggle:Fe,videoDelayMs:je=0,onVideoDelayChange:et,onCalibrateAvSync:qe,subtitleDelayMs:Ye=0,onSubtitleDelayChange:Q,showNextEpisodeButton:L=!1,onNextEpisode:te,isLoading:me=!1,isTheaterMode:Se,onTheaterModeToggle:U,ambientSettings:G,onAmbientChange:ht})=>{const{state:he,refs:Ie,actions:X}=o,oe=Ie.videoRef,{subtitleFontSize:Ve,subtitlePosition:J,subtitleBgOpacity:Ee,subtitleBgColor:b,subtitleTextColor:ne,subtitleEdge:tt,subtitleBold:Dt}=he,[ze,Be]=k(null),pe=B(null),[Ct,Tt]=k(0);S(()=>{const ge=oe.current;if(!ge)return;const _=()=>Tt(ge.clientHeight||0);_();const nt=new ResizeObserver(_);return nt.observe(ge),()=>nt.disconnect()},[oe,ee]);const E=(ge,_)=>{try{localStorage.setItem(ge,String(_))}catch{}},ie=(ge,_)=>{switch(ge){case"fontSize":typeof _=="number"&&(X.setSubtitleFontSize(_),E("subtitleFontSize",_));break;case"position":typeof _=="number"&&(X.setSubtitlePosition(_),E("subtitlePosition",_));break;case"bgOpacity":typeof _=="number"&&(X.setSubtitleBgOpacity(_),E("subtitleBgOpacity",_));break;case"bgColor":typeof _=="string"&&(X.setSubtitleBgColor(_),E("subtitleBgColor",_));break;case"textColor":typeof _=="string"&&(X.setSubtitleTextColor(_),E("subtitleTextColor",_));break;case"edge":(_==="shadow"||_==="outline"||_==="none")&&(X.setSubtitleEdge(_),E("subtitleEdge",_));break;case"bold":typeof _=="boolean"&&(X.setSubtitleBold(_),E("subtitleBold",_));break}};S(()=>{const ge="tv-player-subtitle-style";let _=document.getElementById(ge);_||(_=document.createElement("style"),_.id=ge,document.head.appendChild(_));const nt={fontSize:Ve,position:J,bgOpacity:Ee,bgColor:b,textColor:ne,edge:tt,bold:Dt},le=oe.current,xe=An(Ve,Ct||le?.clientHeight||720);if(_.textContent=Kr({...nt,fontSize:xe}),le){const Nt=()=>{const x=Number(J);return isNaN(x)?0:Math.max(0,Math.min(100,x))},It=(x,re)=>{try{const se=x;se.snapToLines=!1,se.line=re}catch{}},un=()=>{const x=xe*16,re=le.videoHeight||le.clientHeight||720,se=le.videoWidth||le.clientWidth||1280;return{step:x*1.3/re*100,chars:Math.max(20,Math.floor(se/(x*.55)))}},zt=x=>{const re=Math.max(0,Math.min(100,100-Nt())),se=Array.from(x.activeCues??[]);if(se.length<=1){se.forEach(we=>It(we,re));return}const{step:de,chars:wt}=un();let Ht=re;for(let we=se.length-1;we>=0;we--){const rt=String(se[we].text??"").replace(/<[^>]*>/g,"").split(`
|
|
2
|
-
`).reduce((st,h)=>st+Math.max(1,Math.ceil(h.length/wt)),0),Kt=Ht-rt*de;It(se[we],Math.max(0,Kt)),Ht=Kt-de*.4}},Bt=()=>{const x=Math.max(0,Math.min(100,100-Nt()));Array.from(le.textTracks).forEach(re=>{re.cues&&(Array.from(re.cues).forEach(se=>It(se,x)),re.mode==="showing"&&zt(re))})};Bt();const ce=x=>{const re=x.target;re.mode==="showing"&&zt(re)},pt=()=>{Array.from(le.textTracks).forEach(x=>{x.removeEventListener("cuechange",ce),x.addEventListener("cuechange",ce)}),Bt()};Array.from(le.textTracks).forEach(x=>{x.addEventListener("cuechange",ce)}),le.textTracks.addEventListener("addtrack",pt);const We=Array.from(le.querySelectorAll("track")),Wt=()=>Bt();return We.forEach(x=>x.addEventListener("load",Wt)),()=>{Array.from(le.textTracks).forEach(x=>{x.removeEventListener("cuechange",ce)}),le.textTracks.removeEventListener("addtrack",pt),We.forEach(x=>x.removeEventListener("load",Wt))}}},[Ve,J,Ee,b,ne,tt,Dt,I,r,oe,Ct]);const kt=r.length>0,Et=I>=0,xt=()=>{Be("main"),X.setShowControls(!0)},y=()=>{Be(null)},l=he.showControls||!!ze,fe=t(Qr,{visible:l,title:g,episode:D,onBack:u,classes:{overlay:a.controlsOverlay,hidden:a.hidden,top:a.topControls,backBtn:a.backBtn,titleInfo:a.videoTitleInfo,title:a.animeTitle,episode:a.episodeLabel}}),ve=!me&&!he.isBuffering&&he.duration>0?t(qr,{isPlaying:he.isPlaying,onTogglePlay:X.togglePlay,onSkipBack:()=>X.seek(-10),onSkipForward:()=>X.seek(10)}):null,Ft=t(fa,{player:o,visible:l,settingsOpen:!!ze,onOpenSettings:xt,onCloseSettings:y,hasSubtitles:kt,isSubtitleActive:Et,subtitles:r,onSubtitleChange:i,showNextEpisodeButton:L,onNextEpisode:te,isTheaterMode:Se,onTheaterModeToggle:U,timeLabelRef:pe}),jt=ze?t(ba,{view:ze,onSelectView:Be,onClose:y,player:o,onSubtitleStyleChange:ie,streams:ee,qualityIdx:Y,onQualityChange:P,isMovySource:j,movyServers:m,selectedMovyServer:De,onMovyServerSelect:A,hasSubtitles:kt,subtitles:r,selectedSubtitle:I,isSubtitleActive:Et,onSubtitleChange:i,audioTracks:F,selectedAudioTrack:H,onAudioTrackChange:T,videoDelayEnabled:Ne,onVideoDelayToggle:Fe,videoDelayMs:je,onVideoDelayChange:et,onCalibrate:()=>{Be(null),qe?.()},subtitleDelayMs:Ye,onSubtitleDelayChange:Q,ambientSettings:G,onAmbientChange:ht}):null,Vt=t(Oe,{children:[me&&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})]})}),he.isBuffering&&!me&&t("div",{className:a.bufferingOverlay,"aria-hidden":"true",children:t("div",{className:a.bufferingSpinner})}),he.isSpeedBoostActive&&t("div",{className:a.speedBoostBadge,"aria-hidden":"true",children:[t("span",{children:"2x"}),t($,{name:"forward",size:12})]})]});return t(Yr,{player:o,topBar:fe,centerControls:ve,bottomBar:!me&&he.duration>0?Ft:null,settingsPanel:jt,overlays:Vt,isInteracting:!!ze,className:he.isFullscreen?a.fullscreenFlat:"",children:q})};function _a(o,g,D){const F=()=>{const T=Array.isArray(o.audioTracks)?o.audioTracks.length:0,r=D.getWant(),I=T>0?Math.min(Math.max(0,r),T-1):r;o.audioTrack=I,I!==r&&D.onResolve(I)},H=(T,r)=>{const I=D.getWant(),i=Array.isArray(o.audioTracks)?o.audioTracks.length:0;if(r.id!==I&&I>=0&&I<i){o.audioTrack!==I&&(o.audioTrack=I);return}D.onResolve(r.id)};return o.on(g.MANIFEST_PARSED,F),o.on(g.AUDIO_TRACK_SWITCHED,H),()=>{o.off(g.MANIFEST_PARSED,F),o.off(g.AUDIO_TRACK_SWITCHED,H)}}const Sa="_page_263ma_1",Ca="_header_263ma_7",Ta="_pageTitle_263ma_11",ka="_searchForm_263ma_21",Ea="_searchInput_263ma_27",xa="_searchBtn_263ma_42",Na="_suggestions_263ma_58",Ia="_suggestionPill_263ma_65",Ba="_statusMsg_263ma_81",wa="_error_263ma_87",Pa="_textOnly_263ma_91",Aa="_spinner_263ma_96",Ma="_spin_263ma_96",La="_grid_263ma_110",Ra="_skeletonCard_263ma_116",$a="_skeletonThumb_263ma_121",Oa="_skeletonLine_263ma_127",Da="_shimmer_263ma_134",Fa="_backBtn_263ma_154",ja="_meta_263ma_172",Va="_headerActions_263ma_180",za="_watchlistBtn_263ma_187",Wa="_active_263ma_205",Ha="_year_263ma_215",Ua="_rating_263ma_220",Ka="_typeBadge_263ma_229",qa="_tv_263ma_237",Ya="_movie_263ma_242",Qa="_tvSeries_263ma_247",Ga="_tvMiniSeries_263ma_252",Xa="_overview_263ma_257",Ja="_controls_263ma_264",Za="_controlLabel_263ma_272",eo="_select_263ma_282",to="_playerSection_263ma_293",no="_video_263ma_297",ro="_videoHidden_263ma_319",so="_delayCanvas_263ma_324",ao="_delayCanvasActive_263ma_337",oo="_subtitleOverlay_263ma_341",io="_videoIframe_263ma_360",lo="_retryButton_263ma_368",co="_sidebarSeason_263ma_383",uo="_mobileSeasonRow_263ma_399",mo="_sidebarPosterCard_263ma_413",ho="_sidebarPosterMeta_263ma_428",po="_providerSelectWrap_263ma_445",go="_genreRow_263ma_457",fo="_genreChip_263ma_464",vo="_metaRow_263ma_474",bo="_detailGrid_263ma_483",yo="_detailItem_263ma_490",_o="_imdbLink_263ma_512",v={page:Sa,header:Ca,pageTitle:Ta,searchForm:ka,searchInput:Ea,searchBtn:xa,suggestions:Na,suggestionPill:Ia,statusMsg:Ba,error:wa,textOnly:Pa,spinner:Aa,spin:Ma,grid:La,skeletonCard:Ra,skeletonThumb:$a,skeletonLine:Oa,shimmer:Da,backBtn:Fa,meta:ja,headerActions:Va,watchlistBtn:za,active:Wa,year:Ha,rating:Ua,typeBadge:Ka,tv:qa,movie:Ya,tvSeries:Qa,tvMiniSeries:Ga,overview:Xa,controls:Ja,controlLabel:Za,select:eo,playerSection:to,video:no,videoHidden:ro,delayCanvas:so,delayCanvasActive:ao,subtitleOverlay:oo,videoIframe:io,retryButton:lo,sidebarSeason:co,mobileSeasonRow:uo,sidebarPosterCard:mo,sidebarPosterMeta:ho,providerSelectWrap:po,genreRow:go,genreChip:fo,metaRow:vo,detailGrid:bo,detailItem:yo,imdbLink:_o},So=[],Co=[];function or({error:o,servers:g,selectedServer:D,onRetry:F,onSelect:H}){return t("div",{className:`${v.statusMsg} ${v.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:o}),t("button",{className:v.retryButton,onClick:F,children:"Retry"})]}),g.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:"}),g.map(T=>t("button",{onClick:()=>H(T),className:v.retryButton,style:{padding:"4px 8px",fontSize:"0.75rem",textTransform:"capitalize",background:D===T?"var(--accent)":void 0,color:D===T?"white":void 0},children:T},T))]})]})}const Ro=()=>{const{id:o}=$r(),[g]=Or(),D=B(g);D.current=g;const F=Dr(),H=Fr(),T=g.get("type"),[r,I]=k(null),[i,ee]=k(()=>parseInt(g.get("s")||"1",10)||1),[Y,P]=k([]),[u,q]=k(()=>parseInt(g.get("e")||"1",10)||1),[m,De]=k(()=>{try{return localStorage.getItem("tvProvider")||""}catch{return""}}),[A,j]=k([]),[Ne,Fe]=k(""),{options:je,isFallback:et,isLoading:qe}=Ss(),Ye=$e(()=>je.filter(e=>(e.kind??"tv")==="tv").map(e=>({id:e.value,label:e.label,tier:e.tier==="embed"?"embed":"direct",servers:e.servers})),[je]),Q=et||Ye.length===0?So:Ye,L=Q.filter(e=>e.tier==="direct"),te=Q.filter(e=>e.tier==="embed"),[me,Se]=k(!1),[U,G]=k(""),[ht,he]=k([]),[Ie,X]=k(0),[oe,Ve]=k([]),[J,Ee]=k(-1),[b,ne]=k(0),[tt,Dt]=k(""),[ze,Be]=k(""),[pe,Ct]=k(()=>{try{return localStorage.getItem("movyServer")||""}catch{return""}}),Tt=$e(()=>Q.find(e=>e.id===m),[Q,m]),E=Tt?.tier==="embed",ie=$e(()=>Tt?.servers??[],[Tt]),kt=B([]);S(()=>{kt.current=A},[A]);const Et=B(Ie);S(()=>{Et.current=Ie},[Ie]);const xt=B(J);S(()=>{xt.current=J},[J]);const y=Gr({skipIntervals:Co}),l=y.refs.videoRef,fe=B(null),ve=B([]),Ft=B(null),jt=B(null),{videoDelayMs:Vt,videoDelayEnabled:ge,setDelayEnabled:_,handleVideoDelayChange:nt,isCalibrating:le,testClipActive:xe,stopCalibration:Nt,openAvSyncCalibrator:It,cancelAvSyncCalibrator:un,applyAvSyncCalibrator:zt,toggleTestClip:Bt,calibReturnRef:ce,effectiveVideoDelayMs:pt}=Xr(l),[We,Wt]=k(()=>{try{const e=Number(localStorage.getItem("tvSubtitleDelayMs"));if(Number.isFinite(e)&&e>=-6e4&&e<=6e4)return Math.round(e)}catch{}return 0}),x=B(We);x.current=We;const re=C(e=>{const n=Math.max(-6e4,Math.min(6e4,Math.round(e)));if(x.current!==n){x.current=n,Wt(n);try{localStorage.setItem("tvSubtitleDelayMs",String(n))}catch{}}},[]);Jr({videoRef:l,canvasRef:Ft,delayMs:pt,enabled:ge});const se=ge,de=se||We!==0,{settings:wt,update:Ht}=Zr(),we=B(de);we.current=de;const Ut=C(()=>{if(!we.current)return;const e=l.current;e&&Array.from(e.textTracks).forEach(n=>{n.mode!=="hidden"&&(n.mode="hidden")})},[l]),{hasConsent:rt,grant:Kt}=jr(),st=B("");st.current||(st.current=`tv-${Date.now()}-${Math.random().toString(36).slice(2)}`);const h=T==="movie",qt=o?Cs(T||"tv",o):"",V=qt,Mn=Ts(),Yt=ks(),{toggle:Ln,bookmarkedIds:lr,pending:cr}=Es(),{data:Rn}=xs(r?qt:void 0),Qt=Rn?!!Rn.inLibrary:qt?lr.has(qt):!1,dr=C(()=>{!r||!o||Ln({tmdbId:Number(o),mediaType:T||"tv",title:r.title,poster:r.poster,year:r.year,adult:r.adult})},[r,o,T,Ln]),{data:at,isFetched:$n,isPending:On}=Ns(V||void 0,i,u),Gt=$e(()=>Y.map(e=>e.episode_number).sort((e,n)=>e-n),[Y]),ot=Gt.indexOf(u),mn=ot>0?Gt[ot-1]:null,N=ot>=0&&ot<Gt.length-1?Gt[ot+1]:null,Xt=$e(()=>(r?.seasons??[]).map(e=>e.season_number).filter(e=>Number.isFinite(e)).sort((e,n)=>e-n),[r]),Ce=$e(()=>{if(h||N!=null)return null;const e=Xt.indexOf(i);return e>=0&&e<Xt.length-1?Xt[e+1]:(r?.number_of_seasons??0)>i?i+1:null},[h,N,Xt,i,r?.number_of_seasons]),Dn=at?.currentTime??0,Fn=at?.duration??0,hn=at?.completed===!0||at?.completed===1||In(Dn,Fn),[Pe,He]=k(!1),Ae=B(!1),pn=B(null),Pt=B(null);S(()=>{Ae.current=!1,Pt.current=null,He(!1)},[V,i,u]);const[Me,Jt]=k(!1),[gt,jn]=k(0),[it,Vn]=k(!1),[Qe,lt]=k(!1),[ur,gn]=k(!1),[mr,zn]=k(""),[Zt,hr]=k(!1),[pr,fn]=k(!1),{isTheaterMode:Ue,toggleTheaterMode:vn,handleLayoutClick:gr}=es();S(()=>{const e=n=>{n.target.closest('input, textarea, button, select, a, [role="button"], [contenteditable="true"]')||n.key.toLowerCase()==="t"&&vn()};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[vn]),ts(y,(A.length>0||ze!=="")&&!Ue&&!Me&&!Pe&&!Qe);const fr=Ps(),[ft,vr]=k(ns),br=C(e=>{vr(e),rs(e)},[]),be=B(!1),ct=B(null),bn=B(0),Wn=B(!1),Hn=B(0),ue=B(null),At=B(""),yr=sr(Dn,Fn),Mt=!be.current&&!Ae.current&&(Me||Pe||Qe||hn||yr),vt=B(Mt);vt.current=Mt;const bt=B(!1);S(()=>{bt.current=it},[it]);const Ge=C((e,n)=>{if(!V||!n||n<30)return;const s=In(e,n),c=s?n:e;Math.abs(c-bn.current)<10&&!s||(bn.current=c,Mn.mutate({mediaId:V,season:i,episode:u,currentTime:Math.floor(c),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:T||"tv",adult:r?.adult?1:0}))},[V,i,u,Mn,r,T]),Le=C((e,n)=>{Nt();const s=new URLSearchParams(g);s.set("type",g.get("type")||"tv"),s.set("s",String(e)),s.set("e",String(n)),F(`${window.location.pathname}?${s.toString()}`)},[g,F,Nt]),Lt=C(()=>{const e=l.current;if(!e||h||N==null){gn(!1);return}const n=e.duration||0,s=e.currentTime||0;gn(n>0&&s/n>=.8)},[h,N,l]),en=C((e,n)=>["tv-sources",m,h?"movie":"tv",o,e,n,pe],[m,h,o,pe]),tn=C(async(e,n)=>{if(!r||!o||!m)return{valid:!1,sources:[]};const s=h?"movie":"tv",c=await St.tv.sources.query({provider:m,type:s,tmdbId:String(o),season:e,episode:n,title:r.title||"",year:r.year||"",totalSeasons:String(r.number_of_seasons||1),imdbId:r.imdb_id||"",...ie.length>0&&pe?{server:pe}:{}});return{valid:"valid"in c?c.valid:!1,error:"error"in c?c.error:void 0,sources:c.sources,referer:"referer"in c?c.referer:void 0,audioTracks:c.audioTracks,subtitles:"subtitles"in c?c.subtitles:void 0}},[r,o,m,h,ie,pe]),Un=C(()=>{if(h||!r||!o||!m||E||N==null)return;const e=en(i,N);H.getQueryState(e)?.status!=="success"&&H.prefetchQuery({queryKey:e,queryFn:()=>tn(i,N),staleTime:300*1e3,gcTime:1800*1e3})},[h,r,o,m,E,N,i,H,en,tn]),_r=C(()=>{if(xe)return;Lt();const e=l.current;!e||e.paused||e.ended||(e.duration>0&&e.duration-e.currentTime<=60&&Un(),ct.current&&clearTimeout(ct.current),ct.current=setTimeout(()=>{Ge(e.currentTime,e.duration||0)},5e3))},[Ge,l,xe,Lt,Un]),Sr=C(()=>{const e=l.current;if(!e||!r)return;ct.current&&clearTimeout(ct.current),Ge(e.currentTime,e.duration||0),Wn.current=!0;const n=ss({seekInduced:Date.now()-Hn.current<as,autoplayEnabled:ft,hasNext:!h&&N!=null,isFinal:h||N==null});n==="advance"&&N!=null?(q(N),Le(i,N)):n==="prompt-next"?(Ae.current=!1,be.current=!0,He(!0)):n==="prompt-complete"&&(zn(h?r.title:`${r.title} — Season ${i}`),lt(!0),Ae.current=!0,be.current=!0)},[h,r,i,N,ft,Ge,Le,l]),Cr=C(()=>{Wn.current=!1,y.actions.onPlay()},[y.actions]),Tr=C(()=>{y.actions.onPause();const e=l.current;e&&!e.ended&&Ge(e.currentTime,e.duration||0)},[y.actions,Ge,l]),kr=C(()=>{y.actions.onLoadedMetadata();const e=l.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(ue.current!=null&&ue.current>0){try{e.currentTime=ue.current}catch{}ue.current=null}Lt()}},[y.actions,l,Lt]),yt=C(()=>{const e=l.current;if(e&&ue.current!=null&&ue.current>0){try{e.currentTime=ue.current}catch{}ue.current=null}},[l]),Er=C(()=>{gt>0&&(ue.current=gt);const e=l.current;if(e&>>0){try{e.currentTime=gt,ue.current=null}catch{}e.play().catch(()=>{})}Jt(!1),be.current=!0},[gt,l]),Kn=C(()=>{ue.current=null;const e=l.current;e&&(e.currentTime=0,e.play().catch(()=>{})),Jt(!1),be.current=!0},[l]),xr=C(()=>{Ae.current=!0,He(!1),be.current=!0},[]),Nr=C(()=>{Ae.current=!0,He(!1),be.current=!0,ue.current=null;const e=l.current;if(e){try{e.currentTime=0}catch{}e.play().catch(()=>{})}},[l]),qn=C(()=>{N!=null&&(Ae.current=!0,He(!1),be.current=!0,q(N),Le(i,N))},[N,i,Le]),Yn=C(()=>{Ce!=null&&(Ae.current=!0,He(!1),lt(!1),be.current=!0,ee(Ce),q(1),Le(Ce,1))},[Ce,Le]),Ir=C(async()=>{if(V)try{await Yt.mutateAsync({id:V,status:"Completed"}),lt(!1),He(!1),F("/")}catch{}},[V,Yt,F]);S(()=>{be.current=!1,pn.current=null,Jt(!1),gn(!1),jn(0),Vn(!1),bt.current=!1,ue.current=null,At.current=`${V}:${i}:${u}`,bn.current=0},[V,i,u]),S(()=>{$n&&(Vn(!0),bt.current=!0)},[$n,V,i,u]),S(()=>{if(!at||be.current)return;const e=`${V}:${i}:${u}`;if(pn.current===e)return;pn.current=e;const n=at,s=n.currentTime??0,c=n.duration??0;sr(s,c)&&(jn(s),Jt(!0))},[at,V,i,u]),S(()=>{if(!it||be.current||Ae.current||Me||Qe||Pe)return;const e=`${V}:${i}:${u}`;if(Pt.current!==e){if(!hn){On||(Pt.current=e);return}if(h){Pt.current=e,He(!0);return}if(!(!r||ot<0||Y.length===0)){if(Pt.current=e,N==null&&Ce==null){r&&Y.length>0&&(zn(`${r.title} — Season ${i}`),lt(!0),Ae.current=!0,be.current=!0);return}He(!0)}}},[it,hn,On,Me,Qe,Pe,h,N,Ce,r,ot,Y.length,V,i,u]),S(()=>{(Me||Pe)&&l.current&&l.current.pause()},[Me,Pe,l]),S(()=>{const e=l.current;return()=>{ct.current&&clearTimeout(ct.current),e&&!e.ended&&Ge(e.currentTime,e.duration||0)}},[Ge,l]);const yn=C(e=>{let n=null,s=!0;try{n=localStorage.getItem("tvLastSubtitle"),s=localStorage.getItem("tvSubtitlesEnabled")!=="false"}catch{}return Pn(e,{lastKey:n,enabled:s})},[]),_n=C(e=>{if(!(e<0))try{localStorage.setItem("tvSubtitlesEnabled","true"),localStorage.setItem("tvSelectedSubtitle",String(e))}catch{}},[]),Qn=C(e=>{if(e.length===0)return 0;let n=null;try{n=localStorage.getItem("tvLastAudio")}catch{}if(n){const s=e.findIndex(O=>Bn(O)===n);if(s>=0)return s;const c=n.indexOf("|||"),d=c>=0?n.slice(0,c):n,p=c>=0?n.slice(c+3):n,f=e.findIndex(O=>O.language===d||O.label===p);if(f>=0)return f}return Pn(e,{lastKey:null,enabled:!0})},[]),{data:Gn}=Is(V||void 0),Xn=$e(()=>(Gn?.progress??[]).filter(n=>n.season===i&&(n.completed===!0||n.completed===1||In(n.currentTime,n.duration))).map(n=>String(n.episode)),[Gn,i]),Jn=$e(()=>Y.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})),[Y]),Zn=$e(()=>(r?.genres??[]).map(e=>e.name).slice(0,5),[r]),Sn=$e(()=>[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(Q.length!==0&&!Q.some(e=>e.id===m)){const e=Q.find(n=>n.tier==="direct")?.id??Q[0].id;De(e);try{localStorage.setItem("tvProvider",e)}catch{}}},[Q,m]),S(()=>{if(ie.length!==0&&!ie.includes(pe)){Ct(ie[0]);try{localStorage.setItem("movyServer",ie[0])}catch{}}},[ie,pe]),S(()=>{if(!o){I(null),j([]),Fe(""),G(""),Be("");return}const e=Number(o),n=T||"tv";I(null),j([]),Fe(""),G(""),Be("");const s=parseInt(D.current.get("s")||"",10),c=parseInt(D.current.get("e")||"",10);ee(isNaN(s)?1:s),q(isNaN(c)?1:c),ne(0),St.tv.details.query({type:n,id:String(e)}).then(d=>{const p={id:d.id,title:d.title||"",overview:d.overview||"",vote_average:d.vote_average,year:d.year,poster:d.poster,backdrop:d.backdrop,imdb_id:d.imdb_id||void 0,adult:d.adult,seasons:d.seasons,number_of_seasons:d.number_of_seasons};I(p),p.seasons&&p.seasons.length>0&&isNaN(s)&&ee(p.seasons[0].season_number)}).catch(()=>{})},[o,T]),S(()=>{if(!r||!o)return;if(!(r.seasons!==void 0||r.number_of_seasons!==void 0)){P([]);return}const n=parseInt(g.get("e")||"",10);St.tv.episodes.query({id:String(o),season:String(i)}).then(s=>{const c=(s.episodes||[]).map(d=>({episode_number:d.episode_number,name:d.name||"",vote_average:d.vote_average,overview:d.overview||"",still_path:d.still_path||""}));P(c),c.length!==0&&q(d=>!isNaN(n)&&c.some(p=>p.episode_number===n)?n:c.some(p=>p.episode_number===d)?d:c[0].episode_number)}).catch(()=>{})},[r,o,i,g]),S(()=>{if(!E||!r||!o)return;fetch(`/api/tv/embed/${m}/${h?"movie":"tv"}/${o}?season=${i}&episode=${u}`).then(n=>n.json()).then(n=>{if(n.url)return Be(n.url),fetch(`/api/resolve?url=${encodeURIComponent(n.url)}`).then(s=>s.json()).then(s=>{s.finalUrl&&Be(s.finalUrl)})}).catch(()=>{})},[m,r,o,i,u,h,E]);const nn=C(async()=>{if(!r||!o||!m||E||r.adult&&!rt)return;const e=`${V}:${i}:${u}`;kt.current.length>0?G(""):(Se(!0),G(""),j([]),ne(0),he([]),Ve([]));try{const s=await H.fetchQuery({queryKey:en(i,u),queryFn:()=>tn(i,u),staleTime:3e5,gcTime:18e5});if(At.current!==e)return;if(Se(!1),!s.valid||!s.sources?.length){G(s.error?`${s.error}`:ie.length>0?`No streams from ${pe}. Try another server.`:"No streams available.");return}j(s.sources),Fe(e),ne(0),s.referer&&Dt(s.referer);const c=s.audioTracks||[];he(c),X(c.length>0?Qn(c):0);const d=s.subtitles||[];if(Ve(d),d.length>0){const O=yn(d);Ee(O),_n(O)}else Ee(-1);const p=h?"movie":"tv",f=o;St.tv.subtitles.query({type:p,tmdbId:String(f),season:String(i),episode:String(u)}).then(O=>{if(At.current!==e)return;const Te=Array.isArray(O.subtitles)?O.subtitles:[];Te.length!==0&&Ve(K=>{const w=[...K,...Te.filter(R=>!K.some(M=>M.url===R.url))];if(K.length===0){const R=yn(w);Ee(R),_n(R)}return w})}).catch(()=>{}),G("")}catch{if(At.current!==e)return;Se(!1),G("Failed to load streams.")}},[r,o,m,i,u,h,E,rt,ie,pe,yn,_n,Qn,V,H,en,tn]),Cn=C(e=>{const n=e.toLowerCase();Ct(n);try{localStorage.setItem("movyServer",n)}catch{}G("")},[]),Br=C(e=>{De(e);try{localStorage.setItem("tvProvider",e)}catch{}},[]);S(()=>{m&&r&&!E&&nn()},[m,r,nn,E]),S(()=>{if(!l.current||(fe.current&&(fe.current.destroy(),fe.current=null),E))return;let e=!1;if(xe){const p=l.current;return p&&(p.pause(),p.removeAttribute("src"),p.load(),p.src="/av-sync-test.mp4",vt.current||p.play().catch(()=>{})),()=>{e=!0}}const n=Ne===`${V}:${i}:${u}`&&A[b]?.url||"";if(!n){try{l.current?.pause()}catch{}return}const s=l.current;if(At.current===`${V}:${i}:${u}`&&ue.current==null&&!vt.current)try{!s.ended&&s.currentTime>1&&(ue.current=s.currentTime)}catch{}s.pause(),s.removeAttribute("src"),s.load(),y.actions.resetMediaState();const c=`/api/tv/stream-proxy?url=${encodeURIComponent(n)}&referer=${encodeURIComponent(tt)}`;A[b]?.type==="hls"?(async()=>{const p=await Bs();if(!e)if(p&&p.isSupported()){const f=new p({enableWorker:!0});fe.current=f,f.on(p.Events.ERROR,(K,w)=>{w.fatal&&(G(`Stream failed (${w.details}). Try another source or reload.`),Se(!1),f.destroy(),fe.current=null)}),f.loadSource(c),f.attachMedia(s);const O=()=>{let K=!1,w=0;try{K=localStorage.getItem("tvSubtitlesEnabled")==="true";const R=parseInt(localStorage.getItem("tvSelectedSubtitle")||"0",10);!isNaN(R)&&R>=0&&(w=R)}catch{}return{enabled:K,index:w}},Te=()=>{if(typeof f.subtitleTrack!="number")return;if(ve.current.length>0){f.subtitleTrack=-1;return}const K=Array.isArray(f.subtitleTracks)?f.subtitleTracks:[];if(K.length===0){f.subtitleTrack=-1;return}const w=O();if(w.enabled){const R=w.index<K.length?w.index:0;f.subtitleTrack=R,Ee(R),Ut()}else f.subtitleTrack=-1};_a(f,p.Events,{getWant:()=>Et.current,onResolve:K=>X(K)}),f.on(p.Events.MANIFEST_PARSED,()=>{Te(),ce.current!=null&&(s.currentTime=ce.current,ce.current=null),yt(),!vt.current&&bt.current&&s.play().catch(()=>{})}),f.on(p.Events.SUBTITLE_TRACKS_UPDATED,()=>{Te()}),f.on(p.Events.SUBTITLE_TRACK_SWITCH,(K,w)=>{if(ve.current.length>0){if(w.id!==-1)try{f.subtitleTrack=-1}catch{}return}const R=Array.isArray(f.subtitleTracks)?f.subtitleTracks:[];if(R.length!==0){if(w.id===-1){const M=O();if(M.enabled){const Z=M.index<R.length?M.index:0;f.subtitleTrack=Z;return}}Ee(w.id),Ut()}})}else ws(s)&&(s.src=c,ce.current!=null&&(s.currentTime=ce.current,ce.current=null),yt(),!vt.current&&bt.current&&s.play().catch(()=>{G("Failed to play stream. Try another source.")}))})():(s.src=c,ce.current!=null&&(s.currentTime=ce.current,ce.current=null),yt(),!vt.current&&bt.current&&s.play().catch(()=>{G("Failed to play stream. Try another source.")}));const d=()=>{const O=s.error?.code===4?"Video source not supported or not found":"Failed to load video stream";G(`${O}. The source may be invalid or expired. Try switching source or reloading.`),Se(!1)};return s.addEventListener("error",d),()=>{e=!0,s.removeEventListener("error",d)}},[A,Ne,b,m,tt,E,l,ce,xe,V,i,u,yt,Ut,y.actions]),S(()=>{if(!it||Me||Pe||Qe||Mt||E||xe)return;const e=l.current;!e||!e.paused||e.ended||e.readyState<1||(yt(),e.play().catch(()=>{}))},[it,Me,Pe,Qe,Mt,E,xe,yt,l]),S(()=>{const e=fe.current;!e||typeof e.audioTrack!="number"||(e.audioTrack=Ie)},[Ie]),S(()=>{const e=fe.current;!e||typeof e.subtitleTrack!="number"||!Array.isArray(e.subtitleTracks)||e.subtitleTracks.length===0||ve.current.length>0||(J>=0?e.subtitleTrack=J:e.subtitleTrack=-1)},[J]),S(()=>{const e=l.current;if(!(!e||E)&&(e.querySelectorAll("track").forEach(n=>n.remove()),ve.current=[],oe.length!==0&&(oe.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 c=`/api/subtitle-proxy?url=${encodeURIComponent(n.url)}&referer=${encodeURIComponent(tt)}`;s.src=c,s.addEventListener("load",()=>{const d=ve.current.indexOf(s),p=s.track;if(p&&d>=0){const f=d===xt.current;p.mode=f&&!we.current?"showing":"hidden"}}),e.appendChild(s),ve.current.push(s)}),oe.length>0)))try{const n=fe.current;n&&typeof n.subtitleTrack=="number"&&n.subtitleTrack!==-1&&(n.subtitleTrack=-1)}catch{}},[oe,tt,E,m,l]),S(()=>{const e=l.current;if(!e||E)return;const n=fe.current;ve.current.length>0&&n&&typeof n.subtitleTrack=="number"&&Array.isArray(n.subtitleTracks)&&n.subtitleTracks.length>0&&(n.subtitleTrack=-1);const s=()=>{const p=An(y.state.subtitleFontSize,e.clientHeight||720),f=Math.max(0,Math.min(100,100-y.state.subtitlePosition)),O=()=>{const M=p*16,Z=e.videoHeight||e.clientHeight||720,ae=e.videoWidth||e.clientWidth||1280;return{step:M*1.3/Z*100,chars:Math.max(20,Math.floor(ae/(M*.55)))}},Te=(M,Z)=>{const ae=M;ae.snapToLines=!1,ae.line=Z},K=M=>{if(!M.cues)return;Array.from(M.cues).forEach(ye=>Te(ye,f));const Z=Array.from(M.activeCues??[]);if(Z.length<=1){Z.forEach(ye=>Te(ye,f));return}const{step:ae,chars:z}=O();let dt=f;for(let ye=Z.length-1;ye>=0;ye--){const Xe=String(Z[ye].text??"").replace(/<[^>]*>/g,"").split(`
|
|
3
|
-
`).reduce((an,$t)=>an+Math.max(1,Math.ceil($t.length/z)),0);dt=Math.max(0,dt-Xe*ae),Te(Z[ye],dt),dt-=ae*.4}},w=ve.current;if(w.length>0){w.forEach((M,Z)=>{const ae=M.track;if(!ae)return;const z=Z===J;ae.mode=z&&!de?"showing":"hidden",z&&!de&&K(ae)});return}const R=Array.from(e.textTracks);R.length!==0&&R.forEach((M,Z)=>{const ae=Z===J;M.mode=ae&&!de?"showing":"hidden",ae&&!de&&K(M)})};s();const c=()=>s();e.textTracks.addEventListener("addtrack",c),e.addEventListener("loadedmetadata",s,{once:!0});const d=window.setTimeout(s,600);return()=>{e.textTracks.removeEventListener("addtrack",c),e.removeEventListener("loadedmetadata",s),window.clearTimeout(d)}},[J,oe,E,m,l,de,y.state.subtitleFontSize,y.state.subtitlePosition]),S(()=>{if(!de)return;const e=l.current,n=jt.current;if(!e||!n)return;const s=We/1e3,c=pt/1e3,d=new Set;let p=[],f=-1,O=-1,Te=-1,K=-1,w=0,R=0,M=!1;const Z=()=>{const W=xt.current;if(W<0)return null;const Je=ve.current;return Je.length>0?Je[W]?.track??null:Array.from(e.textTracks)[W]??null},ae=(W,Je)=>{const _e=W.cues;if(!_e||_e.length===0)return Array.from(W.activeCues??[]);let ut=0,mt=_e.length;for(;ut<mt;){const Re=ut+mt>>>1;_e[Re].endTime+s<Je?ut=Re+1:mt=Re}const Ot=[];for(let Re=ut;Re<_e.length;Re++){const on=_e[Re];if(on.startTime+s>Je)break;on.endTime+s>=Je&&Ot.push(on)}return Ot},z=()=>{const W=Z(),Je=e.currentTime-c,_e=W?ae(W,Je):[],ut=e.clientWidth,mt=e.clientHeight,Ot=e.videoWidth,Re=e.videoHeight;if(_e.length===p.length&&_e.every((kn,En)=>kn===p[En])&&ut===f&&mt===O&&Ot===Te&&Re===K||(p=_e,f=ut,O=mt,Te=Ot,K=Re,n.textContent="",_e.length===0))return;const nr={fontSize:An(y.state.subtitleFontSize,mt),position:y.state.subtitlePosition,bgOpacity:y.state.subtitleBgOpacity,bgColor:y.state.subtitleBgColor,textColor:y.state.subtitleTextColor,edge:y.state.subtitleEdge,bold:y.state.subtitleBold},Mr=os(nr),Lr=is(e,nr.position);_e.forEach((kn,En)=>{const rr=String(kn.text??"");if(!ls(rr).trim())return;const xn=document.createElement("div"),Rr=(_e.length-1-En)*1.7;xn.style.cssText=`${Mr}
|
|
4
|
-
bottom: calc(${Lr}px + ${Rr}em);`,xn.innerHTML=cs(rr),n.appendChild(xn)})},dt=()=>{Array.from(e.textTracks).forEach(W=>{d.has(W)||(d.add(W),W.addEventListener("cuechange",z))})},ye=()=>{dt(),z()},Tn=()=>{if(M||R)return;const W=()=>{R=0,!(M||e.paused||e.ended)&&(z(),Tn())};R=window.requestAnimationFrame(W)},Xe=e,an=()=>{w=0,z(),!M&&Xe.requestVideoFrameCallback&&(w=Xe.requestVideoFrameCallback(an))},$t=()=>{z(),Xe.requestVideoFrameCallback?w||(w=Xe.requestVideoFrameCallback(an)):Tn()};dt(),e.textTracks.addEventListener("addtrack",ye),e.textTracks.addEventListener("removetrack",ye),e.addEventListener("timeupdate",z),e.addEventListener("seeked",z),e.addEventListener("loadedmetadata",z),e.addEventListener("play",$t);const er=Array.from(e.querySelectorAll("track"));er.forEach(W=>W.addEventListener("load",z));const tr=typeof ResizeObserver>"u"?null:new ResizeObserver(()=>z());return tr?.observe(e),z(),$t(),()=>{M=!0,d.forEach(W=>W.removeEventListener("cuechange",z)),e.textTracks.removeEventListener("addtrack",ye),e.textTracks.removeEventListener("removetrack",ye),e.removeEventListener("timeupdate",z),e.removeEventListener("seeked",z),e.removeEventListener("loadedmetadata",z),e.removeEventListener("play",$t),er.forEach(W=>W.removeEventListener("load",z)),tr?.disconnect(),R&&window.cancelAnimationFrame(R),w&&Xe.cancelVideoFrameCallback&&Xe.cancelVideoFrameCallback(w),n.textContent=""}},[de,We,J,oe,pt,l,y.state.subtitleFontSize,y.state.subtitlePosition,y.state.subtitleBgOpacity,y.state.subtitleBgColor,y.state.subtitleTextColor,y.state.subtitleEdge,y.state.subtitleBold]);const rn=()=>{I(null),j([]),Be(""),F(-1)},wr=C(e=>{ee(e),q(1),Le(e,1)},[Le]),sn=!h&&r?.seasons&&r.seasons.length>1?t("label",{className:v.sidebarSeason,children:[t("span",{children:"Season"}),t("select",{value:i,onChange:e=>wr(parseInt(e.target.value,10)||1),className:v.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{l.current?.pause()}catch{}q(n),Le(i,n)}fn(!1)},[i,Le,l]);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)):Vr.error("No next episode available"))};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[h,N,_t]);const Pr=e=>{X(e);try{const s=ht[e];s&&localStorage.setItem("tvLastAudio",Bn(s))}catch{}const n=fe.current;n&&n.audioTrack!==void 0&&(n.audioTrack=e)},Ar=e=>{Ee(e);try{if(e===-1)localStorage.setItem("tvSubtitlesEnabled","false");else{localStorage.setItem("tvSubtitlesEnabled","true"),localStorage.setItem("tvSelectedSubtitle",String(e));const d=oe[e];d&&localStorage.setItem("tvLastSubtitle",Bn(d))}}catch{}const n=l.current,s=fe.current;if(s&&typeof s.subtitleTrack=="number"&&Array.isArray(s.subtitleTracks)&&s.subtitleTracks.length>0&&(s.subtitleTrack=ve.current.length>0||e<0?-1:e),!n)return;const c=ve.current;if(c.length>0){c.forEach((d,p)=>{const f=d.track;if(!f)return;const O=p===e;f.mode=O&&!de?"showing":"hidden"});return}Array.from(n.textTracks).forEach((d,p)=>{const f=p===e;d.mode=f&&!de?"showing":"hidden"})},Rt=C(()=>{if(!r)return;const e=l.current,n=h?"":`S${String(i).padStart(2,"0")}E${String(u).padStart(2,"0")}`;St.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:st.current}).catch(()=>{}),St.discord.heartbeat.mutate({sessionId:st.current}).catch(()=>{})},[r,h,i,u,l]);return S(()=>{if(!r)return;Rt();const e=window.setInterval(()=>{const n=l.current;(!n||!n.paused)&&Rt()},15e3);return()=>window.clearInterval(e)},[Rt,r,l]),S(()=>{if(!r||E||me||U||A.length===0)return;const e=l.current;if(!e)return;const n=()=>Rt();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,E,me,U,A,Rt,l]),S(()=>{const e=st.current,n=()=>zr(e),s=()=>n();return window.addEventListener("pagehide",s),window.addEventListener("beforeunload",s),()=>{window.removeEventListener("pagehide",s),window.removeEventListener("beforeunload",s),n()}},[]),S(()=>{if(!r){document.title="TV & Movies - dango";return}document.title=h?`${r.title} - dango`:`${r.title} - Season ${i} Episode ${u} - dango`},[r,h,i,u]),S(()=>{if(!r||h)return;const e=new URLSearchParams(g),n=e.get("s"),s=e.get("e"),c=String(i),d=String(u);n===c&&s===d||(e.set("type",g.get("type")||"tv"),e.set("s",c),e.set("e",d),F(`${window.location.pathname}?${e.toString()}`,{replace:!0}))},[r,h,i,u,g,F]),t("div",{className:`${Ze.playerPageLayout} ${Ue?Ze.theaterMode:""}`,onClick:gr,children:[Ue&&t(ds,{videoRef:l,active:wt.enabled&&!E&&A.length>0&&!U&&!(r?.adult&&!rt),settings:wt}),!Ue&&t("aside",{className:Ze.episodeSidebar,children:r?h?t("div",{className:v.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:v.sidebarPosterMeta,children:[t("strong",{children:r.title}),t("span",{children:r.year})]})]}):t(us,{episodes:Jn,currentEpisode:String(u),watchedEpisodes:Xn,onEpisodeClick:_t,header:sn}):h?t("div",{className:v.statusMsg,children:[t($,{name:"spinner",className:v.spinner})," Loading..."]}):t(ms,{variant:"sidebar"})}),t("div",{className:Ze.playerMain,children:[r&&t("div",{className:v.playerSection,onContextMenu:e=>e.preventDefault(),style:r.adult&&!rt?{filter:"blur(14px)",pointerEvents:"none",userSelect:"none"}:void 0,children:E&&ze?t("iframe",{src:ze,className:v.videoIframe,allow:"autoplay; fullscreen",allowFullScreen:!0}):!E&&(A.length>0||me)?t(Oe,{children:[U&&t(or,{error:U,servers:ie,selectedServer:pe,onRetry:nn,onSelect:Cn}),t(ya,{player:y,title:r.title,episodeLabel:h?void 0:`S${i} E${u}`,audioTracks:ht,selectedAudioTrack:Ie,onAudioTrackChange:Pr,subtitles:oe,selectedSubtitle:J,onSubtitleChange:Ar,streams:A,qualityIdx:b,onQualityChange:ne,onBack:rn,movyServers:ie,selectedMovyServer:pe,onMovyServerSelect:Cn,isMovySource:ie.length>0,videoDelayEnabled:ge,onVideoDelayToggle:_,videoDelayMs:Vt,onVideoDelayChange:nt,onCalibrateAvSync:It,subtitleDelayMs:We,onSubtitleDelayChange:re,showNextEpisodeButton:ur&&!Me&&!Pe&&!Qe,onNextEpisode:qn,isLoading:me,isTheaterMode:Ue,onTheaterModeToggle:vn,ambientSettings:wt,onAmbientChange:Ht,children:[t("video",{ref:l,autoPlay:it&&!Mt,playsInline:!0,disablePictureInPicture:!0,className:`${v.video} ${se?v.videoHidden:""}`,onTimeUpdate:_r,onEnded:()=>{xe||Sr()},onPlay:Cr,onPause:Tr,onSeeked:()=>{Hn.current=Date.now(),Lt()},onLoadedMetadata:kr,onVolumeChange:y.actions.onVolumeChange,onWaiting:y.actions.onWaiting,onPlaying:y.actions.onPlaying,onCanPlay:y.actions.onCanPlay,onContextMenu:e=>e.preventDefault(),onError:()=>{G("Video failed to load. Try another server or reload."),Se(!1)}}),t("canvas",{ref:Ft,className:`${v.delayCanvas} ${se?v.delayCanvasActive:""}`}),de&&t("div",{ref:jt,className:v.subtitleOverlay}),t(hs,{isOpen:le,ms:Vt,onChange:nt,onApply:zt,onClose:un,testClipActive:xe,onTestClip:Bt})]})]}):U&&!E?t(or,{error:U,servers:ie,selectedServer:pe,onRetry:nn,onSelect:Cn}):null}),!Ue&&r&&t(ps,{}),!Ue&&sn&&t("div",{className:v.mobileSeasonRow,children:sn}),!Ue&&r&&t("div",{className:v.providerSelectWrap,children:t("label",{className:v.controlLabel,children:["Source",t("select",{value:m,onChange:e=>Br(e.target.value),className:v.select,disabled:Q.length===0,children:qe?t("option",{value:"",children:"Loading…"}):Q.length===0?t("option",{value:"",children:"No providers available"}):t(Oe,{children:[L.length>0&&t("optgroup",{label:"Direct HLS",children:L.map(e=>t("option",{value:e.id,children:e.label},e.id))}),te.length>0&&t("optgroup",{label:"Embeds",children:te.map(e=>t("option",{value:e.id,children:e.label},e.id))})]})})]})}),!Ue&&r&&t("div",{className:Ze.playerInfoContainer,children:[t("div",{className:Ze.playerInfoHeader,children:[t("div",{className:Ze.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:Ze.videoTitleSection,children:[t("div",{className:ke.titleContainer,children:[t("h1",{children:r.title}),t("div",{className:v.meta,children:[t("span",{className:v.year,children:r.year}),r.vote_average!=null&&r.vote_average>0&&t("span",{className:v.rating,children:[t($,{name:"star",size:12}),Number(r.vote_average).toFixed(1)]}),t("span",{className:`${v.typeBadge} ${v[h?"movie":"tv"]}`,children:h?"Movie":"TV Show"})]}),Zn.length>0&&t("div",{className:v.genreRow,children:Zn.map(e=>t("span",{className:v.genreChip,children:e},e))}),Sn.length>0&&t("div",{className:v.metaRow,children:Sn.map((e,n)=>t("span",{children:[e,n<Sn.length-1?" · ":""]},`${e}-${n}`))})]}),t("div",{className:ke.controls,children:[t("button",{className:`${ke.watchlistBtn} ${Qt?ke.inList:""}`,onClick:dr,disabled:cr,type:"button",children:[Qt?t($,{name:"check",size:14}):t($,{name:"plus",size:14}),Qt?"In Watchlist":"Add to Watchlist"]}),!h&&t(Oe,{children:[t("button",{className:`${ke.watchlistBtn}`,onClick:()=>mn!=null&&_t(String(mn)),disabled:mn==null,type:"button",children:[t($,{name:"chevron-left",size:14}),"Prev EP"]}),t("button",{className:`${ke.watchlistBtn}`,onClick:()=>N!=null&&_t(String(N)),disabled:N==null,type:"button",children:["Next EP",t($,{name:"chevron-right",size:14})]}),!h&&t("button",{className:`${ke.watchlistBtn} ${ke.modeToggleBtn} ${ft?ke.modeToggleActive:""}`,onClick:()=>br(!ft),type:"button","aria-pressed":ft,children:ft?"AUTOPLAY: ON":"AUTOPLAY: OFF"}),fr&&t("button",{className:`${ke.watchlistBtn}`,onClick:()=>fn(!0),type:"button",children:[t($,{name:"list-ul",size:14}),"Episodes"]})]})]})]})]}),t("div",{className:ke.descriptionSection,children:[t("h3",{children:"Synopsis"}),t(As,{text:r.overview,emptyText:"No description available."})]}),t("button",{className:ke.detailsToggleBtn,onClick:()=>hr(!Zt),type:"button",children:[Zt?t($,{name:"chevron-up"}):t($,{name:"chevron-down"}),Zt?"Hide Details":"Show Details"]}),Zt&&t("div",{className:v.detailGrid,children:[r.first_air_date&&t("div",{className:v.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:v.detailItem,children:[t("strong",{children:"Last Air Date"}),t("span",{children:r.last_air_date})]}),r.networks&&r.networks.length>0&&t("div",{className:v.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:v.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:v.detailItem,children:[t("strong",{children:"Episode Runtime"}),t("span",{children:[r.episode_run_time[0]," min"]})]}),r.imdb_id&&t("div",{className:v.detailItem,children:[t("strong",{children:"IMDb"}),t("a",{href:`https://www.imdb.com/title/${r.imdb_id}`,target:"_blank",rel:"noopener noreferrer",className:v.imdbLink,children:"View on IMDb"})]})]})]}),!h&&t(gs,{isOpen:pr,onClose:()=>fn(!1),episodes:Jn,currentEpisode:String(u),watchedEpisodes:Xn,onEpisodeClick:_t,header:sn}),r?.adult&&!rt&&t(Nn,{isOpen:!0,title:"Content Warning",onClose:rn,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(Ke,{variant:"secondary",onClick:rn,children:"Go Back"}),t(Ke,{onClick:Kt,children:"I'm 18+, Continue"})]})]})}),t(fs,{isOpen:Me,onClose:Kn,title:"Resume Watching",message:t(Oe,{children:["You were at ",t("strong",{children:dn(gt)})]}),restartLabel:"Start from Beginning",onResume:Er,onRestart:Kn}),t(Nn,{isOpen:Pe,onClose:xr,title:h?"Movie Completed":"Episode Completed",children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t("p",{children:h?t(Oe,{children:"You've already watched this movie."}):t(Oe,{children:["You've already watched"," ",t("strong",{children:["Season ",i," Episode ",u]}),". Would you like to continue?"]})}),t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center",flexWrap:"wrap"},children:[t(Ke,{variant:"secondary",onClick:Nr,children:"Replay"}),N!=null?t(Ke,{onClick:qn,children:["Watch EP ",N]}):Ce!=null?t(Ke,{onClick:Yn,children:["Start Season ",Ce]}):null]})]})}),t(Nn,{isOpen:Qe,onClose:()=>lt(!1),title:h?"Movie Completed!":Ce!=null?"Season Complete!":"Show Completed!",children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t($,{name:"check-circle",size:48,style:{color:"var(--accent-lighter)",marginBottom:"0.5rem"}}),t("p",{style:{fontSize:"1.1rem",fontWeight:600},children:mr}),t("p",{style:{color:"var(--text-secondary)"},children:h?"You finished this movie!":Ce!=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(Ke,{variant:"secondary",onClick:()=>lt(!1),children:"Close"}),Ce!=null?t(Ke,{onClick:Yn,children:["Start Season ",Ce]}):t(Oe,{children:[t(Ke,{onClick:()=>{lt(!1),rn()},children:"Back to Details"}),Qt&&t(Ke,{onClick:Ir,disabled:Yt.isPending,children:Yt.isPending?"Saving...":"Move to Completed"})]})]})]})}),!r&&t("div",{className:v.statusMsg,children:[t($,{name:"spinner",className:v.spinner})," Loading..."]})]})]})};export{Ro as default};
|