@serifpersia/dango 3.9.0 → 3.9.2

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.
Files changed (67) hide show
  1. package/README.md +1 -1
  2. package/client/dist/assets/{AnimeCard-NynqB4iz.js → AnimeCard-DV3CayVB.js} +1 -1
  3. package/client/dist/assets/{AnimeInfo-B_VL5_wz.js → AnimeInfo-C_yN40WV.js} +1 -1
  4. package/client/dist/assets/AnimeInfoPage-Dr9zOOq1.js +2 -0
  5. package/client/dist/assets/{Asmr-DMspoMra.js → Asmr-BzVhO0PK.js} +1 -1
  6. package/client/dist/assets/{AsmrPopup-BRzUy94h.js → AsmrPopup-CfCdTvhx.js} +1 -1
  7. package/client/dist/assets/{AsmrResetProgressModal-s1eRMiAW.js → AsmrResetProgressModal-CLjzhb4H.js} +1 -1
  8. package/client/dist/assets/{Home-ujV6ObHi.css → Home-D_Hd4SUo.css} +1 -1
  9. package/client/dist/assets/{Home-B2BED0gb.js → Home-wtyG5fKA.js} +1 -1
  10. package/client/dist/assets/{Insights-I1lFAHGg.js → Insights-DGTqzxXr.js} +1 -1
  11. package/client/dist/assets/{LibraryListPage-DVFA51uJ.js → LibraryListPage-DhsV2n64.js} +1 -1
  12. package/client/dist/assets/{ListeningList-C3_v1Hfq.js → ListeningList-BPD9igfn.js} +1 -1
  13. package/client/dist/assets/{Manga-Dwkuv9to.js → Manga-ClgoT4qk.js} +1 -1
  14. package/client/dist/assets/{MangaInfoPage-Dbe96uTp.js → MangaInfoPage-B8fttN1T.js} +1 -1
  15. package/client/dist/assets/{MangaReadPage-DMH36Bre.js → MangaReadPage-BTAVFeJH.js} +1 -1
  16. package/client/dist/assets/{MangaResetProgressModal-61xx7JY3.js → MangaResetProgressModal-CshoUUBm.js} +1 -1
  17. package/client/dist/assets/{Mature-BcCct3VM.js → Mature-DAgfZt9Q.js} +1 -1
  18. package/client/dist/assets/{MatureConsentModal-CkodsDv3.js → MatureConsentModal-BhpY2wdn.js} +1 -1
  19. package/client/dist/assets/{MediaCard-qj_IAltC.js → MediaCard-Czkyxqgb.js} +1 -1
  20. package/client/dist/assets/{OptionListMenu-BfK_U2JZ.js → OptionListMenu-HllK8Z_u.js} +1 -1
  21. package/client/dist/assets/Player-BVGxVSGv.js +56 -0
  22. package/client/dist/assets/{PlayerProvider-DMiS49-n.js → PlayerProvider-DGtOX3e2.js} +1 -1
  23. package/client/dist/assets/{PlayerSettings-DnDE4FjN.js → PlayerSettings-9iBVbWNR.js} +1 -1
  24. package/client/dist/assets/{QueueOptionsButton-ZPslb1vw.js → QueueOptionsButton-C3ptca9g.js} +1 -1
  25. package/client/dist/assets/{QueueRail-iewQtTf2.js → QueueRail-De3oifUM.js} +1 -1
  26. package/client/dist/assets/{ReadingList-DSn_7RPb.js → ReadingList-Bco6T_Jh.js} +1 -1
  27. package/client/dist/assets/{ResetProgressModal-DkUfWl68.js → ResetProgressModal-Cx1SaMad.js} +1 -1
  28. package/client/dist/assets/Search-B6dgK2Zu.js +1 -0
  29. package/client/dist/assets/Settings-DvOx960h.js +21 -0
  30. package/client/dist/assets/{SkeletonGrid-CDNxWb9m.js → SkeletonGrid-B2s8ytI8.js} +1 -1
  31. package/client/dist/assets/{Trackers-ChCE0FpJ.js → Trackers-Bp-U_jYN.js} +1 -1
  32. package/client/dist/assets/{Tv-DT3m2nZs.css → Tv-CDALArd3.css} +1 -1
  33. package/client/dist/assets/Tv-t2tt4jji.js +4 -0
  34. package/client/dist/assets/{TvInfo-CBDMmwKZ.js → TvInfo-BiUMbdN7.js} +1 -1
  35. package/client/dist/assets/{TvPopup-CbjydYVj.js → TvPopup-DnwmyRRE.js} +1 -1
  36. package/client/dist/assets/{TvSearch-B46QqKRF.js → TvSearch-C9VNflnp.js} +1 -1
  37. package/client/dist/assets/{TvWatchlist-CKClWqAa.js → TvWatchlist-Bt39ymiP.js} +1 -1
  38. package/client/dist/assets/{VirtualKeyboard-CO8IUNmo.js → VirtualKeyboard-BSILqgeU.js} +1 -1
  39. package/client/dist/assets/{WatchAlong-B3amSjXR.js → WatchAlong-GtXJ-2Qq.js} +1 -1
  40. package/client/dist/assets/{WatchAlongPanel-CNXfPJV8.js → WatchAlongPanel-CxkbtjKg.js} +1 -1
  41. package/client/dist/assets/{Watchlist-Dy02-vjm.js → Watchlist-CQ57yp82.js} +1 -1
  42. package/client/dist/assets/index-BYGDqzEf.js +178 -0
  43. package/client/dist/assets/index-TGvIXMUj.css +1 -0
  44. package/client/dist/assets/{libraryInvalidation-2b2_7vwd.js → libraryInvalidation-CHW51Kbi.js} +1 -1
  45. package/client/dist/assets/playbackCompletion-DrDOXJXe.js +1 -0
  46. package/client/dist/assets/{useAnimeInfoData-CdP9RtUB.js → useAnimeInfoData-CZY3Ui-u.js} +1 -1
  47. package/client/dist/assets/{useMangaLibrary-BANnF0ot.js → useMangaLibrary-x8zL6mOh.js} +1 -1
  48. package/client/dist/assets/{useMangaPopup-BdNC1rr_.js → useMangaPopup-DdrgbIw-.js} +1 -1
  49. package/client/dist/assets/{useProviders-B0XQ7aY4.js → useProviders-Dk2T31ho.js} +1 -1
  50. package/client/dist/assets/{useTv-DM0uMYJ8.js → useTv-CDh-n25T.js} +1 -1
  51. package/client/dist/assets/{useTvLibrary-aGEImTh1.js → useTvLibrary-Dec7yfKF.js} +1 -1
  52. package/client/dist/assets/useWatchAlongPlayer-D1o2zDEn.css +1 -0
  53. package/client/dist/assets/useWatchAlongPlayer-DpUPA4jD.js +10 -0
  54. package/client/dist/index.html +2 -2
  55. package/package.json +2 -2
  56. package/server/dist/server.js +136 -136
  57. package/server/package.json +1 -1
  58. package/client/dist/assets/AnimeInfoPage-DEHp6dbx.js +0 -2
  59. package/client/dist/assets/Player-CbaQmCP0.js +0 -56
  60. package/client/dist/assets/Search-DleGk52z.js +0 -1
  61. package/client/dist/assets/Settings-BL3wetIt.js +0 -21
  62. package/client/dist/assets/Tv-CnpSDbBA.js +0 -4
  63. package/client/dist/assets/index-D1FwY1a_.js +0 -178
  64. package/client/dist/assets/index-RwPVmyxh.css +0 -1
  65. package/client/dist/assets/playbackCompletion-OZmyMjQt.js +0 -1
  66. package/client/dist/assets/useWatchAlongPlayer-BkMVbNsw.js +0 -10
  67. package/client/dist/assets/useWatchAlongPlayer-CkSxIqXL.css +0 -1
@@ -1,4 +0,0 @@
1
- import{u as t,d as g,A as F,h as y,S as qe,g as ms,q as C,o as hs,p as bs,a as fs,T as Se}from"./vendor-core-DfaOB3Rn.js";import{h as Yn,p as R,t as gt,ac as vs,a6 as ps,S as Hn,e as gs,ak as ys,J as Tr,B as at,a8 as Ss}from"./index-D1FwY1a_.js";import{P as _s,a as Ts,b as Cs,F as ks,f as Es,c as Ns}from"./PlayerProvider-DMiS49-n.js";import{u as ws}from"./vendor-query-BBT5_sHx.js";import{I as le}from"./vendor-icons-DrybRNxP.js";import{p as jn,M as Is,z as Nr,f as Gn,c as xs,C as As,a as Ls,P as Bs,b as vn,u as Ps,i as Ms,j as Rs,n as $s,h as Ds,k as Os,m as zs,l as qs,s as Wn,d as Vs,e as Fs,g as Us,r as Hs,o as xe,A as Ws,t as Ks,E as Qs,w as Ys,x as js,v as ie,y as Gs,R as Xs,q as Js}from"./useWatchAlongPlayer-BkMVbNsw.js";import{S as Zs,O as Kn,a as ea,A as ta,b as na}from"./OptionListMenu-BfK_U2JZ.js";import{M as ra}from"./MatureConsentModal-CkodsDv3.js";import{u as sa}from"./useProviders-B0XQ7aY4.js";import{e as aa,f as oa,g as ia,d as la,c as ca,h as da,i as ua}from"./useTvLibrary-aGEImTh1.js";import{i as Vt,l as ma,s as ha,h as Cr}from"./playbackCompletion-OZmyMjQt.js";import{u as ba}from"./useIsMobile-Dvx1uJ82.js";import{S as fa}from"./SynopsisText-B3Sa5pRv.js";import{W as va}from"./WatchAlongPanel-CNXfPJV8.js";import"./libraryInvalidation-2b2_7vwd.js";const pa="_fullscreenFlat_10bzs_1",ga="_timeDisplay_10bzs_12",ya="_bottomControls_10bzs_16",Sa="_leftControls_10bzs_20",_a="_rightControls_10bzs_21",Ta="_controlBtn_10bzs_25",Ca="_controlsOverlay_10bzs_32",ka="_hidden_10bzs_52",Ea="_topControls_10bzs_58",Na="_backBtn_10bzs_78",wa="_videoTitleInfo_10bzs_98",Ia="_animeTitle_10bzs_104",xa="_episodeLabel_10bzs_112",Aa="_speedBoostBadge_10bzs_119",La="_progressBarContainer_10bzs_165",Ba="_progressBar_10bzs_165",Pa="_thumb_10bzs_184",Ma="_bufferedBar_10bzs_202",Ra="_watchedBar_10bzs_212",$a="_scrubbing_10bzs_237",Da="_timeBubble_10bzs_241",Oa="_bottomControlsRow_10bzs_255",za="_nextEpisodeBtn_10bzs_278",qa="_active_10bzs_340",Va="_settingsPanel_10bzs_352",Fa="_settingsHeader_10bzs_371",Ua="_settingsBackBtn_10bzs_379",Ha="_settingsTitle_10bzs_397",Wa="_settingsContent_10bzs_408",Ka="_currentValue_10bzs_417",Qa="_menuItem_10bzs_423",Ya="_menuNote_10bzs_456",ja="_loadingOverlay_10bzs_465",Ga="_loadingDots_10bzs_476",Xa="_dot_10bzs_481",Ja="_bufferingOverlay_10bzs_510",Za="_bufferingSpinner_10bzs_519",a={fullscreenFlat:pa,timeDisplay:ga,bottomControls:ya,leftControls:Sa,rightControls:_a,controlBtn:Ta,controlsOverlay:Ca,hidden:ka,topControls:Ea,backBtn:Na,videoTitleInfo:wa,animeTitle:Ia,episodeLabel:xa,speedBoostBadge:Aa,progressBarContainer:La,progressBar:Ba,thumb:Pa,bufferedBar:Ma,watchedBar:Ra,scrubbing:$a,timeBubble:Da,bottomControlsRow:Oa,nextEpisodeBtn:za,active:qa,settingsPanel:Va,settingsHeader:Fa,settingsBackBtn:Ua,settingsTitle:Ha,settingsContent:Wa,currentValue:Ka,menuItem:Qa,menuNote:Ya,loadingOverlay:ja,loadingDots:Ga,dot:Xa,bufferingOverlay:Ja,bufferingSpinner:Za},eo=({player:s,visible:b,settingsOpen:O,onOpenSettings:A,onCloseSettings:M,hasSubtitles:k,isSubtitleActive:w,subtitles:u,onSubtitleChange:l,showNextEpisodeButton:_,onNextEpisode:r,isTheaterMode:L,onTheaterModeToggle:fe,timeLabelRef:Z})=>{const{state:m,actions:ke}=s,Ae=()=>{if(w){l(-1);return}let ve=null;try{ve=R.getItem("tvLastSubtitle")}catch{}l(jn(u,{lastKey:ve,enabled:!0}))};return t("div",{className:`${a.controlsOverlay} ${b?"":a.hidden}`,"data-speed-boost-ignore":"true",style:{pointerEvents:"none",background:"none",justifyContent:"flex-end"},children:t("div",{className:a.bottomControls,onClick:ve=>ve.stopPropagation(),children:[t(_s,{classes:{container:a.progressBarContainer,scrubbing:a.scrubbing,timeBubble:a.timeBubble,bar:a.progressBar,buffered:a.bufferedBar,watched:a.watchedBar,thumb:a.thumb},timeLabelRef:Z}),t("div",{className:a.bottomControlsRow,children:[t("div",{className:a.leftControls,children:[t(Ts,{className:a.controlBtn}),t(Cs,{buttonClassName:a.controlBtn,onExpandedChange:ke.setShowVolumeSlider}),t("span",{className:a.timeDisplay,ref:Z,children:[Yn(0)," / ",Yn(m.duration)]})]}),t("div",{className:a.rightControls,children:[_&&t("button",{className:a.nextEpisodeBtn,onClick:r,title:"Play next episode",children:"Next EP"}),k&&t("button",{className:`${a.controlBtn} ${w?a.active:""}`,onClick:Ae,"aria-label":w?"Turn subtitles off":"Turn subtitles on",children:t(le,{name:"closed-captioning"})}),t("button",{className:`${a.controlBtn} ${O?a.active:""}`,onClick:()=>O?M():A(),"aria-label":"Settings",children:t(le,{name:"cog"})}),t("button",{className:`${a.controlBtn} ${L?a.active:""}`,onClick:ve=>{ve.stopPropagation(),fe()},title:L?"Exit Theater Mode":"Theater Mode","aria-label":L?"Exit Theater Mode":"Theater Mode",children:t(le,{name:"tv"})}),t(ks,{className:a.controlBtn})]})]})]})})},pn=-6e4,Qn=6e4,kr=500,to=({classes:s,delayMs:b,onDelayChange:O})=>{const[A,M]=g(null),k=A??b,w=F(O);w.current=O;const u=F(b);u.current=b;const l=F(null);l.current=A,y(()=>{M(null)},[b]),y(()=>()=>{const L=l.current;L!==null&&L!==u.current&&w.current(L)},[]);const _=L=>{u.current=L,l.current=null,w.current(L),M(null)},r=L=>{const fe=l.current??u.current,Z=Math.max(pn,Math.min(Qn,fe+L));_(Z)};return t(qe,{children:[t("div",{style:{display:"flex",gap:6,padding:"0.5rem 0.75rem 0.25rem"},children:[t("button",{type:"button",className:s.item,onClick:()=>r(-kr),"aria-label":"Show subtitles 0.5 seconds earlier",style:{flex:1,justifyContent:"center"},children:t("span",{children:"-0.5s"})}),t("button",{type:"button",className:s.item,onClick:()=>r(kr),"aria-label":"Show subtitles 0.5 seconds later",style:{flex:1,justifyContent:"center"},children:t("span",{children:"+0.5s"})}),t("button",{type:"button",className:s.item,onClick:()=>_(0),disabled:k===0,"aria-label":"Reset subtitle timing",style:{flex:1,justifyContent:"center"},children:t("span",{children:"Reset"})})]}),t(Is,{label:"Subtitle timing",display:Nr(k),min:pn,max:Qn,step:100,value:k,percent:(k-pn)/(Qn-pn)*100,onChange:L=>{const fe=Math.round(L);l.current=fe,M(fe)},onCommit:()=>{const L=l.current;L!==null&&_(L)}}),t("div",{className:s.note,children:"Positive delays subtitles (show later). Negative shows them earlier. 0.0s is default."})]})},no=({view:s,onSelectView:b,onClose:O,player:A,onSubtitleStyleChange:M,streams:k,resolutionIdx:w,onResolutionChange:u,hasSubtitles:l,subtitles:_,selectedSubtitle:r,isSubtitleActive:L,onSubtitleChange:fe,audioTracks:Z,selectedAudioTrack:m,onAudioTrackChange:ke,videoDelayEnabled:Ae,onVideoDelayToggle:ve,videoDelayMs:pe,onVideoDelayChange:S,onCalibrate:yt,subtitleDelayMs:Ge,onSubtitleDelayChange:E,ambientSettings:U,onAmbientChange:Q})=>{const{state:ce}=A,St=()=>t(qe,{children:[k.length>1&&t("button",{className:a.menuItem,onClick:()=>b("resolution"),children:[t("span",{children:"Resolution"}),t("span",{className:a.currentValue,children:k[w]?.quality||"Auto"})]}),l&&t("button",{className:a.menuItem,onClick:()=>b("subtitles"),children:[t("span",{children:"Subtitles"}),t("span",{className:a.currentValue,children:L?_[r]?.label||_[r]?.language:"Off"})]}),l&&t("button",{className:a.menuItem,onClick:()=>b("subtitle-style"),children:[t("span",{children:"Subtitle Style"}),t("span",{className:a.currentValue,children:[ce.subtitleFontSize.toFixed(1),"x · ",ce.subtitlePosition]})]}),l&&t("button",{className:a.menuItem,onClick:()=>b("subtitle-timing"),children:[t("span",{children:"Subtitle Timing"}),t("span",{className:a.currentValue,children:Nr(Ge)})]}),Z.length>0&&t("button",{className:a.menuItem,onClick:()=>b("audio"),children:[t("span",{children:"Audio Track"}),t("span",{className:a.currentValue,children:Z[m]?.label||Z[m]?.language})]}),t("button",{className:a.menuItem,onClick:()=>b("av-sync"),children:[t("span",{children:"A/V Sync"}),t("span",{className:a.currentValue,children:Ae?`${pe}ms`:"Off"})]}),U&&Q&&t("button",{className:a.menuItem,onClick:()=>b("ambient"),children:[t("span",{children:"Ambient Light"}),t("span",{className:a.currentValue,children:U.enabled?"On":"Off"})]})]}),Le=()=>t(Kn,{classes:{item:a.menuItem,active:a.active},options:k.map((I,te)=>({key:String(te),label:I.quality,selected:te===w})),onSelect:I=>u(Number(I))}),Xe=()=>t(Kn,{classes:{item:a.menuItem,active:a.active},options:[{key:"off",label:"Off",selected:!L},..._.map((I,te)=>({key:String(te),label:I.label||I.language,selected:te===r}))],onSelect:I=>fe(I==="off"?-1:Number(I))}),ot=()=>t(ea,{classes:{item:a.menuItem,active:a.active},values:{fontSize:ce.subtitleFontSize,position:ce.subtitlePosition,bgOpacity:ce.subtitleBgOpacity,bgColor:ce.subtitleBgColor,textColor:ce.subtitleTextColor,edge:ce.subtitleEdge,bold:ce.subtitleBold},onChange:M}),ae=()=>t(to,{classes:{item:a.menuItem,active:a.active,note:a.menuNote},delayMs:Ge,onDelayChange:I=>E?.(I)}),_t=()=>t(Kn,{classes:{item:a.menuItem,active:a.active},options:Z.map((I,te)=>({key:String(te),label:I.label||I.language,selected:te===m})),onSelect:I=>ke(Number(I))}),Je=()=>t(ta,{classes:{item:a.menuItem,active:a.active,note:a.menuNote},enabled:Ae,delayMs:pe,onToggle:I=>ve?.(I),onDelayChange:I=>S?.(I),onCalibrate:yt}),Y=()=>U&&Q?t(na,{classes:{item:a.menuItem,active:a.active,note:a.menuNote},values:U,onChange:Q}):null;return t("div",{"data-speed-boost-ignore":"true",onClick:I=>I.stopPropagation(),children:t(Zs,{classes:{panel:a.settingsPanel,header:a.settingsHeader,backBtn:a.settingsBackBtn,title:a.settingsTitle,content:a.settingsContent},title:s==="main"?"Settings":s==="subtitle-style"?"Subtitle Style":s==="subtitle-timing"?"Subtitle Timing":s==="audio"?"Audio Track":s==="resolution"?"Resolution":s==="av-sync"?"A/V Sync":s==="ambient"?"Ambient Light":s.charAt(0).toUpperCase()+s.slice(1),onBack:()=>s==="main"?O():b("main"),children:[s==="main"&&St(),s==="resolution"&&Le(),s==="subtitles"&&Xe(),s==="subtitle-style"&&ot(),s==="subtitle-timing"&&ae(),s==="audio"&&_t(),s==="av-sync"&&Je(),s==="ambient"&&Y()]})})},ro=({player:s,title:b,episodeLabel:O,server:A,audioTracks:M,selectedAudioTrack:k,onAudioTrackChange:w,subtitles:u,selectedSubtitle:l,onSubtitleChange:_,streams:r,resolutionIdx:L,onResolutionChange:fe,onBack:Z,children:m,videoDelayEnabled:ke=!1,onVideoDelayToggle:Ae,videoDelayMs:ve=0,onVideoDelayChange:pe,onCalibrateAvSync:S,subtitleDelayMs:yt=0,onSubtitleDelayChange:Ge,showNextEpisodeButton:E=!1,onNextEpisode:U,isLoading:Q=!1,isTheaterMode:ce,onTheaterModeToggle:St,ambientSettings:Le,onAmbientChange:Xe,hideChrome:ot=!1})=>{const{state:ae,refs:_t,actions:Je}=s,Y=_t.videoRef,{subtitleFontSize:I,subtitlePosition:te,subtitleBgOpacity:de,subtitleBgColor:Be,subtitleTextColor:Pe,subtitleEdge:ne,subtitleBold:Tt}=ae,[Ve,_e]=g(null),Ct=F(null),[Te,kt]=g(0);y(()=>{const me=Y.current;if(!me)return;const ee=()=>kt(me.clientHeight||0);ee();const et=new ResizeObserver(ee);return et.observe(me),()=>et.disconnect()},[Y]);const ue=Je.setSubtitleStyle;y(()=>{const me="tv-player-subtitle-style";let ee=document.getElementById(me);ee||(ee=document.createElement("style"),ee.id=me,document.head.appendChild(ee));const et={fontSize:I,position:te,bgOpacity:de,bgColor:Be,textColor:Pe,edge:ne,bold:Tt},re=Y.current,ct=Gn(I,Te||re?.clientHeight||720);if(ee.textContent=xs({...et,fontSize:ct}),re){const wt=()=>{const i=Number(te);return isNaN(i)?0:Math.max(0,Math.min(100,i))},tt=(i,c)=>{try{const z=i;z.snapToLines=!1,z.line=c}catch{}},ge=()=>{const i=ct*16,c=re.videoHeight||re.clientHeight||720,z=re.videoWidth||re.clientWidth||1280;return{step:i*1.3/c*100,chars:Math.max(20,Math.floor(z/(i*.55)))}},Ht=i=>{const c=Math.max(0,Math.min(100,100-wt())),z=Array.from(i.activeCues??[]);if(z.length<=1){z.forEach(Re=>tt(Re,c));return}const{step:oe,chars:Wt}=ge();let At=c;for(let Re=z.length-1;Re>=0;Re--){const gn=String(z[Re].text??"").replace(/<[^>]*>/g,"").split(`
2
- `).reduce((yn,he)=>yn+Math.max(1,Math.ceil(he.length/Wt)),0),Lt=At-gn*oe;tt(z[Re],Math.max(0,Lt)),At=Lt-oe*.4}},Ne=()=>{const i=Math.max(0,Math.min(100,100-wt()));Array.from(re.textTracks).forEach(c=>{c.cues&&(Array.from(c.cues).forEach(z=>tt(z,i)),c.mode==="showing"&&Ht(c))})};Ne();const nt=i=>{const c=i.target;c.mode==="showing"&&Ht(c)},It=()=>{Array.from(re.textTracks).forEach(i=>{i.removeEventListener("cuechange",nt),i.addEventListener("cuechange",nt)}),Ne()};Array.from(re.textTracks).forEach(i=>{i.addEventListener("cuechange",nt)}),re.textTracks.addEventListener("addtrack",It);const xt=Array.from(re.querySelectorAll("track")),dt=()=>Ne();return xt.forEach(i=>i.addEventListener("load",dt)),()=>{Array.from(re.textTracks).forEach(i=>{i.removeEventListener("cuechange",nt)}),re.textTracks.removeEventListener("addtrack",It),xt.forEach(i=>i.removeEventListener("load",dt))}}},[I,te,de,Be,Pe,ne,Tt,l,u,Y,Te]);const Me=u.length>0,Ee=l>=0,it=()=>{_e("main"),Je.setShowControls(!0)},Fe=()=>{_e(null)},Ft=ae.showControls||!!Ve,Ze=Es(s.engine),Ue=Ze.audioTracks.find(me=>me.id===Ze.activeAudioTrack)??M[k],Ut=l>=0?u[l]??Ze.subtitleTracks.find(me=>me.id===l):void 0,Et=t(As,{visible:Ft,title:b,episode:O,server:Q?void 0:A,audio:Q?void 0:Ue?.label||Ue?.language,subtitles:Q?void 0:Ut?.label||Ut?.language,onBack:Z,classes:{overlay:a.controlsOverlay,hidden:a.hidden,top:a.topControls,backBtn:a.backBtn,titleInfo:a.videoTitleInfo,title:a.animeTitle,episode:a.episodeLabel}}),K=!Q&&!ae.isBuffering&&ae.duration>0?t(Ls,{}):null,lt=t(eo,{player:s,visible:Ft,settingsOpen:!!Ve,onOpenSettings:it,onCloseSettings:Fe,hasSubtitles:Me,isSubtitleActive:Ee,subtitles:u,onSubtitleChange:_,showNextEpisodeButton:E,onNextEpisode:U,isTheaterMode:ce,onTheaterModeToggle:St,timeLabelRef:Ct}),x=Ve?t(no,{view:Ve,onSelectView:_e,onClose:Fe,player:s,onSubtitleStyleChange:ue,streams:r,resolutionIdx:L,onResolutionChange:fe,hasSubtitles:Me,subtitles:u,selectedSubtitle:l,isSubtitleActive:Ee,onSubtitleChange:_,audioTracks:M,selectedAudioTrack:k,onAudioTrackChange:w,videoDelayEnabled:ke,onVideoDelayToggle:Ae,videoDelayMs:ve,onVideoDelayChange:pe,onCalibrate:()=>{_e(null),S?.()},subtitleDelayMs:yt,onSubtitleDelayChange:Ge,ambientSettings:Le,onAmbientChange:Xe}):null,Nt=t(qe,{children:[Q&&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})]})}),ae.isBuffering&&!Q&&t("div",{className:a.bufferingOverlay,"aria-hidden":"true",children:t("div",{className:a.bufferingSpinner})}),ae.isSpeedBoostActive&&t("div",{className:a.speedBoostBadge,"aria-hidden":"true",children:[t("span",{children:"2x"}),t(le,{name:"forward",size:12})]})]});return t(Bs,{engine:s.engine,topBar:Et,centerControls:K,bottomBar:!Q&&ae.duration>0?lt:null,settingsPanel:x,overlays:Nt,isInteracting:!!Ve||ae.showVolumeSlider,nativeControls:ae.useNativeControls,onStageClick:Fe,className:ae.isFullscreen?a.fullscreenFlat:"",chromeDisabled:ot,children:m})},so=({servers:s,selectedServer:b,onServerSelect:O})=>s.length===0?null:t("div",{className:vn.sourceSelectionContainer,children:[t("h4",{children:"Source"}),t("div",{className:vn.sourceButtons,children:s.map(A=>t("button",{className:`${vn.sourceButton} ${b===A?vn.active:""}`,onClick:()=>O(A),children:A},A))})]}),ao=ms.memo(so);function oo({details:s,isMovie:b,season:O,episode:A,videoRef:M,active:k}){const w=F("");w.current||(w.current=`tv-${Date.now()}-${Math.random().toString(36).slice(2)}`);const u=C(()=>{if(!s)return;const l=M.current,_=b?"":`S${String(O).padStart(2,"0")}E${String(A).padStart(2,"0")}`;gt.discord.tvPresence.mutate({title:s.title,episodeLabel:_,isPlaying:l?!l.paused&&!l.ended:!0,thumbnail:s.poster,currentTime:l?l.currentTime:0,duration:l&&l.duration||0,isAdult:s.adult===!0,sessionId:w.current}).catch(()=>{}),gt.discord.heartbeat.mutate({sessionId:w.current}).catch(()=>{})},[s,b,O,A,M]);return y(()=>{if(!s)return;u();const l=window.setInterval(()=>{const _=M.current;(!_||!_.paused)&&u()},15e3);return()=>window.clearInterval(l)},[u,s,M]),y(()=>{if(!s||!k)return;const l=M.current;if(!l)return;const _=()=>u();return l.addEventListener("play",_),l.addEventListener("pause",_),l.addEventListener("seeked",_),()=>{l.removeEventListener("play",_),l.removeEventListener("pause",_),l.removeEventListener("seeked",_)}},[s,k,u,M]),y(()=>{const l=w.current,_=()=>vs(l),r=()=>_();return window.addEventListener("pagehide",r),window.addEventListener("beforeunload",r),()=>{window.removeEventListener("pagehide",r),window.removeEventListener("beforeunload",r),_()}},[]),{sendPresence:u}}function io(s,b,O){const A=()=>{const k=Array.isArray(s.audioTracks)?s.audioTracks.length:0,w=O.getWant(),u=k>0?Math.min(Math.max(0,w),k-1):w;s.audioTrack=u,u!==w&&O.onResolve(u)},M=(k,w)=>{const u=O.getWant(),l=Array.isArray(s.audioTracks)?s.audioTracks.length:0;if(w.id!==u&&u>=0&&u<l){s.audioTrack!==u&&(s.audioTrack=u);return}O.onResolve(w.id)};return s.on(b.MANIFEST_PARSED,A),s.on(b.AUDIO_TRACK_SWITCHED,M),()=>{s.off(b.MANIFEST_PARSED,A),s.off(b.AUDIO_TRACK_SWITCHED,M)}}const lo=/\b(SmartTV|SMART-TV|Tizen|Web0S|webOS|NetCast|HbbTV|AppleTV|CrKey|BRAVIA|AFT[A-Za-z]|Fire\s?TV|GoogleTV|Roku|VIDAA|DTV|PlayStation|Xbox|Opera TV|POV_TV)\b/i;function co(){try{if(lo.test(navigator.userAgent||""))return!0;const s=navigator.deviceMemory;if(typeof s=="number"&&s>0&&s<2)return!0}catch{}return!1}const uo="_statusMsg_4sq8d_1",mo="_error_4sq8d_7",ho="_spinner_4sq8d_11",bo="_spin_4sq8d_11",fo="_sourceLoader_4sq8d_16",vo="_ringSpinner_4sq8d_22",po="_meta_4sq8d_40",go="_year_4sq8d_48",yo="_rating_4sq8d_53",So="_typeBadge_4sq8d_62",_o="_tv_4sq8d_70",To="_movie_4sq8d_75",Co="_controlLabel_4sq8d_80",ko="_select_4sq8d_90",Eo="_playerSection_4sq8d_102",No="_video_4sq8d_106",wo="_videoHidden_4sq8d_128",Io="_delayCanvas_4sq8d_133",xo="_delayCanvasActive_4sq8d_146",Ao="_subtitleOverlay_4sq8d_150",Lo="_videoIframe_4sq8d_169",Bo="_retryButton_4sq8d_177",Po="_sidebarSeason_4sq8d_192",Mo="_mobileSeasonRow_4sq8d_208",Ro="_providerSelectWrap_4sq8d_222",$o="_genreRow_4sq8d_230",Do="_genreChip_4sq8d_237",Oo="_metaRow_4sq8d_247",zo="_detailGrid_4sq8d_256",qo="_detailItem_4sq8d_264",Vo="_imdbLink_4sq8d_286",Fo="_watchedOverlay_4sq8d_296",Uo="_watchedTitle_4sq8d_318",Ho="_watchedSubtext_4sq8d_324",Wo="_watchedActions_4sq8d_330",f={statusMsg:uo,error:mo,spinner:ho,spin:bo,sourceLoader:fo,ringSpinner:vo,meta:po,year:go,rating:yo,typeBadge:So,tv:_o,movie:To,controlLabel:Co,select:ko,playerSection:Eo,video:No,videoHidden:wo,delayCanvas:Io,delayCanvasActive:xo,subtitleOverlay:Ao,videoIframe:Lo,retryButton:Bo,sidebarSeason:Po,mobileSeasonRow:Mo,providerSelectWrap:Ro,genreRow:$o,genreChip:Do,metaRow:Oo,detailGrid:zo,detailItem:qo,imdbLink:Vo,watchedOverlay:Fo,watchedTitle:Uo,watchedSubtext:Ho,watchedActions:Wo},Ko=[],Qo=[];function Er({error:s,onRetry:b}){return t("div",{className:`${f.statusMsg} ${f.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:s}),t("button",{className:f.retryButton,onClick:b,children:"Retry"})]})})}const ci=()=>{const{id:s}=hs(),[b]=bs(),O=F(b);O.current=b;const A=fs(),M=ws(),k=b.get("type"),w=ps(),u=!!w.session,l=u&&!w.session?.host,_=l&&["tv","movie"].includes(w.room?.selection.kind||"")?w.room?.selection:null,[r,L]=g(null),[fe,Z]=g(()=>parseInt(b.get("s")||"1",10)||1),m=_?.season??fe,[ke,Ae]=g([]),[ve,pe]=g(()=>parseInt(b.get("e")||"1",10)||1),S=_?Number(_.episode):ve,[yt,Ge]=g(()=>{try{return R.getItem("tvProvider")||""}catch{return""}}),E=_?.provider??yt,[U,Q]=g([]),[ce,St]=g(""),[Le,Xe]=g(""),{options:ot,isFallback:ae,isLoading:_t}=sa(),Je=Se(()=>ot.filter(e=>(e.kind??"tv")==="tv").map(e=>({id:e.id,label:e.label,tier:e.tier==="embed"?"embed":"direct",servers:e.servers})),[ot]),Y=ae||Je.length===0?Ko:Je,I=Y.filter(e=>e.tier==="direct"),te=Y.filter(e=>e.tier==="embed"),[de,Be]=g(!1),[Pe,ne]=g(""),[Tt,Ve]=g([]),[_e,Ct]=g(0),[Te,kt]=g([]),[ue,Me]=g(-1),[Ee,it]=g(0),[Fe,Ft]=g(""),[Ze,Ue]=g(""),[Ut,Et]=g(()=>{try{return R.getItem("tvServer")||""}catch{return""}}),K=_?.source??Ut,lt=Se(()=>Y.find(e=>e.id===E),[Y,E]),x=lt?.tier==="embed",[Nt,me]=g([]),[ee,et]=g(""),[re,ct]=g(""),[wt,tt]=g(!1),ge=Se(()=>Nt.length>0?Nt:lt?.servers??[],[Nt,lt]),Ht=Se(()=>ee&&!u?["Embed",...ge]:ge,[ge,ee,u]),Ne=wt&&!!ee,nt=Ne?re||ee:"";y(()=>{if(!ee){ct("");return}let e=!1;return Hn(`/api/resolve?url=${encodeURIComponent(ee)}`).then(n=>{!e&&n.finalUrl&&ct(n.finalUrl)}).catch(()=>{}),()=>{e=!0}},[ee]);const It=F([]);y(()=>{It.current=U},[U]);const xt=F(_e);y(()=>{xt.current=_e},[_e]);const dt=F(ue);y(()=>{dt.current=ue},[ue]);const i=Ps({skipIntervals:Qo}),c=i.refs.videoRef,z=F(null),oe=F([]),Wt=F(null),At=F(null),{videoDelayMs:Re,videoDelayEnabled:Kt,setDelayEnabled:gn,handleVideoDelayChange:Lt,isCalibrating:yn,testClipActive:he,stopCalibration:Sn,openAvSyncCalibrator:wr,cancelAvSyncCalibrator:Ir,applyAvSyncCalibrator:xr,toggleTestClip:Ar,calibReturnRef:Qt,effectiveVideoDelayMs:_n}=Ms(c),[ut,Lr]=g(()=>{try{const e=Number(R.getItem("tvSubtitleDelayMs"));if(Number.isFinite(e)&&e>=-6e4&&e<=6e4)return Math.round(e)}catch{}return 0}),Tn=F(ut);Tn.current=ut;const Br=C(e=>{const n=Math.max(-6e4,Math.min(6e4,Math.round(e)));if(Tn.current!==n){Tn.current=n,Lr(n);try{R.setItem("tvSubtitleDelayMs",String(n))}catch{}}},[]);Rs({videoRef:c,canvasRef:Wt,delayMs:_n,enabled:Kt});const Cn=Kt,ye=Cn||ut!==0,{settings:kn,update:Pr}=$s(),En=F(ye);En.current=ye;const Nn=C(()=>{if(!En.current)return;const e=c.current;e&&Array.from(e.textTracks).forEach(n=>{n.mode!=="hidden"&&(n.mode="hidden")})},[c]),{hasConsent:Bt,grant:Mr}=gs(),v=k==="movie";oo({details:r,isMovie:v,season:m,episode:S,videoRef:c,active:!x&&!de&&!Pe&&U.length>0});const Yt=s?ys(k||"tv",s):"",G=Yt,$e=`${G}:${m}:${S}:${E}:${K}`,jt=Se(()=>!s||!r||x||Ne||de||Le!==$e||U[Ee]?.type!=="hls"?null:{kind:v?"movie":"tv",...v?{}:{season:m},showId:s,episode:String(v?1:S),provider:E,source:K,mode:"sub",title:r.title},[s,r,x,Ne,de,Le,$e,U,Ee,v,m,S,E,K]),Xn=Ds(i.engine,jt,de||!r),Jn=aa(),Gt=oa(),Xt=ia(),{toggle:Zn,bookmarkedIds:Rr,pending:$r}=la(),{data:er}=ca(r?Yt:void 0),Pt=er?!!er.inLibrary:Yt?Rr.has(Yt):!1,Dr=C(()=>{!r||!s||Zn({tmdbId:Number(s),mediaType:k||"tv",title:r.title,poster:r.poster,year:r.year,adult:r.adult})},[r,s,k,Zn]),{data:He,isFetched:Mt,isFetching:wn}=da(G||void 0,m,S),Jt=Se(()=>ke.map(e=>e.episode_number).sort((e,n)=>e-n),[ke]),Rt=Jt.indexOf(S),In=Rt>0?Jt[Rt-1]:null,q=Rt>=0&&Rt<Jt.length-1?Jt[Rt+1]:null,Zt=Se(()=>(r?.seasons??[]).map(e=>e.season_number).filter(e=>Number.isFinite(e)).sort((e,n)=>e-n),[r]),De=Se(()=>{if(v||q!=null)return null;const e=Zt.indexOf(m);return e>=0&&e<Zt.length-1?Zt[e+1]:(r?.number_of_seasons??0)>m?m+1:null},[v,q,Zt,m,r?.number_of_seasons]),en=He?.currentTime??0,tn=F(null),[We,nn]=g(!1),[mt,tr]=g(0),[$t,nr]=g(!1),[ht,bt]=g(!1),[Or,xn]=g(!1),[zr,qr]=g(""),[rn,Vr]=g(!1),[Fr,An]=g(!1),[Ln,rr]=g(!1),{isTheaterMode:Oe,toggleTheaterMode:Bn,handleLayoutClick:Ur}=Os(),sr=He?.duration??0,ar=He?.completed===1,sn=`${G}:${m}:${S}`,[or,Hr]=g(null);y(()=>{Mt&&Hr(e=>e?.key===sn?e:{key:sn,watched:ar||Vt(en,sr)})},[Mt,sn,ar,en,sr]);const Wr=Mt&&or?.key===sn&&or.watched,ft=!u&&!he&&Wr&&!Ln,Kr=C(()=>rr(!0),[]);y(()=>{const e=n=>{n.defaultPrevented||n.ctrlKey||n.metaKey||n.altKey||n.repeat||n.target.closest('input, textarea, button, select, a, [role="button"], [contenteditable="true"]')||n.key.toLowerCase()==="t"&&Bn()};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[Bn]),zs(i,(U.length>0||Ze!=="")&&!Oe&&!We&&!ht&&!ft);const Qr=ba(),[vt,Yr]=g(ma),jr=C(e=>{Yr(e),ha(e)},[]),Ke=F(!1),ze=F(null),Pn=F(0),X=F(null),an=F(""),Gr=Cr(en),Dt=!u&&!Ke.current&&!Ln&&(We||ht||Gr||ft),on=F(Dt);on.current=Dt;const ln=F(!1);y(()=>{ln.current=$t},[$t]);const Qe=C((e,n)=>{if(!G||!n||n<30)return;const o=Vt(e,n);Math.abs(e-Pn.current)<10&&!o||(Pn.current=e,Jn.mutate({mediaId:G,season:m,episode:S,currentTime:Math.floor(e),duration:Math.floor(n),completed:o,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:k||"tv",adult:r?.adult?1:0}))},[G,m,S,Jn,r,k]),we=C((e,n)=>{Sn();const o=new URLSearchParams(b);o.set("type",b.get("type")||"tv"),o.set("s",String(e)),o.set("e",String(n)),A(`${window.location.pathname}?${o.toString()}`)},[b,A,Sn]),Ot=C(()=>{const e=c.current;if(!e||v||q==null){xn(!1);return}const n=e.duration||0,o=e.currentTime||0;xn(n>0&&o/n>=.8)},[v,q,c]),cn=C((e,n)=>["tv-sources",E,v?"movie":"tv",s,e,n,K],[E,v,s,K]),dn=C(async(e,n)=>{if(!r||!s||!E)return{valid:!1,sources:[]};const o=v?"movie":"tv",d=await gt.tv.sources.query({provider:E,type:o,tmdbId:String(s),season:e,episode:n,title:r.title||"",year:r.year||"",totalSeasons:String(r.number_of_seasons||1),imdbId:r.imdb_id||"",...K?{server:K}:{}});return{valid:"valid"in d?d.valid:!1,error:"error"in d?d.error:void 0,sources:d.sources,referer:"referer"in d?d.referer:void 0,audioTracks:d.audioTracks,subtitles:"subtitles"in d?d.subtitles:void 0,servers:"servers"in d?d.servers:void 0,server:"server"in d?d.server:void 0,embedUrl:"embedUrl"in d?d.embedUrl:void 0}},[r,s,E,v,K]),ir=C(()=>{if(v||!r||!s||!E||x||q==null)return;const e=cn(m,q);M.getQueryState(e)?.status!=="success"&&M.prefetchQuery({queryKey:e,queryFn:()=>dn(m,q),staleTime:300*1e3,gcTime:1800*1e3})},[v,r,s,E,x,q,m,M,cn,dn]),Xr=C(()=>{if(he)return;Ot();const e=c.current;!e||e.paused||e.ended||(e.duration>0&&e.duration-e.currentTime<=60&&ir(),!ze.current&&(ze.current=setTimeout(()=>{ze.current=null,Qe(e.currentTime,e.duration||0)},5e3)))},[Qe,c,he,Ot,ir]),Jr=C(()=>{const e=c.current;if(!(!e||!r)&&(ze.current&&clearTimeout(ze.current),ze.current=null,Qe(e.currentTime,e.duration||0),!l)){if(q!=null){vt&&(pe(q),we(m,q));return}qr(v?r.title:`${r.title} - Season ${m}`),bt(!0),Ke.current=!0}},[v,r,m,q,vt,Qe,we,c,l]),{checkEnd:un,logDuration:lr}=qs({videoRef:c,sourceType:x?"iframe":void 0,resetKey:`${G}:${m}:${S}:${Ln}`,onEnd:Jr}),Zr=C(()=>{i.actions.onPlay()},[i.actions]),es=C(()=>{i.actions.onPause();const e=c.current;e&&!e.ended&&Qe(e.currentTime,e.duration||0)},[i.actions,Qe,c]),ts=C(()=>{const e=c.current;if(e){try{const n=parseFloat(R.getItem("playerVolume")||"");isNaN(n)||(e.volume=Math.max(0,Math.min(1,n))),e.muted=R.getItem("playerMuted")==="true"}catch{}if(X.current!=null&&X.current>0){try{e.currentTime=X.current}catch{}X.current=null}Ot()}},[c,Ot]),Mn=C(()=>{const e=c.current;if(e&&X.current!=null&&X.current>0){try{e.currentTime=X.current}catch{}X.current=null}},[c]),ns=C(()=>{mt>0&&(X.current=mt);const e=c.current;if(e&&mt>0){try{e.currentTime=mt,X.current=null}catch{}e.play().catch(()=>{})}nn(!1),Ke.current=!0},[mt,c]),cr=C(()=>{X.current=null;const e=c.current;e&&(e.currentTime=0,e.play().catch(()=>{})),nn(!1),Ke.current=!0},[c]),dr=C(()=>{q!=null&&(Ke.current=!0,pe(q),we(m,q))},[q,m,we]),ur=C(()=>{De!=null&&(bt(!1),Ke.current=!0,Z(De),pe(1),we(De,1))},[De,we]),rs=C(async()=>{if(G)try{Pt?await Gt.mutateAsync({id:G,status:"Completed"}):r&&s&&(await Xt.mutateAsync({tmdbId:Number(s),mediaType:k||"tv",title:r.title,poster:r.poster,backdrop:r.backdrop,year:r.year,overview:r.overview,adult:r.adult,status:"Completed",silent:!0}),Tr.success("Moved to Completed")),bt(!1),A("/")}catch{}},[G,Pt,Gt,Xt,r,s,k,A]);y(()=>{Ke.current=!1,tn.current=null,nn(!1),xn(!1),tr(0),nr(!1),rr(!1),ln.current=!1,X.current=null,Pn.current=0},[G,m,S]),y(()=>{an.current=$e},[$e]),y(()=>{Mt&&(nr(!0),ln.current=!0)},[Mt,G,m,S]),y(()=>{if(u||wn||!He||Ke.current)return;const e=`${G}:${m}:${S}`;if(tn.current===e)return;tn.current=e;const n=He,o=n.currentTime??0;Cr(o)&&n.completed!==1&&!Vt(o,n.duration??0)&&(tr(o),nn(!0))},[He,wn,G,m,S,u]),y(()=>{!u&&We&&c.current&&c.current.pause()},[We,c,u]),y(()=>{const e=c.current;return()=>{ze.current&&clearTimeout(ze.current),ze.current=null,!e?.ended&&i.engine.getState().duration>0&&Qe(i.engine.getTimeline().currentTime,i.engine.getState().duration)}},[i.engine,Qe,c]);const Rn=C(e=>{let n=null,o=!0;try{n=R.getItem("tvLastSubtitle"),o=R.getItem("tvSubtitlesEnabled")!=="false"}catch{}return jn(e,{lastKey:n,enabled:o})},[]),$n=C(e=>{if(!(e<0))try{R.setItem("tvSubtitlesEnabled","true"),R.setItem("tvSelectedSubtitle",String(e))}catch{}},[]),mr=C(e=>{if(e.length===0)return 0;let n=null;try{n=R.getItem("tvLastAudio")}catch{}if(n){const o=e.findIndex(B=>Wn(B)===n);if(o>=0)return o;const d=n.indexOf("|||"),h=d>=0?n.slice(0,d):n,T=d>=0?n.slice(d+3):n,$=e.findIndex(B=>B.language===h||B.label===T);if($>=0)return $}return jn(e,{lastKey:null,enabled:!0})},[]),hr=C(e=>{let n=null;try{n=R.getItem("tvLastQuality")}catch{}if(!n||e.length===0)return 0;const o=e.findIndex(B=>(B.quality||"")===n);if(o>=0)return o;const d=B=>{const J=/(\d{3,4})/.exec(B||"");return J?parseInt(J[1],10):0},h=d(n);if(!h)return 0;let T=0,$=1/0;return e.forEach((B,J)=>{const p=d(B.quality),H=Math.abs(p-h);p>0&&H<$&&($=H,T=J)}),T},[]),{data:br}=ua(G||void 0),fr=Se(()=>(br?.progress??[]).filter(n=>n.season===m&&(n.completed===1||Vt(n.currentTime,n.duration))).map(n=>String(n.episode)),[br,m]),vr=Se(()=>ke.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})),[ke]),pr=Se(()=>(r?.genres??[]).map(e=>e.name).slice(0,5),[r]),Dn=Se(()=>[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]);y(()=>{if(!l&&Y.length!==0&&!Y.some(e=>e.id===E)){const e=Y.find(n=>n.tier==="direct")?.id??Y[0].id;Ge(e);try{R.setItem("tvProvider",e)}catch{}}},[Y,E,l]),y(()=>{me([]),et(""),ct(""),tt(!1)},[E]),y(()=>{if(!l&&ge.length!==0&&!ge.includes(K)){Et(ge[0]);try{R.setItem("tvServer",ge[0])}catch{}}},[ge,K,l]),y(()=>{if(!s){L(null),Q([]),Xe(""),ne(""),Ue("");return}const e=Number(s),n=k||"tv";L(null),Q([]),Xe(""),ne(""),Ue("");const o=parseInt(O.current.get("s")||"",10),d=parseInt(O.current.get("e")||"",10);Z(isNaN(o)?1:o),pe(isNaN(d)?1:d),it(0),gt.tv.details.query({type:n,id:String(e)}).then(h=>{const T={id:h.id,title:h.title||"",overview:h.overview||"",vote_average:h.vote_average,year:h.year,poster:h.poster,backdrop:h.backdrop,imdb_id:h.imdb_id||void 0,adult:h.adult,seasons:h.seasons,number_of_seasons:h.number_of_seasons};L(T),T.seasons&&T.seasons.length>0&&isNaN(o)&&Z(T.seasons[0].season_number)}).catch(()=>{})},[s,k]),y(()=>{if(!r||!s)return;if(!(r.seasons!==void 0||r.number_of_seasons!==void 0)){Ae([]);return}const n=parseInt(b.get("e")||"",10);gt.tv.episodes.query({id:String(s),season:String(m)}).then(o=>{const d=(o.episodes||[]).map(h=>({episode_number:h.episode_number,name:h.name||"",vote_average:h.vote_average,overview:h.overview||"",still_path:h.still_path||""}));Ae(d),d.length!==0&&pe(h=>!isNaN(n)&&d.some(T=>T.episode_number===n)?n:d.some(T=>T.episode_number===h)?h:d[0].episode_number)}).catch(()=>{})},[r,s,m,b]),y(()=>{if(!x||!r||!s)return;Hn(`/api/tv/embed/${E}/${v?"movie":"tv"}/${s}?season=${m}&episode=${S}`).then(n=>{if(n.url)return Ue(n.url),Hn(`/api/resolve?url=${encodeURIComponent(n.url)}`).then(o=>{o.finalUrl&&Ue(o.finalUrl)})}).catch(()=>{})},[E,r,s,m,S,v,x]);const mn=C(async()=>{if(!r||!s||!E||x||r.adult&&!Bt)return;const e=$e;Be(!0),ne(""),It.current.length===0&&(Q([]),it(0),Ve([]),kt([]));try{const n=await M.fetchQuery({queryKey:cn(m,S),queryFn:()=>dn(m,S),staleTime:3e5,gcTime:18e5});if(an.current!==e)return;if(Be(!1),!n.valid||!n.sources?.length){ne(n.error?`${n.error}`:ge.length>0?`No streams from ${K}. Try another server.`:"No streams available.");return}if(u&&K&&n.server&&n.server!==K){Q([]),ne("The host's selected server is unavailable. Automatic source switching is disabled in watch-along rooms.");return}!l&&!K&&n.server&&Et(n.server);const o=u?n.sources.filter(B=>B.type==="hls"):n.sources;if(u&&o.length===0){Q([]),ne("The room requires a direct HLS source. No compatible stream is available here.");return}Q(o),St(n.server||K),Xe(e),n.servers?.length&&me(n.servers),n.embedUrl&&et(n.embedUrl),it(hr(o)),n.referer&&Ft(n.referer);const d=n.audioTracks||[];Ve(d),Ct(d.length>0?mr(d):0);const h=n.subtitles||[];if(kt(h),h.length>0){const B=Rn(h);Me(B),$n(B)}else Me(-1);const T=v?"movie":"tv",$=s;gt.tv.subtitles.query({type:T,tmdbId:String($),season:String(m),episode:String(S)}).then(B=>{if(an.current!==e)return;const J=Array.isArray(B.subtitles)?B.subtitles:[];J.length!==0&&kt(p=>{const H=[...p,...J.filter(j=>!p.some(V=>V.url===j.url))];if(p.length===0){const j=Rn(H);Me(j),$n(j)}return H})}).catch(()=>{}),ne("")}catch(n){if(an.current!==e)return;Be(!1),ne(n instanceof Error?n.message:"Failed to load streams.")}},[r,s,E,m,S,v,x,Bt,ge,K,Rn,$n,mr,hr,M,cn,dn,$e,u,l]),On=C(()=>{const e=c.current;e&&!isNaN(e.currentTime)&&(X.current=e.currentTime)},[c]),ss=C(e=>{if(!(l||u&&e==="Embed")){if(e==="Embed"){tt(!0);return}On(),tt(!1),Et(e);try{R.setItem("tvServer",e)}catch{}ne("")}},[On,l,u]),as=C(e=>{Ge(e);try{R.setItem("tvProvider",e)}catch{}},[]);y(()=>{E&&r&&!x&&mn()},[E,r,mn,x]),y(()=>{if(ft){i.engine.unload();return}if(!c.current)return;if(z.current=null,x||Ne||u&&U[Ee]?.type!=="hls"){i.engine.unload();return}if(he&&!u)return i.engine.loadSource({url:"/av-sync-test.mp4"},{autoPlay:!on.current});if(Qt.current!=null&&(X.current=Qt.current,Qt.current=null),Le===$e&&X.current==null&&!on.current)try{const p=c.current;p&&!p.ended&&p.currentTime>1&&(X.current=p.currentTime)}catch{}const n=X.current??0,o=!de&&Le===$e?Ne?"":U[Ee]?.url||"":"";if(!o){try{c.current?.pause(),c.current?.removeAttribute("src"),c.current?.load()}catch{}return}const d=c.current;d.pause(),d.removeAttribute("src"),d.load(),i.actions.resetMediaState();const h=`/api/tv/stream-proxy?url=${encodeURIComponent(o)}&referer=${encodeURIComponent(Fe)}&provider=${encodeURIComponent(E)}`,T=co()||document.body.classList.contains("low-end"),$=T?60:180,B=i.engine.loadSource({url:h,hls:U[Ee]?.type==="hls"},{hlsConfig:{enableWorker:!0,lowLatencyMode:!1,startPosition:n>0?n:-1,maxBufferLength:$,maxMaxBufferLength:$+(T?30:60),backBufferLength:T?30:60,maxBufferSize:(T?120:360)*1e3*1e3,fragLoadPolicy:{default:{maxTimeToFirstByteMs:15e3,maxLoadTimeMs:45e3,timeoutRetry:{maxNumRetry:2,retryDelayMs:0,maxRetryDelayMs:0},errorRetry:{maxNumRetry:3,retryDelayMs:800,maxRetryDelayMs:6e3}}},manifestLoadPolicy:{default:{maxTimeToFirstByteMs:1e4,maxLoadTimeMs:25e3,timeoutRetry:{maxNumRetry:1,retryDelayMs:500,maxRetryDelayMs:2e3},errorRetry:{maxNumRetry:2,retryDelayMs:800,maxRetryDelayMs:4e3}}}},onHls:(p,H)=>{z.current=p;const j=()=>{let D=!1,P=0;try{D=R.getItem("tvSubtitlesEnabled")==="true";const N=parseInt(R.getItem("tvSelectedSubtitle")||"0",10);!isNaN(N)&&N>=0&&(P=N)}catch{}return{enabled:D,index:P}},V=()=>{if(typeof p.subtitleTrack!="number")return;if(oe.current.length>0){p.subtitleTrack=-1;return}const D=Array.isArray(p.subtitleTracks)?p.subtitleTracks:[];if(D.length===0){p.subtitleTrack=-1;return}const P=j();if(P.enabled){const N=P.index<D.length?P.index:0;p.subtitleTrack=N,Me(N),Nn()}else p.subtitleTrack=-1};io(p,H.Events,{getWant:()=>xt.current,onResolve:D=>Ct(D)}),p.on(H.Events.MANIFEST_PARSED,V),p.on(H.Events.SUBTITLE_TRACKS_UPDATED,()=>{V()}),p.on(H.Events.SUBTITLE_TRACK_SWITCH,(D,P)=>{if(oe.current.length>0){if(P.id!==-1)try{p.subtitleTrack=-1}catch{}return}const N=Array.isArray(p.subtitleTracks)?p.subtitleTracks:[];if(N.length!==0){if(P.id===-1){const Ce=j();if(Ce.enabled){const se=Ce.index<N.length?Ce.index:0;p.subtitleTrack=se;return}}Me(P.id),Nn()}})},onReady:()=>{(n>0||!on.current&&ln.current)&&i.engine.play()},onError:p=>{ne(p.message),Be(!1),z.current=null}}),J=()=>{const j=d.error?.code===4?"Video source not supported or not found":"Failed to load video stream";ne(`${j}. The source may be invalid or expired. Try switching source or reloading.`),Be(!1)};return d.addEventListener("error",J),()=>{B(),z.current=null,d.removeEventListener("error",J)}},[U,Le,de,Ee,E,Fe,x,Ne,c,Qt,he,G,m,S,Mn,Nn,i.actions,i.engine,$e,u,ft]),y(()=>{if(l||!$t||We||ht||Dt||x||he)return;const e=c.current;!e||!e.paused||e.ended||e.readyState<1||(Mn(),i.engine.play())},[$t,We,ht,Dt,x,he,Mn,c,l,i.engine]),y(()=>{const e=z.current;!e||typeof e.audioTrack!="number"||(e.audioTrack=_e)},[_e]),y(()=>{const e=z.current;!e||typeof e.subtitleTrack!="number"||!Array.isArray(e.subtitleTracks)||e.subtitleTracks.length===0||oe.current.length>0||(ue>=0?e.subtitleTrack=ue:e.subtitleTrack=-1)},[ue]),y(()=>{const e=c.current;if(!(!e||x)&&(e.querySelectorAll("track").forEach(n=>n.remove()),oe.current=[],Te.length!==0&&(Te.forEach(n=>{const o=document.createElement("track");o.kind="subtitles",o.label=n.label||n.language||"Unknown",o.srclang=n.language||n.label||"en";const d=`/api/subtitle-proxy?url=${encodeURIComponent(n.url)}&referer=${encodeURIComponent(Fe)}`;o.src=d,o.addEventListener("load",()=>{const h=oe.current.indexOf(o),T=o.track;if(T&&h>=0){const $=h===dt.current;T.mode=$&&!En.current?"showing":"hidden"}}),e.appendChild(o),oe.current.push(o)}),Te.length>0)))try{const n=z.current;n&&typeof n.subtitleTrack=="number"&&n.subtitleTrack!==-1&&(n.subtitleTrack=-1)}catch{}},[Te,Fe,x,E,K,c]),y(()=>{const e=c.current;if(!e||x)return;const n=z.current;oe.current.length>0&&n&&typeof n.subtitleTrack=="number"&&Array.isArray(n.subtitleTracks)&&n.subtitleTracks.length>0&&(n.subtitleTrack=-1);const o=()=>{const T=Gn(i.state.subtitleFontSize,e.clientHeight||720),$=Math.max(0,Math.min(100,100-i.state.subtitlePosition)),B=()=>{const V=T*16,D=e.videoHeight||e.clientHeight||720,P=e.videoWidth||e.clientWidth||1280;return{step:V*1.3/D*100,chars:Math.max(20,Math.floor(P/(V*.55)))}},J=(V,D)=>{const P=V;P.snapToLines=!1,P.line=D},p=V=>{if(!V.cues)return;Array.from(V.cues).forEach(se=>J(se,$));const D=Array.from(V.activeCues??[]);if(D.length<=1){D.forEach(se=>J(se,$));return}const{step:P,chars:N}=B();let Ce=$;for(let se=D.length-1;se>=0;se--){const Ye=String(D[se].text??"").replace(/<[^>]*>/g,"").split(`
3
- `).reduce((bn,zt)=>bn+Math.max(1,Math.ceil(zt.length/N)),0);Ce=Math.max(0,Ce-Ye*P),J(D[se],Ce),Ce-=P*.4}},H=oe.current;if(H.length>0){H.forEach((V,D)=>{const P=V.track;if(!P)return;const N=D===ue;P.mode=N&&!ye?"showing":"hidden",N&&!ye&&p(P)});return}const j=Array.from(e.textTracks);j.length!==0&&j.forEach((V,D)=>{const P=D===ue;V.mode=P&&!ye?"showing":"hidden",P&&!ye&&p(V)})};o();const d=()=>o();e.textTracks.addEventListener("addtrack",d),e.addEventListener("loadedmetadata",o,{once:!0});const h=window.setTimeout(o,600);return()=>{e.textTracks.removeEventListener("addtrack",d),e.removeEventListener("loadedmetadata",o),window.clearTimeout(h)}},[ue,Te,x,E,c,ye,i.state.subtitleFontSize,i.state.subtitlePosition]),y(()=>{if(!ye)return;const e=c.current,n=At.current;if(!e||!n)return;const o=ut/1e3,d=_n/1e3,h=new Set;let T=[],$=-1,B=-1,J=-1,p=-1,H=0,j=0,V=!1;const D=()=>{const W=dt.current;if(W<0)return null;const je=oe.current;return je.length>0?je[W]?.track??null:Array.from(e.textTracks)[W]??null},P=(W,je)=>{const be=W.cues;if(!be||be.length===0)return Array.from(W.activeCues??[]);let rt=0,st=be.length;for(;rt<st;){const Ie=rt+st>>>1;be[Ie].endTime+o<je?rt=Ie+1:st=Ie}const qt=[];for(let Ie=rt;Ie<be.length;Ie++){const fn=be[Ie];if(fn.startTime+o>je)break;fn.endTime+o>=je&&qt.push(fn)}return qt},N=()=>{const W=D(),je=e.currentTime-d,be=W?P(W,je):[],rt=e.clientWidth,st=e.clientHeight,qt=e.videoWidth,Ie=e.videoHeight;if(be.length===T.length&&be.every((Vn,Fn)=>Vn===T[Fn])&&rt===$&&st===B&&qt===J&&Ie===p||(T=be,$=rt,B=st,J=qt,p=Ie,n.textContent="",be.length===0))return;const Sr={fontSize:Gn(i.state.subtitleFontSize,st),position:i.state.subtitlePosition,bgOpacity:i.state.subtitleBgOpacity,bgColor:i.state.subtitleBgColor,textColor:i.state.subtitleTextColor,edge:i.state.subtitleEdge,bold:i.state.subtitleBold},cs=Vs(Sr),ds=Fs(e,Sr.position);be.forEach((Vn,Fn)=>{const _r=String(Vn.text??"");if(!Us(_r).trim())return;const Un=document.createElement("div"),us=(be.length-1-Fn)*1.7;Un.style.cssText=`${cs}
4
- bottom: calc(${ds}px + ${us}em);`,Un.innerHTML=Hs(_r),n.appendChild(Un)})},Ce=()=>{Array.from(e.textTracks).forEach(W=>{h.has(W)||(h.add(W),W.addEventListener("cuechange",N))})},se=()=>{Ce(),N()},qn=()=>{if(V||j)return;const W=()=>{j=0,!(V||e.paused||e.ended)&&(N(),qn())};j=window.requestAnimationFrame(W)},Ye=e,bn=()=>{H=0,N(),!V&&Ye.requestVideoFrameCallback&&(H=Ye.requestVideoFrameCallback(bn))},zt=()=>{N(),Ye.requestVideoFrameCallback?H||(H=Ye.requestVideoFrameCallback(bn)):qn()};Ce(),e.textTracks.addEventListener("addtrack",se),e.textTracks.addEventListener("removetrack",se),e.addEventListener("timeupdate",N),e.addEventListener("seeked",N),e.addEventListener("loadedmetadata",N),e.addEventListener("play",zt);const gr=Array.from(e.querySelectorAll("track"));gr.forEach(W=>W.addEventListener("load",N));const yr=typeof ResizeObserver>"u"?null:new ResizeObserver(()=>N());return yr?.observe(e),N(),zt(),()=>{V=!0,h.forEach(W=>W.removeEventListener("cuechange",N)),e.textTracks.removeEventListener("addtrack",se),e.textTracks.removeEventListener("removetrack",se),e.removeEventListener("timeupdate",N),e.removeEventListener("seeked",N),e.removeEventListener("loadedmetadata",N),e.removeEventListener("play",zt),gr.forEach(W=>W.removeEventListener("load",N)),yr?.disconnect(),j&&window.cancelAnimationFrame(j),H&&Ye.cancelVideoFrameCallback&&Ye.cancelVideoFrameCallback(H),n.textContent=""}},[ye,ut,ue,Te,_n,c,i.state.subtitleFontSize,i.state.subtitlePosition,i.state.subtitleBgOpacity,i.state.subtitleBgColor,i.state.subtitleTextColor,i.state.subtitleEdge,i.state.subtitleBold]);const zn=()=>{L(null),Q([]),Ue(""),A(-1)},os=C(e=>{l||(Z(e),pe(1),we(e,1))},[we,l]),hn=!v&&r?.seasons&&r.seasons.length>1?t("label",{className:f.sidebarSeason,children:[t("span",{children:"Season"}),t("select",{disabled:l,value:m,onChange:e=>os(parseInt(e.currentTarget.value,10)||1),className:f.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,pt=C(e=>{if(l)return;const n=parseInt(e,10);if(!isNaN(n)){try{c.current?.pause()}catch{}pe(n),we(m,n)}An(!1)},[m,we,c,l]);y(()=>{if(v)return;const e=n=>{n.target.closest('input, textarea, button, select, a, [role="button"], [contenteditable="true"]')||n.key.toLowerCase()==="n"&&(q!=null?pt(String(q)):Tr.error("No next episode available"))};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[v,q,pt]);const is=e=>{Ct(e);try{const o=Tt[e];o&&R.setItem("tvLastAudio",Wn(o))}catch{}const n=z.current;n&&n.audioTrack!==void 0&&(n.audioTrack=e)},ls=e=>{Me(e);try{if(e===-1)R.setItem("tvSubtitlesEnabled","false");else{R.setItem("tvSubtitlesEnabled","true"),R.setItem("tvSelectedSubtitle",String(e));const h=Te[e];h&&R.setItem("tvLastSubtitle",Wn(h))}}catch{}const n=c.current,o=z.current;if(o&&typeof o.subtitleTrack=="number"&&Array.isArray(o.subtitleTracks)&&o.subtitleTracks.length>0&&(o.subtitleTrack=oe.current.length>0||e<0?-1:e),!n)return;const d=oe.current;if(d.length>0){d.forEach((h,T)=>{const $=h.track;if(!$)return;const B=T===e;$.mode=B&&!ye?"showing":"hidden"});return}Array.from(n.textTracks).forEach((h,T)=>{const $=T===e;h.mode=$&&!ye?"showing":"hidden"})};return y(()=>{if(!r){document.title="TV & Movies - dango";return}document.title=v?`${r.title} - dango`:`${r.title} - Season ${m} Episode ${S} - dango`},[r,v,m,S]),y(()=>{if(!r||v)return;const e=new URLSearchParams(b),n=e.get("s"),o=e.get("e"),d=String(m),h=String(S);n===d&&o===h||(e.set("type",b.get("type")||"tv"),e.set("s",d),e.set("e",h),A(`${window.location.pathname}?${e.toString()}`,{replace:!0}))},[r,v,m,S,b,A]),t("div",{className:`${xe.playerPageLayout} ${Oe?xe.theaterMode:""} ${v?xe.noSidebar:""}`,onClick:Ur,children:[Oe&&t(Ws,{videoRef:c,active:kn.enabled&&!x&&U.length>0&&!Pe&&!(r?.adult&&!Bt),settings:kn}),!Oe&&!v&&t("aside",{className:xe.episodeSidebar,children:r?t(Ks,{episodes:vr,currentEpisode:String(S),watchedEpisodes:fr,onEpisodeClick:pt,header:hn}):t(Qs,{variant:"sidebar"})}),t("div",{className:xe.playerMain,children:[r&&t("div",{className:f.playerSection,onContextMenu:e=>e.preventDefault(),style:r.adult&&!Bt?{filter:"blur(14px)",pointerEvents:"none",userSelect:"none"}:void 0,children:x&&Ze&&!u?t("iframe",{src:Ze,className:f.videoIframe,allow:"autoplay; fullscreen",allowFullScreen:!0}):!x&&nt&&!u?t("iframe",{src:nt,className:f.videoIframe,allow:"autoplay; fullscreen",allowFullScreen:!0}):!x&&(U.length>0||de)?t(qe,{children:[Pe&&t(Er,{error:Pe,onRetry:mn}),t(ro,{player:i,title:r.title,episodeLabel:v?void 0:`S${m} E${S}`,server:ce||lt?.label||E,audioTracks:Tt,selectedAudioTrack:_e,onAudioTrackChange:is,subtitles:Te,selectedSubtitle:ue,onSubtitleChange:ls,streams:U,resolutionIdx:Ee,onResolutionChange:e=>{On(),it(e);try{const n=U[e]?.quality;n&&R.setItem("tvLastQuality",n)}catch{}},onBack:zn,videoDelayEnabled:Kt,onVideoDelayToggle:gn,videoDelayMs:Re,onVideoDelayChange:Lt,onCalibrateAvSync:u?void 0:wr,subtitleDelayMs:ut,onSubtitleDelayChange:Br,showNextEpisodeButton:!l&&Or&&!We&&!ht,onNextEpisode:dr,isLoading:de,isTheaterMode:Oe,onTheaterModeToggle:Bn,ambientSettings:kn,onAmbientChange:Pr,hideChrome:ft,children:t(qe,{children:[t(Ns,{autoPlay:!u&&$t&&!Dt,playsInline:!0,disablePictureInPicture:!0,className:`${f.video} ${Cn?f.videoHidden:""}`,onTimeUpdate:()=>{he||(Xr(),un())},onEnded:()=>{he||un(!0)},onPlay:Zr,onPause:es,onSeeked:()=>{he||(Ot(),un())},onLoadedMetadata:()=>{ts(),lr(),un()},onDurationChange:()=>{lr()},onContextMenu:e=>e.preventDefault(),onError:()=>{ne("Video failed to load. Try another server or reload."),Be(!1)}}),t("canvas",{ref:Wt,className:`${f.delayCanvas} ${Cn?f.delayCanvasActive:""}`}),ye&&t("div",{ref:At,className:f.subtitleOverlay}),t(Ys,{isOpen:yn,ms:Re,onChange:Lt,onApply:xr,onClose:Ir,testClipActive:he,onTestClip:Ar}),ft&&t("div",{className:f.watchedOverlay,children:[t(le,{name:"check-circle",size:48,style:{color:"var(--accent-lighter)"}}),t("p",{className:f.watchedTitle,children:v?"Movie watched":`S${m} E${S} watched`}),t("p",{className:f.watchedSubtext,children:"Replay from the beginning or continue with the next episode."}),t("div",{className:f.watchedActions,children:[t(at,{onClick:Kr,children:"Replay"}),q!=null?t(at,{variant:"secondary",onClick:dr,children:"Next Episode"}):De!=null?t(at,{variant:"secondary",onClick:ur,children:"Next Season"}):null]})]})]})})]}):Pe&&!x?t(Er,{error:Pe,onRetry:mn}):null}),t(va,{playback:jt?{selection:jt,position:c.current?.currentTime||0,playing:!1,rate:i.engine.getState().playbackRate}:null,onCreate:()=>{Sn(),i.engine.pause()},needsPlayback:Xn.needsPlayback,onEnablePlayback:Xn.enablePlayback}),u&&!de&&r&&!jt&&t("p",{role:"alert",children:"The host's direct HLS source is unavailable here. Retry or leave the room to use another source."}),!Oe&&r&&t(js,{}),!Oe&&hn&&t("div",{className:f.mobileSeasonRow,children:hn}),!Oe&&r&&t("div",{className:ie.streamPanel,children:[t("div",{className:f.providerSelectWrap,children:t("label",{className:f.controlLabel,children:["Provider",t("select",{value:E,onChange:e=>as(e.currentTarget.value),className:f.select,disabled:l||Y.length===0,children:_t?t("option",{value:"",children:"Loading..."}):Y.length===0?t("option",{value:"",children:"No providers available"}):t(qe,{children:[I.length>0&&t("optgroup",{label:"Direct HLS",children:I.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))})]})})]})}),!l&&!x&&(de?t("div",{className:f.sourceLoader,children:t("div",{className:f.ringSpinner})}):t(ao,{servers:Ht,selectedServer:wt?"Embed":K,onServerSelect:ss}))]}),!Oe&&r&&t("div",{className:xe.playerInfoContainer,children:[t("div",{className:xe.playerInfoHeader,children:[t("div",{className:xe.playerAnimeCard,children:r.poster&&t(Ss,{src:`https://image.tmdb.org/t/p/w342${r.poster}`,alt:r.title,loading:"lazy",decoding:"async"})}),t("div",{className:xe.videoTitleSection,children:[t("div",{className:ie.titleContainer,children:[t("h1",{children:r.title}),t("div",{className:f.meta,children:[t("span",{className:f.year,children:r.year}),r.vote_average!=null&&r.vote_average>0&&t("span",{className:f.rating,children:[t(le,{name:"star",size:12}),Number(r.vote_average).toFixed(1)]}),t("span",{className:`${f.typeBadge} ${f[v?"movie":"tv"]}`,children:v?"Movie":"TV Show"})]}),pr.length>0&&t("div",{className:f.genreRow,children:pr.map(e=>t("span",{className:f.genreChip,children:e},e))}),Dn.length>0&&t("div",{className:f.metaRow,children:Dn.map((e,n)=>t("span",{children:[e,n<Dn.length-1?" · ":""]},`${e}-${n}`))})]}),t("div",{className:ie.controls,children:[t("button",{className:`${ie.watchlistBtn} ${Pt?ie.inList:""}`,onClick:Dr,disabled:$r,type:"button",children:[Pt?t(le,{name:"check",size:14}):t(le,{name:"plus",size:14}),Pt?"In Watchlist":"Add to Watchlist"]}),!v&&t(qe,{children:[t("button",{className:`${ie.watchlistBtn}`,onClick:()=>In!=null&&pt(String(In)),disabled:l||In==null,type:"button",children:[t(le,{name:"chevron-left",size:14}),"Prev EP"]}),t("button",{className:`${ie.watchlistBtn}`,onClick:()=>q!=null&&pt(String(q)),disabled:l||q==null,type:"button",children:["Next EP",t(le,{name:"chevron-right",size:14})]}),!v&&t("button",{className:`${ie.watchlistBtn} ${ie.modeToggleBtn} ${vt?ie.modeToggleActive:""}`,onClick:()=>jr(!vt),type:"button","aria-pressed":vt,children:vt?"AUTOPLAY: ON":"AUTOPLAY: OFF"}),Qr&&t("button",{className:`${ie.watchlistBtn}`,onClick:()=>An(!0),type:"button",children:[t(le,{name:"list-ul",size:14}),"Episodes"]})]})]})]})]}),t("div",{className:xe.infoColumns,children:[t("div",{className:`${ie.descriptionSection} ${ie.synopsisFlat}`,children:[t("h3",{children:"Synopsis"}),t(fa,{text:r.overview,emptyText:"No description available."}),t("button",{className:ie.detailsToggleBtn,onClick:()=>Vr(!rn),type:"button",children:[rn?t(le,{name:"chevron-up"}):t(le,{name:"chevron-down"}),rn?"Hide Details":"Show Details"]})]}),rn&&t("div",{className:f.detailGrid,children:[r.first_air_date&&t("div",{className:f.detailItem,children:[t("strong",{children:v?"Release Date":"First Air Date"}),t("span",{children:r.first_air_date})]}),r.last_air_date&&t("div",{className:f.detailItem,children:[t("strong",{children:"Last Air Date"}),t("span",{children:r.last_air_date})]}),r.networks&&r.networks.length>0&&t("div",{className:f.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:f.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:f.detailItem,children:[t("strong",{children:"Episode Runtime"}),t("span",{children:[r.episode_run_time[0]," min"]})]}),r.imdb_id&&t("div",{className:f.detailItem,children:[t("strong",{children:"IMDb"}),t("a",{href:`https://www.imdb.com/title/${r.imdb_id}`,target:"_blank",rel:"noopener noreferrer",className:f.imdbLink,children:"View on IMDb"})]})]})]})]}),!v&&t(Gs,{isOpen:Fr,onClose:()=>An(!1),episodes:vr,currentEpisode:String(S),watchedEpisodes:fr,onEpisodeClick:pt,header:hn}),r?.adult&&!Bt&&t(ra,{isOpen:!0,onClose:zn,onGrant:Mr}),t(Xs,{isOpen:!u&&We&&!wn&&tn.current===`${G}:${m}:${S}`&&He?.completed!==1&&!Vt(en,He?.duration??0),onClose:cr,title:"Resume Watching",message:t(qe,{children:["You were at ",t("strong",{children:Yn(mt)})]}),restartLabel:"Start from Beginning",onResume:ns,onRestart:cr}),t(Js,{isOpen:ht,onClose:()=>bt(!1),title:v?"Movie Completed!":De!=null?"Season Complete!":"Show Completed!",heading:zr,message:v?"You finished this movie!":De!=null?`You finished Season ${m}.`:"Congratulations! You finished all available episodes.",children:[t(at,{variant:"secondary",onClick:()=>bt(!1),children:"Close"}),De!=null?t(at,{onClick:ur,children:["Start Season ",De]}):t(qe,{children:[t(at,{onClick:()=>{bt(!1),zn()},children:"Back to Details"}),t(at,{onClick:rs,disabled:Gt.isPending||Xt.isPending,children:Gt.isPending||Xt.isPending?"Saving...":"Move to Completed"})]})]}),!r&&t("div",{className:f.statusMsg,children:[t(le,{name:"spinner",className:f.spinner})," Loading..."]})]})]})};export{ci as default};