@serifpersia/dango 3.7.6 → 3.7.7
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-a7KkMGQv.js → AnimeCard-aZA4-g8o.js} +1 -1
- package/client/dist/assets/{AnimeInfo-De3gudGy.js → AnimeInfo-CFGRb1OW.js} +1 -1
- package/client/dist/assets/{AnimeInfoPage-adJHjnqz.js → AnimeInfoPage-CozJH4AM.js} +2 -2
- package/client/dist/assets/{Asmr-BH3j9n5n.js → Asmr-AxjnBdsh.js} +1 -1
- package/client/dist/assets/{AsmrResetProgressModal-CZGzmnlI.js → AsmrResetProgressModal-NKywttOY.js} +1 -1
- package/client/dist/assets/{Home-4lO9InFx.js → Home-CkdWZK2L.js} +1 -1
- package/client/dist/assets/{Insights-Co9pEzWb.js → Insights-DgnlUFjW.js} +1 -1
- package/client/dist/assets/{LibraryListPage-CgZiYRmp.js → LibraryListPage-CJxNJYC3.js} +1 -1
- package/client/dist/assets/{ListeningList-DX_Imiie.js → ListeningList-VZTVSt_i.js} +1 -1
- package/client/dist/assets/{Manga-tDOa59vQ.js → Manga-dDQAtejO.js} +1 -1
- package/client/dist/assets/{MangaInfoPage-D_3Rx6rr.js → MangaInfoPage-DzaSKarW.js} +1 -1
- package/client/dist/assets/{MangaReadPage-D0satiXp.js → MangaReadPage-CT6THZho.js} +1 -1
- package/client/dist/assets/{MangaResetProgressModal-Bd_lIuFo.js → MangaResetProgressModal-DrqN7OF0.js} +1 -1
- package/client/dist/assets/{Mature-DhozU6BP.js → Mature-BGitA9fy.js} +1 -1
- package/client/dist/assets/{MatureConsentModal-RZ_j_2BD.js → MatureConsentModal-DLVOORqW.js} +1 -1
- package/client/dist/assets/{MediaCard-BODgA6ir.js → MediaCard-DJNRuWDJ.js} +1 -1
- package/client/dist/assets/{OptionListMenu-CGazCg0C.js → OptionListMenu-CRaHF9k4.js} +1 -1
- package/client/dist/assets/Player-CdSjfMoO.js +56 -0
- package/client/dist/assets/{PlayerProvider-pi0at080.js → PlayerProvider-D02-hqdz.js} +1 -1
- package/client/dist/assets/{PlayerSettings-k4bqwbns.js → PlayerSettings-CXmAyRJh.js} +1 -1
- package/client/dist/assets/{QueueOptionsButton-C-y5QFrT.js → QueueOptionsButton-ByAwxtJ-.js} +1 -1
- package/client/dist/assets/{QueueRail-DGFI6xTM.js → QueueRail-BLf4fWOA.js} +1 -1
- package/client/dist/assets/{ReadingList-BB_fA_j0.js → ReadingList-Cm5omw5j.js} +1 -1
- package/client/dist/assets/{ResetProgressModal-DEnbScHS.js → ResetProgressModal-Dq-B23o_.js} +1 -1
- package/client/dist/assets/{Search-Dikasx2q.js → Search-C8rfGyYH.js} +1 -1
- package/client/dist/assets/{Settings-CCoAhBc0.js → Settings-Do5F5e2c.js} +1 -1
- package/client/dist/assets/{SkeletonGrid-w6TsxWu7.js → SkeletonGrid-sA6_IQY1.js} +1 -1
- package/client/dist/assets/{Trackers-CoM-8Hz9.js → Trackers-DeJr1sbR.js} +1 -1
- package/client/dist/assets/Tv-BkApELpu.js +4 -0
- package/client/dist/assets/{TvInfo-BjFZ57fG.js → TvInfo-C5cVdHka.js} +1 -1
- package/client/dist/assets/{TvPopup-D6UvGI7M.js → TvPopup-DyFUi32m.js} +1 -1
- package/client/dist/assets/{TvSearch-BDNZjbZo.js → TvSearch-BBYYrww5.js} +1 -1
- package/client/dist/assets/{TvWatchlist-er5RKLmv.js → TvWatchlist-SjHmyo2P.js} +1 -1
- package/client/dist/assets/{Watchlist-BiJ1SCAH.js → Watchlist-BnmsAcx0.js} +1 -1
- package/client/dist/assets/{index-BP1z44Uk.js → index-vb4WPdcb.js} +2 -2
- package/client/dist/assets/{libraryInvalidation-CVK2SYUR.js → libraryInvalidation-2sAPXNhJ.js} +1 -1
- package/client/dist/assets/{useAnimeInfoData-8RI9qMzw.js → useAnimeInfoData-Ai39I_f0.js} +1 -1
- package/client/dist/assets/{useAsmr-ClAcWwjW.js → useAsmr-XBCV7iDw.js} +1 -1
- package/client/dist/assets/{useAsmrPopup-CDcDqi0C.js → useAsmrPopup-DViHcQnO.js} +1 -1
- package/client/dist/assets/{useMangaLibrary-D3Foz2m_.js → useMangaLibrary-DrPp5K_1.js} +1 -1
- package/client/dist/assets/{useMangaPopup-kZzwoCN6.js → useMangaPopup-VGTfdKEu.js} +1 -1
- package/client/dist/assets/usePlaybackEnd-C5EyqR1L.js +10 -0
- package/client/dist/assets/{useProviders-OKWPunZg.js → useProviders-Bt-p5Jxv.js} +1 -1
- package/client/dist/assets/{useTv-BgO7EV-p.js → useTv-BpVapcT5.js} +1 -1
- package/client/dist/assets/{useTvLibrary-C6rSJQi_.js → useTvLibrary-BFRidauf.js} +1 -1
- package/client/dist/index.html +1 -1
- package/package.json +2 -2
- package/server/package.json +1 -1
- package/client/dist/assets/Player-M3yMiFzg.js +0 -56
- package/client/dist/assets/Tv-BLUeZ2n8.js +0 -4
- package/client/dist/assets/usePlaybackEnd-DmvZ__Ut.js +0 -10
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{u as t,d as v,A as z,h as f,S as Ve,g as Vr,q as C,o as qr,p as Fr,a as Ur,T as ye}from"./vendor-core-DfaOB3Rn.js";import{P as Hr,a as Wr,b as Kr,F as Yr,c as jr}from"./PlayerProvider-pi0at080.js";import{u as Gr}from"./vendor-query-BBT5_sHx.js";import{g as wn,t as lt,W as Qr,J as xn,e as Xr,A as Zn,B as Xt}from"./index-BP1z44Uk.js";import{I as be}from"./vendor-icons-DrybRNxP.js";import{p as Mn,M as Jr,y as sr,f as Pn,c as Zr,C as es,P as ts,a as ns,b as Jt,u as rs,h as ss,i as as,m as os,j as is,l as ls,k as cs,s as An,d as us,e as ds,g as ms,r as bs,n as Ee,A as hs,q as gs,E as fs,v as ps,w as vs,t as le,x as ys,R as Ss,o as _s}from"./usePlaybackEnd-DmvZ__Ut.js";import{S as Ts,O as Ln,a as Cs,A as ks,b as Es}from"./OptionListMenu-CGazCg0C.js";import{M as Ns}from"./MatureConsentModal-RZ_j_2BD.js";import{u as Is}from"./useProviders-OKWPunZg.js";import{d as xs,g as As,h as Ls,j as Bs,f as ws,e as Ms,k as Ps,l as Rs}from"./useTvLibrary-C6rSJQi_.js";import{l as zs,s as $s,i as er,h as tr}from"./playbackCompletion-IPHm9fp5.js";import{u as Ds}from"./useIsMobile-Dvx1uJ82.js";import{S as Os}from"./SynopsisText-B3Sa5pRv.js";import"./libraryInvalidation-CVK2SYUR.js";const Vs="_fullscreenFlat_10bzs_1",qs="_timeDisplay_10bzs_12",Fs="_bottomControls_10bzs_16",Us="_leftControls_10bzs_20",Hs="_rightControls_10bzs_21",Ws="_controlBtn_10bzs_25",Ks="_controlsOverlay_10bzs_32",Ys="_hidden_10bzs_52",js="_topControls_10bzs_58",Gs="_backBtn_10bzs_78",Qs="_videoTitleInfo_10bzs_98",Xs="_animeTitle_10bzs_104",Js="_episodeLabel_10bzs_112",Zs="_speedBoostBadge_10bzs_119",ea="_progressBarContainer_10bzs_165",ta="_progressBar_10bzs_165",na="_thumb_10bzs_184",ra="_bufferedBar_10bzs_202",sa="_watchedBar_10bzs_212",aa="_scrubbing_10bzs_237",oa="_timeBubble_10bzs_241",ia="_bottomControlsRow_10bzs_255",la="_nextEpisodeBtn_10bzs_278",ca="_active_10bzs_340",ua="_settingsPanel_10bzs_352",da="_settingsHeader_10bzs_371",ma="_settingsBackBtn_10bzs_379",ba="_settingsTitle_10bzs_397",ha="_settingsContent_10bzs_408",ga="_currentValue_10bzs_417",fa="_menuItem_10bzs_423",pa="_menuNote_10bzs_456",va="_loadingOverlay_10bzs_465",ya="_loadingDots_10bzs_476",Sa="_dot_10bzs_481",_a="_bufferingOverlay_10bzs_510",Ta="_bufferingSpinner_10bzs_519",o={fullscreenFlat:Vs,timeDisplay:qs,bottomControls:Fs,leftControls:Us,rightControls:Hs,controlBtn:Ws,controlsOverlay:Ks,hidden:Ys,topControls:js,backBtn:Gs,videoTitleInfo:Qs,animeTitle:Xs,episodeLabel:Js,speedBoostBadge:Zs,progressBarContainer:ea,progressBar:ta,thumb:na,bufferedBar:ra,watchedBar:sa,scrubbing:aa,timeBubble:oa,bottomControlsRow:ia,nextEpisodeBtn:la,active:ca,settingsPanel:ua,settingsHeader:da,settingsBackBtn:ma,settingsTitle:ba,settingsContent:ha,currentValue:ga,menuItem:fa,menuNote:pa,loadingOverlay:va,loadingDots:ya,dot:Sa,bufferingOverlay:_a,bufferingSpinner:Ta},Ca=({player:s,visible:d,settingsOpen:R,onOpenSettings:x,onCloseSettings:B,hasSubtitles:k,isSubtitleActive:r,subtitles:p,onSubtitleChange:a,showNextEpisodeButton:S,onNextEpisode:V,isTheaterMode:w,onTheaterModeToggle:b,timeLabelRef:H})=>{const{state:_,actions:we}=s,K=()=>{if(r){a(-1);return}let J=null;try{J=localStorage.getItem("tvLastSubtitle")}catch{}a(Mn(p,{lastKey:J,enabled:!0}))};return t("div",{className:`${o.controlsOverlay} ${d?"":o.hidden}`,"data-speed-boost-ignore":"true",style:{pointerEvents:"none",background:"none",justifyContent:"flex-end"},children:t("div",{className:o.bottomControls,onClick:J=>J.stopPropagation(),children:[t(Hr,{classes:{container:o.progressBarContainer,scrubbing:o.scrubbing,timeBubble:o.timeBubble,bar:o.progressBar,buffered:o.bufferedBar,watched:o.watchedBar,thumb:o.thumb},timeLabelRef:H}),t("div",{className:o.bottomControlsRow,children:[t("div",{className:o.leftControls,children:[t(Wr,{className:o.controlBtn}),t(Kr,{buttonClassName:o.controlBtn,onExpandedChange:we.setShowVolumeSlider}),t("span",{className:o.timeDisplay,ref:H,children:[wn(0)," / ",wn(_.duration)]})]}),t("div",{className:o.rightControls,children:[S&&t("button",{className:o.nextEpisodeBtn,onClick:V,title:"Play next episode",children:"Next EP"}),k&&t("button",{className:`${o.controlBtn} ${r?o.active:""}`,onClick:K,"aria-label":r?"Turn subtitles off":"Turn subtitles on",children:t(be,{name:"closed-captioning"})}),t("button",{className:`${o.controlBtn} ${R?o.active:""}`,onClick:()=>R?B():x(),"aria-label":"Settings",children:t(be,{name:"cog"})}),t("button",{className:`${o.controlBtn} ${w?o.active:""}`,onClick:J=>{J.stopPropagation(),b()},title:w?"Exit Theater Mode":"Theater Mode","aria-label":w?"Exit Theater Mode":"Theater Mode",children:t(be,{name:"tv"})}),t(Yr,{className:o.controlBtn})]})]})]})})},Zt=-6e4,Bn=6e4,nr=500,ka=({classes:s,delayMs:d,onDelayChange:R})=>{const[x,B]=v(null),k=x??d,r=z(R);r.current=R;const p=z(d);p.current=d;const a=z(null);a.current=x,f(()=>{B(null)},[d]),f(()=>()=>{const w=a.current;w!==null&&w!==p.current&&r.current(w)},[]);const S=w=>{p.current=w,a.current=null,r.current(w),B(null)},V=w=>{const b=a.current??p.current,H=Math.max(Zt,Math.min(Bn,b+w));S(H)};return t(Ve,{children:[t("div",{style:{display:"flex",gap:6,padding:"0.5rem 0.75rem 0.25rem"},children:[t("button",{type:"button",className:s.item,onClick:()=>V(-nr),"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:()=>V(nr),"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:()=>S(0),disabled:k===0,"aria-label":"Reset subtitle timing",style:{flex:1,justifyContent:"center"},children:t("span",{children:"Reset"})})]}),t(Jr,{label:"Subtitle timing",display:sr(k),min:Zt,max:Bn,step:100,value:k,percent:(k-Zt)/(Bn-Zt)*100,onChange:w=>{const b=Math.round(w);a.current=b,B(b)},onCommit:()=>{const w=a.current;w!==null&&S(w)}}),t("div",{className:s.note,children:"Positive delays subtitles (show later). Negative shows them earlier. 0.0s is default."})]})},Ea=({view:s,onSelectView:d,onClose:R,player:x,onSubtitleStyleChange:B,streams:k,resolutionIdx:r,onResolutionChange:p,hasSubtitles:a,subtitles:S,selectedSubtitle:V,isSubtitleActive:w,onSubtitleChange:b,audioTracks:H,selectedAudioTrack:_,onAudioTrackChange:we,videoDelayEnabled:K,onVideoDelayToggle:J,videoDelayMs:qe,onVideoDelayChange:Fe,onCalibrate:je,subtitleDelayMs:Ge,onSubtitleDelayChange:ct,ambientSettings:he,onAmbientChange:Y})=>{const{state:ae}=x,Qe=()=>t(Ve,{children:[k.length>1&&t("button",{className:o.menuItem,onClick:()=>d("resolution"),children:[t("span",{children:"Resolution"}),t("span",{className:o.currentValue,children:k[r]?.quality||"Auto"})]}),a&&t("button",{className:o.menuItem,onClick:()=>d("subtitles"),children:[t("span",{children:"Subtitles"}),t("span",{className:o.currentValue,children:w?S[V]?.label||S[V]?.language:"Off"})]}),a&&t("button",{className:o.menuItem,onClick:()=>d("subtitle-style"),children:[t("span",{children:"Subtitle Style"}),t("span",{className:o.currentValue,children:[ae.subtitleFontSize.toFixed(1),"x · ",ae.subtitlePosition]})]}),a&&t("button",{className:o.menuItem,onClick:()=>d("subtitle-timing"),children:[t("span",{children:"Subtitle Timing"}),t("span",{className:o.currentValue,children:sr(Ge)})]}),H.length>0&&t("button",{className:o.menuItem,onClick:()=>d("audio"),children:[t("span",{children:"Audio Track"}),t("span",{className:o.currentValue,children:H[_]?.label||H[_]?.language})]}),t("button",{className:o.menuItem,onClick:()=>d("av-sync"),children:[t("span",{children:"A/V Sync"}),t("span",{className:o.currentValue,children:K?`${qe}ms`:"Off"})]}),he&&Y&&t("button",{className:o.menuItem,onClick:()=>d("ambient"),children:[t("span",{children:"Ambient Light"}),t("span",{className:o.currentValue,children:he.enabled?"On":"Off"})]})]}),Se=()=>t(Ln,{classes:{item:o.menuItem,active:o.active},options:k.map((N,F)=>({key:String(F),label:N.quality,selected:F===r})),onSelect:N=>p(Number(N))}),q=()=>t(Ln,{classes:{item:o.menuItem,active:o.active},options:[{key:"off",label:"Off",selected:!w},...S.map((N,F)=>({key:String(F),label:N.label||N.language,selected:F===V}))],onSelect:N=>b(N==="off"?-1:Number(N))}),_e=()=>t(Cs,{classes:{item:o.menuItem,active:o.active},values:{fontSize:ae.subtitleFontSize,position:ae.subtitlePosition,bgOpacity:ae.subtitleBgOpacity,bgColor:ae.subtitleBgColor,textColor:ae.subtitleTextColor,edge:ae.subtitleEdge,bold:ae.subtitleBold},onChange:B}),te=()=>t(ka,{classes:{item:o.menuItem,active:o.active,note:o.menuNote},delayMs:Ge,onDelayChange:N=>ct?.(N)}),Ne=()=>t(Ln,{classes:{item:o.menuItem,active:o.active},options:H.map((N,F)=>({key:String(F),label:N.label||N.language,selected:F===_})),onSelect:N=>we(Number(N))}),Me=()=>t(ks,{classes:{item:o.menuItem,active:o.active,note:o.menuNote},enabled:K,delayMs:qe,onToggle:N=>J?.(N),onDelayChange:N=>Fe?.(N),onCalibrate:je}),ge=()=>he&&Y?t(Es,{classes:{item:o.menuItem,active:o.active,note:o.menuNote},values:he,onChange:Y}):null;return t("div",{"data-speed-boost-ignore":"true",onClick:N=>N.stopPropagation(),children:t(Ts,{classes:{panel:o.settingsPanel,header:o.settingsHeader,backBtn:o.settingsBackBtn,title:o.settingsTitle,content:o.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"?R():d("main"),children:[s==="main"&&Qe(),s==="resolution"&&Se(),s==="subtitles"&&q(),s==="subtitle-style"&&_e(),s==="subtitle-timing"&&te(),s==="audio"&&Ne(),s==="av-sync"&&Me(),s==="ambient"&&ge()]})})},Na=({player:s,title:d,episodeLabel:R,audioTracks:x,selectedAudioTrack:B,onAudioTrackChange:k,subtitles:r,selectedSubtitle:p,onSubtitleChange:a,streams:S,resolutionIdx:V,onResolutionChange:w,onBack:b,children:H,videoDelayEnabled:_=!1,onVideoDelayToggle:we,videoDelayMs:K=0,onVideoDelayChange:J,onCalibrateAvSync:qe,subtitleDelayMs:Fe=0,onSubtitleDelayChange:je,showNextEpisodeButton:Ge=!1,onNextEpisode:ct,isLoading:he=!1,isTheaterMode:Y,onTheaterModeToggle:ae,ambientSettings:Qe,onAmbientChange:Se})=>{const{state:q,refs:_e,actions:te}=s,Ne=_e.videoRef,{subtitleFontSize:Me,subtitlePosition:ge,subtitleBgOpacity:N,subtitleBgColor:F,subtitleTextColor:Xe,subtitleEdge:oe,subtitleBold:Ie}=q,[Te,xe]=v(null),Je=z(null),[Et,ut]=v(0);f(()=>{const Le=Ne.current;if(!Le)return;const fe=()=>ut(Le.clientHeight||0);fe();const j=new ResizeObserver(fe);return j.observe(Le),()=>j.disconnect()},[Ne]);const Ue=te.setSubtitleStyle;f(()=>{const Le="tv-player-subtitle-style";let fe=document.getElementById(Le);fe||(fe=document.createElement("style"),fe.id=Le,document.head.appendChild(fe));const j={fontSize:Me,position:ge,bgOpacity:N,bgColor:F,textColor:Xe,edge:oe,bold:Ie},ne=Ne.current,He=Pn(Me,Et||ne?.clientHeight||720);if(fe.textContent=Zr({...j,fontSize:He}),ne){const ht=()=>{const A=Number(ge);return isNaN(A)?0:Math.max(0,Math.min(100,A))},et=(A,G)=>{try{const Z=A;Z.snapToLines=!1,Z.line=G}catch{}},xt=()=>{const A=He*16,G=ne.videoHeight||ne.clientHeight||720,Z=ne.videoWidth||ne.clientWidth||1280;return{step:A*1.3/G*100,chars:Math.max(20,Math.floor(Z/(A*.55)))}},tt=A=>{const G=Math.max(0,Math.min(100,100-ht())),Z=Array.from(A.activeCues??[]);if(Z.length<=1){Z.forEach(Q=>et(Q,G));return}const{step:At,chars:Lt}=xt();let Bt=G;for(let Q=Z.length-1;Q>=0;Q--){const nn=String(Z[Q].text??"").replace(/<[^>]*>/g,"").split(`
|
|
2
|
-
`).reduce((rn,sn)=>rn+Math.max(1,Math.ceil(sn.length/Lt)),0),wt=Bt-nn*At;et(Z[Q],Math.max(0,wt)),Bt=wt-At*.4}},m=()=>{const A=Math.max(0,Math.min(100,100-ht()));Array.from(ne.textTracks).forEach(G=>{G.cues&&(Array.from(G.cues).forEach(Z=>et(Z,A)),G.mode==="showing"&&tt(G))})};m();const l=A=>{const G=A.target;G.mode==="showing"&&tt(G)},ue=()=>{Array.from(ne.textTracks).forEach(A=>{A.removeEventListener("cuechange",l),A.addEventListener("cuechange",l)}),m()};Array.from(ne.textTracks).forEach(A=>{A.addEventListener("cuechange",l)}),ne.textTracks.addEventListener("addtrack",ue);const ie=Array.from(ne.querySelectorAll("track")),gt=()=>m();return ie.forEach(A=>A.addEventListener("load",gt)),()=>{Array.from(ne.textTracks).forEach(A=>{A.removeEventListener("cuechange",l)}),ne.textTracks.removeEventListener("addtrack",ue),ie.forEach(A=>A.removeEventListener("load",gt))}}},[Me,ge,N,F,Xe,oe,Ie,p,r,Ne,Et]);const ce=r.length>0,dt=p>=0,mt=()=>{xe("main"),te.setShowControls(!0)},I=()=>{xe(null)},Ze=q.showControls||!!Te,Nt=t(ns,{visible:Ze,title:d,episode:R,onBack:b,classes:{overlay:o.controlsOverlay,hidden:o.hidden,top:o.topControls,backBtn:o.backBtn,titleInfo:o.videoTitleInfo,title:o.animeTitle,episode:o.episodeLabel}}),Ae=!he&&!q.isBuffering&&q.duration>0?t(es,{}):null,It=t(Ca,{player:s,visible:Ze,settingsOpen:!!Te,onOpenSettings:mt,onCloseSettings:I,hasSubtitles:ce,isSubtitleActive:dt,subtitles:r,onSubtitleChange:a,showNextEpisodeButton:Ge,onNextEpisode:ct,isTheaterMode:Y,onTheaterModeToggle:ae,timeLabelRef:Je}),en=Te?t(Ea,{view:Te,onSelectView:xe,onClose:I,player:s,onSubtitleStyleChange:Ue,streams:S,resolutionIdx:V,onResolutionChange:w,hasSubtitles:ce,subtitles:r,selectedSubtitle:p,isSubtitleActive:dt,onSubtitleChange:a,audioTracks:x,selectedAudioTrack:B,onAudioTrackChange:k,videoDelayEnabled:_,onVideoDelayToggle:we,videoDelayMs:K,onVideoDelayChange:J,onCalibrate:()=>{xe(null),qe?.()},subtitleDelayMs:Fe,onSubtitleDelayChange:je,ambientSettings:Qe,onAmbientChange:Se}):null,bt=t(Ve,{children:[he&&t("div",{className:o.loadingOverlay,"aria-hidden":"true",children:t("div",{className:o.loadingDots,children:[t("div",{className:o.dot}),t("div",{className:o.dot}),t("div",{className:o.dot})]})}),q.isBuffering&&!he&&t("div",{className:o.bufferingOverlay,"aria-hidden":"true",children:t("div",{className:o.bufferingSpinner})}),q.isSpeedBoostActive&&t("div",{className:o.speedBoostBadge,"aria-hidden":"true",children:[t("span",{children:"2x"}),t(be,{name:"forward",size:12})]})]});return t(ts,{engine:s.engine,topBar:Nt,centerControls:Ae,bottomBar:!he&&q.duration>0?It:null,settingsPanel:en,overlays:bt,isInteracting:!!Te||q.showVolumeSlider,nativeControls:q.useNativeControls,onStageClick:I,className:q.isFullscreen?o.fullscreenFlat:"",children:H})},Ia=({servers:s,selectedServer:d,onServerSelect:R})=>s.length===0?null:t("div",{className:Jt.sourceSelectionContainer,children:[t("h4",{children:"Source"}),t("div",{className:Jt.sourceButtons,children:s.map(x=>t("button",{className:`${Jt.sourceButton} ${d===x?Jt.active:""}`,onClick:()=>R(x),children:x},x))})]}),xa=Vr.memo(Ia);function Aa({details:s,isMovie:d,season:R,episode:x,videoRef:B,active:k}){const r=z("");r.current||(r.current=`tv-${Date.now()}-${Math.random().toString(36).slice(2)}`);const p=C(()=>{if(!s)return;const a=B.current,S=d?"":`S${String(R).padStart(2,"0")}E${String(x).padStart(2,"0")}`;lt.discord.tvPresence.mutate({title:s.title,episodeLabel:S,isPlaying:a?!a.paused&&!a.ended:!0,thumbnail:s.poster,currentTime:a?a.currentTime:0,duration:a&&a.duration||0,isAdult:s.adult===!0,sessionId:r.current}).catch(()=>{}),lt.discord.heartbeat.mutate({sessionId:r.current}).catch(()=>{})},[s,d,R,x,B]);return f(()=>{if(!s)return;p();const a=window.setInterval(()=>{const S=B.current;(!S||!S.paused)&&p()},15e3);return()=>window.clearInterval(a)},[p,s,B]),f(()=>{if(!s||!k)return;const a=B.current;if(!a)return;const S=()=>p();return a.addEventListener("play",S),a.addEventListener("pause",S),a.addEventListener("seeked",S),()=>{a.removeEventListener("play",S),a.removeEventListener("pause",S),a.removeEventListener("seeked",S)}},[s,k,p,B]),f(()=>{const a=r.current,S=()=>Qr(a),V=()=>S();return window.addEventListener("pagehide",V),window.addEventListener("beforeunload",V),()=>{window.removeEventListener("pagehide",V),window.removeEventListener("beforeunload",V),S()}},[]),{sendPresence:p}}function La(s,d,R){const x=()=>{const k=Array.isArray(s.audioTracks)?s.audioTracks.length:0,r=R.getWant(),p=k>0?Math.min(Math.max(0,r),k-1):r;s.audioTrack=p,p!==r&&R.onResolve(p)},B=(k,r)=>{const p=R.getWant(),a=Array.isArray(s.audioTracks)?s.audioTracks.length:0;if(r.id!==p&&p>=0&&p<a){s.audioTrack!==p&&(s.audioTrack=p);return}R.onResolve(r.id)};return s.on(d.MANIFEST_PARSED,x),s.on(d.AUDIO_TRACK_SWITCHED,B),()=>{s.off(d.MANIFEST_PARSED,x),s.off(d.AUDIO_TRACK_SWITCHED,B)}}const Ba=/\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 wa(){try{if(Ba.test(navigator.userAgent||""))return!0;const s=navigator.deviceMemory;if(typeof s=="number"&&s>0&&s<2)return!0}catch{}return!1}const Ma="_statusMsg_zqb8u_1",Pa="_error_zqb8u_7",Ra="_spinner_zqb8u_11",za="_spin_zqb8u_11",$a="_sourceLoader_zqb8u_16",Da="_ringSpinner_zqb8u_22",Oa="_meta_zqb8u_40",Va="_year_zqb8u_48",qa="_rating_zqb8u_53",Fa="_typeBadge_zqb8u_62",Ua="_tv_zqb8u_70",Ha="_movie_zqb8u_75",Wa="_controlLabel_zqb8u_80",Ka="_select_zqb8u_90",Ya="_playerSection_zqb8u_102",ja="_video_zqb8u_106",Ga="_videoHidden_zqb8u_128",Qa="_delayCanvas_zqb8u_133",Xa="_delayCanvasActive_zqb8u_146",Ja="_subtitleOverlay_zqb8u_150",Za="_videoIframe_zqb8u_169",eo="_retryButton_zqb8u_177",to="_sidebarSeason_zqb8u_192",no="_mobileSeasonRow_zqb8u_208",ro="_providerSelectWrap_zqb8u_222",so="_genreRow_zqb8u_230",ao="_genreChip_zqb8u_237",oo="_metaRow_zqb8u_247",io="_detailGrid_zqb8u_256",lo="_detailItem_zqb8u_264",co="_imdbLink_zqb8u_286",h={statusMsg:Ma,error:Pa,spinner:Ra,spin:za,sourceLoader:$a,ringSpinner:Da,meta:Oa,year:Va,rating:qa,typeBadge:Fa,tv:Ua,movie:Ha,controlLabel:Wa,select:Ka,playerSection:Ya,video:ja,videoHidden:Ga,delayCanvas:Qa,delayCanvasActive:Xa,subtitleOverlay:Ja,videoIframe:Za,retryButton:eo,sidebarSeason:to,mobileSeasonRow:no,providerSelectWrap:ro,genreRow:so,genreChip:ao,metaRow:oo,detailGrid:io,detailItem:lo,imdbLink:co},uo=[],mo=[];function rr({error:s,onRetry:d}){return t("div",{className:`${h.statusMsg} ${h.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:h.retryButton,onClick:d,children:"Retry"})]})})}const Io=()=>{const{id:s}=qr(),[d]=Fr(),R=z(d);R.current=d;const x=Ur(),B=Gr(),k=d.get("type"),[r,p]=v(null),[a,S]=v(()=>parseInt(d.get("s")||"1",10)||1),[V,w]=v([]),[b,H]=v(()=>parseInt(d.get("e")||"1",10)||1),[_,we]=v(()=>{try{return localStorage.getItem("tvProvider")||""}catch{return""}}),[K,J]=v([]),[qe,Fe]=v(""),{options:je,isFallback:Ge,isLoading:ct}=Is(),he=ye(()=>je.filter(e=>(e.kind??"tv")==="tv").map(e=>({id:e.id,label:e.label,tier:e.tier==="embed"?"embed":"direct",servers:e.servers})),[je]),Y=Ge||he.length===0?uo:he,ae=Y.filter(e=>e.tier==="direct"),Qe=Y.filter(e=>e.tier==="embed"),[Se,q]=v(!1),[_e,te]=v(""),[Ne,Me]=v([]),[ge,N]=v(0),[F,Xe]=v([]),[oe,Ie]=v(-1),[Te,xe]=v(0),[Je,Et]=v(""),[ut,Ue]=v(""),[ce,dt]=v(()=>{try{return localStorage.getItem("tvServer")||""}catch{return""}}),mt=ye(()=>Y.find(e=>e.id===_),[Y,_]),I=mt?.tier==="embed",[Ze,Nt]=v([]),[Ae,It]=v(""),[en,bt]=v(""),[Le,fe]=v(!1),j=ye(()=>Ze.length>0?Ze:mt?.servers??[],[Ze,mt]),ne=ye(()=>Ae?["Embed",...j]:j,[j,Ae]),He=Le&&!!Ae,ht=He?en||Ae:"";f(()=>{if(!Ae){bt("");return}let e=!1;return xn(`/api/resolve?url=${encodeURIComponent(Ae)}`).then(n=>{!e&&n.finalUrl&&bt(n.finalUrl)}).catch(()=>{}),()=>{e=!0}},[Ae]);const et=z([]);f(()=>{et.current=K},[K]);const xt=z(ge);f(()=>{xt.current=ge},[ge]);const tt=z(oe);f(()=>{tt.current=oe},[oe]);const m=rs({skipIntervals:mo}),l=m.refs.videoRef,ue=z(null),ie=z([]),gt=z(null),A=z(null),{videoDelayMs:G,videoDelayEnabled:Z,setDelayEnabled:At,handleVideoDelayChange:Lt,isCalibrating:Bt,testClipActive:Q,stopCalibration:tn,openAvSyncCalibrator:nn,cancelAvSyncCalibrator:wt,applyAvSyncCalibrator:rn,toggleTestClip:sn,calibReturnRef:Mt,effectiveVideoDelayMs:an}=ss(l),[nt,ar]=v(()=>{try{const e=Number(localStorage.getItem("tvSubtitleDelayMs"));if(Number.isFinite(e)&&e>=-6e4&&e<=6e4)return Math.round(e)}catch{}return 0}),on=z(nt);on.current=nt;const or=C(e=>{const n=Math.max(-6e4,Math.min(6e4,Math.round(e)));if(on.current!==n){on.current=n,ar(n);try{localStorage.setItem("tvSubtitleDelayMs",String(n))}catch{}}},[]);as({videoRef:l,canvasRef:gt,delayMs:an,enabled:Z});const ln=Z,pe=ln||nt!==0,{settings:cn,update:ir}=os(),un=z(pe);un.current=pe;const dn=C(()=>{if(!un.current)return;const e=l.current;e&&Array.from(e.textTracks).forEach(n=>{n.mode!=="hidden"&&(n.mode="hidden")})},[l]),{hasConsent:ft,grant:lr}=Xr(),g=k==="movie";Aa({details:r,isMovie:g,season:a,episode:b,videoRef:l,active:!I&&!Se&&!_e&&K.length>0});const Pt=s?xs(k||"tv",s):"",W=Pt,Rn=As(),Rt=Ls(),zt=Bs(),{toggle:zn,bookmarkedIds:cr,pending:ur}=ws(),{data:$n}=Ms(r?Pt:void 0),pt=$n?!!$n.inLibrary:Pt?cr.has(Pt):!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:$t,isFetched:Dn}=Ps(W||void 0,a,b),Dt=ye(()=>V.map(e=>e.episode_number).sort((e,n)=>e-n),[V]),vt=Dt.indexOf(b),mn=vt>0?Dt[vt-1]:null,$=vt>=0&&vt<Dt.length-1?Dt[vt+1]:null,Ot=ye(()=>(r?.seasons??[]).map(e=>e.season_number).filter(e=>Number.isFinite(e)).sort((e,n)=>e-n),[r]),Pe=ye(()=>{if(g||$!=null)return null;const e=Ot.indexOf(a);return e>=0&&e<Ot.length-1?Ot[e+1]:(r?.number_of_seasons??0)>a?a+1:null},[g,$,Ot,a,r?.number_of_seasons]),mr=$t?.currentTime??0,bn=z(null),[Re,Vt]=v(!1),[rt,On]=v(0),[yt,Vn]=v(!1),[st,at]=v(!1),[br,hn]=v(!1),[hr,gr]=v(""),[qt,fr]=v(!1),[pr,gn]=v(!1),{isTheaterMode:Be,toggleTheaterMode:fn,handleLayoutClick:vr}=is();f(()=>{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"&&fn()};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[fn]),ls(m,(K.length>0||ut!=="")&&!Be&&!Re&&!st);const yr=Ds(),[ot,Sr]=v(zs),_r=C(e=>{Sr(e),$s(e)},[]),ze=z(!1),We=z(null),pn=z(0),X=z(null),St=z(""),Tr=tr(mr),_t=!ze.current&&(Re||st||Tr),Ft=z(_t);Ft.current=_t;const Ut=z(!1);f(()=>{Ut.current=yt},[yt]);const $e=C((e,n)=>{if(!W||!n||n<30)return;const i=er(e,n);Math.abs(e-pn.current)<10&&!i||(pn.current=e,Rn.mutate({mediaId:W,season:a,episode:b,currentTime:Math.floor(e),duration:Math.floor(n),completed:i,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}))},[W,a,b,Rn,r,k]),Ce=C((e,n)=>{tn();const i=new URLSearchParams(d);i.set("type",d.get("type")||"tv"),i.set("s",String(e)),i.set("e",String(n)),x(`${window.location.pathname}?${i.toString()}`)},[d,x,tn]),Tt=C(()=>{const e=l.current;if(!e||g||$==null){hn(!1);return}const n=e.duration||0,i=e.currentTime||0;hn(n>0&&i/n>=.8)},[g,$,l]),Ht=C((e,n)=>["tv-sources",_,g?"movie":"tv",s,e,n,ce],[_,g,s,ce]),Wt=C(async(e,n)=>{if(!r||!s||!_)return{valid:!1,sources:[]};const i=g?"movie":"tv",c=await lt.tv.sources.query({provider:_,type:i,tmdbId:String(s),season:e,episode:n,title:r.title||"",year:r.year||"",totalSeasons:String(r.number_of_seasons||1),imdbId:r.imdb_id||"",...j.length>0&&ce?{server:ce}:{}});return{valid:"valid"in c?c.valid:!1,error:"error"in c?c.error:void 0,sources:c.sources,referer:"referer"in c?c.referer:void 0,audioTracks:c.audioTracks,subtitles:"subtitles"in c?c.subtitles:void 0,servers:"servers"in c?c.servers:void 0,embedUrl:"embedUrl"in c?c.embedUrl:void 0}},[r,s,_,g,j,ce]),qn=C(()=>{if(g||!r||!s||!_||I||$==null)return;const e=Ht(a,$);B.getQueryState(e)?.status!=="success"&&B.prefetchQuery({queryKey:e,queryFn:()=>Wt(a,$),staleTime:300*1e3,gcTime:1800*1e3})},[g,r,s,_,I,$,a,B,Ht,Wt]),Cr=C(()=>{if(Q)return;Tt();const e=l.current;!e||e.paused||e.ended||(e.duration>0&&e.duration-e.currentTime<=60&&qn(),We.current&&clearTimeout(We.current),We.current=setTimeout(()=>{$e(e.currentTime,e.duration||0)},5e3))},[$e,l,Q,Tt,qn]),kr=C(()=>{const e=l.current;if(!(!e||!r)){if(We.current&&clearTimeout(We.current),$e(e.currentTime,e.duration||0),$!=null){ot&&(H($),Ce(a,$));return}gr(g?r.title:`${r.title} - Season ${a}`),at(!0),ze.current=!0}},[g,r,a,$,ot,$e,Ce,l]),{checkEnd:Kt,logDuration:Fn}=cs({videoRef:l,sourceType:I?"iframe":void 0,resetKey:`${W}:${a}:${b}`,onEnd:kr}),Er=C(()=>{m.actions.onPlay()},[m.actions]),Nr=C(()=>{m.actions.onPause();const e=l.current;e&&!e.ended&&$e(e.currentTime,e.duration||0)},[m.actions,$e,l]),Ir=C(()=>{const e=l.current;if(e){try{const n=parseFloat(localStorage.getItem("playerVolume")||"");isNaN(n)||(e.volume=Math.max(0,Math.min(1,n))),e.muted=localStorage.getItem("playerMuted")==="true"}catch{}if(X.current!=null&&X.current>0){try{e.currentTime=X.current}catch{}X.current=null}Tt()}},[l,Tt]),vn=C(()=>{const e=l.current;if(e&&X.current!=null&&X.current>0){try{e.currentTime=X.current}catch{}X.current=null}},[l]),xr=C(()=>{rt>0&&(X.current=rt);const e=l.current;if(e&&rt>0){try{e.currentTime=rt,X.current=null}catch{}e.play().catch(()=>{})}Vt(!1),ze.current=!0},[rt,l]),Un=C(()=>{X.current=null;const e=l.current;e&&(e.currentTime=0,e.play().catch(()=>{})),Vt(!1),ze.current=!0},[l]),Ar=C(()=>{$!=null&&(ze.current=!0,H($),Ce(a,$))},[$,a,Ce]),Lr=C(()=>{Pe!=null&&(at(!1),ze.current=!0,S(Pe),H(1),Ce(Pe,1))},[Pe,Ce]),Br=C(async()=>{if(W)try{pt?await Rt.mutateAsync({id:W,status:"Completed"}):r&&s&&(await zt.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}),Zn.success("Moved to Completed")),at(!1),x("/")}catch{}},[W,pt,Rt,zt,r,s,k,x]);f(()=>{ze.current=!1,bn.current=null,Vt(!1),hn(!1),On(0),Vn(!1),Ut.current=!1,X.current=null,St.current=`${W}:${a}:${b}`,pn.current=0},[W,a,b]),f(()=>{Dn&&(Vn(!0),Ut.current=!0)},[Dn,W,a,b]),f(()=>{if(!$t||ze.current)return;const e=`${W}:${a}:${b}`;if(bn.current===e)return;bn.current=e;const i=$t.currentTime??0;tr(i)&&(On(i),Vt(!0))},[$t,W,a,b]),f(()=>{Re&&l.current&&l.current.pause()},[Re,l]),f(()=>{const e=l.current;return()=>{We.current&&clearTimeout(We.current),!e?.ended&&m.engine.getState().duration>0&&$e(m.engine.getTimeline().currentTime,m.engine.getState().duration)}},[m.engine,$e,l]);const yn=C(e=>{let n=null,i=!0;try{n=localStorage.getItem("tvLastSubtitle"),i=localStorage.getItem("tvSubtitlesEnabled")!=="false"}catch{}return Mn(e,{lastKey:n,enabled:i})},[]),Sn=C(e=>{if(!(e<0))try{localStorage.setItem("tvSubtitlesEnabled","true"),localStorage.setItem("tvSelectedSubtitle",String(e))}catch{}},[]),Hn=C(e=>{if(e.length===0)return 0;let n=null;try{n=localStorage.getItem("tvLastAudio")}catch{}if(n){const i=e.findIndex(ee=>An(ee)===n);if(i>=0)return i;const c=n.indexOf("|||"),u=c>=0?n.slice(0,c):n,E=c>=0?n.slice(c+3):n,M=e.findIndex(ee=>ee.language===u||ee.label===E);if(M>=0)return M}return Mn(e,{lastKey:null,enabled:!0})},[]),{data:Wn}=Rs(W||void 0),Kn=ye(()=>(Wn?.progress??[]).filter(n=>n.season===a&&(n.completed===1||n.completed===1||er(n.currentTime,n.duration))).map(n=>String(n.episode)),[Wn,a]),Yn=ye(()=>V.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})),[V]),jn=ye(()=>(r?.genres??[]).map(e=>e.name).slice(0,5),[r]),_n=ye(()=>[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]);f(()=>{if(Y.length!==0&&!Y.some(e=>e.id===_)){const e=Y.find(n=>n.tier==="direct")?.id??Y[0].id;we(e);try{localStorage.setItem("tvProvider",e)}catch{}}},[Y,_]),f(()=>{Nt([]),It(""),bt(""),fe(!1)},[_]),f(()=>{if(j.length!==0&&!j.includes(ce)){dt(j[0]);try{localStorage.setItem("tvServer",j[0])}catch{}}},[j,ce]),f(()=>{if(!s){p(null),J([]),Fe(""),te(""),Ue("");return}const e=Number(s),n=k||"tv";p(null),J([]),Fe(""),te(""),Ue("");const i=parseInt(R.current.get("s")||"",10),c=parseInt(R.current.get("e")||"",10);S(isNaN(i)?1:i),H(isNaN(c)?1:c),xe(0),lt.tv.details.query({type:n,id:String(e)}).then(u=>{const E={id:u.id,title:u.title||"",overview:u.overview||"",vote_average:u.vote_average,year:u.year,poster:u.poster,backdrop:u.backdrop,imdb_id:u.imdb_id||void 0,adult:u.adult,seasons:u.seasons,number_of_seasons:u.number_of_seasons};p(E),E.seasons&&E.seasons.length>0&&isNaN(i)&&S(E.seasons[0].season_number)}).catch(()=>{})},[s,k]),f(()=>{if(!r||!s)return;if(!(r.seasons!==void 0||r.number_of_seasons!==void 0)){w([]);return}const n=parseInt(d.get("e")||"",10);lt.tv.episodes.query({id:String(s),season:String(a)}).then(i=>{const c=(i.episodes||[]).map(u=>({episode_number:u.episode_number,name:u.name||"",vote_average:u.vote_average,overview:u.overview||"",still_path:u.still_path||""}));w(c),c.length!==0&&H(u=>!isNaN(n)&&c.some(E=>E.episode_number===n)?n:c.some(E=>E.episode_number===u)?u:c[0].episode_number)}).catch(()=>{})},[r,s,a,d]),f(()=>{if(!I||!r||!s)return;xn(`/api/tv/embed/${_}/${g?"movie":"tv"}/${s}?season=${a}&episode=${b}`).then(n=>{if(n.url)return Ue(n.url),xn(`/api/resolve?url=${encodeURIComponent(n.url)}`).then(i=>{i.finalUrl&&Ue(i.finalUrl)})}).catch(()=>{})},[_,r,s,a,b,g,I]);const Yt=C(async()=>{if(!r||!s||!_||I||r.adult&&!ft)return;const e=`${W}:${a}:${b}`;q(!0),te(""),et.current.length===0&&(J([]),xe(0),Me([]),Xe([]));try{const n=await B.fetchQuery({queryKey:Ht(a,b),queryFn:()=>Wt(a,b),staleTime:3e5,gcTime:18e5});if(St.current!==e){q(!1);return}if(q(!1),!n.valid||!n.sources?.length){te(n.error?`${n.error}`:j.length>0?`No streams from ${ce}. Try another server.`:"No streams available.");return}J(n.sources),Fe(e),n.servers?.length&&Nt(n.servers),n.embedUrl&&It(n.embedUrl),xe(0),n.referer&&Et(n.referer);const i=n.audioTracks||[];Me(i),N(i.length>0?Hn(i):0);const c=n.subtitles||[];if(Xe(c),c.length>0){const M=yn(c);Ie(M),Sn(M)}else Ie(-1);const u=g?"movie":"tv",E=s;lt.tv.subtitles.query({type:u,tmdbId:String(E),season:String(a),episode:String(b)}).then(M=>{if(St.current!==e)return;const ee=Array.isArray(M.subtitles)?M.subtitles:[];ee.length!==0&&Xe(de=>{const y=[...de,...ee.filter(U=>!de.some(re=>re.url===U.url))];if(de.length===0){const U=yn(y);Ie(U),Sn(U)}return y})}).catch(()=>{}),te("")}catch(n){if(St.current!==e)return;q(!1),te(n instanceof Error?n.message:"Failed to load streams.")}},[r,s,_,a,b,g,I,ft,j,ce,yn,Sn,Hn,W,B,Ht,Wt]),Tn=C(()=>{const e=l.current;e&&!isNaN(e.currentTime)&&(X.current=e.currentTime)},[l]),wr=C(e=>{if(e==="Embed"){fe(!0);return}Tn(),fe(!1),dt(e);try{localStorage.setItem("tvServer",e)}catch{}te("")},[Tn]),Mr=C(e=>{we(e);try{localStorage.setItem("tvProvider",e)}catch{}},[]);f(()=>{_&&r&&!I&&Yt()},[_,r,Yt,I]),f(()=>{if(!l.current)return;if(ue.current=null,I||He){m.engine.unload();return}if(Q)return m.engine.loadSource({url:"/av-sync-test.mp4"},{autoPlay:!Ft.current});if(Mt.current!=null&&(X.current=Mt.current,Mt.current=null),St.current===`${W}:${a}:${b}`&&X.current==null&&!Ft.current)try{const y=l.current;y&&!y.ended&&y.currentTime>1&&(X.current=y.currentTime)}catch{}const n=X.current??0,i=!Se&&qe===`${W}:${a}:${b}`?He?"":K[Te]?.url||"":"";if(!i){try{l.current?.pause(),l.current?.removeAttribute("src"),l.current?.load()}catch{}return}const c=l.current;c.pause(),c.removeAttribute("src"),c.load(),m.actions.resetMediaState();const u=`/api/tv/stream-proxy?url=${encodeURIComponent(i)}&referer=${encodeURIComponent(Je)}&provider=${encodeURIComponent(_)}`,E=wa()||document.body.classList.contains("low-end"),M=E?60:180,ee=m.engine.loadSource({url:u,hls:K[Te]?.type==="hls"},{hlsConfig:{enableWorker:!0,lowLatencyMode:!1,startPosition:n>0?n:-1,maxBufferLength:M,maxMaxBufferLength:M+(E?30:60),backBufferLength:E?30:60,maxBufferSize:(E?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:(y,U)=>{ue.current=y;const re=()=>{let P=!1,L=0;try{P=localStorage.getItem("tvSubtitlesEnabled")==="true";const T=parseInt(localStorage.getItem("tvSelectedSubtitle")||"0",10);!isNaN(T)&&T>=0&&(L=T)}catch{}return{enabled:P,index:L}},D=()=>{if(typeof y.subtitleTrack!="number")return;if(ie.current.length>0){y.subtitleTrack=-1;return}const P=Array.isArray(y.subtitleTracks)?y.subtitleTracks:[];if(P.length===0){y.subtitleTrack=-1;return}const L=re();if(L.enabled){const T=L.index<P.length?L.index:0;y.subtitleTrack=T,Ie(T),dn()}else y.subtitleTrack=-1};La(y,U.Events,{getWant:()=>xt.current,onResolve:P=>N(P)}),y.on(U.Events.MANIFEST_PARSED,D),y.on(U.Events.SUBTITLE_TRACKS_UPDATED,()=>{D()}),y.on(U.Events.SUBTITLE_TRACK_SWITCH,(P,L)=>{if(ie.current.length>0){if(L.id!==-1)try{y.subtitleTrack=-1}catch{}return}const T=Array.isArray(y.subtitleTracks)?y.subtitleTracks:[];if(T.length!==0){if(L.id===-1){const ve=re();if(ve.enabled){const se=ve.index<T.length?ve.index:0;y.subtitleTrack=se;return}}Ie(L.id),dn()}})},onReady:()=>{(n>0||!Ft.current&&Ut.current)&&m.engine.play()},onError:y=>{te(y.message),q(!1),ue.current=null}}),de=()=>{const re=c.error?.code===4?"Video source not supported or not found":"Failed to load video stream";te(`${re}. The source may be invalid or expired. Try switching source or reloading.`),q(!1)};return c.addEventListener("error",de),()=>{ee(),ue.current=null,c.removeEventListener("error",de)}},[K,qe,Se,Te,_,Je,I,He,l,Mt,Q,W,a,b,vn,dn,m.actions,m.engine]),f(()=>{if(!yt||Re||st||_t||I||Q)return;const e=l.current;!e||!e.paused||e.ended||e.readyState<1||(vn(),e.play().catch(()=>{}))},[yt,Re,st,_t,I,Q,vn,l]),f(()=>{const e=ue.current;!e||typeof e.audioTrack!="number"||(e.audioTrack=ge)},[ge]),f(()=>{const e=ue.current;!e||typeof e.subtitleTrack!="number"||!Array.isArray(e.subtitleTracks)||e.subtitleTracks.length===0||ie.current.length>0||(oe>=0?e.subtitleTrack=oe:e.subtitleTrack=-1)},[oe]),f(()=>{const e=l.current;if(!(!e||I)&&(e.querySelectorAll("track").forEach(n=>n.remove()),ie.current=[],F.length!==0&&(F.forEach(n=>{const i=document.createElement("track");i.kind="subtitles",i.label=n.label||n.language||"Unknown",i.srclang=n.language||n.label||"en";const c=`/api/subtitle-proxy?url=${encodeURIComponent(n.url)}&referer=${encodeURIComponent(Je)}`;i.src=c,i.addEventListener("load",()=>{const u=ie.current.indexOf(i),E=i.track;if(E&&u>=0){const M=u===tt.current;E.mode=M&&!un.current?"showing":"hidden"}}),e.appendChild(i),ie.current.push(i)}),F.length>0)))try{const n=ue.current;n&&typeof n.subtitleTrack=="number"&&n.subtitleTrack!==-1&&(n.subtitleTrack=-1)}catch{}},[F,Je,I,_,l]),f(()=>{const e=l.current;if(!e||I)return;const n=ue.current;ie.current.length>0&&n&&typeof n.subtitleTrack=="number"&&Array.isArray(n.subtitleTracks)&&n.subtitleTracks.length>0&&(n.subtitleTrack=-1);const i=()=>{const E=Pn(m.state.subtitleFontSize,e.clientHeight||720),M=Math.max(0,Math.min(100,100-m.state.subtitlePosition)),ee=()=>{const D=E*16,P=e.videoHeight||e.clientHeight||720,L=e.videoWidth||e.clientWidth||1280;return{step:D*1.3/P*100,chars:Math.max(20,Math.floor(L/(D*.55)))}},de=(D,P)=>{const L=D;L.snapToLines=!1,L.line=P},y=D=>{if(!D.cues)return;Array.from(D.cues).forEach(se=>de(se,M));const P=Array.from(D.activeCues??[]);if(P.length<=1){P.forEach(se=>de(se,M));return}const{step:L,chars:T}=ee();let ve=M;for(let se=P.length-1;se>=0;se--){const De=String(P[se].text??"").replace(/<[^>]*>/g,"").split(`
|
|
3
|
-
`).reduce((Gt,Ct)=>Gt+Math.max(1,Math.ceil(Ct.length/T)),0);ve=Math.max(0,ve-De*L),de(P[se],ve),ve-=L*.4}},U=ie.current;if(U.length>0){U.forEach((D,P)=>{const L=D.track;if(!L)return;const T=P===oe;L.mode=T&&!pe?"showing":"hidden",T&&!pe&&y(L)});return}const re=Array.from(e.textTracks);re.length!==0&&re.forEach((D,P)=>{const L=P===oe;D.mode=L&&!pe?"showing":"hidden",L&&!pe&&y(D)})};i();const c=()=>i();e.textTracks.addEventListener("addtrack",c),e.addEventListener("loadedmetadata",i,{once:!0});const u=window.setTimeout(i,600);return()=>{e.textTracks.removeEventListener("addtrack",c),e.removeEventListener("loadedmetadata",i),window.clearTimeout(u)}},[oe,F,I,_,l,pe,m.state.subtitleFontSize,m.state.subtitlePosition]),f(()=>{if(!pe)return;const e=l.current,n=A.current;if(!e||!n)return;const i=nt/1e3,c=an/1e3,u=new Set;let E=[],M=-1,ee=-1,de=-1,y=-1,U=0,re=0,D=!1;const P=()=>{const O=tt.current;if(O<0)return null;const Oe=ie.current;return Oe.length>0?Oe[O]?.track??null:Array.from(e.textTracks)[O]??null},L=(O,Oe)=>{const me=O.cues;if(!me||me.length===0)return Array.from(O.activeCues??[]);let Ke=0,Ye=me.length;for(;Ke<Ye;){const ke=Ke+Ye>>>1;me[ke].endTime+i<Oe?Ke=ke+1:Ye=ke}const kt=[];for(let ke=Ke;ke<me.length;ke++){const Qt=me[ke];if(Qt.startTime+i>Oe)break;Qt.endTime+i>=Oe&&kt.push(Qt)}return kt},T=()=>{const O=P(),Oe=e.currentTime-c,me=O?L(O,Oe):[],Ke=e.clientWidth,Ye=e.clientHeight,kt=e.videoWidth,ke=e.videoHeight;if(me.length===E.length&&me.every((En,Nn)=>En===E[Nn])&&Ke===M&&Ye===ee&&kt===de&&ke===y||(E=me,M=Ke,ee=Ye,de=kt,y=ke,n.textContent="",me.length===0))return;const Xn={fontSize:Pn(m.state.subtitleFontSize,Ye),position:m.state.subtitlePosition,bgOpacity:m.state.subtitleBgOpacity,bgColor:m.state.subtitleBgColor,textColor:m.state.subtitleTextColor,edge:m.state.subtitleEdge,bold:m.state.subtitleBold},$r=us(Xn),Dr=ds(e,Xn.position);me.forEach((En,Nn)=>{const Jn=String(En.text??"");if(!ms(Jn).trim())return;const In=document.createElement("div"),Or=(me.length-1-Nn)*1.7;In.style.cssText=`${$r}
|
|
4
|
-
bottom: calc(${Dr}px + ${Or}em);`,In.innerHTML=bs(Jn),n.appendChild(In)})},ve=()=>{Array.from(e.textTracks).forEach(O=>{u.has(O)||(u.add(O),O.addEventListener("cuechange",T))})},se=()=>{ve(),T()},kn=()=>{if(D||re)return;const O=()=>{re=0,!(D||e.paused||e.ended)&&(T(),kn())};re=window.requestAnimationFrame(O)},De=e,Gt=()=>{U=0,T(),!D&&De.requestVideoFrameCallback&&(U=De.requestVideoFrameCallback(Gt))},Ct=()=>{T(),De.requestVideoFrameCallback?U||(U=De.requestVideoFrameCallback(Gt)):kn()};ve(),e.textTracks.addEventListener("addtrack",se),e.textTracks.addEventListener("removetrack",se),e.addEventListener("timeupdate",T),e.addEventListener("seeked",T),e.addEventListener("loadedmetadata",T),e.addEventListener("play",Ct);const Gn=Array.from(e.querySelectorAll("track"));Gn.forEach(O=>O.addEventListener("load",T));const Qn=typeof ResizeObserver>"u"?null:new ResizeObserver(()=>T());return Qn?.observe(e),T(),Ct(),()=>{D=!0,u.forEach(O=>O.removeEventListener("cuechange",T)),e.textTracks.removeEventListener("addtrack",se),e.textTracks.removeEventListener("removetrack",se),e.removeEventListener("timeupdate",T),e.removeEventListener("seeked",T),e.removeEventListener("loadedmetadata",T),e.removeEventListener("play",Ct),Gn.forEach(O=>O.removeEventListener("load",T)),Qn?.disconnect(),re&&window.cancelAnimationFrame(re),U&&De.cancelVideoFrameCallback&&De.cancelVideoFrameCallback(U),n.textContent=""}},[pe,nt,oe,F,an,l,m.state.subtitleFontSize,m.state.subtitlePosition,m.state.subtitleBgOpacity,m.state.subtitleBgColor,m.state.subtitleTextColor,m.state.subtitleEdge,m.state.subtitleBold]);const Cn=()=>{p(null),J([]),Ue(""),x(-1)},Pr=C(e=>{S(e),H(1),Ce(e,1)},[Ce]),jt=!g&&r?.seasons&&r.seasons.length>1?t("label",{className:h.sidebarSeason,children:[t("span",{children:"Season"}),t("select",{value:a,onChange:e=>Pr(parseInt(e.currentTarget.value,10)||1),className:h.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,it=C(e=>{const n=parseInt(e,10);if(!isNaN(n)){try{l.current?.pause()}catch{}H(n),Ce(a,n)}gn(!1)},[a,Ce,l]);f(()=>{if(g)return;const e=n=>{n.target.closest('input, textarea, button, select, a, [role="button"], [contenteditable="true"]')||n.key.toLowerCase()==="n"&&($!=null?it(String($)):Zn.error("No next episode available"))};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[g,$,it]);const Rr=e=>{N(e);try{const i=Ne[e];i&&localStorage.setItem("tvLastAudio",An(i))}catch{}const n=ue.current;n&&n.audioTrack!==void 0&&(n.audioTrack=e)},zr=e=>{Ie(e);try{if(e===-1)localStorage.setItem("tvSubtitlesEnabled","false");else{localStorage.setItem("tvSubtitlesEnabled","true"),localStorage.setItem("tvSelectedSubtitle",String(e));const u=F[e];u&&localStorage.setItem("tvLastSubtitle",An(u))}}catch{}const n=l.current,i=ue.current;if(i&&typeof i.subtitleTrack=="number"&&Array.isArray(i.subtitleTracks)&&i.subtitleTracks.length>0&&(i.subtitleTrack=ie.current.length>0||e<0?-1:e),!n)return;const c=ie.current;if(c.length>0){c.forEach((u,E)=>{const M=u.track;if(!M)return;const ee=E===e;M.mode=ee&&!pe?"showing":"hidden"});return}Array.from(n.textTracks).forEach((u,E)=>{const M=E===e;u.mode=M&&!pe?"showing":"hidden"})};return f(()=>{if(!r){document.title="TV & Movies - dango";return}document.title=g?`${r.title} - dango`:`${r.title} - Season ${a} Episode ${b} - dango`},[r,g,a,b]),f(()=>{if(!r||g)return;const e=new URLSearchParams(d),n=e.get("s"),i=e.get("e"),c=String(a),u=String(b);n===c&&i===u||(e.set("type",d.get("type")||"tv"),e.set("s",c),e.set("e",u),x(`${window.location.pathname}?${e.toString()}`,{replace:!0}))},[r,g,a,b,d,x]),t("div",{className:`${Ee.playerPageLayout} ${Be?Ee.theaterMode:""} ${g?Ee.noSidebar:""}`,onClick:vr,children:[Be&&t(hs,{videoRef:l,active:cn.enabled&&!I&&K.length>0&&!_e&&!(r?.adult&&!ft),settings:cn}),!Be&&!g&&t("aside",{className:Ee.episodeSidebar,children:r?t(gs,{episodes:Yn,currentEpisode:String(b),watchedEpisodes:Kn,onEpisodeClick:it,header:jt}):t(fs,{variant:"sidebar"})}),t("div",{className:Ee.playerMain,children:[r&&t("div",{className:h.playerSection,onContextMenu:e=>e.preventDefault(),style:r.adult&&!ft?{filter:"blur(14px)",pointerEvents:"none",userSelect:"none"}:void 0,children:I&&ut?t("iframe",{src:ut,className:h.videoIframe,allow:"autoplay; fullscreen",allowFullScreen:!0}):!I&&ht?t("iframe",{src:ht,className:h.videoIframe,allow:"autoplay; fullscreen",allowFullScreen:!0}):!I&&(K.length>0||Se)?t(Ve,{children:[_e&&t(rr,{error:_e,onRetry:Yt}),t(Na,{player:m,title:r.title,episodeLabel:g?void 0:`S${a} E${b}`,audioTracks:Ne,selectedAudioTrack:ge,onAudioTrackChange:Rr,subtitles:F,selectedSubtitle:oe,onSubtitleChange:zr,streams:K,resolutionIdx:Te,onResolutionChange:e=>{Tn(),xe(e)},onBack:Cn,videoDelayEnabled:Z,onVideoDelayToggle:At,videoDelayMs:G,onVideoDelayChange:Lt,onCalibrateAvSync:nn,subtitleDelayMs:nt,onSubtitleDelayChange:or,showNextEpisodeButton:br&&!Re&&!st,onNextEpisode:Ar,isLoading:Se,isTheaterMode:Be,onTheaterModeToggle:fn,ambientSettings:cn,onAmbientChange:ir,children:[t(jr,{autoPlay:yt&&!_t,playsInline:!0,disablePictureInPicture:!0,className:`${h.video} ${ln?h.videoHidden:""}`,onTimeUpdate:()=>{Q||(Cr(),Kt())},onEnded:()=>{Q||Kt(!0)},onPlay:Er,onPause:Nr,onSeeked:()=>{Q||(Tt(),Kt())},onLoadedMetadata:()=>{Ir(),Fn(),Kt()},onDurationChange:()=>{Fn()},onContextMenu:e=>e.preventDefault(),onError:()=>{te("Video failed to load. Try another server or reload."),q(!1)}}),t("canvas",{ref:gt,className:`${h.delayCanvas} ${ln?h.delayCanvasActive:""}`}),pe&&t("div",{ref:A,className:h.subtitleOverlay}),t(ps,{isOpen:Bt,ms:G,onChange:Lt,onApply:rn,onClose:wt,testClipActive:Q,onTestClip:sn})]})]}):_e&&!I?t(rr,{error:_e,onRetry:Yt}):null}),!Be&&r&&t(vs,{}),!Be&&jt&&t("div",{className:h.mobileSeasonRow,children:jt}),!Be&&r&&t("div",{className:le.streamPanel,children:[t("div",{className:h.providerSelectWrap,children:t("label",{className:h.controlLabel,children:["Provider",t("select",{value:_,onChange:e=>Mr(e.currentTarget.value),className:h.select,disabled:Y.length===0,children:ct?t("option",{value:"",children:"Loading..."}):Y.length===0?t("option",{value:"",children:"No providers available"}):t(Ve,{children:[ae.length>0&&t("optgroup",{label:"Direct HLS",children:ae.map(e=>t("option",{value:e.id,children:e.label},e.id))}),Qe.length>0&&t("optgroup",{label:"Embeds",children:Qe.map(e=>t("option",{value:e.id,children:e.label},e.id))})]})})]})}),!I&&(Se?t("div",{className:h.sourceLoader,children:t("div",{className:h.ringSpinner})}):t(xa,{servers:ne,selectedServer:Le?"Embed":ce,onServerSelect:wr}))]}),!Be&&r&&t("div",{className:Ee.playerInfoContainer,children:[t("div",{className:Ee.playerInfoHeader,children:[t("div",{className:Ee.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:Ee.videoTitleSection,children:[t("div",{className:le.titleContainer,children:[t("h1",{children:r.title}),t("div",{className:h.meta,children:[t("span",{className:h.year,children:r.year}),r.vote_average!=null&&r.vote_average>0&&t("span",{className:h.rating,children:[t(be,{name:"star",size:12}),Number(r.vote_average).toFixed(1)]}),t("span",{className:`${h.typeBadge} ${h[g?"movie":"tv"]}`,children:g?"Movie":"TV Show"})]}),jn.length>0&&t("div",{className:h.genreRow,children:jn.map(e=>t("span",{className:h.genreChip,children:e},e))}),_n.length>0&&t("div",{className:h.metaRow,children:_n.map((e,n)=>t("span",{children:[e,n<_n.length-1?" · ":""]},`${e}-${n}`))})]}),t("div",{className:le.controls,children:[t("button",{className:`${le.watchlistBtn} ${pt?le.inList:""}`,onClick:dr,disabled:ur,type:"button",children:[pt?t(be,{name:"check",size:14}):t(be,{name:"plus",size:14}),pt?"In Watchlist":"Add to Watchlist"]}),!g&&t(Ve,{children:[t("button",{className:`${le.watchlistBtn}`,onClick:()=>mn!=null&&it(String(mn)),disabled:mn==null,type:"button",children:[t(be,{name:"chevron-left",size:14}),"Prev EP"]}),t("button",{className:`${le.watchlistBtn}`,onClick:()=>$!=null&&it(String($)),disabled:$==null,type:"button",children:["Next EP",t(be,{name:"chevron-right",size:14})]}),!g&&t("button",{className:`${le.watchlistBtn} ${le.modeToggleBtn} ${ot?le.modeToggleActive:""}`,onClick:()=>_r(!ot),type:"button","aria-pressed":ot,children:ot?"AUTOPLAY: ON":"AUTOPLAY: OFF"}),yr&&t("button",{className:`${le.watchlistBtn}`,onClick:()=>gn(!0),type:"button",children:[t(be,{name:"list-ul",size:14}),"Episodes"]})]})]})]})]}),t("div",{className:Ee.infoColumns,children:[t("div",{className:`${le.descriptionSection} ${le.synopsisFlat}`,children:[t("h3",{children:"Synopsis"}),t(Os,{text:r.overview,emptyText:"No description available."}),t("button",{className:le.detailsToggleBtn,onClick:()=>fr(!qt),type:"button",children:[qt?t(be,{name:"chevron-up"}):t(be,{name:"chevron-down"}),qt?"Hide Details":"Show Details"]})]}),qt&&t("div",{className:h.detailGrid,children:[r.first_air_date&&t("div",{className:h.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:h.detailItem,children:[t("strong",{children:"Last Air Date"}),t("span",{children:r.last_air_date})]}),r.networks&&r.networks.length>0&&t("div",{className:h.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:h.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:h.detailItem,children:[t("strong",{children:"Episode Runtime"}),t("span",{children:[r.episode_run_time[0]," min"]})]}),r.imdb_id&&t("div",{className:h.detailItem,children:[t("strong",{children:"IMDb"}),t("a",{href:`https://www.imdb.com/title/${r.imdb_id}`,target:"_blank",rel:"noopener noreferrer",className:h.imdbLink,children:"View on IMDb"})]})]})]})]}),!g&&t(ys,{isOpen:pr,onClose:()=>gn(!1),episodes:Yn,currentEpisode:String(b),watchedEpisodes:Kn,onEpisodeClick:it,header:jt}),r?.adult&&!ft&&t(Ns,{isOpen:!0,onClose:Cn,onGrant:lr}),t(Ss,{isOpen:Re,onClose:Un,title:"Resume Watching",message:t(Ve,{children:["You were at ",t("strong",{children:wn(rt)})]}),restartLabel:"Start from Beginning",onResume:xr,onRestart:Un}),t(_s,{isOpen:st,onClose:()=>at(!1),title:g?"Movie Completed!":Pe!=null?"Season Complete!":"Show Completed!",heading:hr,message:g?"You finished this movie!":Pe!=null?`You finished Season ${a}.`:"Congratulations! You finished all available episodes.",children:[t(Xt,{variant:"secondary",onClick:()=>at(!1),children:"Close"}),Pe!=null?t(Xt,{onClick:Lr,children:["Start Season ",Pe]}):t(Ve,{children:[t(Xt,{onClick:()=>{at(!1),Cn()},children:"Back to Details"}),t(Xt,{onClick:Br,disabled:Rt.isPending||zt.isPending,children:Rt.isPending||zt.isPending?"Saving...":"Move to Completed"})]})]}),!r&&t("div",{className:h.statusMsg,children:[t(be,{name:"spinner",className:h.spinner})," Loading..."]})]})]})};export{Io as default};
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import{u as t,A as S,q as B,h as j,d as k,T as X,$ as nt}from"./vendor-core-DfaOB3Rn.js";import{M as Fe,B as V,S as ee,i as st,Y as $e,q as G,W as at,t as ot,g as it}from"./index-BP1z44Uk.js";import{I as K}from"./vendor-icons-DrybRNxP.js";import{S as Ie,a as ct,f as Re,m as lt,h as dt,d as ut,s as Y,k as pt,u as ft,n as ae}from"./PlayerProvider-pi0at080.js";import{u as ht}from"./vendor-query-BBT5_sHx.js";import{a as mt}from"./playbackCompletion-IPHm9fp5.js";const bt="_controls_pcbjf_1",gt="_titleContainer_pcbjf_9",yt="_scheduleInfo_pcbjf_15",_t="_status_pcbjf_23",vt="_nextEpisode_pcbjf_35",St="_watchlistBtn_pcbjf_45",wt="_inList_pcbjf_72",Ct="_queueBtn_pcbjf_83",kt="_queueActive_pcbjf_95",xt="_modeToggleBtn_pcbjf_101",Tt="_modeToggleActive_pcbjf_108",Nt="_markWatchedBtn_pcbjf_129",Lt="_markWatchedDone_pcbjf_143",Bt="_streamPanel_pcbjf_154",Et="_desktopEpisodeActions_pcbjf_168",At="_sourceLoader_pcbjf_174",Pt="_episodeActions_pcbjf_187",$t="_mobileEpisodeActions_pcbjf_201",It="_episodeNavBtn_pcbjf_205",Mt="_primary_pcbjf_235",jt="_secondary_pcbjf_245",Ft="_episodePickerBtn_pcbjf_249",Rt="_queueCountdown_pcbjf_253",Dt="_speedBoostBadge_pcbjf_268",Ot="_videoContainer_pcbjf_299",Ht="_loadingOverlay_pcbjf_312",qt="_loadingDots_pcbjf_326",Wt="_dot_pcbjf_331",zt="_bounce_pcbjf_1",Vt="_bufferingOverlay_pcbjf_348",Kt="_bufferingSpinner_pcbjf_357",Ut="_spin_pcbjf_444",Qt="_videoIframe_pcbjf_366",Gt="_videoElementHidden_pcbjf_389",Yt="_upscalerCanvas_pcbjf_394",Xt="_upscalerActive_pcbjf_407",Jt="_upscalerStatusBadge_pcbjf_411",Zt="_subtitleOverlay_pcbjf_426",er="_spinner_pcbjf_444",tr="_errorOverlay_pcbjf_505",rr="_retryButton_pcbjf_515",nr="_detailsToggleBtn_pcbjf_528",sr="_descriptionSection_pcbjf_551",ar="_synopsisFlat_pcbjf_559",or="_fullscreenActive_pcbjf_593",ir="_errorSubtext_pcbjf_636",qn={controls:bt,titleContainer:gt,scheduleInfo:yt,status:_t,nextEpisode:vt,watchlistBtn:St,inList:wt,queueBtn:Ct,queueActive:kt,modeToggleBtn:xt,modeToggleActive:Tt,markWatchedBtn:Nt,markWatchedDone:Lt,streamPanel:Bt,desktopEpisodeActions:Et,sourceLoader:At,episodeActions:Pt,mobileEpisodeActions:$t,episodeNavBtn:It,primary:Mt,secondary:jt,episodePickerBtn:Ft,queueCountdown:Rt,speedBoostBadge:Dt,videoContainer:Ot,loadingOverlay:Ht,loadingDots:qt,dot:Wt,bounce:zt,bufferingOverlay:Vt,bufferingSpinner:Kt,spin:Ut,videoIframe:Qt,videoElementHidden:Gt,upscalerCanvas:Yt,upscalerActive:Xt,upscalerStatusBadge:Jt,subtitleOverlay:Zt,spinner:er,errorOverlay:tr,retryButton:rr,detailsToggleBtn:nr,descriptionSection:sr,synopsisFlat:ar,fullscreenActive:or,errorSubtext:ir},cr="_playerPageLayout_13s1u_1",lr="_noSidebar_13s1u_15",dr="_episodeSidebar_13s1u_19",ur="_playerMain_13s1u_32",pr="_videoPlayerWrapper_13s1u_40",fr="_playerInfoHeader_13s1u_56",hr="_playerAnimeCard_13s1u_62",mr="_playerInfoContainer_13s1u_74",br="_infoColumns_13s1u_86",gr="_videoTitleSection_13s1u_114",yr="_theaterMode_13s1u_288",Wn={playerPageLayout:cr,noSidebar:lr,episodeSidebar:dr,playerMain:ur,videoPlayerWrapper:pr,playerInfoHeader:fr,playerAnimeCard:hr,playerInfoContainer:mr,infoColumns:br,videoTitleSection:gr,theaterMode:yr},_r={fontSize:"subtitleFontSize",position:"subtitlePosition",bgOpacity:"subtitleBgOpacity",bgColor:"subtitleBgColor",textColor:"subtitleTextColor",edge:"subtitleEdge",bold:"subtitleBold"},q={fontSize:1.8,position:0,bgOpacity:.5,bgColor:"#000000",textColor:"#ffffff",edge:"shadow",bold:!1},de=(e,n,s)=>Math.max(n,Math.min(s,e)),ue=e=>typeof e=="string"&&/^#[0-9a-fA-F]{6}$/.test(e),oe=(e,n,s,i)=>{try{const r=localStorage.getItem(e);if(r===null)return n;const o=parseFloat(r);return Number.isFinite(o)?de(o,s,i):n}catch{return n}};function vr(){let e=q.edge,n=q.bgColor,s=q.textColor,i=q.bold;try{const r=localStorage.getItem("subtitleEdge");(r==="shadow"||r==="outline"||r==="none")&&(e=r);const o=localStorage.getItem("subtitleBgColor");ue(o)&&(n=o);const c=localStorage.getItem("subtitleTextColor");ue(c)&&(s=c);const u=localStorage.getItem("subtitleBold");u!==null&&(i=u==="true")}catch{}return{fontSize:oe("subtitleFontSize",q.fontSize,.5,10),position:oe("subtitlePosition",q.position,0,100),bgOpacity:oe("subtitleBgOpacity",q.bgOpacity,0,1),bgColor:n,textColor:s,edge:e,bold:i}}function De(e,n){const s=`rgba(0, 0, 0, ${de(n,0,1)})`;if(!ue(e))return s;const i=parseInt(e.slice(1,3),16),r=parseInt(e.slice(3,5),16),o=parseInt(e.slice(5,7),16);return`rgba(${i}, ${r}, ${o}, ${de(n,0,1)})`}function Oe(e,n){return e==="none"?n<=0?"0 1px 3px rgba(0, 0, 0, 0.9)":"none":e==="outline"?["-1px 0 0 black","1px 0 0 black","0 -1px 0 black","0 1px 0 black","-1px -1px 0 black","1px -1px 0 black","-1px 1px 0 black","1px 1px 0 black","0 0 6px rgba(0, 0, 0, 0.9)"].join(", "):"0 0 4px black, 0 1px 2px rgba(0, 0, 0, 0.8)"}function zn(e){return`
|
|
2
|
-
video::cue {
|
|
3
|
-
font-size: ${e.fontSize}rem !important;
|
|
4
|
-
color: ${e.textColor} !important;
|
|
5
|
-
background-color: ${De(e.bgColor,e.bgOpacity)} !important;
|
|
6
|
-
font-weight: ${e.bold?"bold":"normal"} !important;
|
|
7
|
-
text-shadow: ${Oe(e.edge,e.bgOpacity)} !important;
|
|
8
|
-
}
|
|
9
|
-
`}function Vn(e){return[`font-size: ${e.fontSize}rem`,`color: ${e.textColor}`,`background-color: ${De(e.bgColor,e.bgOpacity)}`,`font-weight: ${e.bold?"700":"400"}`,`text-shadow: ${Oe(e.edge,e.bgOpacity)}`,"padding: 0.2em 0.5em","border-radius: 0.25em","text-align: center","position: absolute","left: 50%","transform: translateX(-50%)","max-width: 92%","white-space: pre-wrap","overflow-wrap: break-word","line-height: 1.4"].join(`;
|
|
10
|
-
`)+";"}const Sr=new Set(["b","i","u","strong","em"]);function Kn(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/<(\/?)([a-zA-Z]+)>/g,(s,i,r)=>Sr.has(r.toLowerCase())?`<${i}${r.toLowerCase()}>`:s)}function Un(e){return e.replace(/<[^>]*>/g,"")}const Qn=["#ffffff","#ffff00","#7CFC00","#00e5ff","#ff9ff3","#ffa502"],Gn=["#000000","#1e272e","#2f3542","#3d0c02","#0c3d2e","#ffffff"];function Yn(e,n){const s=Number.isFinite(e)?e*16:q.fontSize*16;return!Number.isFinite(n)||n<=0?s/16:Math.min(s,Math.max(13,n*.07))/16}function Xn(e){const n=Math.abs(e/1e3).toFixed(1);return e>0?`+${n}s`:e<0?`-${n}s`:"0.0s"}function Jn(e,n){const s=e.clientWidth||0,i=e.clientHeight||0,r=e.videoWidth>0&&e.videoHeight>0?e.videoWidth/e.videoHeight:0;let o=i;r>0&&s>0&&i>0&&(o=s/i>r?i:s/r);const c=Math.max(0,(i-o)/2),u=Math.max(0,Math.min(100,Number(n)||0))/100*o;return c+u}const Zn=({isOpen:e,onClose:n,title:s,heading:i,message:r,children:o})=>t(Fe,{isOpen:e,onClose:n,title:s,width:"sm",children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t(K,{name:"check-circle",size:48,style:{color:"var(--accent-lighter)",marginBottom:"0.5rem"}}),t("p",{style:{fontSize:"1.1rem",fontWeight:600},children:i}),t("p",{style:{color:"var(--text-secondary)"},children:r}),o&&t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center",flexWrap:"wrap"},children:o})]})}),es=({isOpen:e,onClose:n,title:s,message:i,resumeLabel:r="Resume",restartLabel:o="Start Over",onResume:c,onRestart:u})=>t(Fe,{isOpen:e,onClose:n,title:s,width:"sm",children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t("p",{children:i}),t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center"},children:[t(V,{variant:"secondary",onClick:u,children:o}),t(V,{onClick:c,children:r})]})]})}),wr="_centerControls_bxt8c_1",Cr="_centerSkipBtn_bxt8c_15",kr="_centerPlayPause_bxt8c_37",te={centerControls:wr,centerSkipBtn:Cr,centerPlayPause:kr},ts=()=>t("div",{className:te.centerControls,onClick:e=>e.stopPropagation(),children:[t(Ie,{seconds:-10,className:te.centerSkipBtn}),t(ct,{className:te.centerPlayPause,"data-speed-boost-ignore":"true"}),t(Ie,{seconds:10,className:te.centerSkipBtn})]}),rs=({visible:e,title:n,episode:s,onBack:i,classes:r})=>t("div",{className:`${r.overlay} ${e?"":r.hidden} `,"data-speed-boost-ignore":"true",style:{pointerEvents:"none",background:"none"},children:t("div",{className:r.top,onClick:o=>o.stopPropagation(),children:[t("button",{className:r.backBtn,onClick:o=>{o.stopPropagation(),i()},title:"Back","aria-label":"Back",children:t(K,{name:"chevron-left"})}),t("div",{className:r.titleInfo,children:[t("span",{className:r.title,children:n}),s&&t("span",{className:r.episode,children:s})]})]})});function xr(e){return e instanceof Element&&!!e.closest('button, input, select, textarea, a, [role="button"], [role="slider"], [data-player-ui="true"]')}function ns({engine:e,topBar:n,centerControls:s,bottomBar:i,settingsPanel:r,overlays:o,isInteracting:c=!1,nativeControls:u=!1,chromeDisabled:a=!1,className:l,onStageClick:g,children:C}){const y=Re(e),E=lt(),p=S(void 0),d=S(void 0),N=S(0),f=S(c);f.current=c;const w=B(()=>{clearTimeout(p.current),p.current=void 0},[]),h=B(()=>{w();const x=e.getState();!x.isPlaying||x.isScrubbing||f.current||u||(p.current=setTimeout(()=>{const P=e.getState();f.current||P.isScrubbing||!P.isPlaying||e.setShowControls(!1)},E?5e3:3e3))},[e,E,u,w]),L=B(()=>{e.setShowControls(!0),h()},[e,h]);dt(e,L,!u&&!a),j(()=>(c||y.isScrubbing||!y.isPlaying?(e.setShowControls(!0),w()):h(),w),[e,c,y.isPlaying,y.isScrubbing,y.showControls,w,h]),j(()=>()=>{clearTimeout(d.current)},[]);const A=x=>{if(xr(x.target)||u||a)return;g?.();const P=Date.now();if(P-N.current<280){clearTimeout(d.current),d.current=void 0,N.current=0,e.toggleFullscreen();return}N.current=P,clearTimeout(d.current),d.current=setTimeout(()=>{d.current=void 0,e.setShowControls(!e.getState().showControls),h()},280)},F=y.showControls||y.isScrubbing||c||!y.isPlaying;return t(ut,{engine:e,children:t("div",{ref:e.containerRef,"data-player-root":"true",className:`${Y.shell} ${y.isFullscreen?Y.shellFullscreen:""} ${l??""}`,style:{cursor:!F&&y.isFullscreen?"none":"default"},onContextMenu:x=>x.preventDefault(),onPointerMove:x=>{x.pointerType==="mouse"&&L()},onFocusIn:L,onMouseLeave:()=>{window.matchMedia?.("(hover: hover) and (pointer: fine)").matches&&e.getState().isPlaying&&!f.current&&e.setShowControls(!1)},children:[t("div",{className:Y.stage,onClick:A,children:C}),o,(y.error||y.playBlocked)&&t("div",{className:Y.engineStatus,"data-player-ui":"true",children:t(pt,{})}),!a&&!u&&t("div",{className:Y.uiLayer,children:[t("div",{"data-player-ui":"true",children:n}),F&&s&&t("div",{"data-player-ui":"true",children:s}),t("div",{"data-player-ui":"true",children:i}),r&&t("div",{"data-player-ui":"true",children:r})]})]})})}const Tr=e=>(e.language??e.lang??"").toLowerCase(),Nr=e=>(e.label??"").toLowerCase(),Lr=e=>`${e.language??e.lang??""}|||${e.label??""}`,Br=e=>Tr(e).startsWith("en")||Nr(e).includes("english");function ss(e,n){if(e.length===0||n?.enabled===!1)return-1;const s=n?.lastKey??null;if(s){const r=e.findIndex(o=>Lr(o)===s);if(r>=0)return r}const i=e.findIndex(Br);return i>=0?i:0}const Er="_statusArea_1xccu_1",Ar="_toggleBtn_1xccu_20",Pr="_shortcuts_1xccu_46",$r="_shortcutGroup_1xccu_56",Ir="_shortcut_1xccu_46",Mr="_key_1xccu_70",jr="_label_1xccu_91",_={statusArea:Er,toggleBtn:Ar,shortcuts:Pr,shortcutGroup:$r,shortcut:Ir,key:Mr,label:jr},as=({showTheater:e=!0})=>{const[n,s]=k(!1);return t("div",{className:_.statusArea,children:[t("button",{type:"button",className:_.toggleBtn,onClick:()=>s(i=>!i),"aria-expanded":n,"aria-controls":"player-shortcuts",children:[t(K,{name:"keyboard",size:14}),t("span",{children:"Keyboard Shortcuts"}),n?t(K,{name:"chevron-up",size:12}):t(K,{name:"chevron-down",size:12})]}),n&&t("div",{id:"player-shortcuts",className:_.shortcuts,children:[t("div",{className:_.shortcutGroup,children:[t("div",{className:_.shortcut,children:[t("span",{className:_.key,children:"↑"}),t("span",{className:_.key,children:"↓"}),t("span",{className:_.label,children:"Volume"})]}),t("div",{className:_.shortcut,children:[t("span",{className:_.key,children:"←"}),t("span",{className:_.key,children:"→"}),t("span",{className:_.label,children:"Seek"})]})]}),t("div",{className:_.shortcutGroup,children:[t("div",{className:_.shortcut,children:[t("span",{className:_.key,children:"Space"}),t("span",{className:_.label,children:"Play/Pause"})]}),t("div",{className:_.shortcut,children:[t("span",{className:_.key,children:"F"}),t("span",{className:_.label,children:"Fullscreen"})]}),t("div",{className:_.shortcut,children:[t("span",{className:_.key,children:"M"}),t("span",{className:_.label,children:"Mute"})]}),e&&t("div",{className:_.shortcut,children:[t("span",{className:_.key,children:"T"}),t("span",{className:_.label,children:"Theater"})]}),t("div",{className:_.shortcut,children:[t("span",{className:_.key,children:"N"}),t("span",{className:_.label,children:"Next"})]})]})]})]})},Fr="_episodeListContainer_9tyin_1",Rr="_drawerContainer_9tyin_9",Dr="_episodeListHeader_9tyin_14",Or="_drawerHeader_9tyin_20",Hr="_episodeListTitle_9tyin_29",qr="_rangeSelector_9tyin_41",Wr="_rangeButton_9tyin_47",zr="_active_9tyin_70",Vr="_episodeList_9tyin_1",Kr="_drawerList_9tyin_89",Ur="_episodeItem_9tyin_118",Qr="_watched_9tyin_145",Gr="_episodeThumb_9tyin_167",Yr="_episodeText_9tyin_176",Xr="_episodeLabel_9tyin_184",Jr="_episodeSub_9tyin_189",v={episodeListContainer:Fr,drawerContainer:Rr,episodeListHeader:Dr,drawerHeader:Or,episodeListTitle:Hr,rangeSelector:qr,rangeButton:Wr,active:zr,episodeList:Vr,drawerList:Kr,episodeItem:Ur,watched:Qr,episodeThumb:Gr,episodeText:Yr,episodeLabel:Xr,episodeSub:Jr},Zr=({episodes:e,currentEpisode:n,watchedEpisodes:s=[],onEpisodeClick:i,variant:r="sidebar",title:o="Episodes",header:c})=>{const[u,a]=k(0),l=S(null),g=X(()=>e.map(p=>typeof p=="string"?{id:p,label:`Episode ${p}`}:p),[e]),C=X(()=>new Set(s),[s]);j(()=>{const p=l.current;if(!p)return;let d=p.parentElement;for(;d;){const w=window.getComputedStyle(d);if((w.overflowY==="auto"||w.overflowY==="scroll")&&d.scrollHeight>d.clientHeight)break;d=d.parentElement}if(!d)return;const N=d.getBoundingClientRect(),f=p.getBoundingClientRect();d.scrollTop+=f.top+f.height/2-(N.top+d.clientHeight/2)},[n,u]);const y=X(()=>{if(g.length<=100)return[];const p=[];for(let d=0;d<g.length;d+=100){const N=d+1,f=Math.min(d+100,g.length);p.push(`${N}-${f}`)}return p},[g]),E=X(()=>{if(y.length===0)return g;const p=y[u];if(!p)return g;const[d,N]=p.split("-"),f=parseInt(d,10),w=parseInt(N,10);return g.slice(f-1,w)},[g,y,u]);return t("div",{className:`${v.episodeListContainer} ${r==="drawer"?v.drawerContainer:""}`,children:[t("div",{className:`${v.episodeListHeader} ${r==="drawer"?v.drawerHeader:""}`,children:[c,t("h3",{className:v.episodeListTitle,children:o}),y.length>0&&t("div",{className:v.rangeSelector,children:y.map((p,d)=>t("button",{className:`${v.rangeButton} ${u===d?v.active:""}`,onClick:()=>a(d),children:p},p))})]}),t("div",{className:`${v.episodeList} ${r==="drawer"?v.drawerList:""}`,children:E.map(p=>{const d=p.id===n,N=C.has(p.id)||p.watched===!0;return t("div",{ref:d?l:void 0,className:`${v.episodeItem} ${N?v.watched:""} ${d?v.active:""}`,onClick:()=>i(p.id),children:[p.thumbnail&&t("img",{src:p.thumbnail,alt:"",loading:"lazy",decoding:"async",className:v.episodeThumb}),t("span",{className:v.episodeText,children:[t("span",{className:v.episodeLabel,children:p.label??`Episode ${p.id}`}),p.sublabel&&t("span",{className:v.episodeSub,children:p.sublabel})]})]},p.id)})})]})},os=({variant:e="sidebar",count:n=12})=>t("div",{className:`${v.episodeListContainer} ${e==="drawer"?v.drawerContainer:""}`,children:[t("div",{className:`${v.episodeListHeader} ${e==="drawer"?v.drawerHeader:""}`,children:[t("h3",{className:v.episodeListTitle,children:"Episodes"}),t("div",{className:v.rangeSelector,children:[t(ee,{width:"60px",height:"28px",variant:"rectangular"}),t(ee,{width:"60px",height:"28px",variant:"rectangular"}),t(ee,{width:"60px",height:"28px",variant:"rectangular"})]})]}),t("div",{className:`${v.episodeList} ${e==="drawer"?v.drawerList:""}`,children:Array.from({length:n}).map((s,i)=>t("div",{className:v.episodeItem,style:{border:"none",background:"transparent"},children:t(ee,{width:"120px",height:"1.2rem",variant:"text"})},i))})]}),en="_shell_cys6s_1",tn="_overlay_cys6s_10",rn="_drawer_cys6s_21",nn="_handle_cys6s_56",sn="_header_cys6s_64",an="_headerCopy_cys6s_73",on="_kicker_cys6s_79",cn="_title_cys6s_87",ln="_closeBtn_cys6s_94",dn="_body_cys6s_116",H={shell:en,overlay:tn,drawer:rn,handle:nn,header:sn,headerCopy:an,kicker:on,title:cn,closeBtn:ln,body:dn};function is({isOpen:e,onClose:n,episodes:s,currentEpisode:i,watchedEpisodes:r=[],onEpisodeClick:o,title:c,header:u}){return j(()=>{if(!e)return;const a=g=>{g.key==="Escape"&&n()},l=document.body.style.overflow;return document.body.style.overflow="hidden",document.addEventListener("keydown",a),()=>{document.body.style.overflow=l,document.removeEventListener("keydown",a)}},[e,n]),e?nt(t("div",{className:H.shell,role:"dialog","aria-modal":"true","aria-label":"Episode picker",children:[t("button",{className:H.overlay,type:"button",onClick:n,"aria-label":"Close episodes"}),t("aside",{className:H.drawer,children:[t("div",{className:H.handle}),t("div",{className:H.header,children:[t("div",{className:H.headerCopy,children:[t("span",{className:H.kicker,children:"Episode picker"}),t("h3",{className:H.title,children:"Choose an episode"})]}),t("button",{className:H.closeBtn,type:"button",onClick:n,"aria-label":"Close",children:t(K,{name:"times"})})]}),t("div",{className:H.body,children:t(Zr,{episodes:s,currentEpisode:i,watchedEpisodes:r,onEpisodeClick:o,variant:"drawer",title:c,header:u})})]})]}),document.body):null}const un="_sourceSelectionContainer_1am19_1",pn="_providerSelectContainer_1am19_14",fn="_providerSelect_1am19_14",hn="_sourceSelect_1am19_1",mn="_sourceButtons_1am19_70",bn="_sourceButton_1am19_70",gn="_active_1am19_95",cs={sourceSelectionContainer:un,providerSelectContainer:pn,providerSelect:fn,sourceSelect:hn,sourceButtons:mn,sourceButton:bn,active:gn},ls=({skipIntervals:e,showId:n,episodeNumber:s,episodeCount:i,sourceType:r,showMeta:o})=>{const c=ht(),u=st(),{engine:a,mediaRef:l}=ft({volumeKey:"playerVolume",mutedKey:"playerMuted"}),{isPlaying:g,isMuted:C,volume:y,duration:E,isScrubbing:p,isBuffering:d,isFullscreen:N,isSpeedBoostActive:f,showControls:w}=Re(a),h=a.containerRef,L=S(null),A=S(0),F=S(Math.random().toString(36).substring(2)),x=a.setShowControls,[P,O]=k(localStorage.getItem("autoSkipEnabled")==="true"),[ne,W]=k(null),[T]=k(vr),[J,fe]=k(T.fontSize),[He,he]=k(T.position),[qe,me]=k(T.bgOpacity),[We,be]=k(T.bgColor),[ze,ge]=k(T.textColor),[Ve,ye]=k(T.edge),[Ke,_e]=k(T.bold),ve=B((b,I)=>{if({fontSize:m=>typeof m!="number"?!1:(fe(m),!0),position:m=>typeof m!="number"?!1:(he(m),!0),bgOpacity:m=>typeof m!="number"?!1:(me(m),!0),bgColor:m=>typeof m!="string"?!1:(be(m),!0),textColor:m=>typeof m!="string"?!1:(ge(m),!0),edge:m=>m!=="shadow"&&m!=="outline"&&m!=="none"?!1:(ye(m),!0),bold:m=>typeof m!="boolean"?!1:(_e(m),!0)}[b](I))try{localStorage.setItem(_r[b],String(I))}catch{}},[]),[Ue,Qe]=k([]),[Ge,Ye]=k(null),[Xe,Je]=k(!1),[Ze,et]=k(!1),[tt,Se]=k(()=>{try{return localStorage.getItem("playerUseNativeControls")==="true"}catch{return!1}}),U=S(!1),se=S(-1),Z=B(()=>{const b=l.current;return!n||!s||!o?.name?null:{showId:n,episodeNumber:s,episodeCount:i,currentTime:a.getTimeline().currentTime,duration:a.getState().duration,showName:o.name,showThumbnail:o.thumbnail,nativeName:o.names?.native,englishName:o.names?.english,genres:Array.isArray(o.genres)?o.genres.map(I=>typeof I=="string"?I:I?.name).filter(Boolean):void 0,popularityScore:o.score,type:o.type,isPlaying:b?!b.paused:r==="iframe",sessionId:F.current,isAdult:o.isAdult}},[a,l,n,s,i,o,r]),$=B((b=!1,I=!1)=>{if(U.current)return!1;const R=Z();if(!R)return!1;const m=l.current;if(!m&&!b&&r!=="iframe"||r!=="iframe"&&R.duration<=0)return!1;const D=a.getTimeline().currentTime;if(!I){if(D===0)return!1;const Q=m?Math.abs(D-se.current):0;if(!b&&m&&D!==m.duration&&Q<5)return!1}return R.currentTime=D,se.current=D,b?(async()=>{try{await $e("progress.updateProgress",R),c.invalidateQueries({queryKey:[G.videoSources,n,s]}),c.invalidateQueries({queryKey:[G.continueWatching]}),c.invalidateQueries({queryKey:[G.thisWeekSchedule]}),c.invalidateQueries(u.continueWatching.pathFilter())}catch(Q){console.error("Failed to update progress:",Q)}})():$e("progress.updateProgress",R).catch(Q=>console.error("Failed to update progress:",Q)),!0},[a,Z,r,c,n,s,u.continueWatching,l]);j(()=>{const b=()=>{U.current||$(!0)};window.addEventListener("beforeunload",b),window.addEventListener("pagehide",b);const I=()=>{document.visibilityState==="hidden"&&b()};document.addEventListener("visibilitychange",I);const R=L;return()=>{window.removeEventListener("beforeunload",b),window.removeEventListener("pagehide",b),document.removeEventListener("visibilitychange",I),U.current||$(!0),R.current&&clearTimeout(R.current)}},[$]);const we=B(()=>a.setShowControls(!0),[a]),Ce=a.toggleFullscreen,ke=B(()=>{a.togglePlay(),x(!0)},[a,x]),xe=B(()=>{a.toggleMute(),x(!0)},[a,x]),Te=B(b=>{a.seekRelative(b),L.current&&clearTimeout(L.current),L.current=setTimeout(()=>$(!1,!0),1500),x(!0)},[a,$,x]),Ne=B(()=>{U.current=!1,$(!1,!0)},[$]),Le=B(()=>{x(!0),$(!1,!0)},[$,x]);j(()=>{U.current=!1,se.current=-1,A.current=0,F.current=Math.random().toString(36).substring(2),a.reset()},[a,n,s]);const Be=a.reset;j(()=>{const b=F.current;return()=>{at(b)}},[a,n,s]),j(()=>{if(r!=="iframe")return;$(!1,!0);const b=setInterval(()=>{$(!1,!0)},6e4);return()=>clearInterval(b)},[r,$]);const Ee=B(()=>{const b=l.current;if(!b)return;const I=b.currentTime||0,R=Date.now();R-A.current>6e4&&$()&&(A.current=R);const m=e.find(D=>I>=D.start_time&&I<D.end_time)||null;W(D=>D?.skip_id!==m?.skip_id?m:D),P&&m&&!b.paused&&(b.currentTime=m.end_time,W(null))},[l,e,P,$]),Ae=B(()=>{const b=Z();b&&(b.currentTime=b.duration,ot.progress.updateProgress.mutate(b).then(()=>{c.invalidateQueries({queryKey:[G.videoSources,n,s]}),c.invalidateQueries({queryKey:[G.continueWatching]})}).catch(I=>console.error("Failed to send final progress:",I)))},[Z,c,n,s]),Pe=B(()=>{U.current=!0,Ae()},[Ae]),rt=X(()=>({togglePlay:ke,seek:Te,toggleMute:xe,toggleFullscreen:Ce,onPlay:Ne,onPause:Le,formatTime:it,onTimeUpdate:Ee,onEnded:Pe,setShowControls:x,setIsAutoSkipEnabled:O,setCurrentSkipInterval:W,setSubtitleFontSize:fe,setSubtitlePosition:he,setSubtitleBgOpacity:me,setSubtitleBgColor:be,setSubtitleTextColor:ge,setSubtitleEdge:ye,setSubtitleBold:_e,setSubtitleStyle:ve,setAvailableSubtitles:Qe,setActiveSubtitleTrack:Ye,setShowSettings:Je,setShowVolumeSlider:et,flashControls:we,sendProgressUpdate:$,setUseNativeControls:Se,resetMediaState:Be}),[ke,Te,xe,Ce,Ne,Le,Ee,Pe,$,Se,Be,we,ve,x]);return{engine:a,refs:{videoRef:l,playerContainerRef:h},state:{isPlaying:g,isMuted:C,volume:y,isFullscreen:N,duration:E,showControls:w,isScrubbing:p,isAutoSkipEnabled:P,currentSkipInterval:ne,subtitleFontSize:J,subtitlePosition:He,subtitleBgOpacity:qe,subtitleBgColor:We,subtitleTextColor:ze,subtitleEdge:Ve,subtitleBold:Ke,availableSubtitles:Ue,activeSubtitleTrack:Ge,showSettings:Xe,showVolumeSlider:Ze,isBuffering:d,isSpeedBoostActive:f,useNativeControls:tt},actions:rt}};function yn(){try{return typeof navigator<"u"&&/android/i.test(navigator.userAgent)}catch{return!1}}function ds(e,n){const{refs:s,actions:i}=e,r=S(n);r.current=n;const o=S(!1),c=S(!1),u=a=>{try{if(a)return a.matches}catch{}try{return window.innerWidth>window.innerHeight}catch{return!1}};j(()=>{if(!yn())return;let a=null;const l=()=>{const g=s.playerContainerRef.current;if(u(a)){if(!r.current||!g||ae(s.videoRef.current)||c.current)return;o.current=!0,i.toggleFullscreen()}else c.current=!1,o.current&&(o.current=!1,ae(s.videoRef.current)&&i.toggleFullscreen())};try{a=window.matchMedia("(orientation: landscape)"),a.addEventListener?a.addEventListener("change",l):a.addListener(l)}catch{}return l(),()=>{try{a&&(a.removeEventListener?a.removeEventListener("change",l):a.removeListener(l))}catch{}}},[i,s.playerContainerRef,s.videoRef,n]),j(()=>{const a=()=>{if(!ae(s.videoRef.current)){o.current=!1;try{window.matchMedia("(orientation: landscape)").matches&&(c.current=!0)}catch{c.current=!0}}};return document.addEventListener("fullscreenchange",a),document.addEventListener("webkitfullscreenchange",a),()=>{document.removeEventListener("fullscreenchange",a),document.removeEventListener("webkitfullscreenchange",a)}},[s.videoRef])}const _n=e=>Math.max(8,Math.min(40,Math.ceil(e/16.7)+4));function us({videoRef:e,canvasRef:n,delayMs:s,enabled:i}){const r=S(s);r.current=s;const o=S([]),c=S(-1),u=S(-1),a=S(!1),l=S(0),g=S(null);j(()=>{const C=f=>{if(f)try{f.close()}catch{}},y=()=>{for(const f of o.current)C(f.bitmap);o.current=[]};if(!i){y(),c.current=-1,u.current=-1,a.current=!1,l.current=0;return}let E=!1;const p=()=>{g.current!==null&&(cancelAnimationFrame(g.current),g.current=null)},d=()=>{E||(p(),g.current=requestAnimationFrame(()=>{N()}))};async function N(){if(E)return;const f=e.current,w=n.current;if(!f||!w||f.videoWidth===0){d();return}if(f.paused||f.ended||document.hidden||f.readyState<HTMLMediaElement.HAVE_CURRENT_DATA){d();return}const h=f.getVideoPlaybackQuality().totalVideoFrames;if(h===c.current){d();return}(f.seeking||u.current>=0&&Math.abs(f.currentTime-u.current)>.5)&&(y(),a.current=!1,l.current=0,c.current=-1),u.current=f.currentTime,(w.width!==f.videoWidth||w.height!==f.videoHeight)&&(w.width=f.videoWidth,w.height=f.videoHeight);const L=Math.max(0,r.current||0);L>l.current&&(a.current=!1);try{const A=await createImageBitmap(f);if(E){C(A);return}c.current=h;const F=performance.now(),x=w.getContext("2d"),P=T=>{x&&x.drawImage(T,0,0,w.width,w.height)};if(L<=0){y(),a.current=!1,l.current=0,P(A),C(A),d();return}const O=o.current;O.push({bitmap:A,capture:F});const ne=_n(L);for(;O.length>ne;)C(O.shift()?.bitmap);let W=-1;for(let T=O.length-1;T>=0;T--)if(F-O[T].capture>=L){W=T;break}if(W!==-1){for(let J=0;J<W;J++)C(O.shift()?.bitmap);const T=O.shift();T?(P(T.bitmap),C(T.bitmap),a.current=!0,l.current=L):P(A)}else if(!a.current)P(A);else{const T=O.shift();T?(P(T.bitmap),C(T.bitmap)):P(A)}}catch{}d()}return d(),()=>{E=!0,p();for(const f of o.current)try{f.bitmap.close()}catch{}o.current=[]}},[i,e,n])}const Me=(e,n)=>{try{localStorage.setItem("playerVideoDelayMs",String(e)),localStorage.setItem("playerVideoDelayEnabled",String(n))}catch{}},je=e=>{try{localStorage.setItem("playerVideoDelayEnabled",String(e))}catch{}};function ps(e,n){const[s,i]=k(()=>{try{const h=Number(localStorage.getItem("playerVideoDelayMs"));if(Number.isFinite(h)&&h>=0&&h<=500)return Math.round(h)}catch{}return 180}),[r,o]=k(()=>{try{return localStorage.getItem("playerVideoDelayEnabled")==="true"}catch{return!1}}),[c,u]=k(!1),[a,l]=k(!1),g=S(null),C=S(null),y=h=>{const L=Math.max(0,Math.min(500,Math.round(h)));i(L);try{localStorage.setItem("playerVideoDelayMs",String(L))}catch{}},E=h=>{o(h),je(h)},p=B(()=>{l(!1),u(!1)},[]);return{videoDelayMs:s,videoDelayEnabled:r,setDelayEnabled:E,handleVideoDelayChange:y,isCalibrating:c,testClipActive:a,stopCalibration:p,openAvSyncCalibrator:()=>{g.current={enabled:r,ms:s},o(!0),je(!0),n?.(),u(!0)},cancelAvSyncCalibrator:()=>{const h=g.current;g.current=null,h&&(i(h.ms),o(h.enabled),Me(h.ms,h.enabled)),l(!1),u(!1)},applyAvSyncCalibrator:()=>{g.current=null,o(!0),Me(s,!0),l(!1),u(!1)},toggleTestClip:()=>{if(a){l(!1);return}const h=e.current;h&&!isNaN(h.currentTime)&&(C.current=h.currentTime),l(!0)},calibReturnRef:C,effectiveVideoDelayMs:r?s:0}}function fs(){const[e,n]=k(()=>{try{return localStorage.getItem("playerTheaterMode")==="true"}catch{return!1}});j(()=>{try{e?document.body.classList.add("theater-mode"):document.body.classList.remove("theater-mode")}catch(r){console.error(r)}return()=>{try{document.body.classList.remove("theater-mode")}catch(r){console.error(r)}}},[e]);const s=B(()=>{n(r=>{const o=!r;try{localStorage.setItem("playerTheaterMode",o.toString())}catch{}return o})},[]),i=B(r=>{if(e&&r.target===r.currentTarget){n(!1);try{localStorage.setItem("playerTheaterMode","false")}catch{}}},[e]);return{isTheaterMode:e,toggleTheaterMode:s,handleLayoutClick:i}}const z={enabled:!0,blur:60,saturation:150,brightness:70,opacity:60};function vn(){try{const e=localStorage.getItem("playerAmbientLight");if(!e)return z;const n=JSON.parse(e),s=(i,r,o,c)=>{const u=Number(i);return Number.isFinite(u)?Math.max(o,Math.min(c,u)):r};return{enabled:n.enabled??z.enabled,blur:s(n.blur,z.blur,0,120),saturation:s(n.saturation,z.saturation,0,200),brightness:s(n.brightness,z.brightness,20,120),opacity:s(n.opacity,z.opacity,10,100)}}catch{return z}}function hs(){const[e,n]=k(vn),s=B(i=>{n(r=>{const o={...r,...i};try{localStorage.setItem("playerAmbientLight",JSON.stringify(o))}catch{}return o})},[]);return{settings:e,update:s}}const Sn="_theaterAmbient_x9t0o_1",wn={theaterAmbient:Sn},ie=160,ce=90,Cn=120,ms=({videoRef:e,active:n,settings:s,className:i})=>{const r=S(null);return j(()=>{if(!n)return;const o=r.current,c=e.current;if(!o||!c)return;const u=o.getContext("2d",{alpha:!1});if(!u)return;let a=0,l=0,g=!1;const C=()=>{if(!(c.readyState<2||!c.videoWidth))try{const d=c.videoWidth,N=c.videoHeight,f=ie/ce,w=d/N;let h=d,L=N,A=0,F=0;w>f?(h=N*f,A=(d-h)/2):(L=d/f,F=(N-L)/2),u.drawImage(c,A,F,h,L,0,0,ie,ce)}catch{}},y=d=>{g||c.paused||(a=requestAnimationFrame(y),!(d-l<Cn)&&(l=d,C()))},E=()=>{g||(cancelAnimationFrame(a),l=0,a=requestAnimationFrame(y))},p=()=>cancelAnimationFrame(a);return c.addEventListener("play",E),c.addEventListener("pause",p),c.addEventListener("seeked",C),c.addEventListener("loadeddata",C),a=requestAnimationFrame(y),()=>{g=!0,cancelAnimationFrame(a),c.removeEventListener("play",E),c.removeEventListener("pause",p),c.removeEventListener("seeked",C),c.removeEventListener("loadeddata",C)}},[n,e]),n?t("canvas",{ref:r,width:ie,height:ce,"aria-hidden":"true",className:i??wn.theaterAmbient,style:{filter:`blur(${s.blur}px) saturate(${s.saturation}%) brightness(${s.brightness}%)`,opacity:s.opacity/100}}):null},kn="_row_1fq55_1",xn="_rowHeader_1fq55_9",Tn="_rowLabel_1fq55_17",Nn="_rowValue_1fq55_28",Ln="_slider_1fq55_36",Bn="_swatches_1fq55_99",En="_swatch_1fq55_99",An="_swatchPicked_1fq55_114",Pn="_colorInput_1fq55_120",$n="_segmented_1fq55_131",M={row:kn,rowHeader:xn,rowLabel:Tn,rowValue:Nn,slider:Ln,swatches:Bn,swatch:En,swatchPicked:An,colorInput:Pn,segmented:$n},In=({label:e,display:n,min:s,max:i,step:r,value:o,percent:c,onChange:u,onCommit:a})=>t("div",{className:M.row,children:[t("div",{className:M.rowHeader,children:[t("span",{className:M.rowLabel,children:e}),t("span",{className:M.rowValue,children:n})]}),t("input",{type:"range",className:M.slider,min:s,max:i,step:r,value:o,"aria-label":e,"data-speed-boost-ignore":"true",onInput:l=>u(Number(l.target.value)),onMouseDown:l=>l.stopPropagation(),onPointerDown:l=>l.stopPropagation(),onTouchStart:l=>l.stopPropagation(),onPointerUp:a,onPointerCancel:a,onTouchEnd:a,onKeyUp:a,onBlur:a,style:{"--slider-percent":`${c}%`}})]}),bs=({label:e,colors:n,value:s,onChange:i})=>t("div",{className:M.row,children:[t("div",{className:M.rowHeader,children:t("span",{className:M.rowLabel,children:e})}),t("div",{className:M.swatches,children:[n.map(r=>t("button",{type:"button","aria-label":`${e} ${r}`,"aria-pressed":s.toLowerCase()===r.toLowerCase(),onClick:()=>i(r),className:`${M.swatch} ${s.toLowerCase()===r.toLowerCase()?M.swatchPicked:""}`,style:{backgroundColor:r}},r)),t("input",{type:"color","aria-label":`Custom ${e.toLowerCase()}`,className:M.colorInput,value:s,"data-speed-boost-ignore":"true",onInput:r=>i(r.target.value),onMouseDown:r=>r.stopPropagation(),onPointerDown:r=>r.stopPropagation(),onTouchStart:r=>r.stopPropagation()})]})]});function gs({label:e,options:n,value:s,onChange:i}){return t("div",{className:M.row,children:[t("div",{className:M.rowHeader,children:t("span",{className:M.rowLabel,children:e})}),t("div",{className:M.segmented,role:"group","aria-label":e,children:n.map(r=>t("button",{type:"button","aria-pressed":s===r,onClick:()=>i(r),children:[t("span",{children:r}),s===r&&t(K,{name:"check",size:10})]},r))})]})}const re=10,pe=500,le=e=>Math.max(0,Math.min(pe,Math.round(e))),ys=({isOpen:e,ms:n,onChange:s,onApply:i,onClose:r,testClipActive:o,onTestClip:c})=>e?t("div",{role:"dialog","aria-label":"Calibrate audio video sync","data-speed-boost-ignore":"true",onClick:u=>u.stopPropagation(),style:{position:"absolute",right:8,bottom:112,width:"min(260px, calc(100% - 16px))",maxHeight:"calc(100% - 124px)",overflowY:"auto",overflowX:"hidden",zIndex:60,display:"flex",flexDirection:"column",alignItems:"center",gap:8,padding:12,borderRadius:"var(--radius-lg)",border:"1px solid var(--glass-border)",background:"rgba(18, 18, 22, 0.95)",boxShadow:"var(--glass-shadow)",backdropFilter:"blur(14px)",WebkitBackdropFilter:"blur(14px)",boxSizing:"border-box"},children:[t("div",{style:{fontSize:"0.8rem",fontWeight:800,color:"var(--text-primary)"},children:"A/V sync"}),t("div",{children:t(V,{size:"sm",variant:"secondary",onClick:c,children:o?"Back to video":"Preview test clip"})}),t("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",gap:6,flexWrap:"wrap"},children:[t(V,{size:"sm",onClick:()=>s(le(n-re)),"aria-label":"Decrease delay by 10 milliseconds",children:["− ",re,"ms"]}),t("div",{style:{fontSize:"1.1rem",fontWeight:800,minWidth:64,textAlign:"center"},children:[n,"ms"]}),t(V,{size:"sm",onClick:()=>s(le(n+re)),"aria-label":"Increase delay by 10 milliseconds",children:["+ ",re,"ms"]})]}),t(In,{label:"Video delay",display:`${n}ms`,min:0,max:pe,step:5,value:n,percent:n/pe*100,onChange:u=>s(le(u))}),t("div",{style:{display:"flex",gap:8,justifyContent:"center",flexWrap:"wrap"},children:[t(V,{size:"sm",variant:"secondary",onClick:r,children:"Cancel"}),t(V,{size:"sm",onClick:i,children:["Apply ",n,"ms"]})]})]}):null;function _s({videoRef:e,sourceType:n,resetKey:s,onEnd:i}){const r=S(!1),o=S(i);o.current=i,j(()=>{r.current=!1},[s]);const c=B(()=>{const a=e.current?.duration;!a||!Number.isFinite(a)||console.info(`[playback] duration ${a.toFixed(2)}s`)},[e]);return{checkEnd:B((a=!1)=>{const l=e.current;!l||n==="iframe"||r.current||!a&&!mt(l.currentTime,l.duration)||(r.current=!0,console.info(`[playback] end reached at ${l.currentTime.toFixed(2)}s / ${l.duration.toFixed(2)}s`),o.current())},[n,e]),logDuration:c}}export{ms as A,Gn as B,ts as C,q as D,os as E,z as F,In as M,ns as P,es as R,bs as S,Qn as T,rs as a,cs as b,zn as c,Vn as d,Jn as e,Yn as f,Un as g,ps as h,us as i,fs as j,_s as k,ds as l,hs as m,Wn as n,Zn as o,ss as p,Zr as q,Kn as r,Lr as s,qn as t,ls as u,ys as v,as as w,is as x,Xn as y,gs as z};
|