@serifpersia/dango 3.6.1 → 3.6.3
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-DbrG4Bo-.js → AnimeCard-Cwc6Z9rO.js} +1 -1
- package/client/dist/assets/{AnimeInfo-CgSQGjef.js → AnimeInfo-ad7aMRq5.js} +1 -1
- package/client/dist/assets/{AnimeInfoPage-DSybdvf_.js → AnimeInfoPage-B795AIlr.js} +2 -2
- package/client/dist/assets/{Asmr-DFFV-7y4.js → Asmr-jqhD7q69.js} +2 -2
- package/client/dist/assets/{AsmrResetProgressModal-Brdfu_22.js → AsmrResetProgressModal-Bey2zoeh.js} +1 -1
- package/client/dist/assets/{AvSyncCalibrator-DBBUzoHn.js → AvSyncCalibrator-B2fQmjbo.js} +1 -1
- package/client/dist/assets/{Home-DjGl-3os.js → Home-rRTAnTfL.js} +1 -1
- package/client/dist/assets/{Insights-4O52Z1t2.js → Insights-CN2bm8wf.js} +1 -1
- package/client/dist/assets/{LibraryListPage-Z0w_rmHP.js → LibraryListPage-BlNQWLrf.js} +1 -1
- package/client/dist/assets/{ListeningList-DjbzDs1E.js → ListeningList-Pi1Baxgd.js} +1 -1
- package/client/dist/assets/{Manga-BRIDluzF.js → Manga-7Jt2tJyE.js} +1 -1
- package/client/dist/assets/{MangaInfoPage-Q4CjEGJH.js → MangaInfoPage-45jPSjxB.js} +1 -1
- package/client/dist/assets/{MangaReadPage-BbJK5FY6.js → MangaReadPage-BWgX9bSn.js} +1 -1
- package/client/dist/assets/{MangaResetProgressModal-BCFPXDF6.js → MangaResetProgressModal-DLgJrIVT.js} +1 -1
- package/client/dist/assets/{Mature-DjQzs66p.js → Mature-2I4mvoWk.js} +1 -1
- package/client/dist/assets/{MediaCard-DedwE5DX.js → MediaCard-cSWL_NlR.js} +1 -1
- package/client/dist/assets/{Music-z2RkiMDf.js → Music-bUuge7On.js} +1 -1
- package/client/dist/assets/{OptionListMenu-CetjZizt.js → OptionListMenu-D4ejupic.js} +1 -1
- package/client/dist/assets/Player-Fm7-Iaym.js +56 -0
- package/client/dist/assets/{PlayerSettings-ne_DQSTl.js → PlayerSettings-e_PohoiO.js} +1 -1
- package/client/dist/assets/{QueueOptionsButton-CIKT4YcD.js → QueueOptionsButton-BMl804vN.js} +1 -1
- package/client/dist/assets/{QueueRail-DPclldS0.js → QueueRail-BfNg-4sG.js} +1 -1
- package/client/dist/assets/{Radio-aeqPTMht.js → Radio-BbkMYqMU.js} +1 -1
- package/client/dist/assets/{ReadingList-p6G7NHtC.js → ReadingList-BN03nBXY.js} +1 -1
- package/client/dist/assets/{ResetProgressModal-B7UuuL3X.js → ResetProgressModal-CuoM4S_P.js} +1 -1
- package/client/dist/assets/{Search-BzyHVByR.js → Search-DnBPEHjw.js} +1 -1
- package/client/dist/assets/{Settings-DMmtLUsL.js → Settings-CqiYnqx7.js} +1 -1
- package/client/dist/assets/{SkeletonGrid-B5JXhZO4.js → SkeletonGrid-CYZ3cstC.js} +1 -1
- package/client/dist/assets/{Trackers-tLL1afjB.js → Trackers-DlkQl9Qs.js} +1 -1
- package/client/dist/assets/Tv-Ac8wPuCw.js +4 -0
- package/client/dist/assets/{TvInfo-DmrBLjgK.js → TvInfo-Dhv0lmCc.js} +1 -1
- package/client/dist/assets/{TvPopup-D1mSlOZt.js → TvPopup-5lwvCCOQ.js} +1 -1
- package/client/dist/assets/{TvSearch-BGQRUq9E.js → TvSearch-B3_Vf8Dk.js} +1 -1
- package/client/dist/assets/{TvWatchlist-DdLkpeQT.js → TvWatchlist-B_jtSOjL.js} +1 -1
- package/client/dist/assets/{Watchlist-BObmM6QB.js → Watchlist-BtFidAWI.js} +1 -1
- package/client/dist/assets/{hls-qCuNYJym.js → hls-CEWF8efn.js} +1 -1
- package/client/dist/assets/{index-B4AdKbhW.js → index-C93G341i.js} +2 -2
- package/client/dist/assets/{useAnimeInfoData-CSnwUBuU.js → useAnimeInfoData-gz0XXrYm.js} +1 -1
- package/client/dist/assets/{useAsmr-BKAaWEXn.js → useAsmr-BrRbA9AW.js} +1 -1
- package/client/dist/assets/{useAsmrPopup-DDLRBLzz.js → useAsmrPopup-C4gKdZId.js} +1 -1
- package/client/dist/assets/{useMangaLibrary-C6XEMuSr.js → useMangaLibrary-DkGSBFSX.js} +1 -1
- package/client/dist/assets/{useMangaPopup-wfCJubPD.js → useMangaPopup-DwKm2HYt.js} +1 -1
- package/client/dist/assets/{useProviders-C7jrBgxf.js → useProviders-C3E0fPpP.js} +1 -1
- package/client/dist/assets/{useTv-DM5KtzEc.js → useTv-BQ3K3Xdh.js} +1 -1
- package/client/dist/assets/{useTvLibrary-73NkS_5R.js → useTvLibrary-DizEfaXg.js} +1 -1
- package/client/dist/index.html +1 -1
- package/package.json +2 -2
- package/server/dist/lib/anilist.js +32 -4
- package/server/dist/providers/title-matching.js +2 -0
- package/server/dist/trpc/routers/data.js +1 -1
- package/server/package.json +1 -1
- package/client/dist/assets/Player-DD-9SgWU.js +0 -56
- package/client/dist/assets/Tv-CluLN4KA.js +0 -4
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{u as t,d as _,A,h as v,S as Me,g as Yr,o as Gr,p as Qr,a as Xr,T as Ee,q as S}from"./vendor-core-DfaOB3Rn.js";import{u as Zr}from"./vendor-query-BBT5_sHx.js";import{g as an,e as Jr,t as _t,z as es,O as ts,M as Ln,B as We}from"./index-B4AdKbhW.js";import{I as j}from"./vendor-icons-DrybRNxP.js";import{S as ns,U as rs,p as zn,M as ss,D as fr,m as Dn,k as os,C as as,a as is,b as ls,c as sn,u as cs,d as ds,e as us,j as ms,f as hs,h as fs,l as gs,B as ps,i as Mn,F as bs,G as vs,H as ur,s as Pn,n as ys,o as _s,q as Ss,r as Ts,t as Le,A as Cs,v as ks,E as Es,y as ws,P as Ns,w as ue,z as xs,R as Is}from"./AvSyncCalibrator-DBBUzoHn.js";import{S as Bs,O as Rn,a as As,A as Ls,b as Ms}from"./OptionListMenu-CetjZizt.js";import{u as Ps}from"./useProviders-C7jrBgxf.js";import{d as Rs,g as $s,h as zs,f as Ds,e as Os,j as Fs,k as Vs}from"./useTvLibrary-73NkS_5R.js";import{l as js,c as Us}from"./hls-qCuNYJym.js";import{u as Ws}from"./useIsMobile-Dvx1uJ82.js";import{S as Hs}from"./SynopsisText-B3Sa5pRv.js";const Ks="_fullscreenFlat_1d0oj_1",qs="_timeDisplay_1d0oj_15",Ys="_bottomControls_1d0oj_19",Gs="_leftControls_1d0oj_23",Qs="_rightControls_1d0oj_24",Xs="_controlBtn_1d0oj_28",Zs="_controlsOverlay_1d0oj_47",Js="_hidden_1d0oj_67",eo="_topControls_1d0oj_73",to="_backBtn_1d0oj_93",no="_videoTitleInfo_1d0oj_113",ro="_animeTitle_1d0oj_119",so="_episodeLabel_1d0oj_127",oo="_speedBoostBadge_1d0oj_134",ao="_progressBarContainer_1d0oj_180",io="_progressBar_1d0oj_180",lo="_thumb_1d0oj_199",co="_bufferedBar_1d0oj_217",uo="_watchedBar_1d0oj_227",mo="_scrubbing_1d0oj_252",ho="_timeBubble_1d0oj_256",fo="_bottomControlsRow_1d0oj_270",go="_nextEpisodeBtn_1d0oj_293",po="_active_1d0oj_355",bo="_settingsPanel_1d0oj_430",vo="_settingsHeader_1d0oj_449",yo="_settingsBackBtn_1d0oj_457",_o="_settingsTitle_1d0oj_475",So="_settingsContent_1d0oj_486",To="_currentValue_1d0oj_495",Co="_menuItem_1d0oj_510",ko="_menuNote_1d0oj_543",Eo="_loadingOverlay_1d0oj_556",wo="_loadingDots_1d0oj_567",No="_dot_1d0oj_572",xo="_bufferingOverlay_1d0oj_601",Io="_bufferingSpinner_1d0oj_610",a={fullscreenFlat:Ks,timeDisplay:qs,bottomControls:Ys,leftControls:Gs,rightControls:Qs,controlBtn:Xs,controlsOverlay:Zs,hidden:Js,topControls:eo,backBtn:to,videoTitleInfo:no,animeTitle:ro,episodeLabel:so,speedBoostBadge:oo,progressBarContainer:ao,progressBar:io,thumb:lo,bufferedBar:co,watchedBar:uo,scrubbing:mo,timeBubble:ho,bottomControlsRow:fo,nextEpisodeBtn:go,active:po,settingsPanel:bo,settingsHeader:vo,settingsBackBtn:yo,settingsTitle:_o,settingsContent:So,currentValue:To,menuItem:Co,menuNote:ko,loadingOverlay:Eo,loadingDots:wo,dot:No,bufferingOverlay:xo,bufferingSpinner:Io},Bo=({player:o,visible:p,settingsOpen:U,onOpenSettings:O,onCloseSettings:G,hasSubtitles:R,isSubtitleActive:r,subtitles:I,onSubtitleChange:i,showNextEpisodeButton:te,onNextEpisode:Q,isTheaterMode:$,onTheaterModeToggle:f,timeLabelRef:K})=>{const{state:h,refs:He,actions:z}=o,X=He.videoRef,Pe=T=>{const ne=X.current;!ne||isNaN(h.duration)||h.duration===0||(ne.currentTime=T*h.duration)},Re=()=>{X.current&&(z.setIsScrubbing(!0),z.wasPlayingBeforeScrub.current=!X.current.paused,X.current.pause())},Ke=T=>{const ne=X.current;ne&&h.duration&&(ne.currentTime=T*h.duration)},qe=()=>{z.setIsScrubbing(!1),z.wasPlayingBeforeScrub.current&&X.current?.play().catch(()=>{})},Je=T=>{const ne=X.current;ne&&(ne.volume=T,ne.muted=T===0)},ae=()=>{if(r){i(-1);return}let T=null;try{T=localStorage.getItem("tvLastSubtitle")}catch{}i(zn(I,{lastKey:T,enabled:!0}))},q=h.isMuted?t(j,{name:"volume-mute"}):h.volume<.5?t(j,{name:"volume-down"}):t(j,{name:"volume-up"});return t("div",{className:`${a.controlsOverlay} ${p?"":a.hidden}`,"data-speed-boost-ignore":"true",style:{pointerEvents:"none",background:"none",justifyContent:"flex-end"},children:t("div",{className:a.bottomControls,onClick:T=>T.stopPropagation(),children:[t(ns,{classes:{container:a.progressBarContainer,scrubbing:a.scrubbing,timeBubble:a.timeBubble,bar:a.progressBar,buffered:a.bufferedBar,watched:a.watchedBar,thumb:a.thumb},videoRef:X,duration:h.duration,formatTime:an,isScrubbing:h.isScrubbing,buffered:"full",onSeek:Pe,onScrubStart:Re,onScrubMove:Ke,onScrubEnd:qe,timeLabelRef:K}),t("div",{className:a.bottomControlsRow,children:[t("div",{className:a.leftControls,children:[t("button",{className:a.controlBtn,onClick:z.togglePlay,"aria-label":h.isPlaying?"Pause":"Play",children:h.isPlaying?t(j,{name:"pause"}):t(j,{name:"play"})}),t(rs,{muted:h.isMuted,volume:h.volume,volumeIcon:q,buttonClassName:a.controlBtn,onToggleMute:z.toggleMute,onVolumeChange:Je,onExpandedChange:T=>z.setShowVolumeSlider(T)}),t("span",{className:a.timeDisplay,ref:K,children:[an(0)," / ",an(h.duration)]})]}),t("div",{className:a.rightControls,children:[te&&t("button",{className:a.nextEpisodeBtn,onClick:Q,title:"Play next episode",children:"Next EP"}),R&&t("button",{className:`${a.controlBtn} ${r?a.active:""}`,onClick:ae,"aria-label":r?"Turn subtitles off":"Turn subtitles on",children:t(j,{name:"closed-captioning"})}),t("button",{className:`${a.controlBtn} ${U?a.active:""}`,onClick:()=>U?G():O(),"aria-label":"Settings",children:t(j,{name:"cog"})}),t("button",{className:`${a.controlBtn} ${$?a.active:""}`,onClick:T=>{T.stopPropagation(),f()},title:$?"Exit Theater Mode":"Theater Mode","aria-label":$?"Exit Theater Mode":"Theater Mode",children:t(j,{name:"tv"})}),t("button",{className:a.controlBtn,onClick:z.toggleFullscreen,"aria-label":h.isFullscreen?"Exit Fullscreen":"Fullscreen",children:h.isFullscreen?t(j,{name:"compress"}):t(j,{name:"expand"})})]})]})]})})},on=-6e4,$n=6e4,mr=500,Ao=({classes:o,delayMs:p,onDelayChange:U})=>{const[O,G]=_(null),R=O??p,r=A(U);r.current=U;const I=A(p);I.current=p;const i=A(null);i.current=O,v(()=>{G(null)},[p]),v(()=>()=>{const $=i.current;$!==null&&$!==I.current&&r.current($)},[]);const te=$=>{I.current=$,i.current=null,r.current($),G(null)},Q=$=>{const f=i.current??I.current,K=Math.max(on,Math.min($n,f+$));te(K)};return t(Me,{children:[t("div",{style:{display:"flex",gap:6,padding:"0.5rem 0.75rem 0.25rem"},children:[t("button",{type:"button",className:o.item,onClick:()=>Q(-mr),"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:()=>Q(mr),"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:()=>te(0),disabled:R===0,"aria-label":"Reset subtitle timing",style:{flex:1,justifyContent:"center"},children:t("span",{children:"Reset"})})]}),t(ss,{label:"Subtitle timing",display:fr(R),min:on,max:$n,step:100,value:R,percent:(R-on)/($n-on)*100,onChange:$=>{const f=Math.round($);i.current=f,G(f)},onCommit:()=>{const $=i.current;$!==null&&te($)}}),t("div",{className:o.note,children:"Positive delays subtitles (show later). Negative shows them earlier. 0.0s is default."})]})},Lo=({view:o,onSelectView:p,onClose:U,player:O,onSubtitleStyleChange:G,streams:R,resolutionIdx:r,onResolutionChange:I,hasSubtitles:i,subtitles:te,selectedSubtitle:Q,isSubtitleActive:$,onSubtitleChange:f,audioTracks:K,selectedAudioTrack:h,onAudioTrackChange:He,videoDelayEnabled:z,onVideoDelayToggle:X,videoDelayMs:Pe,onVideoDelayChange:Re,onCalibrate:Ke,subtitleDelayMs:qe,onSubtitleDelayChange:Je,ambientSettings:ae,onAmbientChange:q})=>{const{state:T}=O,ne=()=>t(Me,{children:[R.length>1&&t("button",{className:a.menuItem,onClick:()=>p("resolution"),children:[t("span",{children:"Resolution"}),t("span",{className:a.currentValue,children:R[r]?.quality||"Auto"})]}),i&&t("button",{className:a.menuItem,onClick:()=>p("subtitles"),children:[t("span",{children:"Subtitles"}),t("span",{className:a.currentValue,children:$?te[Q]?.label||te[Q]?.language:"Off"})]}),i&&t("button",{className:a.menuItem,onClick:()=>p("subtitle-style"),children:[t("span",{children:"Subtitle Style"}),t("span",{className:a.currentValue,children:[T.subtitleFontSize.toFixed(1),"x · ",T.subtitlePosition]})]}),i&&t("button",{className:a.menuItem,onClick:()=>p("subtitle-timing"),children:[t("span",{children:"Subtitle Timing"}),t("span",{className:a.currentValue,children:fr(qe)})]}),K.length>0&&t("button",{className:a.menuItem,onClick:()=>p("audio"),children:[t("span",{children:"Audio Track"}),t("span",{className:a.currentValue,children:K[h]?.label||K[h]?.language})]}),t("button",{className:a.menuItem,onClick:()=>p("av-sync"),children:[t("span",{children:"A/V Sync"}),t("span",{className:a.currentValue,children:z?`${Pe}ms`:"Off"})]}),ae&&q&&t("button",{className:a.menuItem,onClick:()=>p("ambient"),children:[t("span",{children:"Ambient Light"}),t("span",{className:a.currentValue,children:ae.enabled?"On":"Off"})]})]}),Te=()=>t(Rn,{classes:{item:a.menuItem,active:a.active},options:R.map((C,W)=>({key:String(W),label:C.quality,selected:W===r})),onSelect:C=>I(Number(C))}),Y=()=>t(Rn,{classes:{item:a.menuItem,active:a.active},options:[{key:"off",label:"Off",selected:!$},...te.map((C,W)=>({key:String(W),label:C.label||C.language,selected:W===Q}))],onSelect:C=>f(C==="off"?-1:Number(C))}),Ce=()=>t(As,{classes:{item:a.menuItem,active:a.active},values:{fontSize:T.subtitleFontSize,position:T.subtitlePosition,bgOpacity:T.subtitleBgOpacity,bgColor:T.subtitleBgColor,textColor:T.subtitleTextColor,edge:T.subtitleEdge,bold:T.subtitleBold},onChange:G}),L=()=>t(Ao,{classes:{item:a.menuItem,active:a.active,note:a.menuNote},delayMs:qe,onDelayChange:C=>Je?.(C)}),$e=()=>t(Rn,{classes:{item:a.menuItem,active:a.active},options:K.map((C,W)=>({key:String(W),label:C.label||C.language,selected:W===h})),onSelect:C=>He(Number(C))}),Ye=()=>t(Ls,{classes:{item:a.menuItem,active:a.active,note:a.menuNote},enabled:z,delayMs:Pe,onToggle:C=>X?.(C),onDelayChange:C=>Re?.(C),onCalibrate:Ke}),be=()=>ae&&q?t(Ms,{classes:{item:a.menuItem,active:a.active,note:a.menuNote},values:ae,onChange:q}):null;return t("div",{"data-speed-boost-ignore":"true",onClick:C=>C.stopPropagation(),children:t(Bs,{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==="resolution"?"Resolution":o==="av-sync"?"A/V Sync":o==="ambient"?"Ambient Light":o.charAt(0).toUpperCase()+o.slice(1),onBack:()=>o==="main"?U():p("main"),children:[o==="main"&&ne(),o==="resolution"&&Te(),o==="subtitles"&&Y(),o==="subtitle-style"&&Ce(),o==="subtitle-timing"&&L(),o==="audio"&&$e(),o==="av-sync"&&Ye(),o==="ambient"&&be()]})})},Mo=({player:o,title:p,episodeLabel:U,audioTracks:O,selectedAudioTrack:G,onAudioTrackChange:R,subtitles:r,selectedSubtitle:I,onSubtitleChange:i,streams:te,resolutionIdx:Q,onResolutionChange:$,onBack:f,children:K,videoDelayEnabled:h=!1,onVideoDelayToggle:He,videoDelayMs:z=0,onVideoDelayChange:X,onCalibrateAvSync:Pe,subtitleDelayMs:Re=0,onSubtitleDelayChange:Ke,showNextEpisodeButton:qe=!1,onNextEpisode:Je,isLoading:ae=!1,isTheaterMode:q,onTheaterModeToggle:T,ambientSettings:ne,onAmbientChange:Te})=>{const{state:Y,refs:Ce,actions:L}=o,$e=Ce.videoRef,{subtitleFontSize:Ye,subtitlePosition:be,subtitleBgOpacity:C,subtitleBgColor:W,subtitleTextColor:it,subtitleEdge:ie,subtitleBold:ze}=Y,[we,De]=_(null),lt=A(null),[Ft,St]=_(0);v(()=>{const le=$e.current;if(!le)return;const u=()=>St(le.clientHeight||0);u();const ut=new ResizeObserver(u);return ut.observe(le),()=>ut.disconnect()},[$e]);const me=(le,u)=>{try{localStorage.setItem(le,String(u))}catch{}},ve=(le,u)=>{switch(le){case"fontSize":typeof u=="number"&&(L.setSubtitleFontSize(u),me("subtitleFontSize",u));break;case"position":typeof u=="number"&&(L.setSubtitlePosition(u),me("subtitlePosition",u));break;case"bgOpacity":typeof u=="number"&&(L.setSubtitleBgOpacity(u),me("subtitleBgOpacity",u));break;case"bgColor":typeof u=="string"&&(L.setSubtitleBgColor(u),me("subtitleBgColor",u));break;case"textColor":typeof u=="string"&&(L.setSubtitleTextColor(u),me("subtitleTextColor",u));break;case"edge":(u==="shadow"||u==="outline"||u==="none")&&(L.setSubtitleEdge(u),me("subtitleEdge",u));break;case"bold":typeof u=="boolean"&&(L.setSubtitleBold(u),me("subtitleBold",u));break}};v(()=>{const le="tv-player-subtitle-style";let u=document.getElementById(le);u||(u=document.createElement("style"),u.id=le,document.head.appendChild(u));const ut={fontSize:Ye,position:be,bgOpacity:C,bgColor:W,textColor:it,edge:ie,bold:ze},Z=$e.current,Et=Dn(Ye,Ft||Z?.clientHeight||720);if(u.textContent=os({...ut,fontSize:Et}),Z){const wt=()=>{const B=Number(be);return isNaN(B)?0:Math.max(0,Math.min(100,B))},mt=(B,J)=>{try{const de=B;de.snapToLines=!1,de.line=J}catch{}},Nt=()=>{const B=Et*16,J=Z.videoHeight||Z.clientHeight||720,de=Z.videoWidth||Z.clientWidth||1280;return{step:B*1.3/J*100,chars:Math.max(20,Math.floor(de/(B*.55)))}},y=B=>{const J=Math.max(0,Math.min(100,100-wt())),de=Array.from(B.activeCues??[]);if(de.length<=1){de.forEach(Fe=>mt(Fe,J));return}const{step:Bt,chars:cn}=Nt();let ke=J;for(let Fe=de.length-1;Fe>=0;Fe--){const dn=String(de[Fe].text??"").replace(/<[^>]*>/g,"").split(`
|
|
2
|
-
`).reduce((un,ye)=>un+Math.max(1,Math.ceil(ye.length/cn)),0),Ut=ke-dn*Bt;mt(de[Fe],Math.max(0,Ut)),ke=Ut-Bt*.4}},c=()=>{const B=Math.max(0,Math.min(100,100-wt()));Array.from(Z.textTracks).forEach(J=>{J.cues&&(Array.from(J.cues).forEach(de=>mt(de,B)),J.mode==="showing"&&y(J))})};c();const re=B=>{const J=B.target;J.mode==="showing"&&y(J)},ce=()=>{Array.from(Z.textTracks).forEach(B=>{B.removeEventListener("cuechange",re),B.addEventListener("cuechange",re)}),c()};Array.from(Z.textTracks).forEach(B=>{B.addEventListener("cuechange",re)}),Z.textTracks.addEventListener("addtrack",ce);const xt=Array.from(Z.querySelectorAll("track")),It=()=>c();return xt.forEach(B=>B.addEventListener("load",It)),()=>{Array.from(Z.textTracks).forEach(B=>{B.removeEventListener("cuechange",re)}),Z.textTracks.removeEventListener("addtrack",ce),xt.forEach(B=>B.removeEventListener("load",It))}}},[Ye,be,C,W,it,ie,ze,I,r,$e,Ft]);const Tt=r.length>0,ct=I>=0,M=()=>{De("main"),L.setShowControls(!0)},dt=()=>{De(null)},Ct=Y.showControls||!!we,Oe=t(ls,{visible:Ct,title:p,episode:U,onBack:f,classes:{overlay:a.controlsOverlay,hidden:a.hidden,top:a.topControls,backBtn:a.backBtn,titleInfo:a.videoTitleInfo,title:a.animeTitle,episode:a.episodeLabel}}),Vt=!ae&&!Y.isBuffering&&Y.duration>0?t(as,{isPlaying:Y.isPlaying,onTogglePlay:L.togglePlay,onSkipBack:()=>L.seek(-10),onSkipForward:()=>L.seek(10)}):null,ln=t(Bo,{player:o,visible:Ct,settingsOpen:!!we,onOpenSettings:M,onCloseSettings:dt,hasSubtitles:Tt,isSubtitleActive:ct,subtitles:r,onSubtitleChange:i,showNextEpisodeButton:qe,onNextEpisode:Je,isTheaterMode:q,onTheaterModeToggle:T,timeLabelRef:lt}),kt=we?t(Lo,{view:we,onSelectView:De,onClose:dt,player:o,onSubtitleStyleChange:ve,streams:te,resolutionIdx:Q,onResolutionChange:$,hasSubtitles:Tt,subtitles:r,selectedSubtitle:I,isSubtitleActive:ct,onSubtitleChange:i,audioTracks:O,selectedAudioTrack:G,onAudioTrackChange:R,videoDelayEnabled:h,onVideoDelayToggle:He,videoDelayMs:z,onVideoDelayChange:X,onCalibrate:()=>{De(null),Pe?.()},subtitleDelayMs:Re,onSubtitleDelayChange:Ke,ambientSettings:ne,onAmbientChange:Te}):null,jt=t(Me,{children:[ae&&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})]})}),Y.isBuffering&&!ae&&t("div",{className:a.bufferingOverlay,"aria-hidden":"true",children:t("div",{className:a.bufferingSpinner})}),Y.isSpeedBoostActive&&t("div",{className:a.speedBoostBadge,"aria-hidden":"true",children:[t("span",{children:"2x"}),t(j,{name:"forward",size:12})]})]});return t(is,{player:o,topBar:Oe,centerControls:Vt,bottomBar:!ae&&Y.duration>0?ln:null,settingsPanel:kt,overlays:jt,isInteracting:!!we,className:Y.isFullscreen?a.fullscreenFlat:"",children:K})},Po=({servers:o,selectedServer:p,onServerSelect:U})=>o.length===0?null:t("div",{className:sn.sourceSelectionContainer,children:[t("h4",{children:"Source"}),t("div",{className:sn.sourceButtons,children:o.map(O=>t("button",{className:`${sn.sourceButton} ${p===O?sn.active:""}`,onClick:()=>U(O),children:O},O))})]}),Ro=Yr.memo(Po);function $o(o,p,U){const O=()=>{const R=Array.isArray(o.audioTracks)?o.audioTracks.length:0,r=U.getWant(),I=R>0?Math.min(Math.max(0,r),R-1):r;o.audioTrack=I,I!==r&&U.onResolve(I)},G=(R,r)=>{const I=U.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}U.onResolve(r.id)};return o.on(p.MANIFEST_PARSED,O),o.on(p.AUDIO_TRACK_SWITCHED,G),()=>{o.off(p.MANIFEST_PARSED,O),o.off(p.AUDIO_TRACK_SWITCHED,G)}}const zo=/\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 Do(){try{if(zo.test(navigator.userAgent||""))return!0;const o=navigator.deviceMemory;if(typeof o=="number"&&o>0&&o<2)return!0}catch{}return!1}const Oo="_page_f7wlz_1",Fo="_header_f7wlz_7",Vo="_pageTitle_f7wlz_11",jo="_searchForm_f7wlz_21",Uo="_searchInput_f7wlz_27",Wo="_searchBtn_f7wlz_42",Ho="_suggestions_f7wlz_58",Ko="_suggestionPill_f7wlz_65",qo="_statusMsg_f7wlz_81",Yo="_error_f7wlz_87",Go="_textOnly_f7wlz_91",Qo="_spinner_f7wlz_96",Xo="_spin_f7wlz_96",Zo="_sourceLoader_f7wlz_101",Jo="_ringSpinner_f7wlz_107",ea="_grid_f7wlz_125",ta="_skeletonCard_f7wlz_131",na="_skeletonThumb_f7wlz_136",ra="_skeletonLine_f7wlz_142",sa="_shimmer_f7wlz_149",oa="_backBtn_f7wlz_169",aa="_meta_f7wlz_187",ia="_headerActions_f7wlz_195",la="_watchlistBtn_f7wlz_202",ca="_active_f7wlz_220",da="_year_f7wlz_230",ua="_rating_f7wlz_235",ma="_typeBadge_f7wlz_244",ha="_tv_f7wlz_252",fa="_movie_f7wlz_257",ga="_tvSeries_f7wlz_262",pa="_tvMiniSeries_f7wlz_267",ba="_overview_f7wlz_272",va="_controls_f7wlz_279",ya="_controlLabel_f7wlz_287",_a="_select_f7wlz_297",Sa="_playerSection_f7wlz_309",Ta="_video_f7wlz_313",Ca="_videoHidden_f7wlz_335",ka="_delayCanvas_f7wlz_340",Ea="_delayCanvasActive_f7wlz_353",wa="_subtitleOverlay_f7wlz_357",Na="_videoIframe_f7wlz_376",xa="_retryButton_f7wlz_384",Ia="_sidebarSeason_f7wlz_399",Ba="_mobileSeasonRow_f7wlz_415",Aa="_providerSelectWrap_f7wlz_429",La="_genreRow_f7wlz_441",Ma="_genreChip_f7wlz_448",Pa="_metaRow_f7wlz_458",Ra="_detailGrid_f7wlz_467",$a="_detailItem_f7wlz_475",za="_imdbLink_f7wlz_497",b={page:Oo,header:Fo,pageTitle:Vo,searchForm:jo,searchInput:Uo,searchBtn:Wo,suggestions:Ho,suggestionPill:Ko,statusMsg:qo,error:Yo,textOnly:Go,spinner:Qo,spin:Xo,sourceLoader:Zo,ringSpinner:Jo,grid:ea,skeletonCard:ta,skeletonThumb:na,skeletonLine:ra,shimmer:sa,backBtn:oa,meta:aa,headerActions:ia,watchlistBtn:la,active:ca,year:da,rating:ua,typeBadge:ma,tv:ha,movie:fa,tvSeries:ga,tvMiniSeries:pa,overview:ba,controls:va,controlLabel:ya,select:_a,playerSection:Sa,video:Ta,videoHidden:Ca,delayCanvas:ka,delayCanvasActive:Ea,subtitleOverlay:wa,videoIframe:Na,retryButton:xa,sidebarSeason:Ia,mobileSeasonRow:Ba,providerSelectWrap:Aa,genreRow:La,genreChip:Ma,metaRow:Pa,detailGrid:Ra,detailItem:$a,imdbLink:za},Da=[],Oa=[];function hr({error:o,onRetry:p}){return t("div",{className:`${b.statusMsg} ${b.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:b.retryButton,onClick:p,children:"Retry"})]})})}const Za=()=>{const{id:o}=Gr(),[p]=Qr(),U=A(p);U.current=p;const O=Xr(),G=Zr(),R=p.get("type"),[r,I]=_(null),[i,te]=_(()=>parseInt(p.get("s")||"1",10)||1),[Q,$]=_([]),[f,K]=_(()=>parseInt(p.get("e")||"1",10)||1),[h,He]=_(()=>{try{return localStorage.getItem("tvProvider")||""}catch{return""}}),[z,X]=_([]),[Pe,Re]=_(""),{options:Ke,isFallback:qe,isLoading:Je}=Ps(),ae=Ee(()=>Ke.filter(e=>(e.kind??"tv")==="tv").map(e=>({id:e.value,label:e.label,tier:e.tier==="embed"?"embed":"direct",servers:e.servers})),[Ke]),q=qe||ae.length===0?Da:ae,T=q.filter(e=>e.tier==="direct"),ne=q.filter(e=>e.tier==="embed"),[Te,Y]=_(!1),[Ce,L]=_(""),[$e,Ye]=_([]),[be,C]=_(0),[W,it]=_([]),[ie,ze]=_(-1),[we,De]=_(0),[lt,Ft]=_(""),[St,me]=_(""),[ve,Tt]=_(()=>{try{return localStorage.getItem("tvServer")||""}catch{return""}}),ct=Ee(()=>q.find(e=>e.id===h),[q,h]),M=ct?.tier==="embed",[dt,Ct]=_([]),[Oe,Vt]=_(""),[ln,kt]=_(""),[jt,le]=_(!1),u=Ee(()=>dt.length>0?dt:ct?.servers??[],[dt,ct]),ut=Ee(()=>Oe?["Embed",...u]:u,[u,Oe]),Z=jt&&!!Oe,Et=Z?ln||Oe:"";v(()=>{if(!Oe){kt("");return}let e=!1;return fetch(`/api/resolve?url=${encodeURIComponent(Oe)}`).then(n=>n.json()).then(n=>{!e&&n.finalUrl&&kt(n.finalUrl)}).catch(()=>{}),()=>{e=!0}},[Oe]);const wt=A([]);v(()=>{wt.current=z},[z]);const mt=A(be);v(()=>{mt.current=be},[be]);const Nt=A(ie);v(()=>{Nt.current=ie},[ie]);const y=cs({skipIntervals:Oa}),c=y.refs.videoRef,re=A(null),ce=A([]),xt=A(null),It=A(null),{videoDelayMs:B,videoDelayEnabled:J,setDelayEnabled:de,handleVideoDelayChange:Bt,isCalibrating:cn,testClipActive:ke,stopCalibration:Fe,openAvSyncCalibrator:On,cancelAvSyncCalibrator:dn,applyAvSyncCalibrator:Ut,toggleTestClip:un,calibReturnRef:ye,effectiveVideoDelayMs:mn}=ds(c),[ht,gr]=_(()=>{try{const e=Number(localStorage.getItem("tvSubtitleDelayMs"));if(Number.isFinite(e)&&e>=-6e4&&e<=6e4)return Math.round(e)}catch{}return 0}),hn=A(ht);hn.current=ht;const pr=S(e=>{const n=Math.max(-6e4,Math.min(6e4,Math.round(e)));if(hn.current!==n){hn.current=n,gr(n);try{localStorage.setItem("tvSubtitleDelayMs",String(n))}catch{}}},[]);us({videoRef:c,canvasRef:xt,delayMs:mn,enabled:J});const fn=J,_e=fn||ht!==0,{settings:gn,update:br}=ms(),pn=A(_e);pn.current=_e;const bn=S(()=>{if(!pn.current)return;const e=c.current;e&&Array.from(e.textTracks).forEach(n=>{n.mode!=="hidden"&&(n.mode="hidden")})},[c]),{hasConsent:At,grant:vr}=Jr(),Lt=A("");Lt.current||(Lt.current=`tv-${Date.now()}-${Math.random().toString(36).slice(2)}`);const g=R==="movie",Wt=o?Rs(R||"tv",o):"",F=Wt,Fn=$s(),Ht=zs(),{toggle:Vn,bookmarkedIds:yr,pending:_r}=Ds(),{data:jn}=Os(r?Wt:void 0),Kt=jn?!!jn.inLibrary:Wt?yr.has(Wt):!1,Sr=S(()=>{!r||!o||Vn({tmdbId:Number(o),mediaType:R||"tv",title:r.title,poster:r.poster,year:r.year,adult:r.adult})},[r,o,R,Vn]),{data:et,isFetched:Un,isPending:Wn}=Fs(F||void 0,i,f),qt=Ee(()=>Q.map(e=>e.episode_number).sort((e,n)=>e-n),[Q]),tt=qt.indexOf(f),vn=tt>0?qt[tt-1]:null,w=tt>=0&&tt<qt.length-1?qt[tt+1]:null,Yt=Ee(()=>(r?.seasons??[]).map(e=>e.season_number).filter(e=>Number.isFinite(e)).sort((e,n)=>e-n),[r]),Se=Ee(()=>{if(g||w!=null)return null;const e=Yt.indexOf(i);return e>=0&&e<Yt.length-1?Yt[e+1]:(r?.number_of_seasons??0)>i?i+1:null},[g,w,Yt,i,r?.number_of_seasons]),Hn=et?.currentTime??0,Kn=et?.duration??0,yn=et?.completed===!0||et?.completed===1||Mn(Hn,Kn),[Ne,Ve]=_(!1),xe=A(!1),_n=A(null),Mt=A(null);v(()=>{xe.current=!1,Mt.current=null,Ve(!1)},[F,i,f]);const[Ie,Gt]=_(!1),[ft,qn]=_(0),[nt,Yn]=_(!1),[Ge,rt]=_(!1),[Tr,Sn]=_(!1),[Cr,Gn]=_(""),[Qt,kr]=_(!1),[Er,Tn]=_(!1),{isTheaterMode:je,toggleTheaterMode:Cn,handleLayoutClick:wr}=hs();v(()=>{const e=n=>{n.target.closest('input, textarea, button, select, a, [role="button"], [contenteditable="true"]')||n.key.toLowerCase()==="t"&&Cn()};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[Cn]),fs(y,(z.length>0||St!=="")&&!je&&!Ie&&!Ne&&!Ge);const Nr=Ws(),[gt,xr]=_(gs),Ir=S(e=>{xr(e),ps(e)},[]),he=A(!1),st=A(null),kn=A(0),Qn=A(!1),Xn=A(0),se=A(null),Pt=A(""),Br=ur(Hn,Kn),Rt=!he.current&&!xe.current&&(Ie||Ne||Ge||yn||Br),pt=A(Rt);pt.current=Rt;const bt=A(!1);v(()=>{bt.current=nt},[nt]);const Qe=S((e,n)=>{if(!F||!n||n<30)return;const s=Mn(e,n),l=s?n:e;Math.abs(l-kn.current)<10&&!s||(kn.current=l,Fn.mutate({mediaId:F,season:i,episode:f,currentTime:Math.floor(l),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:R||"tv",adult:r?.adult?1:0}))},[F,i,f,Fn,r,R]),Be=S((e,n)=>{Fe();const s=new URLSearchParams(p);s.set("type",p.get("type")||"tv"),s.set("s",String(e)),s.set("e",String(n)),O(`${window.location.pathname}?${s.toString()}`)},[p,O,Fe]),$t=S(()=>{const e=c.current;if(!e||g||w==null){Sn(!1);return}const n=e.duration||0,s=e.currentTime||0;Sn(n>0&&s/n>=.8)},[g,w,c]),Xt=S((e,n)=>["tv-sources",h,g?"movie":"tv",o,e,n,ve],[h,g,o,ve]),Zt=S(async(e,n)=>{if(!r||!o||!h)return{valid:!1,sources:[]};const s=g?"movie":"tv",l=await _t.tv.sources.query({provider:h,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||"",...u.length>0&&ve?{server:ve}:{}});return{valid:"valid"in l?l.valid:!1,error:"error"in l?l.error:void 0,sources:l.sources,referer:"referer"in l?l.referer:void 0,audioTracks:l.audioTracks,subtitles:"subtitles"in l?l.subtitles:void 0,servers:"servers"in l?l.servers:void 0,embedUrl:"embedUrl"in l?l.embedUrl:void 0}},[r,o,h,g,u,ve]),Zn=S(()=>{if(g||!r||!o||!h||M||w==null)return;const e=Xt(i,w);G.getQueryState(e)?.status!=="success"&&G.prefetchQuery({queryKey:e,queryFn:()=>Zt(i,w),staleTime:300*1e3,gcTime:1800*1e3})},[g,r,o,h,M,w,i,G,Xt,Zt]),Ar=S(()=>{if(ke)return;$t();const e=c.current;!e||e.paused||e.ended||(e.duration>0&&e.duration-e.currentTime<=60&&Zn(),st.current&&clearTimeout(st.current),st.current=setTimeout(()=>{Qe(e.currentTime,e.duration||0)},5e3))},[Qe,c,ke,$t,Zn]),Lr=S(()=>{const e=c.current;if(!e||!r)return;st.current&&clearTimeout(st.current),Qe(e.currentTime,e.duration||0),Qn.current=!0;const n=bs({seekInduced:Date.now()-Xn.current<vs,autoplayEnabled:gt,hasNext:!g&&w!=null,isFinal:g||w==null});n==="advance"&&w!=null?(K(w),Be(i,w)):n==="prompt-next"?(xe.current=!1,he.current=!0,Ve(!0)):n==="prompt-complete"&&(Gn(g?r.title:`${r.title} — Season ${i}`),rt(!0),xe.current=!0,he.current=!0)},[g,r,i,w,gt,Qe,Be,c]),Mr=S(()=>{Qn.current=!1,y.actions.onPlay()},[y.actions]),Pr=S(()=>{y.actions.onPause();const e=c.current;e&&!e.ended&&Qe(e.currentTime,e.duration||0)},[y.actions,Qe,c]),Rr=S(()=>{y.actions.onLoadedMetadata();const e=c.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(se.current!=null&&se.current>0){try{e.currentTime=se.current}catch{}se.current=null}$t()}},[y.actions,c,$t]),vt=S(()=>{const e=c.current;if(e&&se.current!=null&&se.current>0){try{e.currentTime=se.current}catch{}se.current=null}},[c]),$r=S(()=>{ft>0&&(se.current=ft);const e=c.current;if(e&&ft>0){try{e.currentTime=ft,se.current=null}catch{}e.play().catch(()=>{})}Gt(!1),he.current=!0},[ft,c]),Jn=S(()=>{se.current=null;const e=c.current;e&&(e.currentTime=0,e.play().catch(()=>{})),Gt(!1),he.current=!0},[c]),zr=S(()=>{xe.current=!0,Ve(!1),he.current=!0},[]),Dr=S(()=>{xe.current=!0,Ve(!1),he.current=!0,se.current=null;const e=c.current;if(e){try{e.currentTime=0}catch{}e.play().catch(()=>{})}},[c]),er=S(()=>{w!=null&&(xe.current=!0,Ve(!1),he.current=!0,K(w),Be(i,w))},[w,i,Be]),tr=S(()=>{Se!=null&&(xe.current=!0,Ve(!1),rt(!1),he.current=!0,te(Se),K(1),Be(Se,1))},[Se,Be]),Or=S(async()=>{if(F)try{await Ht.mutateAsync({id:F,status:"Completed"}),rt(!1),Ve(!1),O("/")}catch{}},[F,Ht,O]);v(()=>{he.current=!1,_n.current=null,Gt(!1),Sn(!1),qn(0),Yn(!1),bt.current=!1,se.current=null,Pt.current=`${F}:${i}:${f}`,kn.current=0},[F,i,f]),v(()=>{Un&&(Yn(!0),bt.current=!0)},[Un,F,i,f]),v(()=>{if(!et||he.current)return;const e=`${F}:${i}:${f}`;if(_n.current===e)return;_n.current=e;const n=et,s=n.currentTime??0,l=n.duration??0;ur(s,l)&&(qn(s),Gt(!0))},[et,F,i,f]),v(()=>{if(!nt||he.current||xe.current||Ie||Ge||Ne)return;const e=`${F}:${i}:${f}`;if(Mt.current!==e){if(!yn){Wn||(Mt.current=e);return}if(g){Mt.current=e,Ve(!0);return}if(!(!r||tt<0||Q.length===0)){if(Mt.current=e,w==null&&Se==null){r&&Q.length>0&&(Gn(`${r.title} — Season ${i}`),rt(!0),xe.current=!0,he.current=!0);return}Ve(!0)}}},[nt,yn,Wn,Ie,Ge,Ne,g,w,Se,r,tt,Q.length,F,i,f]),v(()=>{(Ie||Ne)&&c.current&&c.current.pause()},[Ie,Ne,c]),v(()=>{const e=c.current;return()=>{st.current&&clearTimeout(st.current),e&&!e.ended&&Qe(e.currentTime,e.duration||0)}},[Qe,c]);const En=S(e=>{let n=null,s=!0;try{n=localStorage.getItem("tvLastSubtitle"),s=localStorage.getItem("tvSubtitlesEnabled")!=="false"}catch{}return zn(e,{lastKey:n,enabled:s})},[]),wn=S(e=>{if(!(e<0))try{localStorage.setItem("tvSubtitlesEnabled","true"),localStorage.setItem("tvSelectedSubtitle",String(e))}catch{}},[]),nr=S(e=>{if(e.length===0)return 0;let n=null;try{n=localStorage.getItem("tvLastAudio")}catch{}if(n){const s=e.findIndex(H=>Pn(H)===n);if(s>=0)return s;const l=n.indexOf("|||"),m=l>=0?n.slice(0,l):n,N=l>=0?n.slice(l+3):n,d=e.findIndex(H=>H.language===m||H.label===N);if(d>=0)return d}return zn(e,{lastKey:null,enabled:!0})},[]),{data:rr}=Vs(F||void 0),sr=Ee(()=>(rr?.progress??[]).filter(n=>n.season===i&&(n.completed===!0||n.completed===1||Mn(n.currentTime,n.duration))).map(n=>String(n.episode)),[rr,i]),or=Ee(()=>Q.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})),[Q]),ar=Ee(()=>(r?.genres??[]).map(e=>e.name).slice(0,5),[r]),Nn=Ee(()=>[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]);v(()=>{if(q.length!==0&&!q.some(e=>e.id===h)){const e=q.find(n=>n.tier==="direct")?.id??q[0].id;He(e);try{localStorage.setItem("tvProvider",e)}catch{}}},[q,h]),v(()=>{Ct([]),Vt(""),kt(""),le(!1)},[h]),v(()=>{if(u.length!==0&&!u.includes(ve)){Tt(u[0]);try{localStorage.setItem("tvServer",u[0])}catch{}}},[u,ve]),v(()=>{if(!o){I(null),X([]),Re(""),L(""),me("");return}const e=Number(o),n=R||"tv";I(null),X([]),Re(""),L(""),me("");const s=parseInt(U.current.get("s")||"",10),l=parseInt(U.current.get("e")||"",10);te(isNaN(s)?1:s),K(isNaN(l)?1:l),De(0),_t.tv.details.query({type:n,id:String(e)}).then(m=>{const N={id:m.id,title:m.title||"",overview:m.overview||"",vote_average:m.vote_average,year:m.year,poster:m.poster,backdrop:m.backdrop,imdb_id:m.imdb_id||void 0,adult:m.adult,seasons:m.seasons,number_of_seasons:m.number_of_seasons};I(N),N.seasons&&N.seasons.length>0&&isNaN(s)&&te(N.seasons[0].season_number)}).catch(()=>{})},[o,R]),v(()=>{if(!r||!o)return;if(!(r.seasons!==void 0||r.number_of_seasons!==void 0)){$([]);return}const n=parseInt(p.get("e")||"",10);_t.tv.episodes.query({id:String(o),season:String(i)}).then(s=>{const l=(s.episodes||[]).map(m=>({episode_number:m.episode_number,name:m.name||"",vote_average:m.vote_average,overview:m.overview||"",still_path:m.still_path||""}));$(l),l.length!==0&&K(m=>!isNaN(n)&&l.some(N=>N.episode_number===n)?n:l.some(N=>N.episode_number===m)?m:l[0].episode_number)}).catch(()=>{})},[r,o,i,p]),v(()=>{if(!M||!r||!o)return;fetch(`/api/tv/embed/${h}/${g?"movie":"tv"}/${o}?season=${i}&episode=${f}`).then(n=>n.json()).then(n=>{if(n.url)return me(n.url),fetch(`/api/resolve?url=${encodeURIComponent(n.url)}`).then(s=>s.json()).then(s=>{s.finalUrl&&me(s.finalUrl)})}).catch(()=>{})},[h,r,o,i,f,g,M]);const Jt=S(async()=>{if(!r||!o||!h||M||r.adult&&!At)return;const e=`${F}:${i}:${f}`;Y(!0),L(""),wt.current.length===0&&(X([]),De(0),Ye([]),it([]));try{const n=await G.fetchQuery({queryKey:Xt(i,f),queryFn:()=>Zt(i,f),staleTime:3e5,gcTime:18e5});if(Pt.current!==e){Y(!1);return}if(Y(!1),!n.valid||!n.sources?.length){L(n.error?`${n.error}`:u.length>0?`No streams from ${ve}. Try another server.`:"No streams available.");return}X(n.sources),Re(e),n.servers?.length&&Ct(n.servers),n.embedUrl&&Vt(n.embedUrl),De(0),n.referer&&Ft(n.referer);const s=n.audioTracks||[];Ye(s),C(s.length>0?nr(s):0);const l=n.subtitles||[];if(it(l),l.length>0){const d=En(l);ze(d),wn(d)}else ze(-1);const m=g?"movie":"tv",N=o;_t.tv.subtitles.query({type:m,tmdbId:String(N),season:String(i),episode:String(f)}).then(d=>{if(Pt.current!==e)return;const H=Array.isArray(d.subtitles)?d.subtitles:[];H.length!==0&&it(oe=>{const k=[...oe,...H.filter(ee=>!oe.some(fe=>fe.url===ee.url))];if(oe.length===0){const ee=En(k);ze(ee),wn(ee)}return k})}).catch(()=>{}),L("")}catch{if(Pt.current!==e)return;Y(!1),L("Failed to load streams.")}},[r,o,h,i,f,g,M,At,u,ve,En,wn,nr,F,G,Xt,Zt]),Fr=S(e=>{if(e==="Embed"){le(!0);return}le(!1),Tt(e);try{localStorage.setItem("tvServer",e)}catch{}L("")},[]),Vr=S(e=>{He(e);try{localStorage.setItem("tvProvider",e)}catch{}},[]);v(()=>{h&&r&&!M&&Jt()},[h,r,Jt,M]),v(()=>{if(!c.current)return;if(re.current&&(re.current.destroy(),re.current=null),M||Z){const d=c.current;d&&(d.pause(),d.removeAttribute("src"),d.load());return}let e=!1;if(ke){const d=c.current;return d&&(d.pause(),d.removeAttribute("src"),d.load(),d.src="/av-sync-test.mp4",pt.current||d.play().catch(()=>{})),()=>{e=!0}}if(Pt.current===`${F}:${i}:${f}`&&se.current==null&&!pt.current)try{const d=c.current;d&&!d.ended&&d.currentTime>1&&(se.current=d.currentTime)}catch{}const s=!Te&&Pe===`${F}:${i}:${f}`?Z?"":z[we]?.url||"":"";if(!s){try{c.current?.pause(),c.current?.removeAttribute("src"),c.current?.load()}catch{}return}const l=c.current;l.pause(),l.removeAttribute("src"),l.load(),y.actions.resetMediaState();const m=`/api/tv/stream-proxy?url=${encodeURIComponent(s)}&referer=${encodeURIComponent(lt)}`;z[we]?.type==="hls"?(async()=>{const d=await js();if(!e)if(d&&d.isSupported()){const H=Do()||document.body.classList.contains("low-end"),oe=H?60:180,k=new d({enableWorker:!0,lowLatencyMode:!1,maxBufferLength:oe,maxMaxBufferLength:oe+(H?30:60),backBufferLength:H?30:60,maxBufferSize:(H?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}}}});re.current=k,k.on(d.Events.ERROR,(x,E)=>{E.fatal&&(L(`Stream failed (${E.details}). Try another source or reload.`),Y(!1),k.destroy(),re.current=null)}),k.loadSource(m),k.attachMedia(l);const ee=()=>{let x=!1,E=0;try{x=localStorage.getItem("tvSubtitlesEnabled")==="true";const P=parseInt(localStorage.getItem("tvSelectedSubtitle")||"0",10);!isNaN(P)&&P>=0&&(E=P)}catch{}return{enabled:x,index:E}},fe=()=>{if(typeof k.subtitleTrack!="number")return;if(ce.current.length>0){k.subtitleTrack=-1;return}const x=Array.isArray(k.subtitleTracks)?k.subtitleTracks:[];if(x.length===0){k.subtitleTrack=-1;return}const E=ee();if(E.enabled){const P=E.index<x.length?E.index:0;k.subtitleTrack=P,ze(P),bn()}else k.subtitleTrack=-1};$o(k,d.Events,{getWant:()=>mt.current,onResolve:x=>C(x)}),k.on(d.Events.MANIFEST_PARSED,()=>{fe(),ye.current!=null&&(l.currentTime=ye.current,ye.current=null),vt(),!pt.current&&bt.current&&l.play().catch(()=>{})}),k.on(d.Events.SUBTITLE_TRACKS_UPDATED,()=>{fe()}),k.on(d.Events.SUBTITLE_TRACK_SWITCH,(x,E)=>{if(ce.current.length>0){if(E.id!==-1)try{k.subtitleTrack=-1}catch{}return}const P=Array.isArray(k.subtitleTracks)?k.subtitleTracks:[];if(P.length!==0){if(E.id===-1){const D=ee();if(D.enabled){const Ue=D.index<P.length?D.index:0;k.subtitleTrack=Ue;return}}ze(E.id),bn()}})}else Us(l)&&(l.src=m,ye.current!=null&&(l.currentTime=ye.current,ye.current=null),vt(),!pt.current&&bt.current&&l.play().catch(()=>{L("Failed to play stream. Try another source.")}))})():(l.src=m,ye.current!=null&&(l.currentTime=ye.current,ye.current=null),vt(),!pt.current&&bt.current&&l.play().catch(()=>{L("Failed to play stream. Try another source.")}));const N=()=>{const oe=l.error?.code===4?"Video source not supported or not found":"Failed to load video stream";L(`${oe}. The source may be invalid or expired. Try switching source or reloading.`),Y(!1)};return l.addEventListener("error",N),()=>{e=!0,l.removeEventListener("error",N)}},[z,Pe,Te,we,h,lt,M,Z,c,ye,ke,F,i,f,vt,bn,y.actions]),v(()=>{if(!nt||Ie||Ne||Ge||Rt||M||ke)return;const e=c.current;!e||!e.paused||e.ended||e.readyState<1||(vt(),e.play().catch(()=>{}))},[nt,Ie,Ne,Ge,Rt,M,ke,vt,c]),v(()=>{const e=re.current;!e||typeof e.audioTrack!="number"||(e.audioTrack=be)},[be]),v(()=>{const e=re.current;!e||typeof e.subtitleTrack!="number"||!Array.isArray(e.subtitleTracks)||e.subtitleTracks.length===0||ce.current.length>0||(ie>=0?e.subtitleTrack=ie:e.subtitleTrack=-1)},[ie]),v(()=>{const e=c.current;if(!(!e||M)&&(e.querySelectorAll("track").forEach(n=>n.remove()),ce.current=[],W.length!==0&&(W.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 l=`/api/subtitle-proxy?url=${encodeURIComponent(n.url)}&referer=${encodeURIComponent(lt)}`;s.src=l,s.addEventListener("load",()=>{const m=ce.current.indexOf(s),N=s.track;if(N&&m>=0){const d=m===Nt.current;N.mode=d&&!pn.current?"showing":"hidden"}}),e.appendChild(s),ce.current.push(s)}),W.length>0)))try{const n=re.current;n&&typeof n.subtitleTrack=="number"&&n.subtitleTrack!==-1&&(n.subtitleTrack=-1)}catch{}},[W,lt,M,h,c]),v(()=>{const e=c.current;if(!e||M)return;const n=re.current;ce.current.length>0&&n&&typeof n.subtitleTrack=="number"&&Array.isArray(n.subtitleTracks)&&n.subtitleTracks.length>0&&(n.subtitleTrack=-1);const s=()=>{const N=Dn(y.state.subtitleFontSize,e.clientHeight||720),d=Math.max(0,Math.min(100,100-y.state.subtitlePosition)),H=()=>{const x=N*16,E=e.videoHeight||e.clientHeight||720,P=e.videoWidth||e.clientWidth||1280;return{step:x*1.3/E*100,chars:Math.max(20,Math.floor(P/(x*.55)))}},oe=(x,E)=>{const P=x;P.snapToLines=!1,P.line=E},k=x=>{if(!x.cues)return;Array.from(x.cues).forEach(ge=>oe(ge,d));const E=Array.from(x.activeCues??[]);if(E.length<=1){E.forEach(ge=>oe(ge,d));return}const{step:P,chars:D}=H();let Ue=d;for(let ge=E.length-1;ge>=0;ge--){const Xe=String(E[ge].text??"").replace(/<[^>]*>/g,"").split(`
|
|
3
|
-
`).reduce((nn,Dt)=>nn+Math.max(1,Math.ceil(Dt.length/D)),0);Ue=Math.max(0,Ue-Xe*P),oe(E[ge],Ue),Ue-=P*.4}},ee=ce.current;if(ee.length>0){ee.forEach((x,E)=>{const P=x.track;if(!P)return;const D=E===ie;P.mode=D&&!_e?"showing":"hidden",D&&!_e&&k(P)});return}const fe=Array.from(e.textTracks);fe.length!==0&&fe.forEach((x,E)=>{const P=E===ie;x.mode=P&&!_e?"showing":"hidden",P&&!_e&&k(x)})};s();const l=()=>s();e.textTracks.addEventListener("addtrack",l),e.addEventListener("loadedmetadata",s,{once:!0});const m=window.setTimeout(s,600);return()=>{e.textTracks.removeEventListener("addtrack",l),e.removeEventListener("loadedmetadata",s),window.clearTimeout(m)}},[ie,W,M,h,c,_e,y.state.subtitleFontSize,y.state.subtitlePosition]),v(()=>{if(!_e)return;const e=c.current,n=It.current;if(!e||!n)return;const s=ht/1e3,l=mn/1e3,m=new Set;let N=[],d=-1,H=-1,oe=-1,k=-1,ee=0,fe=0,x=!1;const E=()=>{const V=Nt.current;if(V<0)return null;const Ze=ce.current;return Ze.length>0?Ze[V]?.track??null:Array.from(e.textTracks)[V]??null},P=(V,Ze)=>{const pe=V.cues;if(!pe||pe.length===0)return Array.from(V.activeCues??[]);let ot=0,at=pe.length;for(;ot<at;){const Ae=ot+at>>>1;pe[Ae].endTime+s<Ze?ot=Ae+1:at=Ae}const Ot=[];for(let Ae=ot;Ae<pe.length;Ae++){const rn=pe[Ae];if(rn.startTime+s>Ze)break;rn.endTime+s>=Ze&&Ot.push(rn)}return Ot},D=()=>{const V=E(),Ze=e.currentTime-l,pe=V?P(V,Ze):[],ot=e.clientWidth,at=e.clientHeight,Ot=e.videoWidth,Ae=e.videoHeight;if(pe.length===N.length&&pe.every((In,Bn)=>In===N[Bn])&&ot===d&&at===H&&Ot===oe&&Ae===k||(N=pe,d=ot,H=at,oe=Ot,k=Ae,n.textContent="",pe.length===0))return;const cr={fontSize:Dn(y.state.subtitleFontSize,at),position:y.state.subtitlePosition,bgOpacity:y.state.subtitleBgOpacity,bgColor:y.state.subtitleBgColor,textColor:y.state.subtitleTextColor,edge:y.state.subtitleEdge,bold:y.state.subtitleBold},Hr=ys(cr),Kr=_s(e,cr.position);pe.forEach((In,Bn)=>{const dr=String(In.text??"");if(!Ss(dr).trim())return;const An=document.createElement("div"),qr=(pe.length-1-Bn)*1.7;An.style.cssText=`${Hr}
|
|
4
|
-
bottom: calc(${Kr}px + ${qr}em);`,An.innerHTML=Ts(dr),n.appendChild(An)})},Ue=()=>{Array.from(e.textTracks).forEach(V=>{m.has(V)||(m.add(V),V.addEventListener("cuechange",D))})},ge=()=>{Ue(),D()},xn=()=>{if(x||fe)return;const V=()=>{fe=0,!(x||e.paused||e.ended)&&(D(),xn())};fe=window.requestAnimationFrame(V)},Xe=e,nn=()=>{ee=0,D(),!x&&Xe.requestVideoFrameCallback&&(ee=Xe.requestVideoFrameCallback(nn))},Dt=()=>{D(),Xe.requestVideoFrameCallback?ee||(ee=Xe.requestVideoFrameCallback(nn)):xn()};Ue(),e.textTracks.addEventListener("addtrack",ge),e.textTracks.addEventListener("removetrack",ge),e.addEventListener("timeupdate",D),e.addEventListener("seeked",D),e.addEventListener("loadedmetadata",D),e.addEventListener("play",Dt);const ir=Array.from(e.querySelectorAll("track"));ir.forEach(V=>V.addEventListener("load",D));const lr=typeof ResizeObserver>"u"?null:new ResizeObserver(()=>D());return lr?.observe(e),D(),Dt(),()=>{x=!0,m.forEach(V=>V.removeEventListener("cuechange",D)),e.textTracks.removeEventListener("addtrack",ge),e.textTracks.removeEventListener("removetrack",ge),e.removeEventListener("timeupdate",D),e.removeEventListener("seeked",D),e.removeEventListener("loadedmetadata",D),e.removeEventListener("play",Dt),ir.forEach(V=>V.removeEventListener("load",D)),lr?.disconnect(),fe&&window.cancelAnimationFrame(fe),ee&&Xe.cancelVideoFrameCallback&&Xe.cancelVideoFrameCallback(ee),n.textContent=""}},[_e,ht,ie,W,mn,c,y.state.subtitleFontSize,y.state.subtitlePosition,y.state.subtitleBgOpacity,y.state.subtitleBgColor,y.state.subtitleTextColor,y.state.subtitleEdge,y.state.subtitleBold]);const en=()=>{I(null),X([]),me(""),O(-1)},jr=S(e=>{te(e),K(1),Be(e,1)},[Be]),tn=!g&&r?.seasons&&r.seasons.length>1?t("label",{className:b.sidebarSeason,children:[t("span",{children:"Season"}),t("select",{value:i,onChange:e=>jr(parseInt(e.target.value,10)||1),className:b.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,yt=S(e=>{const n=parseInt(e,10);if(!isNaN(n)){try{c.current?.pause()}catch{}K(n),Be(i,n)}Tn(!1)},[i,Be,c]);v(()=>{if(g)return;const e=n=>{n.target.closest('input, textarea, button, select, a, [role="button"], [contenteditable="true"]')||n.key.toLowerCase()==="n"&&(w!=null?yt(String(w)):es.error("No next episode available"))};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[g,w,yt]);const Ur=e=>{C(e);try{const s=$e[e];s&&localStorage.setItem("tvLastAudio",Pn(s))}catch{}const n=re.current;n&&n.audioTrack!==void 0&&(n.audioTrack=e)},Wr=e=>{ze(e);try{if(e===-1)localStorage.setItem("tvSubtitlesEnabled","false");else{localStorage.setItem("tvSubtitlesEnabled","true"),localStorage.setItem("tvSelectedSubtitle",String(e));const m=W[e];m&&localStorage.setItem("tvLastSubtitle",Pn(m))}}catch{}const n=c.current,s=re.current;if(s&&typeof s.subtitleTrack=="number"&&Array.isArray(s.subtitleTracks)&&s.subtitleTracks.length>0&&(s.subtitleTrack=ce.current.length>0||e<0?-1:e),!n)return;const l=ce.current;if(l.length>0){l.forEach((m,N)=>{const d=m.track;if(!d)return;const H=N===e;d.mode=H&&!_e?"showing":"hidden"});return}Array.from(n.textTracks).forEach((m,N)=>{const d=N===e;m.mode=d&&!_e?"showing":"hidden"})},zt=S(()=>{if(!r)return;const e=c.current,n=g?"":`S${String(i).padStart(2,"0")}E${String(f).padStart(2,"0")}`;_t.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:Lt.current}).catch(()=>{}),_t.discord.heartbeat.mutate({sessionId:Lt.current}).catch(()=>{})},[r,g,i,f,c]);return v(()=>{if(!r)return;zt();const e=window.setInterval(()=>{const n=c.current;(!n||!n.paused)&&zt()},15e3);return()=>window.clearInterval(e)},[zt,r,c]),v(()=>{if(!r||M||Te||Ce||z.length===0)return;const e=c.current;if(!e)return;const n=()=>zt();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,M,Te,Ce,z,zt,c]),v(()=>{const e=Lt.current,n=()=>ts(e),s=()=>n();return window.addEventListener("pagehide",s),window.addEventListener("beforeunload",s),()=>{window.removeEventListener("pagehide",s),window.removeEventListener("beforeunload",s),n()}},[]),v(()=>{if(!r){document.title="TV & Movies - dango";return}document.title=g?`${r.title} - dango`:`${r.title} - Season ${i} Episode ${f} - dango`},[r,g,i,f]),v(()=>{if(!r||g)return;const e=new URLSearchParams(p),n=e.get("s"),s=e.get("e"),l=String(i),m=String(f);n===l&&s===m||(e.set("type",p.get("type")||"tv"),e.set("s",l),e.set("e",m),O(`${window.location.pathname}?${e.toString()}`,{replace:!0}))},[r,g,i,f,p,O]),t("div",{className:`${Le.playerPageLayout} ${je?Le.theaterMode:""} ${g?Le.noSidebar:""}`,onClick:wr,children:[je&&t(Cs,{videoRef:c,active:gn.enabled&&!M&&z.length>0&&!Ce&&!(r?.adult&&!At),settings:gn}),!je&&!g&&t("aside",{className:Le.episodeSidebar,children:r?t(ks,{episodes:or,currentEpisode:String(f),watchedEpisodes:sr,onEpisodeClick:yt,header:tn}):t(Es,{variant:"sidebar"})}),t("div",{className:Le.playerMain,children:[r&&t("div",{className:b.playerSection,onContextMenu:e=>e.preventDefault(),style:r.adult&&!At?{filter:"blur(14px)",pointerEvents:"none",userSelect:"none"}:void 0,children:M&&St?t("iframe",{src:St,className:b.videoIframe,allow:"autoplay; fullscreen",allowFullScreen:!0}):!M&&Et?t("iframe",{src:Et,className:b.videoIframe,allow:"autoplay; fullscreen",allowFullScreen:!0}):!M&&(z.length>0||Te)?t(Me,{children:[Ce&&t(hr,{error:Ce,onRetry:Jt}),t(Mo,{player:y,title:r.title,episodeLabel:g?void 0:`S${i} E${f}`,audioTracks:$e,selectedAudioTrack:be,onAudioTrackChange:Ur,subtitles:W,selectedSubtitle:ie,onSubtitleChange:Wr,streams:z,resolutionIdx:we,onResolutionChange:De,onBack:en,videoDelayEnabled:J,onVideoDelayToggle:de,videoDelayMs:B,onVideoDelayChange:Bt,onCalibrateAvSync:On,subtitleDelayMs:ht,onSubtitleDelayChange:pr,showNextEpisodeButton:Tr&&!Ie&&!Ne&&!Ge,onNextEpisode:er,isLoading:Te,isTheaterMode:je,onTheaterModeToggle:Cn,ambientSettings:gn,onAmbientChange:br,children:[t("video",{ref:c,autoPlay:nt&&!Rt,playsInline:!0,disablePictureInPicture:!0,className:`${b.video} ${fn?b.videoHidden:""}`,onTimeUpdate:Ar,onEnded:()=>{ke||Lr()},onPlay:Mr,onPause:Pr,onSeeked:()=>{Xn.current=Date.now(),$t()},onLoadedMetadata:Rr,onVolumeChange:y.actions.onVolumeChange,onWaiting:y.actions.onWaiting,onPlaying:y.actions.onPlaying,onCanPlay:y.actions.onCanPlay,onContextMenu:e=>e.preventDefault(),onError:()=>{L("Video failed to load. Try another server or reload."),Y(!1)}}),t("canvas",{ref:xt,className:`${b.delayCanvas} ${fn?b.delayCanvasActive:""}`}),_e&&t("div",{ref:It,className:b.subtitleOverlay}),t(ws,{isOpen:cn,ms:B,onChange:Bt,onApply:Ut,onClose:dn,testClipActive:ke,onTestClip:un})]})]}):Ce&&!M?t(hr,{error:Ce,onRetry:Jt}):null}),!je&&r&&t(Ns,{}),!je&&tn&&t("div",{className:b.mobileSeasonRow,children:tn}),!je&&r&&t("div",{className:ue.streamPanel,children:[t("div",{className:b.providerSelectWrap,children:t("label",{className:b.controlLabel,children:["Provider",t("select",{value:h,onChange:e=>Vr(e.target.value),className:b.select,disabled:q.length===0,children:Je?t("option",{value:"",children:"Loading..."}):q.length===0?t("option",{value:"",children:"No providers available"}):t(Me,{children:[T.length>0&&t("optgroup",{label:"Direct HLS",children:T.map(e=>t("option",{value:e.id,children:e.label},e.id))}),ne.length>0&&t("optgroup",{label:"Embeds",children:ne.map(e=>t("option",{value:e.id,children:e.label},e.id))})]})})]})}),!M&&(Te?t("div",{className:b.sourceLoader,children:t("div",{className:b.ringSpinner})}):t(Ro,{servers:ut,selectedServer:jt?"Embed":ve,onServerSelect:Fr}))]}),!je&&r&&t("div",{className:Le.playerInfoContainer,children:[t("div",{className:Le.playerInfoHeader,children:[t("div",{className:Le.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:Le.videoTitleSection,children:[t("div",{className:ue.titleContainer,children:[t("h1",{children:r.title}),t("div",{className:b.meta,children:[t("span",{className:b.year,children:r.year}),r.vote_average!=null&&r.vote_average>0&&t("span",{className:b.rating,children:[t(j,{name:"star",size:12}),Number(r.vote_average).toFixed(1)]}),t("span",{className:`${b.typeBadge} ${b[g?"movie":"tv"]}`,children:g?"Movie":"TV Show"})]}),ar.length>0&&t("div",{className:b.genreRow,children:ar.map(e=>t("span",{className:b.genreChip,children:e},e))}),Nn.length>0&&t("div",{className:b.metaRow,children:Nn.map((e,n)=>t("span",{children:[e,n<Nn.length-1?" · ":""]},`${e}-${n}`))})]}),t("div",{className:ue.controls,children:[t("button",{className:`${ue.watchlistBtn} ${Kt?ue.inList:""}`,onClick:Sr,disabled:_r,type:"button",children:[Kt?t(j,{name:"check",size:14}):t(j,{name:"plus",size:14}),Kt?"In Watchlist":"Add to Watchlist"]}),!g&&t(Me,{children:[t("button",{className:`${ue.watchlistBtn}`,onClick:()=>vn!=null&&yt(String(vn)),disabled:vn==null,type:"button",children:[t(j,{name:"chevron-left",size:14}),"Prev EP"]}),t("button",{className:`${ue.watchlistBtn}`,onClick:()=>w!=null&&yt(String(w)),disabled:w==null,type:"button",children:["Next EP",t(j,{name:"chevron-right",size:14})]}),!g&&t("button",{className:`${ue.watchlistBtn} ${ue.modeToggleBtn} ${gt?ue.modeToggleActive:""}`,onClick:()=>Ir(!gt),type:"button","aria-pressed":gt,children:gt?"AUTOPLAY: ON":"AUTOPLAY: OFF"}),Nr&&t("button",{className:`${ue.watchlistBtn}`,onClick:()=>Tn(!0),type:"button",children:[t(j,{name:"list-ul",size:14}),"Episodes"]})]})]})]})]}),t("div",{className:Le.infoColumns,children:[t("div",{className:`${ue.descriptionSection} ${ue.synopsisFlat}`,children:[t("h3",{children:"Synopsis"}),t(Hs,{text:r.overview,emptyText:"No description available."}),t("button",{className:ue.detailsToggleBtn,onClick:()=>kr(!Qt),type:"button",children:[Qt?t(j,{name:"chevron-up"}):t(j,{name:"chevron-down"}),Qt?"Hide Details":"Show Details"]})]}),Qt&&t("div",{className:b.detailGrid,children:[r.first_air_date&&t("div",{className:b.detailItem,children:[t("strong",{children:g?"Release Date":"First Air Date"}),t("span",{children:r.first_air_date})]}),r.last_air_date&&t("div",{className:b.detailItem,children:[t("strong",{children:"Last Air Date"}),t("span",{children:r.last_air_date})]}),r.networks&&r.networks.length>0&&t("div",{className:b.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:b.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:b.detailItem,children:[t("strong",{children:"Episode Runtime"}),t("span",{children:[r.episode_run_time[0]," min"]})]}),r.imdb_id&&t("div",{className:b.detailItem,children:[t("strong",{children:"IMDb"}),t("a",{href:`https://www.imdb.com/title/${r.imdb_id}`,target:"_blank",rel:"noopener noreferrer",className:b.imdbLink,children:"View on IMDb"})]})]})]})]}),!g&&t(xs,{isOpen:Er,onClose:()=>Tn(!1),episodes:or,currentEpisode:String(f),watchedEpisodes:sr,onEpisodeClick:yt,header:tn}),r?.adult&&!At&&t(Ln,{isOpen:!0,title:"Content Warning",onClose:en,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(We,{variant:"secondary",onClick:en,children:"Go Back"}),t(We,{onClick:vr,children:"I'm 18+, Continue"})]})]})}),t(Is,{isOpen:Ie,onClose:Jn,title:"Resume Watching",message:t(Me,{children:["You were at ",t("strong",{children:an(ft)})]}),restartLabel:"Start from Beginning",onResume:$r,onRestart:Jn}),t(Ln,{isOpen:Ne,onClose:zr,title:g?"Movie Completed":"Episode Completed",children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t("p",{children:g?t(Me,{children:"You've already watched this movie."}):t(Me,{children:["You've already watched"," ",t("strong",{children:["Season ",i," Episode ",f]}),". Would you like to continue?"]})}),t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center",flexWrap:"wrap"},children:[t(We,{variant:"secondary",onClick:Dr,children:"Replay"}),w!=null?t(We,{onClick:er,children:["Watch EP ",w]}):Se!=null?t(We,{onClick:tr,children:["Start Season ",Se]}):null]})]})}),t(Ln,{isOpen:Ge,onClose:()=>rt(!1),title:g?"Movie Completed!":Se!=null?"Season Complete!":"Show Completed!",children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t(j,{name:"check-circle",size:48,style:{color:"var(--accent-lighter)",marginBottom:"0.5rem"}}),t("p",{style:{fontSize:"1.1rem",fontWeight:600},children:Cr}),t("p",{style:{color:"var(--text-secondary)"},children:g?"You finished this movie!":Se!=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(We,{variant:"secondary",onClick:()=>rt(!1),children:"Close"}),Se!=null?t(We,{onClick:tr,children:["Start Season ",Se]}):t(Me,{children:[t(We,{onClick:()=>{rt(!1),en()},children:"Back to Details"}),Kt&&t(We,{onClick:Or,disabled:Ht.isPending,children:Ht.isPending?"Saving...":"Move to Completed"})]})]})]})}),!r&&t("div",{className:b.statusMsg,children:[t(j,{name:"spinner",className:b.spinner})," Loading..."]})]})]})};export{Za as default};
|