@serifpersia/dango 3.8.8 → 3.9.0
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-G3oigO8B.js → AnimeCard-NynqB4iz.js} +1 -1
- package/client/dist/assets/{AnimeInfo-CR4XFD0Q.js → AnimeInfo-B_VL5_wz.js} +1 -1
- package/client/dist/assets/{AnimeInfoPage-DbT2RS0J.js → AnimeInfoPage-DEHp6dbx.js} +2 -2
- package/client/dist/assets/{Asmr-BaXYabXN.js → Asmr-DMspoMra.js} +1 -1
- package/client/dist/assets/{AsmrPopup-6ky2U3uz.js → AsmrPopup-BRzUy94h.js} +1 -1
- package/client/dist/assets/{AsmrResetProgressModal-DXwHSqwf.js → AsmrResetProgressModal-s1eRMiAW.js} +1 -1
- package/client/dist/assets/{Home-ZHM84CD8.js → Home-B2BED0gb.js} +1 -1
- package/client/dist/assets/{Insights-C6rMfz5x.js → Insights-I1lFAHGg.js} +1 -1
- package/client/dist/assets/{LibraryListPage-XHeMv9aN.js → LibraryListPage-DVFA51uJ.js} +1 -1
- package/client/dist/assets/{ListeningList-Dm_owBjG.js → ListeningList-C3_v1Hfq.js} +1 -1
- package/client/dist/assets/{Manga-BmHoV3yQ.js → Manga-Dwkuv9to.js} +1 -1
- package/client/dist/assets/{MangaInfoPage-Blz86W7a.js → MangaInfoPage-Dbe96uTp.js} +1 -1
- package/client/dist/assets/{MangaReadPage-DzEhRrLW.js → MangaReadPage-DMH36Bre.js} +1 -1
- package/client/dist/assets/{MangaResetProgressModal-DdnI3zEg.js → MangaResetProgressModal-61xx7JY3.js} +1 -1
- package/client/dist/assets/{Mature-DGDC_8w6.js → Mature-BcCct3VM.js} +1 -1
- package/client/dist/assets/{MatureConsentModal-BXFvhDf0.js → MatureConsentModal-CkodsDv3.js} +1 -1
- package/client/dist/assets/{MediaCard-DW8QbvWe.js → MediaCard-qj_IAltC.js} +1 -1
- package/client/dist/assets/{OptionListMenu-Dxx8rcuO.js → OptionListMenu-BfK_U2JZ.js} +1 -1
- package/client/dist/assets/Player-CbaQmCP0.js +56 -0
- package/client/dist/assets/{PlayerProvider-BoJyuLEn.js → PlayerProvider-DMiS49-n.js} +1 -1
- package/client/dist/assets/PlayerSettings-DnDE4FjN.js +1 -0
- package/client/dist/assets/{QueueOptionsButton-B2p9VIz2.js → QueueOptionsButton-ZPslb1vw.js} +1 -1
- package/client/dist/assets/{QueueRail-BWcF0bqm.js → QueueRail-iewQtTf2.js} +1 -1
- package/client/dist/assets/{ReadingList-CKJ1Lt3H.js → ReadingList-DSn_7RPb.js} +1 -1
- package/client/dist/assets/{ResetProgressModal-BpNG6BGY.js → ResetProgressModal-DkUfWl68.js} +1 -1
- package/client/dist/assets/{Search-D5OkKFDj.js → Search-DleGk52z.js} +1 -1
- package/client/dist/assets/{Settings-_URnBHKL.js → Settings-BL3wetIt.js} +1 -1
- package/client/dist/assets/{SkeletonGrid-BVWffnlT.js → SkeletonGrid-CDNxWb9m.js} +1 -1
- package/client/dist/assets/{Trackers-D4BC2YOO.js → Trackers-ChCE0FpJ.js} +1 -1
- package/client/dist/assets/Tv-CnpSDbBA.js +4 -0
- package/client/dist/assets/{TvInfo-FWR5_kso.js → TvInfo-CBDMmwKZ.js} +1 -1
- package/client/dist/assets/{TvPopup-JKZPbL5t.js → TvPopup-CbjydYVj.js} +1 -1
- package/client/dist/assets/{TvSearch-Gddgkz5g.js → TvSearch-B46QqKRF.js} +1 -1
- package/client/dist/assets/{TvWatchlist-BTTqu23j.js → TvWatchlist-CKClWqAa.js} +1 -1
- package/client/dist/assets/{VirtualKeyboard-BD5VOYcJ.js → VirtualKeyboard-CO8IUNmo.js} +1 -1
- package/client/dist/assets/{WatchAlong-Czm3Pr1E.js → WatchAlong-B3amSjXR.js} +1 -1
- package/client/dist/assets/{WatchAlongPanel-Dsmcqrjh.js → WatchAlongPanel-CNXfPJV8.js} +1 -1
- package/client/dist/assets/{Watchlist-BMRAdzMF.js → Watchlist-Dy02-vjm.js} +1 -1
- package/client/dist/assets/{index-Bi-DGtzC.js → index-D1FwY1a_.js} +2 -2
- package/client/dist/assets/{libraryInvalidation-B5vX-vJv.js → libraryInvalidation-2b2_7vwd.js} +1 -1
- package/client/dist/assets/{playbackCompletion-Dz3OK72-.js → playbackCompletion-OZmyMjQt.js} +1 -1
- package/client/dist/assets/{useAnimeInfoData-CQTVAjpz.js → useAnimeInfoData-CdP9RtUB.js} +1 -1
- package/client/dist/assets/{useMangaLibrary-i1RAEkNy.js → useMangaLibrary-BANnF0ot.js} +1 -1
- package/client/dist/assets/{useMangaPopup-BMXrc7pH.js → useMangaPopup-BdNC1rr_.js} +1 -1
- package/client/dist/assets/{useProviders-DbKN3TWq.js → useProviders-B0XQ7aY4.js} +1 -1
- package/client/dist/assets/{useTv-4SqDfx-O.js → useTv-DM0uMYJ8.js} +1 -1
- package/client/dist/assets/{useTvLibrary-yhqRv3U7.js → useTvLibrary-aGEImTh1.js} +1 -1
- package/client/dist/assets/{useWatchAlongPlayer-BvcoBlQi.js → useWatchAlongPlayer-BkMVbNsw.js} +1 -1
- package/client/dist/index.html +1 -1
- package/package.json +2 -2
- package/server/dist/server.js +1 -1
- package/server/package.json +1 -1
- package/client/dist/assets/Player-CQy7jQbB.js +0 -56
- package/client/dist/assets/PlayerSettings-DSq0bKT6.js +0 -1
- package/client/dist/assets/Tv-B0-XYYdF.js +0 -4
package/server/package.json
CHANGED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/PlayerSettings-DSq0bKT6.js","assets/vendor-core-DfaOB3Rn.js","assets/index-Bi-DGtzC.js","assets/vendor-query-BBT5_sHx.js","assets/vendor-icons-DrybRNxP.js","assets/index-RwPVmyxh.css","assets/OptionListMenu-Dxx8rcuO.js","assets/useWatchAlongPlayer-BvcoBlQi.js","assets/PlayerProvider-BoJyuLEn.js","assets/PlayerProvider-ZeplRma-.css","assets/playbackCompletion-Dz3OK72-.js","assets/useWatchAlongPlayer-CkSxIqXL.css","assets/PlayerSettings-CbGkvNJq.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{u as t,g as ft,h as W,P as or,z as ar,d as ae,A as N,q as Q,y as ir,T as Te,o as lr,a as cr,c as ur,_ as dr,S as et}from"./vendor-core-DfaOB3Rn.js";import{p as Y,a2 as Bt,a3 as tt,o as mr,q as ce,t as be,J as Ne,a4 as pr,a5 as He,Q as ht,a6 as fr,e as hr,x as vr,y as gr,z as br,A as yr,d as Sr,u as Er,B as je,a7 as kr,a8 as wr,f as Tr}from"./index-Bi-DGtzC.js";import{P as Cr,a as Mr,b as Rr,F as Nr,s as Pr,c as _r}from"./PlayerProvider-BoJyuLEn.js";import{u as Dt,b as At,a as Et}from"./vendor-query-BBT5_sHx.js";import{p as wt,s as Ar,C as xr,a as Lr,P as Br,b as Ve,c as xt,f as $t,d as Dr,e as $r,g as Ir,r as Fr,u as Or,h as Wr,i as Ur,j as Vr,k as Qr,l as Kr,m as qr,n as Gr,o as we,A as zr,q as Hr,R as jr,E as Yr,t as Xr,v as S,w as Jr,x as Zr,y as en}from"./useWatchAlongPlayer-BvcoBlQi.js";import{I as ge}from"./vendor-icons-DrybRNxP.js";import{l as tn,i as nt,s as rn}from"./playbackCompletion-Dz3OK72-.js";import{M as nn}from"./MatureConsentModal-BXFvhDf0.js";import{u as sn}from"./useIsMobile-Dvx1uJ82.js";import{s as Re,Q as on}from"./QueueRail-BWcF0bqm.js";import{u as an,Q as ln}from"./QueueOptionsButton-B2p9VIz2.js";import{u as It}from"./useProviders-DbKN3TWq.js";import{A as cn}from"./AnimeMetaDetails-B3-A7O5H.js";import{S as un}from"./SynopsisText-B3Sa5pRv.js";import{W as dn}from"./WatchAlongPanel-Dsmcqrjh.js";import"./vendor-ui-3qrARCPr.js";const mn="_controlsOverlay_6uapd_1",pn="_hidden_6uapd_21",fn="_topControls_6uapd_27",hn="_backBtn_6uapd_47",vn="_videoTitleInfo_6uapd_67",gn="_animeTitle_6uapd_73",bn="_episodeNumber_6uapd_83",yn="_bottomControls_6uapd_91",Sn="_progressBarContainer_6uapd_110",En="_progressBar_6uapd_110",kn="_thumb_6uapd_129",wn="_scrubbing_6uapd_144",Tn="_watchedBar_6uapd_148",Cn="_bufferedBar_6uapd_149",Mn="_timeBubble_6uapd_191",Rn="_skipSegment_6uapd_225",Nn="_op_6uapd_235",Pn="_mixed_op_6uapd_236",_n="_ed_6uapd_240",An="_mixed_ed_6uapd_241",xn="_recap_6uapd_245",Ln="_mixed_recap_6uapd_246",Bn="_bottomControlsRow_6uapd_250",Dn="_leftControls_6uapd_258",$n="_rightControls_6uapd_259",In="_controlBtn_6uapd_266",Fn="_theaterBtn_6uapd_307",On="_nextEpisodeBtn_6uapd_311",Wn="_active_6uapd_332",Un="_timeDisplay_6uapd_336",Vn="_skipControls_6uapd_344",B={controlsOverlay:mn,hidden:pn,topControls:fn,backBtn:hn,videoTitleInfo:vn,animeTitle:gn,episodeNumber:bn,bottomControls:yn,progressBarContainer:Sn,progressBar:En,thumb:kn,scrubbing:wn,watchedBar:Tn,bufferedBar:Cn,timeBubble:Mn,skipSegment:Rn,op:Nn,mixed_op:Pn,ed:_n,mixed_ed:An,recap:xn,mixed_recap:Ln,bottomControlsRow:Bn,leftControls:Dn,rightControls:$n,controlBtn:In,theaterBtn:Fn,nextEpisodeBtn:On,active:Wn,timeDisplay:Un,skipControls:Vn},Qn=({player:r,handlers:o,visible:u,skipIntervals:m,showNextEpisodeButton:w,onNextEpisode:a,isTheaterMode:s,onTheaterModeToggle:n,settingsBtnRef:i,timeDisplayRef:b})=>{const{state:p,actions:h}=r,{showSettings:E}=p;return t("div",{className:`${B.controlsOverlay} ${u?"":B.hidden} `,"data-speed-boost-ignore":"true",style:{pointerEvents:"none",background:"none",justifyContent:"flex-end"},children:t("div",{className:B.bottomControls,"data-speed-boost-ignore":"true",onClick:M=>M.stopPropagation(),children:[t(Cr,{classes:{container:B.progressBarContainer,scrubbing:B.scrubbing,timeBubble:B.timeBubble,bar:B.progressBar,buffered:B.bufferedBar,watched:B.watchedBar,thumb:B.thumb},timeLabelRef:b,children:[p.duration>0&&r.state.currentSkipInterval&&t("div",{className:`${B.skipSegment} ${B[r.state.currentSkipInterval.skip_type]} `,style:{left:`${r.state.currentSkipInterval.start_time/p.duration*100}% `,width:`${(r.state.currentSkipInterval.end_time-r.state.currentSkipInterval.start_time)/p.duration*100}% `}}),m.map(M=>{const e=M.start_time/p.duration*100,g=(M.end_time-M.start_time)/p.duration*100;return t("div",{className:`${B.skipSegment} ${B[M.skip_type]} `,style:{left:`${e}% `,width:`${g}% `},title:M.skip_type.toUpperCase()},M.skip_id)})]}),t("div",{className:B.bottomControlsRow,children:[t("div",{className:B.leftControls,children:[t(Mr,{className:B.controlBtn}),t(Rr,{buttonClassName:B.controlBtn,onExpandedChange:h.setShowVolumeSlider}),t("span",{className:B.timeDisplay,ref:b,children:[h.formatTime(0)," / ",h.formatTime(p.duration)]}),p.currentSkipInterval&&!p.isAutoSkipEnabled&&!p.playbackLocked&&t("button",{className:B.controlBtn,onClick:()=>{p.currentSkipInterval&&(r.engine.seek(p.currentSkipInterval.end_time),h.setCurrentSkipInterval(null))},children:["Skip ",p.currentSkipInterval.skip_type==="op"?"Opening":"Ending"]})]}),t("div",{className:B.rightControls,children:[t("div",{className:B.skipControls,children:w&&t("button",{className:B.nextEpisodeBtn,onClick:a,title:"Play next episode",children:"Next EP"})}),t("button",{className:`${B.controlBtn} ${o.isSubtitleActive?B.active:""}`,onClick:o.handleCCToggle,title:o.isSubtitleActive?"Disable Subtitles":"Enable Subtitles","aria-label":"Toggle Subtitles",children:t(ge,{name:"closed-captioning",size:22})}),t("button",{ref:i,className:`${B.controlBtn} ${E?B.active:""} `,onClick:()=>h.setShowSettings(!E),"aria-label":"Settings",children:t(ge,{name:"cog"})}),t("button",{className:`${B.controlBtn} ${B.theaterBtn} ${s?B.active:""} `,onClick:M=>{M.stopPropagation(),n()},title:s?"Exit Theater Mode":"Theater Mode","aria-label":s?"Exit Theater Mode":"Theater Mode",children:t(ge,{name:"tv"})}),t(Nr,{className:B.controlBtn})]})]})]})})};function Kn(r){const{state:o,refs:u,actions:m}=r,w=n=>{if(!u.videoRef.current)return;m.setActiveSubtitleTrack(n);try{if(n===null||n==="off")Y.setItem("playerSubtitlesEnabled","false");else{Y.setItem("playerSubtitlesEnabled","true");const b=o.availableSubtitles.find(p=>p.label===n||p.lang===n);b?Y.setItem("playerLastSubtitle",Ar(b)):Y.setItem("playerLastSubtitle",n)}}catch{}let i=!1;Array.from(u.videoRef.current.textTracks).forEach(b=>{const h=n!==null&&n!=="off"&&(b.language===n||b.label===n)&&!i;b.mode=h?"showing":"hidden",h&&(i=!0)})},a=o.activeSubtitleTrack!==null&&o.activeSubtitleTrack!=="off";return{handleSubtitleSelection:w,isSubtitleActive:a,handleCCToggle:()=>{if(!u.videoRef.current)return;if(a){w("off");return}if(o.availableSubtitles.length===0)return;let n=null;try{n=Y.getItem("playerLastSubtitle")}catch{}const i=wt(o.availableSubtitles,{lastKey:n,enabled:!0});if(i<0)return;const b=o.availableSubtitles[i];w(b.label||b.lang)}}}const qn=ar(()=>Bt(()=>import("./PlayerSettings-DSq0bKT6.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12]))),Gn=({player:r,isAutoplayEnabled:o,onAutoplayChange:u,showNextEpisodeButton:m,onNextEpisode:w,videoSources:a,selectedSource:s,selectedLink:n,onSourceChange:i,loadingVideo:b,skipIntervals:p,animeTitle:h,episodeNumber:E,mode:M,isTheaterMode:e,onTheaterModeToggle:g,anime4kEnabled:T,onAnime4kToggle:_,anime4kSupported:x,anime4kProfile:y,onAnime4kProfileChange:c,anime4kInitializing:P,anime4kError:D,videoDelayEnabled:$,onVideoDelayToggle:U,videoDelayMs:f,onVideoDelayChange:v,onCalibrateAvSync:K,fallbackChoice:V,onFallbackChoiceChange:z,ambientSettings:ee,onAmbientChange:O,children:L,overlays:J,isInteractingExtra:A=!1,className:q,hideChrome:te=!1})=>{const{state:l,actions:R}=r,{showSettings:k}=l,{setShowSettings:C}=R,F=Kn(r),H=ft.useRef(null),Ce=ft.useRef(null),Ae=ft.useRef(null);W(()=>{const de=Pe=>{H.current&&!H.current.contains(Pe.target)&&Ce.current&&!Ce.current.contains(Pe.target)&&k&&C(!1)};return k&&document.addEventListener("mousedown",de),()=>{document.removeEventListener("mousedown",de)}},[k,C]);const ne=l.showControls||k||l.isScrubbing,j=l.activeSubtitleTrack!=="off"?l.availableSubtitles.find(de=>de.lang===l.activeSubtitleTrack||de.label===l.activeSubtitleTrack):void 0,xe=t(xr,{visible:ne,title:h,episode:E?`Episode ${E}`:void 0,mode:M,server:b?void 0:s?.sourceName,subtitles:b?void 0:j?.label||j?.lang,onBack:()=>window.history.back(),classes:{overlay:B.controlsOverlay,hidden:B.hidden,top:B.topControls,backBtn:B.backBtn,titleInfo:B.videoTitleInfo,title:B.animeTitle,episode:B.episodeNumber}}),$e=!b&&!l.isBuffering&&l.duration>0?t(Lr,{}):null,se=t(Qn,{player:r,handlers:F,visible:ne,skipIntervals:p,showNextEpisodeButton:m,onNextEpisode:w,isTheaterMode:e,onTheaterModeToggle:g,settingsBtnRef:Ce,timeDisplayRef:Ae}),oe=t(or,{fallback:null,children:t(qn,{ref:H,isOpen:k,onClose:()=>C(!1),videoSources:a,currentSource:s,currentLink:n,onSourceChange:i,subtitles:l.availableSubtitles,activeSubtitleTrack:l.activeSubtitleTrack,onSubtitleChange:F.handleSubtitleSelection,subtitleSettings:{fontSize:l.subtitleFontSize,position:l.subtitlePosition,bgOpacity:l.subtitleBgOpacity,bgColor:l.subtitleBgColor,textColor:l.subtitleTextColor,edge:l.subtitleEdge,bold:l.subtitleBold},onSubtitleSettingsChange:R.setSubtitleStyle,useNativeControls:!l.playbackLocked&&l.useNativeControls,onNativeControlsToggle:R.setUseNativeControls,anime4kEnabled:T,onAnime4kToggle:_,anime4kSupported:x,anime4kProfile:y,onAnime4kProfileChange:c,anime4kInitializing:P,anime4kError:D,videoDelayEnabled:$,onVideoDelayToggle:U,videoDelayMs:f,onVideoDelayChange:v,onCalibrateAvSync:K,isAutoSkipEnabled:l.isAutoSkipEnabled,onAutoSkipChange:de=>{R.setIsAutoSkipEnabled(de);try{Y.setItem("autoSkipEnabled",de.toString())}catch{}},isAutoplayEnabled:o,onAutoplayChange:u,fallbackChoice:V,onFallbackChoiceChange:z,isTheaterMode:e,ambientSettings:ee,onAmbientChange:O})}),Me=k?t("div",{"data-speed-boost-ignore":"true",onClick:de=>de.stopPropagation(),children:oe}):null;return t(Br,{engine:r.engine,topBar:xe,centerControls:$e,bottomBar:!b&&l.duration>0?se:null,settingsPanel:Me,overlays:J,isInteracting:A||l.showSettings||l.showVolumeSlider,nativeControls:!l.playbackLocked&&l.useNativeControls,className:q,chromeDisabled:te,children:L})},zn=({count:r=3})=>t("section",{className:Re.section,children:[t("div",{className:Re.header,children:t("button",{className:Re.headerToggle,disabled:!0,children:[t("span",{className:Re.title,children:t(tt,{width:"60px",height:"1.2rem",variant:"text"})}),t(ge,{name:"chevron-down",style:{opacity:.3}})]})}),t("div",{className:Re.list,children:Array.from({length:r}).map((o,u)=>t("div",{className:Re.item,style:{pointerEvents:"none"},children:[t("div",{className:Re.dragHandle,style:{opacity:.2},children:t(tt,{width:"16px",height:"16px",variant:"rectangular"})}),t("div",{className:Re.thumbnail,style:{overflow:"hidden",background:"transparent"},children:t(tt,{width:"100%",height:"100%",variant:"rectangular"})}),t("div",{className:Re.meta,children:[t(tt,{width:"80%",height:"1.2rem",variant:"text",className:Re.metaGap}),t(tt,{width:"40%",height:"0.8rem",variant:"rectangular",style:{borderRadius:"var(--radius-sm)"}})]})]},u))})]}),Hn={soft:"Softsub",hard:"Hardsub",mixed:"Mixed"},jn={direct:"Direct",embed:"Embed",cookie:"Needs cookie"},Yn=["direct","cookie","embed"],Xn=({selectedProvider:r,onProviderChange:o,isAdult:u,options:m})=>{const a=(m&&m.length>0?m:[]).filter(s=>s.mature===(u===!0));return t("div",{className:Ve.providerSelectContainer,children:[t("h4",{children:"Provider"}),t("select",{className:Ve.providerSelect,value:r,onChange:s=>o(s.currentTarget.value),children:Yn.map(s=>{const n=a.filter(i=>(i.tier??"direct")===s);return n.length===0?null:t("optgroup",{label:jn[s],children:n.map(i=>t("option",{value:i.id,children:i.sub?`${i.label} (${Hn[i.sub]})`:i.label},i.id))},s)})})]})},Jn=({videoSources:r,selectedSource:o,selectedLink:u,onSourceChange:m,onLinkChange:w})=>{const a=Array.isArray(r)?r:[];if(a.length===0)return null;const s=o?.type==="iframe"&&(o.links?.length??0)>1;return t("div",{className:Ve.sourceSelectionContainer,children:[t("h4",{children:"Source"}),t("div",{className:Ve.sourceButtons,children:a.map((n,i)=>t("button",{className:`${Ve.sourceButton} ${o?.sourceName===n.sourceName?Ve.active:""} `,onClick:()=>m(n),children:n.sourceName},`${n.sourceName}-${i}`))}),s&&t("select",{className:Ve.sourceSelect,"aria-label":"Fallback embed quality",value:u?.link??o.links[0]?.link??"",onChange:n=>{const i=o.links.find(b=>b.link===n.currentTarget.value);i&&w(i)},children:o.links.map(n=>t("option",{value:n.link,children:n.resolutionStr},n.link))})]})},Zn=ft.memo(Jn,(r,o)=>r.selectedSource?.sourceName===o.selectedSource?.sourceName&&r.selectedLink?.link===o.selectedLink?.link&&r.videoSources===o.videoSources),es={low:{sd:1.5,hd:1.3,fhd:1.25},balanced:{sd:2,hd:1.5,fhd:1.25},high:{sd:2.5,hd:2,fhd:1.5},denoise:{sd:1.5,hd:1.5,fhd:1.5}},ts={low:"ModeB",balanced:"ModeA",high:"ModeAA",denoise:"ModeC"},rs=5,ns=15e3,ss=`
|
|
3
|
-
@group(0) @binding(0) var extTex: texture_external;
|
|
4
|
-
@group(0) @binding(1) var extSamp: sampler;
|
|
5
|
-
struct VSOut {
|
|
6
|
-
@builtin(position) pos: vec4f,
|
|
7
|
-
@location(0) uv: vec2f,
|
|
8
|
-
};
|
|
9
|
-
@vertex
|
|
10
|
-
fn vs(@builtin(vertex_index) idx: u32) -> VSOut {
|
|
11
|
-
var positions = array<vec2f, 6>(
|
|
12
|
-
vec2f(-1.0, -1.0), vec2f(1.0, -1.0), vec2f(-1.0, 1.0),
|
|
13
|
-
vec2f(-1.0, 1.0), vec2f(1.0, -1.0), vec2f(1.0, 1.0)
|
|
14
|
-
);
|
|
15
|
-
var uvs = array<vec2f, 6>(
|
|
16
|
-
vec2f(0.0, 1.0), vec2f(1.0, 1.0), vec2f(0.0, 0.0),
|
|
17
|
-
vec2f(0.0, 0.0), vec2f(1.0, 1.0), vec2f(1.0, 0.0)
|
|
18
|
-
);
|
|
19
|
-
var out: VSOut;
|
|
20
|
-
out.pos = vec4f(positions[idx], 0.0, 1.0);
|
|
21
|
-
out.uv = uvs[idx];
|
|
22
|
-
return out;
|
|
23
|
-
}
|
|
24
|
-
@fragment
|
|
25
|
-
fn fs(@location(0) uv: vec2f) -> @location(0) vec4f {
|
|
26
|
-
return textureSampleBaseClampToEdge(extTex, extSamp, uv);
|
|
27
|
-
}
|
|
28
|
-
`;function os({videoRef:r,canvasRef:o,profile:u="balanced",delayMs:m=0}){const[w,a]=ae(!1),[s,n]=ae(()=>{try{return Y.getItem("anime4kEnabled")==="true"}catch{return!1}}),[i,b]=ae(!1),[p,h]=ae(null),[E,M]=ae(0),e=N(0),g=N(null),T=N(null),_=N(null),x=N(null),y=N(null),c=N(null),P=N(null),D=N(null),$=N(null),U=N(!1),f=N(-1),v=N(0),K=N(m);K.current=m;const V=N([]),z=N(!1),ee=N(!1),O=N(!1),L=N(null),J=N(-1),A=N(-1),q=N(!1),te=N(0);W(()=>{async function k(){if(typeof navigator>"u"||!navigator.gpu){a(!1);return}try{const C=await navigator.gpu.requestAdapter();a(!!C)}catch{a(!1)}}k()},[]),W(()=>{if(!s||!w)return;let k=!1;const C=++e.current,F=j=>{if(j)try{j.close()}catch{}},H=()=>{for(const j of V.current)F(j.bitmap);V.current=[]},Ce=j=>Math.max(8,Math.min(40,Math.ceil(j/16.7)+4));function Ae(){$.current!==null&&(cancelAnimationFrame($.current),$.current=null)}async function ne(){let j=r.current;const xe=o.current;if(!j||!xe||e.current!==C)return;const $e=performance.now()+ns;for(;(!j||j.videoWidth===0)&&performance.now()<$e;){if(await new Promise(ue=>requestAnimationFrame(ue)),k||e.current!==C)return;j=r.current}if(!j||j.videoWidth===0){!k&&e.current===C&&(h("Timed out waiting for video metadata"),b(!1),n(!1));return}const se=j.videoWidth,oe=j.videoHeight,Me=Math.max(se,oe),de=window.innerWidth,Pe=window.innerHeight,st=Math.max(de,Pe),ie=Me<st?st/Me:1,_e=es[u],ot=Me<=480?_e.sd:Me<=720?_e.hd:Me<=1080?_e.fhd:1,Le=Math.min(ot,ie);xe.width=Math.round(se*Le),xe.height=Math.round(oe*Le),b(!0),h(null),v.current=0,f.current=-1,J.current=-1,A.current=-1,q.current=!1,te.current=0,H(),U.current=!1;try{let ue=function(){k||e.current!==C||(Ae(),$.current=requestAnimationFrame(()=>{bt()}))};const{ModeA:Ye,ModeB:at,ModeC:vt,ModeAA:Ie}=await Bt(async()=>{const{ModeA:G,ModeB:le,ModeC:me,ModeAA:pe}=await import("./index-BOKlZEHq.js").then(fe=>fe.i);return{ModeA:G,ModeB:le,ModeC:me,ModeAA:pe}},[]);if(k||e.current!==C)return;if(!navigator.gpu)throw new Error("WebGPU not available");const it=await navigator.gpu.requestAdapter();if(k||e.current!==C)return;if(!it)throw new Error("No GPU adapter found");const I=await it.requestDevice();if(!I)throw new Error("Failed to get GPU device");if(k||e.current!==C){I.destroy();return}g.current=I;const Fe=xe.getContext("webgpu");if(!Fe)throw new Error("Failed to get WebGPU context");T.current=Fe;const lt=navigator.gpu.getPreferredCanvasFormat();Fe.configure({device:I,format:lt,alphaMode:"premultiplied"});const re=I.createTexture({size:[se,oe],format:"rgba16float",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),ct=ts[u],Qe=Math.round(se*Le),Se=Math.round(oe*Le),Ke=(()=>{switch(ct){case"ModeB":return new at({device:I,inputTexture:re,nativeDimensions:{width:se,height:oe},targetDimensions:{width:Qe,height:Se}});case"ModeC":return new vt({device:I,inputTexture:re,nativeDimensions:{width:se,height:oe},targetDimensions:{width:Qe,height:Se}});case"ModeAA":return new Ie({device:I,inputTexture:re,nativeDimensions:{width:se,height:oe},targetDimensions:{width:Qe,height:Se}});default:return new Ye({device:I,inputTexture:re,nativeDimensions:{width:se,height:oe},targetDimensions:{width:Qe,height:Se}})}})(),Oe=Ke.getOutputTexture(),Xe=I.createSampler({magFilter:"linear",minFilter:"linear"}),ut=I.createShaderModule({code:`
|
|
29
|
-
@group(0) @binding(0) var tex: texture_2d<f32>;
|
|
30
|
-
@group(0) @binding(1) var samp: sampler;
|
|
31
|
-
struct VertexOutput {
|
|
32
|
-
@builtin(position) pos: vec4f,
|
|
33
|
-
@location(0) uv: vec2f,
|
|
34
|
-
}
|
|
35
|
-
@vertex
|
|
36
|
-
fn vs(@builtin(vertex_index) idx: u32) -> VertexOutput {
|
|
37
|
-
var positions = array<vec2f, 6>(
|
|
38
|
-
vec2f(-1.0, -1.0), vec2f(1.0, -1.0), vec2f(-1.0, 1.0),
|
|
39
|
-
vec2f(-1.0, 1.0), vec2f(1.0, -1.0), vec2f(1.0, 1.0)
|
|
40
|
-
);
|
|
41
|
-
var uvs = array<vec2f, 6>(
|
|
42
|
-
vec2f(0.0, 1.0), vec2f(1.0, 1.0), vec2f(0.0, 0.0),
|
|
43
|
-
vec2f(0.0, 0.0), vec2f(1.0, 1.0), vec2f(1.0, 0.0)
|
|
44
|
-
);
|
|
45
|
-
var out: VertexOutput;
|
|
46
|
-
out.pos = vec4f(positions[idx], 0.0, 1.0);
|
|
47
|
-
out.uv = uvs[idx];
|
|
48
|
-
return out;
|
|
49
|
-
}
|
|
50
|
-
@fragment
|
|
51
|
-
fn fs(@location(0) uv: vec2f) -> @location(0) vec4f {
|
|
52
|
-
return textureSample(tex, samp, uv);
|
|
53
|
-
}
|
|
54
|
-
`}),qe=I.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),Je=I.createRenderPipeline({layout:I.createPipelineLayout({bindGroupLayouts:[qe]}),vertex:{module:ut,entryPoint:"vs"},fragment:{module:ut,entryPoint:"fs",targets:[{format:lt}]},primitive:{topology:"triangle-list"}}),gt=I.createBindGroup({layout:qe,entries:[{binding:0,resource:Oe.createView()},{binding:1,resource:Xe}]});try{const G=I.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,externalTexture:{}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),le=I.createShaderModule({code:ss}),me=I.createRenderPipeline({layout:I.createPipelineLayout({bindGroupLayouts:[G]}),vertex:{module:le,entryPoint:"vs"},fragment:{module:le,entryPoint:"fs",targets:[{format:"rgba16float"}]},primitive:{topology:"triangle-list"}});L.current={pipeline:me,layout:G,inputView:re.createView()}}catch{L.current=null}_.current=Ke,x.current=re,y.current=Oe,c.current=Je,P.current=Xe,D.current=qe,ee.current=!1,O.current=!1;async function Ze(){const G=L.current;if(!G||ee.current)return!1;const le=r.current;if(!le)return!1;const me=!O.current;me&&I.pushErrorScope("validation");try{const pe=I.importExternalTexture({source:le}),fe=I.createBindGroup({layout:G.layout,entries:[{binding:0,resource:pe},{binding:1,resource:Xe}]}),he=I.createCommandEncoder(),ve=he.beginRenderPass({colorAttachments:[{view:G.inputView,loadOp:"load",storeOp:"store"}]});ve.setPipeline(G.pipeline),ve.setBindGroup(0,fe),ve.draw(6),ve.end(),I.queue.submit([he.finish()])}catch{return ee.current=!0,L.current=null,!1}if(me){const pe=await I.popErrorScope().catch(()=>null);if(pe)return console.warn("[anime4k] blit probe failed:",pe.message),ee.current=!0,L.current=null,!1;O.current=!0}return!0}b(!1);async function bt(){if(k||e.current!==C||!Fe)return;const G=r.current;if(!G||G.videoWidth===0){ue();return}if(G!==j||G.videoWidth!==se||G.videoHeight!==oe){M(fe=>fe+1);return}if(G.paused||G.ended||document.hidden||G.readyState<HTMLMediaElement.HAVE_CURRENT_DATA){ue();return}const le=G.getVideoPlaybackQuality().totalVideoFrames;if(le===A.current){ue();return}if(U.current){ue();return}const me=G.currentTime;(G.seeking||J.current>=0&&Math.abs(me-J.current)>.5)&&(H(),q.current=!1,te.current=0,A.current=-1),J.current=me;const pe=Math.max(0,K.current||0);pe>te.current&&(q.current=!1),U.current=!0;try{const fe=performance.now();let he=null,ve=!1;if(pe<=0){V.current.length>0&&H(),q.current=!1,te.current=0;let Ee=!1;if(!z.current)try{I.queue.copyExternalImageToTexture({source:G},{texture:re},[se,oe]),A.current=le,Ee=!0}catch(Z){if(Z instanceof TypeError)z.current=!0;else throw Z}if(!Ee&&!ee.current&&L.current&&await Ze()&&(A.current=le,Ee=!0),!Ee){const Z=await createImageBitmap(G);A.current=le,I.queue.copyExternalImageToTexture({source:Z},{texture:re},[se,oe]),F(Z)}}else{const Ee=await createImageBitmap(G);A.current=le;const Z=V.current;Z.push({bitmap:Ee,capture:fe});const dt=Ce(pe);for(;Z.length>dt;)F(Z.shift()?.bitmap);let ze=-1;for(let ye=Z.length-1;ye>=0;ye--)if(fe-Z[ye].capture>=pe){ze=ye;break}if(ze!==-1){for(let mt=0;mt<ze;mt++)F(Z.shift()?.bitmap);const ye=Z.shift();ye?(he=ye.bitmap,q.current=!0,te.current=pe):(he=Ee,ve=!0)}else if(!q.current)he=Ee,ve=!0;else{const ye=Z.shift();he=ye?ye.bitmap:Ee,ye||(ve=!0)}if(!he){U.current=!1,ue();return}I.queue.copyExternalImageToTexture({source:he},{texture:re},[se,oe]),ve||F(he)}const Ge=I.createCommandEncoder();await Ke.pass(Ge);const We=Ge.beginRenderPass({colorAttachments:[{view:Fe.getCurrentTexture().createView(),clearValue:{r:0,g:0,b:0,a:1},loadOp:"clear",storeOp:"store"}]});We.setPipeline(Je),We.setBindGroup(0,gt),We.draw(6),We.end(),I.queue.submit([Ge.finish()]),f.current=le,v.current=0,I.queue.onSubmittedWorkDone().then(()=>{e.current===C&&(U.current=!1)})}catch(fe){if(U.current=!1,v.current+=1,v.current>=rs&&!k&&e.current===C){console.error(fe),h(fe instanceof Error?fe.message:"Render error"),n(!1);return}}ue()}ue()}catch(ue){!k&&e.current===C&&(T.current?.unconfigure(),g.current?.destroy(),g.current=null,T.current=null,h(ue instanceof Error?ue.message:"Failed to initialize upscaler"),b(!1),n(!1))}}return ne(),()=>{k=!0,e.current+=1,Ae(),H(),T.current?.unconfigure(),x.current&&(x.current.destroy(),x.current=null),y.current&&(y.current.destroy(),y.current=null),g.current&&(g.current.destroy(),g.current=null),_.current=null,c.current=null,P.current=null,D.current=null,L.current=null,T.current=null,U.current=!1}},[s,w,r,o,u,E]);const l=Q(k=>{n(k);try{Y.setItem("anime4kEnabled",String(k))}catch{}},[]),R=Q(()=>{n(k=>{const C=!k;try{Y.setItem("anime4kEnabled",String(C))}catch{}return C})},[]);return{isWebGPUSupported:w,isEnabled:s,isInitializing:i,error:p,toggle:R,setEnabled:l}}function as({videoRef:r,episodeKey:o,isEnabled:u,isSupported:m,mediaReady:w,isIframeSource:a,setEnabled:s}){const n=N(null),i=N(!1),b=N(!1),p=N(s);p.current=s,W(()=>{const h=n.current;n.current=o,!(h===null||h===o)&&(!u||!m||(i.current=!0,b.current=!1,p.current(!1)))},[o,u,m]),W(()=>{if(!i.current)return;if(u){b.current&&(i.current=!1);return}if(b.current=!0,!w)return;if(a){i.current=!1,p.current(!0);return}const h=r.current;if(!h)return;let E,M=!1;const e=()=>{M||(M=!0,i.current=!1,p.current(!0))};if(h.readyState>=2)return E=window.setTimeout(e,500),()=>window.clearTimeout(E);const g=()=>{window.setTimeout(e,500)};return h.addEventListener("canplay",g,{once:!0}),h.addEventListener("playing",g,{once:!0}),E=window.setTimeout(e,5e3),()=>{window.clearTimeout(E),h.removeEventListener("canplay",g),h.removeEventListener("playing",g)}},[u,w,a,r])}const is=()=>Y.getItem("preferredMode")==="dub"?"dub":"sub",ls=/^[a-z0-9-]+$/i,Ft=r=>r?"preferredProviderMature":"preferredProvider",Ot=r=>{const o=Y.getItem(Ft(r));return o&&ls.test(o)?o:null},Wt=(r,o)=>{Y.setItem(Ft(o),r)},cs=()=>Ot(!1)??"megaplay",us=()=>({showMeta:{},episodes:[],watchedEpisodes:[],watchlistStatus:null,showCombinedDetails:!1,currentMode:is(),inWatchlist:!1,videoSources:[],selectedSource:null,selectedLink:null,isAutoplayEnabled:tn(),showResumeModal:!0,resumeProgressPending:!0,resumeTime:0,resumeDuration:0,skipIntervals:[],selectedProvider:cs(),loadingShowData:!0,loadingVideo:!1,error:null,showCookieModal:!1,cookieProvider:null});function ds(r,o){switch(o.type){case"SET_STATE":return{...r,...o.payload};case"SET_MODE":return{...r,currentMode:o.payload,videoSources:[],selectedSource:null,selectedLink:null};case"SET_PROVIDER":return{...r,selectedProvider:o.payload};default:return r}}async function Lt(r,o,u,m,w=!1){if(!r||!o)throw new Error("Missing params");try{const[a,s,n,i]=await Promise.all([be.data.video.query({showId:r,episodeNumber:o,mode:u.currentMode,provider:u.selectedProvider}).catch(y=>{const c=y.data?.cause;return y.message==="AUTH_REQUIRED"&&c?.provider==="mkissa"&&m({type:"SET_STATE",payload:{showCookieModal:!0,cookieProvider:"mkissa"}}),null}),be.progress.getEpisode.query({showId:r,episodeNumber:o}).catch(()=>null),be.settings.getByKey.query({key:"preferredSource"}).catch(()=>null),be.data.skipTimes.query({showId:r,episodeNumber:o}).catch(()=>[])]),b=n?.value,p=a?.filter(y=>{const c=y.sourceName.toLowerCase();return u.currentMode==="dub"?c.includes("eng")||c.includes("dub"):c.includes("jpn")||c.includes("sub")||!c.includes("eng")&&!c.includes("dub")})??[],h=p.length>0?p:a??[];let E=h.length>0?h[0]:null;if(b){const y=h.find(c=>c.sourceName===b);y&&(E=y)}const M=E&&E.links.length>0?E.links.sort((y,c)=>(parseInt(c.resolutionStr)||0)-(parseInt(y.resolutionStr)||0))[0]:null,e=s?.currentTime||0,g=s?.duration||0,T=e,x=(Array.isArray(i)?i:i?.results||[]).map(y=>({skip_id:y.skip_id||"",skip_type:y.skip_type||"",start_time:y.interval?.start_time??y.start_time??0,end_time:y.interval?.end_time??y.end_time??0})).filter(y=>y.end_time>0);return(!a||a.length===0)&&(w||Ne.error(`No video sources found for ${u.selectedProvider}`)),{videoSources:a,selectedSource:E,selectedLink:M,resumeTime:T,resumeDuration:g,showResumeModal:T>5&&!nt(T,g)&&E?.type!=="iframe",skipIntervals:x,fetchedEpisodeNumber:o}}catch(a){const s=a;if(s.message==="AUTH_REQUIRED")return m({type:"SET_STATE",payload:{showCookieModal:!0,cookieProvider:s.provider}}),{videoSources:[],selectedSource:null,selectedLink:null,resumeTime:0,resumeDuration:0,showResumeModal:!1,skipIntervals:[],fetchedEpisodeNumber:o};throw a}}const ms=(r,o,u,m)=>{const[w,a]=ir(ds,u,l=>({...us(),showMeta:l?.name?{name:l.name,thumbnail:l.thumbnail,nativeName:l.nativeName,englishName:l.englishName,names:{romaji:l.name||l.englishName,english:l.englishName||l.name,native:l.nativeName}}:{}})),s=m?.watchSelection,n=Te(()=>s?{...w,selectedProvider:s.provider,currentMode:s.mode}:w,[w,s]),i=Dt(),b=mr(),p=N(null),h=N(null),{options:E}=It(),M=Te(()=>E.filter(l=>(l.kind??"anime")==="anime"),[E]),e=o||n.initialEpisode,g=`${r}:${e}`,T=N(g);W(()=>{T.current!==g&&(T.current=g,a({type:"SET_STATE",payload:{selectedSource:null,selectedLink:null}}))},[g,a]),W(()=>{!s&&r&&/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(r)&&n.selectedProvider!=="animepahe"&&p.current!==r&&(p.current=r,a({type:"SET_PROVIDER",payload:"animepahe"}))},[r,n.selectedProvider,s]);const{data:_,isLoading:x,error:y}=an(r),{data:c}=At({queryKey:[ce.playerData,r,n.currentMode,n.selectedProvider],queryFn:async()=>{if(!r)throw new Error("No showId");const l=async()=>{try{const H=await be.data.episodes.query({showId:r,mode:n.currentMode,provider:n.selectedProvider}).catch(()=>null);if(H?.episodes?.length)return H}catch{}return null},[R,k,C]=await Promise.all([l(),be.watchlist.check.query({showId:r}).catch(()=>({inWatchlist:!1,status:null})),be.progress.getWatchedEpisodes.query({showId:r}).catch(()=>[])]),F=R?.episodes?R.episodes.sort((H,Ce)=>parseFloat(H)-parseFloat(Ce)):[];return{description:R?.description||"",episodes:F,inWatchlist:k.inWatchlist,watchlistStatus:k.status??null,watchedEpisodes:C}},enabled:!!r});W(()=>{!o&&c?.episodes&&c.episodes.length>0&&!o&&a({type:"SET_STATE",payload:{initialEpisode:c.episodes[0]}})},[c,o]),W(()=>{if(s||_?.isAdult===void 0||h.current===r)return;const l=_.isAdult===!0,R=M.filter(C=>C.mature===l);if(R.length===0||M.find(C=>C.id===n.selectedProvider)?.mature===l)return;const k=Ot(l);h.current=r??null,a({type:"SET_PROVIDER",payload:R.find(C=>C.id===k)?.id??R[0].id})},[_?.isAdult,n.selectedProvider,r,M,s]),W(()=>{if(s||!r||!/^dango-mt-\d+$/.test(r)||h.current===`temp:${r}`)return;const l=_?.provider;l&&(h.current=`temp:${r}`,l!==n.selectedProvider&&a({type:"SET_PROVIDER",payload:l}))},[r,_,n.selectedProvider,s]);const{data:P,isLoading:D,isFetching:$,error:U}=At({queryKey:[ce.videoSources,r,e,n.selectedProvider,n.currentMode],queryFn:()=>Lt(r,e,n,a),enabled:!!r&&!!e&&!(n.showMeta?.isAdult===!0&&!m?.hasMatureConsent)}),{mutateAsync:f}=Et({mutationFn:async({wasIn:l,showMeta:R})=>{if(!r)throw new Error("Missing showId");if(l)await be.watchlist.remove.mutate({id:r});else{const k=R.name||R.names?.romaji;if(!k)throw new Error("Missing show name");await be.watchlist.add.mutate({id:r,name:k,thumbnail:R.thumbnail,nativeName:R.names?.native,englishName:R.names?.english,type:R.type,isAdult:R.isAdult})}return!l},onSuccess:l=>{Ne.success(l?"Added to watchlist":"Removed from watchlist"),i.invalidateQueries({queryKey:[ce.playerData,r]}),i.invalidateQueries({queryKey:[ce.showData,r]}),i.invalidateQueries({queryKey:[ce.watchlist]})},onError:l=>Ne.error(l instanceof Error?l.message:"Failed to update watchlist")}),v=Q(async()=>{!r||!_||await f({wasIn:!!c?.inWatchlist,showMeta:_})},[r,_,c?.inWatchlist,f]),K=Q(async l=>{try{await be.settings.set.mutate({key:"preferredSource",value:l})}catch(R){console.error(R)}},[]),{mutateAsync:V,isPending:z}=Et({mutationFn:async({status:l})=>{if(!r)throw new Error("Missing showId");if(c?.inWatchlist)return await be.watchlist.setStatus.mutate({id:r,status:l}),l;const R=_,k=R?.name||R?.names?.romaji;if(!R||!k)throw new Error("Missing show name");return await be.watchlist.add.mutate({id:r,name:k,thumbnail:R.thumbnail,nativeName:R.names?.native,englishName:R.names?.english,type:R.type,isAdult:R.isAdult,status:l}),l},onSuccess:l=>{a({type:"SET_STATE",payload:{inWatchlist:!0,watchlistStatus:l}}),Ne.success(`Moved to ${l}`),i.invalidateQueries({queryKey:[ce.showData,r]}),i.invalidateQueries({queryKey:[ce.watchlist]}),i.invalidateQueries({queryKey:[ce.continueWatching]})},onError:()=>Ne.error("Failed to update watchlist status")}),ee=Q(async()=>{await V({status:"Completed"})},[V]),{mutateAsync:O,isPending:L}=Et({mutationFn:async({episodeNumber:l,duration:R,showMeta:k,episodes:C})=>{await be.progress.updateProgress.mutate({showId:r??"",episodeNumber:l,currentTime:R,duration:R,showName:k.name,showThumbnail:k.thumbnail,nativeName:k.names?.native,englishName:k.names?.english,genres:k.genres?.map(F=>F.name),popularityScore:pr(k.score)??void 0,type:k.type,status:k.status,episodeCount:C.length,isAdult:k.isAdult})},onSuccess:(l,R)=>{Ne.success(`Episode ${R.episodeNumber} marked as watched`),i.invalidateQueries({queryKey:[ce.playerData,r]}),i.invalidateQueries({queryKey:[ce.showMeta,r]}),i.invalidateQueries({queryKey:[ce.videoSources,r,R.episodeNumber]}),i.invalidateQueries({queryKey:[ce.continueWatching]}),i.invalidateQueries({queryKey:[ce.thisWeekSchedule]}),i.invalidateQueries(b.continueWatching.pathFilter())},onError:()=>Ne.error("Failed to mark episode as watched")}),J=Q(async(l,R)=>{!r||!_||await O({episodeNumber:l,duration:R,showMeta:_,episodes:c?.episodes||[]})},[r,_,c?.episodes,O]),A=Q(async()=>{a({type:"SET_STATE",payload:{showCombinedDetails:!n.showCombinedDetails}})},[n.showCombinedDetails]),q=Te(()=>{const l=y||U,R=l?l.message:null,k=R==="AUTH_REQUIRED"?null:R,C=P&&P.fetchedEpisodeNumber===e?P:null,F=!!P&&!C,H=s?C?.videoSources?.find(ne=>ne.sourceName===s.source&&ne.type!=="iframe"&&ne.links.some(j=>j.hls))??null:null,Ae=(n.selectedSource?.sourceName===H?.sourceName?H?.links.find(ne=>ne.hls&&ne.link===n.selectedLink?.link):null)??H?.links.filter(ne=>ne.hls).slice().sort((ne,j)=>(parseInt(j.resolutionStr)||0)-(parseInt(ne.resolutionStr)||0))[0]??null;return{...n,currentEpisode:e,showMeta:{...n.showMeta||{},..._||{}},episodes:c?.episodes||[],watchedEpisodes:c?.watchedEpisodes||[],inWatchlist:!!c?.inWatchlist,watchlistStatus:c?.watchlistStatus??n.watchlistStatus??null,videoSources:C?.videoSources||[],selectedSource:s?H:n.selectedSource||C?.selectedSource||null,selectedLink:s?Ae:n.selectedLink||C?.selectedLink||null,resumeTime:s?0:C?.resumeTime||0,resumeDuration:C?.resumeDuration||0,resumeProgressPending:$,showResumeModal:!s&&n.showResumeModal&&(C?.showResumeModal??!1),skipIntervals:C?.skipIntervals||[],loadingShowData:x,loadingVideo:D||F,error:k,fetchedEpisodeNumber:C?.fetchedEpisodeNumber}},[n,_,c,P,x,D,$,y,U,e,s]),te=Q((l,R)=>{const k=R||r;if(!k||!l||k===r&&l===e)return;const F=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(k)&&n.selectedProvider!=="animepahe"?"animepahe":n.selectedProvider,H=["video-sources",k,l,F,n.currentMode];i.getQueryState(H)?.status!=="success"&&i.prefetchQuery({queryKey:H,queryFn:()=>Lt(k,l,{selectedProvider:F,currentMode:n.currentMode},a,!0),staleTime:300*1e3,gcTime:1800*1e3})},[r,e,i,n,a]);return{state:q,dispatch:a,toggleWatchlist:v,moveToCompleted:ee,setPreferredSource:K,handleToggleDetails:A,markEpisodeWatched:J,prefetchEpisodeSources:te,isMarkingWatched:L,isUpdatingWatchlistStatus:z}};function ps({onPrevious:r,onNext:o,onToggleTheater:u,flashControls:m}){W(()=>{const w=a=>{a.defaultPrevented||a.ctrlKey||a.metaKey||a.altKey||a.repeat||a.target.closest('input, textarea, button, select, a, [role="button"], [role="slider"], [contenteditable="true"]')||(["arrowup","arrowdown","arrowleft","arrowright"].includes(a.key.toLowerCase())&&m(),a.key.toLowerCase()==="n"&&o(),a.key.toLowerCase()==="p"&&r(),a.key.toLowerCase()==="t"&&u())};return document.addEventListener("keydown",w),()=>{document.removeEventListener("keydown",w)}},[m,o,r,u])}const rt=(r,o,u)=>r.showId===o||!!u&&r.showId===u;function fs({testClipActive:r,selectedSourceType:o,onEnded:u,queue:m,removeFromQueue:w,showId:a,showMetaId:s,showStatus:n,currentEpisode:i,isAutoplayEnabled:b,nextEpisode:p,previousEpisode:h,navigate:E,invalidateContinueWatching:M,dispatch:e}){const[g,T]=ae(!1),[_,x]=ae(null),[y,c]=ae(null),P=N(w);P.current=w;const D=N(!1),$=n?.toUpperCase()==="FINISHED";W(()=>{D.current=!1,T(!1)},[a,i]);const U=Q(()=>{if(r||D.current)return;D.current=!0,u();const O=m.find(L=>rt(L,a,s)&&L.episodeNumber===i);if(m.length>0){const L=m.findIndex(A=>rt(A,a,s)&&A.episodeNumber===i),J=L>=0?m[L+1]||null:m[0];c({nextItem:J,playedItem:O||null}),x(2);return}if(O&&P.current({showId:O.showId,episodeNumber:O.episodeNumber}),b&&p){M(),E(`/watch/${a}/${p}`);return}!p&&$&&T(!0)},[u,E,m,a,s,i,p,b,M,r,$]),f=Q(()=>{if(m.length===0)return;u();const O=m.find(A=>rt(A,a,s)&&A.episodeNumber===i),L=m.findIndex(A=>rt(A,a,s)&&A.episodeNumber===i),J=L>=0?m[L+1]||null:m[0];O&&w({showId:O.showId,episodeNumber:O.episodeNumber}),J?E(`/watch/${J.showId}/${J.episodeNumber}`):!p&&$&&T(!0)},[u,E,m,w,a,s,i,p,$]),v=Q(()=>{p&&(M(),E(`/watch/${a}/${p}`)),T(!1),e({type:"SET_STATE",payload:{showResumeModal:!1}})},[p,E,a,e,M]),K=Q(()=>{m.length>0?f():p?v():Ne.error("No next episode available")},[m.length,f,v,p]),V=Q(()=>T(!1),[]),z=Q(()=>{c(null),x(null)},[]),ee=Q(()=>{h&&E(`/watch/${a}/${h}`)},[h,E,a]);return W(()=>{const O=L=>{L.origin===window.location.origin&&o==="iframe"&&L.data?.type==="ANI_WEB_MEDIA_ENDED"&&U()};return window.addEventListener("message",O),()=>window.removeEventListener("message",O)},[U,o]),W(()=>{if(!y||_===null)return;if(_<=0){const{nextItem:L,playedItem:J}=y;c(null),x(null),J&&P.current({showId:J.showId,episodeNumber:J.episodeNumber}),L?E(`/watch/${L.showId}/${L.episodeNumber}`):!p&&$&&T(!0);return}const O=window.setTimeout(()=>{x(L=>L===null?null:L-1)},1e3);return()=>window.clearTimeout(O)},[y,_,E,p,$]),{showCompleteModal:g,queueCountdown:_,pendingQueueTransition:y,handleQueueTransition:f,handleNextEpisode:v,handleNShortcut:K,handlePreviousEpisode:ee,handlePlaybackFinished:U,closeCompleteModal:V,cancelQueueTransition:z}}function hs({videoRef:r,queue:o,showId:u,showMetaId:m,currentEpisode:w,selectedSource:a,hasNextEpisode:s,nextEpisode:n,prefetchEpisodeSources:i,matchesQueueItem:b}){const[p,h]=ae(!1),E=N(i);E.current=i;const M=N("");W(()=>{h(!1)},[w]);const e=Q(()=>{const g=r.current;if(!g||a?.type==="iframe")return;const T=g.duration,_=g.currentTime;if(!T||Number.isNaN(T)){h(!1);return}if(T-_<=60){const x=o.findIndex(P=>b(P,u,m)&&P.episodeNumber===w),y=o.length>0?x>=0?o[x+1]||null:o[0]:null,c=y?`${y.showId}:${y.episodeNumber}`:s?`${u}:${n}`:"";c&&M.current!==c&&(M.current=c,y?E.current(y.episodeNumber,y.showId):E.current(n??""))}h(s&&nt(_,T))},[r,a,o,u,m,w,s,n,b]);return{showNextEpisodePrompt:p,handleThresholds:e}}const kt="fallbackChoice";function vs(){try{const r=Y.getItem(kt);return r==="iframe"||r==="retry"?r:null}catch{return null}}function gs(r){try{r===null?Y.removeItem(kt):Y.setItem(kt,r)}catch{}}function bs({showId:r,episodeNumber:o,currentMode:u,selectedProvider:m,selectedSourceType:w,videoSources:a,isAdult:s,providerOrder:n,matureProviders:i,setPreferredSource:b,dispatch:p,showControls:h}){const E=N(!1),M=N([]),e=N(!1),[g,T]=ae(null),[_,x]=ae(!1),[y,c]=ae(!1),[P,D]=ae(()=>vs()??"ask"),$=Q(A=>{D(A),gs(A==="ask"?null:A)},[]),U=N(P);W(()=>{U.current=P},[P]);const f=N(a);f.current=a;const v=Q(()=>{E.current=!1,M.current=[],e.current=!1,T(null),x(!1)},[]);W(()=>{v()},[v,r,o]);const K=Q(A=>{if(E.current)return;E.current=!0;const q=A.links[0];b(A.sourceName),p({type:"SET_STATE",payload:{selectedSource:A,selectedLink:q}}),T(null)},[p,b]),V=Q(()=>{const q=f.current.find(te=>te.type==="iframe");return q?.links?.length?q:null},[]),z=Q(async()=>{const A=n.filter(q=>{if(M.current.includes(q))return!1;const te=i.has(q);return s===void 0?!0:te===s});x(!0);try{for(const q of A){M.current.push(q);let te=null;try{te=await be.data.video.query({showId:r,episodeNumber:o,mode:u,provider:q})}catch{continue}const l=(te??[]).filter(C=>{const F=C.sourceName.toLowerCase();return u==="dub"?F.includes("eng")||F.includes("dub"):F.includes("jpn")||F.includes("sub")||!F.includes("eng")&&!F.includes("dub")});if((l.length>0?l:te??[]).find(C=>C.type!=="iframe"&&C.links?.length)){M.current=[m],e.current=!1,p({type:"SET_STATE",payload:{selectedProvider:q,videoSources:[],selectedSource:null,selectedLink:null,loadingVideo:!0}}),Wt(q,s===!0),T(null),Ne.success(`Switched to ${q} (direct stream)`);return}}T({retryFailed:!0}),Ne.error("No working direct stream found on other providers")}finally{x(!1)}},[r,o,u,s,m,p,n,i]),ee=Q(()=>{if(E.current||e.current||w!=="player")return;const A=V();if(!A)return;M.current.includes(m)||M.current.push(m);const q=U.current;if(q==="iframe"){K(A);return}if(q==="retry"){z();return}h(!0),T({retryFailed:!1})},[w,m,V,K,z,h]),O=Q(()=>{e.current=!0,T(null),c(!1)},[]),L=Q(()=>{y&&$("iframe");const A=V();A?K(A):T(null)},[y,$,V,K]),J=Q(()=>{y&&$("retry"),z()},[y,$,z]);return{fallbackPrompt:g,isRetryingProvider:_,rememberFallbackChoice:y,setRememberFallbackChoice:c,fallbackChoice:P,updateFallbackChoice:$,dismissFallbackPrompt:O,chooseIframeFallback:L,chooseProviderRetry:J,handleVideoSourceError:ee,resetFallback:v}}function ys({engine:r,videoRef:o,selectedSource:u,selectedLink:m,loadingVideo:w,testClipActive:a,resumeTime:s,resumeDuration:n=0,showResumeModal:i,disabled:b=!1,startOver:p=!1,calibReturnRef:h,setAvailableSubtitles:E,setActiveSubtitleTrack:M,onFatalError:e}){const g=N(null),T=N(s),_=N(n),x=N(i),y=N(e);return y.current=e,W(()=>{T.current=s,_.current=n,x.current=i},[s,n,i]),W(()=>{if(b){r.unload();return}const c=o.current;if(!c)return;for(;c.firstChild;)c.removeChild(c.firstChild);if(a)return r.loadSource({url:"/av-sync-test.mp4"},{autoPlay:!0});if(w||!u||!m||u.type==="iframe"){r.unload();return}p?g.current=0:h.current!=null?(g.current=h.current,h.current=null):g.current===null&&T.current>5&&!x.current&&!nt(T.current,_.current)?g.current=T.current:g.current===null&&x.current&&(g.current=0);let P=m.link;if(P.startsWith("/api/proxy")||(P=`/api/proxy?url=${encodeURIComponent(P)}`,m.headers?.Referer&&(P+=`&referer=${encodeURIComponent(m.headers.Referer)}`)),u.subtitles){const U=Y.getItem("playerSubtitlesEnabled")!=="false";let f=null;try{f=Y.getItem("playerLastSubtitle")}catch{}const v=wt(u.subtitles,{lastKey:f,enabled:U}),K=v>=0?u.subtitles[v]:null;u.subtitles.forEach(V=>{const z=document.createElement("track");z.kind="subtitles",z.label=V.label,z.srclang=V.lang;const ee=V.src??V.url;if(ee){let O=`/api/subtitle-proxy?url=${encodeURIComponent(ee)}`;const L=m.headers?.Referer;L&&(O+=`&referer=${encodeURIComponent(L)}`),z.src=O}K&&V.label===K.label&&V.lang===K.lang&&(z.default=!0),c.appendChild(z)}),U||M("off"),E(u.subtitles)}const D=g.current??0;g.current=null;const $=document.body.classList.contains("low-end");return r.loadSource({url:P,hls:m.hls},{initialTime:D,autoPlay:p||!(x.current&&T.current>5)&&!nt(T.current,_.current),hlsConfig:{maxBufferLength:$?15:30,maxMaxBufferLength:$?30:60,maxBufferSize:($?25:60)*1e3*1e3,startLevel:-1},onHls:(U,f)=>{if(!u.subtitles?.length)return;const v=()=>{U.subtitleTrack!==-1&&(U.subtitleTrack=-1)};U.on(f.Events.SUBTITLE_TRACK_SWITCH,v),v()},onError:()=>y.current()})},[r,u,m,o,h,w,a,b,p,M,E]),{seekToTimeRef:g}}function Ss({videoRef:r,availableSubtitles:o,activeSubtitleTrack:u,setAvailableSubtitles:m,setActiveSubtitleTrack:w}){W(()=>{const a=r.current;if(!a)return;const s=()=>{const n=Array.from(a.textTracks).map(i=>({label:i.label,lang:i.language,src:void 0,mode:i.mode}));m(n)};return a.textTracks.addEventListener("addtrack",s),a.textTracks.addEventListener("removetrack",s),s(),()=>{a.textTracks.removeEventListener("addtrack",s),a.textTracks.removeEventListener("removetrack",s)}},[r,m]),W(()=>{if(u===null&&o.length>0&&Y.getItem("playerSubtitlesEnabled")!=="false"){let a=null;try{a=Y.getItem("playerLastSubtitle")}catch{}const s=wt(o,{lastKey:a,enabled:!0});if(s<0){w("off");return}const n=o[s];w(n.lang||n.label)}},[u,o,w]),W(()=>{const a=r.current;if(!a||o.length===0)return;const s=u;if(!(Y.getItem("playerSubtitlesEnabled")!=="false")||s==="off"||s===null){Array.from(a.textTracks).forEach(b=>{b.mode="hidden"});return}let i=!1;if(Array.from(a.textTracks).forEach(b=>{const h=(b.language===s||b.label===s)&&!i;b.mode=h?"showing":"hidden",h&&(i=!0)}),!i&&a.textTracks.length>0){const b=Array.from(a.textTracks).find(p=>p.language==="en"||p.label==="English")||a.textTracks[0];b&&(b.mode="showing")}},[u,o,r])}function Es({videoRef:r,videoBoxH:o,style:u,sourceKey:m,activeSubtitleTrack:w,availableSubtitles:a}){W(()=>{const s="dynamic-subtitle-styles";let n=document.getElementById(s);n||(n=document.createElement("style"),n.id=s,document.head.appendChild(n)),n.textContent=xt(u);const i=r.current;if(!i)return;const b=$t(u.fontSize,o||i.clientHeight||720);n.textContent=xt({...u,fontSize:b});const p=()=>{const c=Number(u.position),P=isNaN(c)?0:Math.max(0,Math.min(100,c));return Math.max(0,Math.min(100,100-P))},h=(c,P)=>{try{const D=c;D.snapToLines=!1,D.line=P}catch{}},E=()=>{const c=b*16,P=i.videoHeight||i.clientHeight||720,D=i.videoWidth||i.clientWidth||1280;return{step:c*1.3/P*100,chars:Math.max(20,Math.floor(D/(c*.55)))}},M=c=>{const P=p(),D=Array.from(c.activeCues??[]);if(D.length<=1){D.forEach(v=>h(v,P));return}const{step:$,chars:U}=E();let f=P;for(let v=D.length-1;v>=0;v--){const V=String(D[v].text??"").replace(/<[^>]*>/g,"").split(`
|
|
55
|
-
`).reduce((ee,O)=>ee+Math.max(1,Math.ceil(O.length/U)),0),z=f-V*$;h(D[v],Math.max(0,z)),f=z-$*.4}},e=c=>{if(!c.cues)return;const P=p();Array.from(c.cues).forEach(D=>h(D,P)),c.mode==="showing"&&M(c)},g=()=>{Array.from(i.textTracks).forEach(e)};g();const T=c=>{const P=c.target;P.mode==="showing"&&M(P)};Array.from(i.textTracks).forEach(c=>{c.addEventListener("cuechange",T)});const _=()=>{Array.from(i.textTracks).forEach(c=>{c.removeEventListener("cuechange",T),c.addEventListener("cuechange",T)}),g()};i.textTracks.addEventListener("addtrack",_),i.textTracks.addEventListener("removetrack",_);const x=Array.from(i.querySelectorAll("track")),y=()=>{g()};return x.forEach(c=>{c.addEventListener("load",y)}),()=>{Array.from(i.textTracks).forEach(c=>{c.removeEventListener("cuechange",T)}),i.textTracks.removeEventListener("addtrack",_),i.textTracks.removeEventListener("removetrack",_),x.forEach(c=>{c.removeEventListener("load",y)})}},[u,o,r,m,w,a])}function ks({videoRef:r,overlayRef:o,style:u,activeSubtitleTrack:m,delayMs:w,enabled:a}){W(()=>{if(!a)return;const s=r.current,n=o.current;if(!s||!n)return;const i=Y.getItem("playerSubtitlesEnabled")!=="false",b=()=>{if(n.innerHTML="",!i||m==="off"||m===null)return;const E=Array.from(s.textTracks).find(y=>y.language===m||y.label===m);if(!E||E.mode!=="showing")return;const M=w/1e3;let e;if(M>0&&E.cues){const y=s.currentTime-M;e=Array.from(E.cues).filter(c=>c.startTime<=y&&y<=c.endTime)}else e=Array.from(E.activeCues??[]);if(e.length===0)return;const g={...u,fontSize:$t(u.fontSize,s.clientHeight||0)},T=Dr(g),_=$r(s,g.position),x=Array.from(e);x.forEach((y,c)=>{const P=String(y.text??"");if(!Ir(P).trim())return;const D=document.createElement("div"),$=(x.length-1-c)*1.7;D.style.cssText=`${T}
|
|
56
|
-
bottom: calc(${_}px + ${$}em);`,D.innerHTML=Fr(P),n.appendChild(D)})},p=()=>b(),h=()=>b();return Array.from(s.textTracks).forEach(E=>{E.addEventListener("cuechange",p)}),s.addEventListener("timeupdate",h),b(),()=>{Array.from(s.textTracks).forEach(E=>{E.removeEventListener("cuechange",p)}),s.removeEventListener("timeupdate",h),n.innerHTML=""}},[m,w,a,o,u,r])}const ws=({isOpen:r,onClose:o,onSuccess:u})=>{const m=()=>{u?.(),o()};return t(ht,{isOpen:r,onClose:o,title:"MKissa Browser Verification",children:t("div",{className:He.container,children:[t("p",{children:"Open MKissa in this browser, play an anime episode, and complete any Cloudflare verification it shows. Once playback works there, return to Dango and click Refresh."}),t("div",{className:He.actions,children:t("a",{className:He.link,href:"https://mkissa.to/anime",target:"_blank",rel:"noreferrer",children:"Open MKissa anime"})}),t("div",{className:He.actions,children:[t("button",{className:He.secondaryButton,onClick:o,children:"Cancel"}),t("button",{className:He.button,onClick:m,children:"Refresh Dango"})]})]})})},Us=()=>{const{id:r,episodeNumber:o}=lr(),u=cr(),m=Dt(),w=ur(),a=fr(),s=!!a.session,n=s&&!a.session?.host,{hasConsent:i,grant:b}=hr(),{options:p}=It(),h=Te(()=>p.filter(d=>(d.kind??"anime")==="anime"),[p]),E=Te(()=>h.map(d=>d.id),[h]),M=Te(()=>new Set(h.filter(d=>d.mature).map(d=>d.id)),[h]),{state:e,dispatch:g,toggleWatchlist:T,moveToCompleted:_,setPreferredSource:x,handleToggleDetails:y,markEpisodeWatched:c,prefetchEpisodeSources:P,isMarkingWatched:D,isUpdatingWatchlistStatus:$}=ms(r,o,w.state||null,{hasMatureConsent:i,watchSelection:n?a.room?.selection:null});W(()=>{if(r&&e.showMeta?.id&&e.showMeta.id!==r){const d=o?`/watch/${e.showMeta.id}/${o}${window.location.search}`:`/watch/${e.showMeta.id}${window.location.search}`;u(d,{replace:!0})}},[r,e.showMeta?.id,o,u]);const U=Te(()=>{if(e.showMeta.name)return{name:e.showMeta.name,thumbnail:e.showMeta.thumbnail,names:e.showMeta.names,genres:e.showMeta.genres,score:e.showMeta.score,isAdult:e.showMeta.isAdult}},[e.showMeta.name,e.showMeta.thumbnail,e.showMeta.names,e.showMeta.genres,e.showMeta.score,e.showMeta.isAdult]),f=Or({skipIntervals:e.skipIntervals,showId:r,episodeNumber:e.currentEpisode?.toString(),episodeCount:e.episodes.length||void 0,sourceType:e.selectedSource?.type,showMeta:U}),{refs:v,actions:K}=f,V=Te(()=>!r||r.startsWith("dango-mt-")||!e.currentEpisode||e.selectedSource?.type==="iframe"||!e.selectedLink?.hls||!e.selectedSource?null:{showId:r,episode:e.currentEpisode,provider:e.selectedProvider,mode:e.currentMode,source:e.selectedSource.sourceName,title:e.showMeta.name||r},[r,e.currentEpisode,e.selectedProvider,e.currentMode,e.selectedSource,e.selectedLink,e.showMeta.name]),z=Wr(f.engine,V,e.loadingVideo||e.loadingShowData),ee=sn(),O=N(null),L=N(null),J=N(null),[A,q]=ae(()=>{try{const d=Y.getItem("anime4kProfile");return["low","balanced","high","denoise"].includes(d)?d:"balanced"}catch{return"balanced"}}),{videoDelayMs:te,videoDelayEnabled:l,setDelayEnabled:R,handleVideoDelayChange:k,isCalibrating:C,testClipActive:F,stopCalibration:H,openAvSyncCalibrator:Ce,cancelAvSyncCalibrator:Ae,applyAvSyncCalibrator:ne,toggleTestClip:j,calibReturnRef:xe,effectiveVideoDelayMs:$e}=Ur(v.videoRef,()=>K.setShowSettings(!1)),se=N(null),[oe,Me]=ae(!1);W(()=>{Me(!1)},[r,e.currentEpisode]);const de=!e.loadingVideo&&nt(e.resumeTime,e.resumeDuration),Pe=!s&&!F&&de&&e.videoSources.length>0&&!oe,st=Q(()=>Me(!0),[]),ie=os({videoRef:v.videoRef,canvasRef:L,profile:A,delayMs:$e}),_e=ie.isEnabled&&ie.isWebGPUSupported;as({videoRef:v.videoRef,episodeKey:`${r??""}:${e.currentEpisode??""}`,isEnabled:ie.isEnabled,isSupported:ie.isWebGPUSupported,mediaReady:!e.loadingVideo&&!!e.selectedLink,isIframeSource:e.selectedSource?.type==="iframe",setEnabled:ie.setEnabled}),Vr({videoRef:v.videoRef,canvasRef:se,delayMs:$e,enabled:l&&!_e});const ot=l&&!_e,Le=_e||ot,[ue,Ye]=ae(!1),at=N(o);W(()=>{at.current!==o&&(at.current=o,H())},[o,H]);const vt=Q(()=>{m.invalidateQueries({queryKey:[ce.continueWatching]})},[m]),{data:Ie=[],isLoading:it}=vr(),I=gr(),Fe=br(),lt=yr(),{isTheaterMode:re,toggleTheaterMode:ct,handleLayoutClick:Qe}=Qr();dr(()=>{if(f.state.isFullscreen||re)return;const d=v.playerContainerRef.current,X=O.current;if(!d||!X)return;const Ue=()=>{const St=d.getBoundingClientRect().height;X.style.height=`${St}px`};Ue();const De=new ResizeObserver(Ue);return De.observe(d),()=>De.disconnect()},[f.state.isFullscreen,re,v.playerContainerRef]);const Se=Te(()=>e.episodes.findIndex(d=>d===e.currentEpisode),[e.episodes,e.currentEpisode]),Ke=Se>0?e.episodes[Se-1]:null,Oe=Se>=0&&Se<e.episodes.length-1?e.episodes[Se+1]:null,Xe=Se>-1&&Se<e.episodes.length-1,{showCompleteModal:ut,queueCountdown:qe,pendingQueueTransition:Je,handleQueueTransition:gt,handleNextEpisode:Ze,handleNShortcut:bt,handlePreviousEpisode:G,handlePlaybackFinished:le,closeCompleteModal:me,cancelQueueTransition:pe}=fs({testClipActive:F,selectedSourceType:e.selectedSource?.type,onEnded:K.onEnded,queue:Ie,removeFromQueue:I.mutate,showId:r,showMetaId:e.showMeta?.id,showStatus:e.showMeta?.status,currentEpisode:e.currentEpisode,isAutoplayEnabled:!n&&e.isAutoplayEnabled,nextEpisode:Oe,previousEpisode:Ke,navigate:u,invalidateContinueWatching:vt,dispatch:g}),{showNextEpisodePrompt:fe,handleThresholds:he}=hs({videoRef:v.videoRef,queue:Ie,showId:r,showMetaId:e.showMeta?.id,currentEpisode:e.currentEpisode,selectedSource:e.selectedSource,hasNextEpisode:Xe,nextEpisode:Oe,prefetchEpisodeSources:P,matchesQueueItem:rt}),{checkEnd:ve,logDuration:Ge}=Kr({videoRef:v.videoRef,sourceType:e.selectedSource?.type,resetKey:`${r}:${e.currentEpisode}`,onEnd:n?K.onEnded:le}),We=!s&&e.showResumeModal&&!e.resumeProgressPending,Ee=ut,Z=We||Ee;qr(f,!!e.selectedLink&&!re&&!Z&&!Pe);const{fallbackPrompt:dt,isRetryingProvider:ze,rememberFallbackChoice:ye,setRememberFallbackChoice:mt,fallbackChoice:Ut,updateFallbackChoice:Vt,dismissFallbackPrompt:Qt,chooseIframeFallback:Kt,chooseProviderRetry:qt,handleVideoSourceError:Tt,resetFallback:Ct}=bs({showId:r,episodeNumber:e.currentEpisode??void 0,currentMode:e.currentMode,selectedProvider:e.selectedProvider,selectedSourceType:e.selectedSource?.type,videoSources:e.videoSources,isAdult:e.showMeta?.isAdult,providerOrder:E,matureProviders:M,setPreferredSource:x,showControls:K.setShowControls,dispatch:g}),{seekToTimeRef:Mt}=ys({engine:f.engine,videoRef:v.videoRef,selectedSource:e.selectedSource,selectedLink:e.selectedLink,loadingVideo:e.loadingVideo,testClipActive:!s&&F,resumeTime:s?0:e.resumeTime,resumeDuration:e.resumeDuration,showResumeModal:!s&&e.showResumeModal,disabled:Pe,startOver:oe,calibReturnRef:xe,setAvailableSubtitles:K.setAvailableSubtitles,setActiveSubtitleTrack:K.setActiveSubtitleTrack,onFatalError:s?()=>{}:Tt});W(()=>{Z&&f.state.isFullscreen&&f.actions.toggleFullscreen()},[Z,f.state.isFullscreen,f.actions]),W(()=>{Z&&v.videoRef.current&&v.videoRef.current.pause()},[Z,v.videoRef]);const{titlePreference:pt}=Sr(),{lowEndMode:Rt}=Er(),{settings:yt,update:Gt}=Gr(),zt=re&&yt.enabled&&!Rt&&e.selectedSource?.type!=="iframe"&&!!e.selectedLink,Be=Te(()=>{if(!e.showMeta||e.loadingShowData)return"Loading...";const{name:d,names:X}=e.showMeta;return pt==="name"?d||"Loading...":pt==="nativeName"?X?.native||d||"Loading...":pt==="englishName"?X?.english||d||"Loading...":d||"Loading..."},[e.showMeta,pt,e.loadingShowData]);W(()=>{Be&&Be!=="Loading..."&&e.currentEpisode&&(document.title=`► ${Be} Episode ${e.currentEpisode} - dango`)},[Be,e.currentEpisode]),ps({onPrevious:n?()=>{}:G,onNext:n?()=>{}:bt,onToggleTheater:ct,flashControls:f.actions.flashControls});const{setAvailableSubtitles:Ht,setActiveSubtitleTrack:jt}=K,Nt=Te(()=>({fontSize:f.state.subtitleFontSize,position:f.state.subtitlePosition,bgOpacity:f.state.subtitleBgOpacity,bgColor:f.state.subtitleBgColor,textColor:f.state.subtitleTextColor,edge:f.state.subtitleEdge,bold:f.state.subtitleBold}),[f.state.subtitleFontSize,f.state.subtitlePosition,f.state.subtitleBgOpacity,f.state.subtitleBgColor,f.state.subtitleTextColor,f.state.subtitleEdge,f.state.subtitleBold]);Ss({videoRef:v.videoRef,availableSubtitles:f.state.availableSubtitles,activeSubtitleTrack:f.state.activeSubtitleTrack,setAvailableSubtitles:Ht,setActiveSubtitleTrack:jt});const[Yt,Xt]=ae(0);W(()=>{const d=v.videoRef.current;if(!d)return;const X=()=>Xt(d.clientHeight||0);X();const Ue=new ResizeObserver(X);return Ue.observe(d),()=>Ue.disconnect()},[v.videoRef,e.selectedSource,e.selectedLink]),Es({videoRef:v.videoRef,videoBoxH:Yt,style:Nt,sourceKey:`${e.selectedSource?.sourceName??""}:${e.selectedLink?.link??""}`,activeSubtitleTrack:f.state.activeSubtitleTrack,availableSubtitles:f.state.availableSubtitles}),ks({videoRef:v.videoRef,overlayRef:J,style:Nt,activeSubtitleTrack:f.state.activeSubtitleTrack,delayMs:$e,enabled:Le}),W(()=>{try{Y.setItem("anime4kProfile",A)}catch{}},[A]);const Jt=()=>{v.videoRef.current&&(v.videoRef.current.currentTime=e.resumeTime,v.videoRef.current.play()),g({type:"SET_STATE",payload:{showResumeModal:!1}})},Zt=()=>{v.videoRef.current&&(v.videoRef.current.currentTime=0,v.videoRef.current.play()),g({type:"SET_STATE",payload:{showResumeModal:!1}})},er=Q(()=>{g({type:"SET_STATE",payload:{showResumeModal:!1}})},[g]),tr=Q(async()=>{try{await _(),me(),g({type:"SET_STATE",payload:{showResumeModal:!1}}),u("/")}catch{}},[_,me,g,u]),Pt=(d,X)=>t("div",{className:d,children:[t("button",{className:`${S.episodeNavBtn} ${S.secondary}`,onClick:G,disabled:n||!Ke,type:"button",children:[t(ge,{name:"chevron-left",size:12}),"Prev EP"]}),t("button",{className:`${S.episodeNavBtn} ${S.primary}`,onClick:Ze,disabled:n||!Oe,type:"button",children:["Next EP",t(ge,{name:"chevron-right",size:12})]}),X==="mobile"&&ee&&t("button",{className:`${S.episodeNavBtn} ${S.episodePickerBtn}`,onClick:()=>Ye(!0),type:"button",children:[t(ge,{name:"list-ul",size:12}),"Episodes"]})]}),rr=d=>{g({type:"SET_STATE",payload:{isAutoplayEnabled:d}}),rn(d)},_t=!!(e.currentEpisode&&e.watchedEpisodes.includes(e.currentEpisode)),nr=e.selectedProvider!=="megaplay"||e.selectedSource?.type==="iframe",sr=Q(async()=>{if(!r||!e.currentEpisode||!e.showMeta.name||D)return;const d=v.videoRef.current?.duration,X=Math.max(d||0,e.resumeDuration||0,Number(e.showMeta.episodeDuration||0)*60,1);await c(e.currentEpisode,X)},[r,e.currentEpisode,e.showMeta,e.resumeDuration,c,D,v.videoRef]);if(e.error&&!e.showMeta.name&&e.videoSources.length===0&&e.episodes.length===0)return t("p",{className:"error-message",children:["Error: ",e.error]});const ke=e.loadingShowData||e.loadingVideo;return e.showMeta?.isAdult===!0&&!i?t("div",{className:we.playerPageLayout,children:t(nn,{isOpen:!0,onClose:()=>u("/home"),onGrant:b})}):t("div",{className:`${we.playerPageLayout} ${re?we.theaterMode:""}`,onClick:Qe,children:[re&&t(zr,{videoRef:v.videoRef,active:zt,settings:yt}),t(Hr,{isOpen:Ee,onClose:me,title:"Show Completed!",heading:Be,message:"Congratulations! You finished all available episodes.",children:[t(je,{variant:"secondary",onClick:me,children:"Close"}),t(je,{onClick:tr,disabled:$,children:$?"Saving...":"Move to Completed"})]}),t(jr,{isOpen:We,onClose:er,title:"Resume Playback?",message:t(et,{children:["You were watching at ",t("strong",{children:f.actions.formatTime(e.resumeTime)}),". Would you like to continue?"]}),onResume:Jt,onRestart:Zt}),t(ht,{isOpen:!!dt,onClose:Qt,title:"Direct stream failed",width:"sm",children:[t(ht.Body,{children:[t("p",{children:[t("strong",{children:e.selectedProvider}),"'s direct stream failed for this episode."]}),dt?.retryFailed&&t("p",{children:"No working direct stream was found on the other providers either."}),t("p",{children:["You can continue with the embedded (iframe) player, but embedded players may show"," ",t("strong",{children:"ads and pop-ups"}),"."]}),t("label",{style:{display:"flex",alignItems:"center",gap:"8px",marginTop:"0.75rem",cursor:"pointer"},children:[t("input",{type:"checkbox",checked:ye,onChange:d=>mt(d.currentTarget.checked)}),"Remember my choice"]})]}),t(ht.Actions,{children:[t(je,{variant:"secondary",onClick:Kt,children:"Continue with iframe"}),t(je,{onClick:qt,disabled:ze,children:ze?"Searching…":"Try another provider"})]})]}),t(kr,{isOpen:!!e.showCookieModal&&e.cookieProvider!=="mkissa",onClose:()=>g({type:"SET_STATE",payload:{showCookieModal:!1}}),onSuccess:()=>{m.invalidateQueries({queryKey:[ce.videoSources,r,e.currentEpisode,e.selectedProvider,e.currentMode]})}}),t(ws,{isOpen:!!e.showCookieModal&&e.cookieProvider==="mkissa",onClose:()=>g({type:"SET_STATE",payload:{showCookieModal:!1}}),onSuccess:()=>{m.invalidateQueries({queryKey:[ce.videoSources,r,e.currentEpisode,e.selectedProvider,e.currentMode]})}}),!re&&t("aside",{ref:O,className:we.episodeSidebar,children:e.loadingShowData?t(Yr,{variant:"sidebar"}):t(Xr,{episodes:e.episodes,currentEpisode:e.currentEpisode??void 0,watchedEpisodes:e.watchedEpisodes,onEpisodeClick:d=>{n||u(`/watch/${r}/${d}`)}})}),t("div",{className:we.playerMain,children:[t("div",{className:`${S.videoContainer} ${f.state.isFullscreen?"":we.videoPlayerWrapper} ${f.state.isFullscreen?S.fullscreenActive:""}`,style:{...Z?{visibility:"hidden"}:{}},onContextMenu:d=>d.preventDefault(),children:t(Gn,{player:f,isAutoplayEnabled:e.isAutoplayEnabled,onAutoplayChange:rr,fallbackChoice:Ut,onFallbackChoiceChange:Vt,ambientSettings:yt,onAmbientChange:Gt,showNextEpisodeButton:!n&&!Z&&fe&&Ie.length===0,onNextEpisode:Ze,videoSources:n?[]:s?e.videoSources.filter(d=>d.type!=="iframe"&&d.links.some(X=>X.hls)):e.videoSources,selectedSource:e.selectedSource,selectedLink:e.selectedLink,onSourceChange:(d,X)=>{n&&d.sourceName!==a.room?.selection.source||s&&(d.type==="iframe"||!X.hls)||(v.videoRef.current&&!isNaN(v.videoRef.current.currentTime)&&(Mt.current=v.videoRef.current.currentTime),x(d.sourceName),g({type:"SET_STATE",payload:{selectedSource:d,selectedLink:X,showResumeModal:e.showResumeModal&&d.type!=="iframe"}}))},loadingVideo:ke,skipIntervals:e.skipIntervals,animeTitle:Be,episodeNumber:e.currentEpisode??void 0,mode:e.currentMode,isTheaterMode:re,onTheaterModeToggle:ct,anime4kEnabled:ie.isEnabled,onAnime4kToggle:ie.toggle,anime4kSupported:ie.isWebGPUSupported,anime4kProfile:A,onAnime4kProfileChange:q,anime4kInitializing:ie.isInitializing,anime4kError:ie.error,videoDelayEnabled:l,onVideoDelayToggle:R,videoDelayMs:te,onVideoDelayChange:k,onCalibrateAvSync:s?()=>{}:Ce,isInteractingExtra:ue||C,className:Pr.shellFill,hideChrome:Pe||e.selectedSource?.type==="iframe",overlays:t(et,{children:[f.state.isSpeedBoostActive&&t("div",{className:S.speedBoostBadge,"aria-hidden":"true",children:[t("span",{children:"2x"}),t(ge,{name:"forward",size:12})]}),qe!==null&&Je?.nextItem&&t("div",{className:S.queueCountdown,children:["Queue next in ",qe,"s"]})]}),children:Pe?t("div",{className:S.watchedOverlay,children:[t(ge,{name:"check-circle",size:48,style:{color:"var(--accent-lighter)"}}),t("p",{className:S.watchedTitle,children:e.currentEpisode?`Episode ${e.currentEpisode} watched`:"Watched"}),t("p",{className:S.watchedSubtext,children:"Replay from the beginning or continue with the next episode."}),t("div",{className:S.watchedActions,children:[t(je,{onClick:st,children:"Replay"}),Oe&&t(je,{variant:"secondary",onClick:Ze,children:"Next Episode"})]})]}):t(et,{children:[ke&&t("div",{className:S.loadingOverlay,children:t("div",{className:S.loadingDots,children:[t("div",{className:S.dot}),t("div",{className:S.dot}),t("div",{className:S.dot})]})}),f.state.isBuffering&&!ke&&e.selectedSource?.type!=="iframe"&&t("div",{className:S.bufferingOverlay,children:t("div",{className:S.bufferingSpinner})}),e.selectedSource?.type==="iframe"&&!s?!ke&&t("iframe",{src:e.selectedLink?.link,className:S.videoIframe,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0,sandbox:e.selectedSource.sandbox?`${e.selectedSource.sandbox} allow-fullscreen allow-popups allow-popups-to-escape-sandbox`:void 0}):t(et,{children:[!ke&&e.videoSources.length===0&&t("div",{className:S.errorOverlay,children:[t("p",{children:["No sources found for this episode with ",e.selectedProvider,"."]}),t("p",{className:S.errorSubtext,children:"Please try selecting a different provider below."}),t("button",{className:S.retryButton,onClick:()=>window.location.reload(),"data-speed-boost-ignore":"true",style:{marginTop:8},children:"Retry"})]}),!ke&&e.videoSources.length>0&&t(_r,{controls:!f.state.playbackLocked&&f.state.useNativeControls,playsInline:!0,"webkit-playsinline":"true",disablePictureInPicture:!0,disableRemotePlayback:!0,onPlay:K.onPlay,onPause:K.onPause,onEnded:()=>{F||ve(!0)},onDurationChange:()=>{Ge()},onSeeked:()=>{F||(he(),ve())},onLoadedMetadata:()=>{he(),Ge(),F||ve()},onTimeUpdate:()=>{F||(K.onTimeUpdate(),he(),ve(),Je&&v.videoRef.current&&v.videoRef.current.currentTime<v.videoRef.current.duration-1&&pe())},onError:s?void 0:Tt,onContextMenu:d=>d.preventDefault(),className:Le?S.videoElementHidden:""}),ie.isWebGPUSupported&&!ke&&e.videoSources.length>0&&t("canvas",{ref:L,className:`${S.upscalerCanvas} ${_e?S.upscalerActive:""}`}),!_e&&!ke&&e.videoSources.length>0&&t("canvas",{ref:se,className:`${S.upscalerCanvas} ${ot?S.upscalerActive:""}`}),ie.isEnabled&&ie.isWebGPUSupported&&ie.isInitializing&&t("div",{className:S.upscalerStatusBadge,children:"Preparing upscaler…"}),Le&&t("div",{ref:J,className:S.subtitleOverlay}),t(Jr,{isOpen:C,ms:te,onChange:k,onApply:ne,onClose:Ae,testClipActive:F,onTestClip:j})]})]})})}),t(dn,{playback:V&&!ke?{selection:V,position:v.videoRef.current?.currentTime||0,playing:!1,rate:f.engine.getState().playbackRate}:null,onCreate:()=>{H(),f.engine.pause()},needsPlayback:z.needsPlayback,onEnablePlayback:z.enablePlayback}),s&&!ke&&!V&&t("p",{role:"alert",children:"This room requires the host's direct HLS source. It is unavailable here. Retry the episode or leave the room to use another source."}),!re&&t(Zr,{}),!re&&t(et,{children:[it&&Ie.length===0?t(zn,{count:3}):t(on,{title:"Queue",items:Ie,currentShowId:r,currentEpisode:e.currentEpisode??void 0,onNextQueue:n?()=>{}:gt,onRemove:d=>I.mutate({showId:d.showId,episodeNumber:d.episodeNumber}),onClear:()=>Fe.mutate(),showClearAll:!0,onReorder:d=>lt.mutate(d.map(X=>({id:X.id,showId:X.showId,episodeNumber:X.episodeNumber})))}),t("div",{className:S.streamPanel,children:[!n&&t(Xn,{selectedProvider:e.selectedProvider,isAdult:e.showMeta?.isAdult,options:h,onProviderChange:d=>{Ct(),g({type:"SET_STATE",payload:{selectedProvider:d,videoSources:[],selectedSource:null,selectedLink:null,loadingVideo:!0}}),Wt(d,e.showMeta?.isAdult===!0)}}),Pt(`${S.episodeActions} ${S.desktopEpisodeActions}`,"desktop"),ke?t("div",{className:S.sourceLoader,children:t("div",{className:S.spinner})}):n?t("p",{children:["Provider: ",e.selectedProvider," · Source: ",a.room?.selection.source," ·"," ",e.currentMode]}):t(Zn,{videoSources:s?e.videoSources.filter(d=>d.type!=="iframe"&&d.links.some(X=>X.hls)):e.videoSources,selectedSource:e.selectedSource,selectedLink:e.selectedLink,onSourceChange:d=>{if(s&&(d.type==="iframe"||!d.links.some(De=>De.hls)))return;v.videoRef.current&&!isNaN(v.videoRef.current.currentTime)&&(Mt.current=v.videoRef.current.currentTime);const Ue=(s?d.links.filter(De=>De.hls):d.links||[]).sort((De,St)=>(parseInt(St.resolutionStr)||0)-(parseInt(De.resolutionStr)||0))[0]||null;x(d.sourceName),g({type:"SET_STATE",payload:{selectedSource:d,selectedLink:Ue,showResumeModal:e.showResumeModal&&d.type!=="iframe"}})},onLinkChange:d=>{e.selectedSource&&(x(e.selectedSource.sourceName),g({type:"SET_STATE",payload:{selectedLink:d}}))}})]}),t("div",{className:we.playerInfoContainer,children:[t("div",{className:we.playerInfoHeader,children:[t("div",{className:we.playerAnimeCard,children:t(wr,{src:Tr(e.showMeta.thumbnail||""),alt:Be,loading:"lazy",decoding:"async",onError:d=>{d.target.src="/placeholder.svg"}})}),t("div",{className:we.videoTitleSection,children:[t("div",{className:S.titleContainer,children:[t("h1",{children:Be}),t("div",{className:S.scheduleInfo,children:[e.showMeta.status&&t("span",{className:S.status,children:e.showMeta.status}),e.showMeta.nextEpisodeAirDate&&t("span",{className:S.nextEpisode,children:["Next episode: ",e.showMeta.nextEpisodeAirDate]})]})]}),t("div",{className:S.controls,children:[t("button",{className:`${S.watchlistBtn} ${e.inWatchlist?S.inList:""}`,onClick:T,children:[e.inWatchlist?t(ge,{name:"check",size:14}):t(ge,{name:"plus",size:14}),e.inWatchlist?"In Watchlist":"Add to Watchlist"]}),t(ln,{showId:r,showName:e.showMeta.name||e.showMeta.names?.romaji,showThumbnail:e.showMeta.thumbnail,nativeName:e.showMeta.names?.native,englishName:e.showMeta.names?.english,showType:e.showMeta.type,className:`${S.watchlistBtn} ${S.queueBtn}`,activeClassName:S.queueActive}),nr&&t("button",{className:`${S.watchlistBtn} ${S.markWatchedBtn} ${_t?S.markWatchedDone:""}`,onClick:sr,disabled:D||!e.currentEpisode,children:[t(ge,{name:"check",size:14}),D?"Saving...":_t?"Watched":"Mark Watched"]}),t("button",{className:`${S.watchlistBtn} ${S.modeToggleBtn} ${e.currentMode==="dub"?S.modeToggleActive:""}`,disabled:n,onClick:()=>{const d=e.currentMode==="dub"?"sub":"dub";Ct(),g({type:"SET_MODE",payload:d}),Y.setItem("preferredMode",d)},type:"button","aria-pressed":e.currentMode==="dub",children:e.currentMode==="dub"?"DUB":"SUB"}),Rt&&t("button",{disabled:n,className:`${S.watchlistBtn} ${S.modeToggleBtn} ${f.state.useNativeControls?S.modeToggleActive:""}`,onClick:()=>{const d=!f.state.useNativeControls;f.actions.setUseNativeControls(d),Y.setItem("playerUseNativeControls",d.toString())},type:"button",children:f.state.useNativeControls?"NATIVE: ON":"NATIVE: OFF"})]})]})]}),Pt(`${S.episodeActions} ${S.mobileEpisodeActions}`,"mobile"),t("div",{className:we.infoColumns,children:[t("div",{className:`${S.descriptionSection} ${S.synopsisFlat}`,children:[t("h3",{children:"Synopsis"}),t(un,{text:e.showMeta.description?e.showMeta.description.replace(/<[^>]*>?/gm,""):"",emptyText:"No description available."}),t("button",{className:S.detailsToggleBtn,onClick:y,children:[e.showCombinedDetails?t(ge,{name:"chevron-up"}):t(ge,{name:"chevron-down"}),e.showCombinedDetails?"Hide Details":"Show Details"]})]}),e.showCombinedDetails&&t(cn,{showMeta:e.showMeta,styles:S})]})]})]})]}),t(en,{isOpen:ue,onClose:()=>Ye(!1),episodes:e.episodes,currentEpisode:e.currentEpisode??void 0,watchedEpisodes:e.watchedEpisodes,onEpisodeClick:d=>{Ye(!1),u(`/watch/${r}/${d}`)}})]})};export{Us as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{g as w,d as ne,T as te,u as e}from"./vendor-core-DfaOB3Rn.js";import{u as ae,p as se}from"./index-Bi-DGtzC.js";import{I as o}from"./vendor-icons-DrybRNxP.js";import{S as le,O as A,a as ie,A as ce,b as re}from"./OptionListMenu-Dxx8rcuO.js";import"./vendor-query-BBT5_sHx.js";import"./useWatchAlongPlayer-BvcoBlQi.js";import"./PlayerProvider-BoJyuLEn.js";import"./playbackCompletion-Dz3OK72-.js";const oe="_settingsPanel_mcacu_1",me="_header_mcacu_35",de="_backBtn_mcacu_58",ue="_contentWrapper_mcacu_78",he="_menuContent_mcacu_84",pe="_menuItem_mcacu_91",be="_selected_mcacu_116",ge="_currentValue_mcacu_136",ve="_menuNote_mcacu_143",ke="_menuError_mcacu_152",n={settingsPanel:oe,header:me,backBtn:de,contentWrapper:ue,menuContent:he,menuItem:pe,selected:be,currentValue:ge,menuNote:ve,menuError:ke},ye=($,P)=>{const{isOpen:g,onClose:Ce,videoSources:fe,currentSource:C,currentLink:f,onSourceChange:V,subtitles:O,activeSubtitleTrack:v,onSubtitleChange:E,subtitleSettings:z,onSubtitleSettingsChange:T,useNativeControls:k,onNativeControlsToggle:U,anime4kEnabled:u,onAnime4kToggle:B,anime4kSupported:N,anime4kProfile:c,onAnime4kProfileChange:h,anime4kInitializing:L,anime4kError:S,videoDelayEnabled:_,onVideoDelayToggle:M,videoDelayMs:I,onVideoDelayChange:D,onCalibrateAvSync:x,isAutoSkipEnabled:m,onAutoSkipChange:W,isAutoplayEnabled:d,onAutoplayChange:G,fallbackChoice:p,onFallbackChoiceChange:j,isTheaterMode:q,ambientSettings:b,onAmbientChange:y}=$,{lowEndMode:F}=ae(),[a,i]=ne("main");w.useEffect(()=>{if(!g){const t=setTimeout(()=>i("main"),300);return()=>clearTimeout(t)}},[g]);const Q=()=>e("div",{className:n.menuContent,children:[e("button",{className:n.menuItem,onClick:()=>i("quality"),children:[e("span",{children:"Quality"}),e("span",{className:n.currentValue,children:f?.resolutionStr||"Auto"})]}),e("button",{className:n.menuItem,onClick:()=>i("subtitles"),children:[e("span",{children:"Subtitles"}),e("span",{className:n.currentValue,children:v||"Off"})]}),e("button",{className:n.menuItem,onClick:()=>i("subtitle-style"),children:e("span",{children:"Subtitle Style"})}),F&&e("button",{className:`${n.menuItem} ${k?n.selected:""}`,onClick:()=>{const t=!k;U(t),se.setItem("playerUseNativeControls",t.toString())},children:[e("span",{children:"Native Controls"}),k&&e(o,{name:"check",size:12})]}),N&&e("button",{className:`${n.menuItem} ${u?n.selected:""}`,onClick:()=>{B(!u)},children:[e("span",{children:"Anime4K Upscaler"}),u&&e(o,{name:"check",size:12})]}),N&&u&&e("button",{className:n.menuItem,onClick:()=>i("upscaler"),children:e("span",{children:"Upscaler Settings"})}),e("button",{className:n.menuItem,onClick:()=>i("av-sync"),children:[e("span",{children:"A/V Sync"}),e("span",{className:n.currentValue,children:_?`${I}ms`:"Off"})]}),e("button",{className:n.menuItem,onClick:()=>i("playback"),children:[e("span",{children:"Playback"}),e("span",{className:n.currentValue,children:[m?"Auto-skip On":null,d?"Autoplay On":null].filter(Boolean).join(" • ")||"Off"})]}),q&&b&&y&&e("button",{className:n.menuItem,onClick:()=>i("ambient"),children:[e("span",{children:"Ambient Light"}),e("span",{className:n.currentValue,children:b.enabled?"On":"Off"})]})]}),R=()=>{const t=C?.links.sort((s,r)=>(parseInt(r.resolutionStr)||0)-(parseInt(s.resolutionStr)||0))||[];return e("div",{className:n.menuContent,children:e(A,{classes:{item:n.menuItem,active:n.selected},options:t.map(s=>({key:s.resolutionStr,label:s.resolutionStr,selected:f?.resolutionStr===s.resolutionStr})),onSelect:s=>{const r=t.find(l=>l.resolutionStr===s);r&&V(C,r)}})})},H=()=>e("div",{className:n.menuContent,children:e(A,{classes:{item:n.menuItem,active:n.selected},options:[{key:"off",label:"Off",selected:v==="off"},...O.map(t=>({key:t.label||t.lang,label:t.label,selected:v===(t.label||t.lang)}))],onSelect:t=>E(t)})}),K=()=>e("div",{className:n.menuContent,children:e(ie,{classes:{item:n.menuItem,active:n.selected},values:z,onChange:T})}),J=te(()=>{try{const s=navigator.userAgentData?.brands?.map(l=>l.brand.toLowerCase())??[];if(s.length>0)return s.some(l=>l.includes("chromium")||l.includes("chrome")||l.includes("edge")||l.includes("opera")||l.includes("brave")||l.includes("vivaldi"));const r=navigator.userAgent.toLowerCase();return r.includes("chrome")||r.includes("chromium")||r.includes("edg")}catch{return!0}},[]),X=()=>e("div",{className:n.menuContent,children:[L&&e("div",{className:n.menuNote,role:"status",children:"Preparing GPU, this can take a few seconds…"}),S&&e("div",{className:n.menuError,role:"alert",children:["Upscaler failed: ",S]}),!J&&e("div",{className:n.menuNote,children:"Upscaling performs best in Chrome-based browsers."}),e("button",{className:`${n.menuItem} ${c==="low"?n.selected:""}`,onClick:()=>h("low"),children:[e("div",{children:[e("div",{children:"Low"}),e("div",{style:{fontSize:"0.75rem",color:"var(--text-tertiary)"},children:"Lightest, best for weaker GPUs"})]}),c==="low"&&e(o,{name:"check",size:12})]}),e("button",{className:`${n.menuItem} ${c==="balanced"?n.selected:""}`,onClick:()=>h("balanced"),children:[e("div",{children:[e("div",{children:"Balanced"}),e("div",{style:{fontSize:"0.75rem",color:"var(--text-tertiary)"},children:"Source + display aware"})]}),c==="balanced"&&e(o,{name:"check",size:12})]}),e("button",{className:`${n.menuItem} ${c==="high"?n.selected:""}`,onClick:()=>h("high"),children:[e("div",{children:[e("div",{children:"High"}),e("div",{style:{fontSize:"0.75rem",color:"var(--text-tertiary)"},children:"Aggressive, needs strong GPU"})]}),c==="high"&&e(o,{name:"check",size:12})]}),e("button",{className:`${n.menuItem} ${c==="denoise"?n.selected:""}`,onClick:()=>h("denoise"),children:[e("div",{children:[e("div",{children:"Denoise"}),e("div",{style:{fontSize:"0.75rem",color:"var(--text-tertiary)"},children:"Denoise + upscale noisy, compressed sources"})]}),c==="denoise"&&e(o,{name:"check",size:12})]})]}),Y=()=>e("div",{className:n.menuContent,children:[e("button",{type:"button",className:`${n.menuItem} ${m?n.selected:""}`,onClick:()=>W(!m),"aria-pressed":m,children:[e("span",{children:"Auto-skip openings and endings"}),e("span",{className:n.currentValue,children:m?"On":"Off"})]}),e("div",{className:n.menuNote,children:"Automatically jump past opening, ending and recap segments when detected."}),e("button",{type:"button",className:`${n.menuItem} ${d?n.selected:""}`,onClick:()=>G(!d),"aria-pressed":d,children:[e("span",{children:"Autoplay next episode"}),e("span",{className:n.currentValue,children:d?"On":"Off"})]}),e("div",{className:n.menuNote,children:"Automatically start the next episode when this one ends."}),e("button",{type:"button",className:n.menuItem,onClick:()=>j(p==="ask"?"iframe":p==="iframe"?"retry":"ask"),children:[e("span",{children:"Failed direct stream"}),e("span",{className:n.currentValue,children:p==="iframe"?"Use iframe":p==="retry"?"Try provider":"Ask me"})]}),e("div",{className:n.menuNote,children:"When a direct stream fails: ask each time, go straight to the embedded player (may show ads), or automatically try another provider."})]}),Z=()=>e("div",{className:n.menuContent,children:e(ce,{classes:{item:n.menuItem,active:n.selected,note:n.menuNote},enabled:_,delayMs:I,onToggle:M,onDelayChange:D,onCalibrate:x})}),ee=()=>b&&y?e("div",{className:n.menuContent,children:e(re,{classes:{item:n.menuItem,active:n.selected,note:n.menuNote},values:b,onChange:y})}):null;return g?e(le,{classes:{panel:n.settingsPanel,header:n.header,backBtn:n.backBtn,title:"",content:n.contentWrapper},title:a==="main"?"Settings":a==="ambient"?"Ambient Light":a.charAt(0).toUpperCase()+a.slice(1).replace("-"," "),titleTag:"h3",showBack:a!=="main",onBack:()=>i("main"),panelRef:P,onPanelClick:t=>t.stopPropagation(),children:[a==="main"&&Q(),a==="quality"&&R(),a==="subtitles"&&H(),a==="subtitle-style"&&K(),a==="upscaler"&&X(),a==="av-sync"&&Z(),a==="playback"&&Y(),a==="ambient"&&ee()]}):null},Ve=w.forwardRef(ye);export{Ve as default};
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{u as t,d as g,A as F,h as y,S as qe,g as cs,q as C,o as ds,p as us,a as ms,T as Se}from"./vendor-core-DfaOB3Rn.js";import{h as Kn,p as R,t as gt,ac as hs,a6 as bs,S as Fn,e as fs,ak as vs,J as gr,B as at,a8 as ps}from"./index-Bi-DGtzC.js";import{P as gs,a as ys,b as Ss,F as _s,f as Ts,c as Cs}from"./PlayerProvider-BoJyuLEn.js";import{u as ks}from"./vendor-query-BBT5_sHx.js";import{I as le}from"./vendor-icons-DrybRNxP.js";import{p as Qn,M as Es,z as Tr,f as Yn,c as Ns,C as Is,a as ws,P as xs,b as hn,u as As,i as Ls,j as Bs,n as Ps,h as Ms,k as Rs,m as $s,l as Ds,s as Un,d as Os,e as zs,g as qs,r as Vs,o as xe,A as Fs,t as Us,E as Hs,w as Ws,x as Ks,v as ie,y as Qs,R as Ys,q as js}from"./useWatchAlongPlayer-BvcoBlQi.js";import{S as Gs,O as Hn,a as Xs,A as Js,b as Zs}from"./OptionListMenu-Dxx8rcuO.js";import{M as ea}from"./MatureConsentModal-BXFvhDf0.js";import{u as ta}from"./useProviders-DbKN3TWq.js";import{e as na,f as ra,g as sa,d as aa,c as oa,h as ia,i as la}from"./useTvLibrary-yhqRv3U7.js";import{l as ca,s as da,i as qt,h as yr}from"./playbackCompletion-Dz3OK72-.js";import{u as ua}from"./useIsMobile-Dvx1uJ82.js";import{S as ma}from"./SynopsisText-B3Sa5pRv.js";import{W as ha}from"./WatchAlongPanel-Dsmcqrjh.js";import"./libraryInvalidation-B5vX-vJv.js";const ba="_fullscreenFlat_10bzs_1",fa="_timeDisplay_10bzs_12",va="_bottomControls_10bzs_16",pa="_leftControls_10bzs_20",ga="_rightControls_10bzs_21",ya="_controlBtn_10bzs_25",Sa="_controlsOverlay_10bzs_32",_a="_hidden_10bzs_52",Ta="_topControls_10bzs_58",Ca="_backBtn_10bzs_78",ka="_videoTitleInfo_10bzs_98",Ea="_animeTitle_10bzs_104",Na="_episodeLabel_10bzs_112",Ia="_speedBoostBadge_10bzs_119",wa="_progressBarContainer_10bzs_165",xa="_progressBar_10bzs_165",Aa="_thumb_10bzs_184",La="_bufferedBar_10bzs_202",Ba="_watchedBar_10bzs_212",Pa="_scrubbing_10bzs_237",Ma="_timeBubble_10bzs_241",Ra="_bottomControlsRow_10bzs_255",$a="_nextEpisodeBtn_10bzs_278",Da="_active_10bzs_340",Oa="_settingsPanel_10bzs_352",za="_settingsHeader_10bzs_371",qa="_settingsBackBtn_10bzs_379",Va="_settingsTitle_10bzs_397",Fa="_settingsContent_10bzs_408",Ua="_currentValue_10bzs_417",Ha="_menuItem_10bzs_423",Wa="_menuNote_10bzs_456",Ka="_loadingOverlay_10bzs_465",Qa="_loadingDots_10bzs_476",Ya="_dot_10bzs_481",ja="_bufferingOverlay_10bzs_510",Ga="_bufferingSpinner_10bzs_519",a={fullscreenFlat:ba,timeDisplay:fa,bottomControls:va,leftControls:pa,rightControls:ga,controlBtn:ya,controlsOverlay:Sa,hidden:_a,topControls:Ta,backBtn:Ca,videoTitleInfo:ka,animeTitle:Ea,episodeLabel:Na,speedBoostBadge:Ia,progressBarContainer:wa,progressBar:xa,thumb:Aa,bufferedBar:La,watchedBar:Ba,scrubbing:Pa,timeBubble:Ma,bottomControlsRow:Ra,nextEpisodeBtn:$a,active:Da,settingsPanel:Oa,settingsHeader:za,settingsBackBtn:qa,settingsTitle:Va,settingsContent:Fa,currentValue:Ua,menuItem:Ha,menuNote:Wa,loadingOverlay:Ka,loadingDots:Qa,dot:Ya,bufferingOverlay:ja,bufferingSpinner:Ga},Xa=({player:s,visible:b,settingsOpen:O,onOpenSettings:A,onCloseSettings:M,hasSubtitles:k,isSubtitleActive:I,subtitles:u,onSubtitleChange:l,showNextEpisodeButton:S,onNextEpisode:r,isTheaterMode:L,onTheaterModeToggle:fe,timeLabelRef:J})=>{const{state:m,actions:ke}=s,Ae=()=>{if(I){l(-1);return}let ve=null;try{ve=R.getItem("tvLastSubtitle")}catch{}l(Qn(u,{lastKey:ve,enabled:!0}))};return t("div",{className:`${a.controlsOverlay} ${b?"":a.hidden}`,"data-speed-boost-ignore":"true",style:{pointerEvents:"none",background:"none",justifyContent:"flex-end"},children:t("div",{className:a.bottomControls,onClick:ve=>ve.stopPropagation(),children:[t(gs,{classes:{container:a.progressBarContainer,scrubbing:a.scrubbing,timeBubble:a.timeBubble,bar:a.progressBar,buffered:a.bufferedBar,watched:a.watchedBar,thumb:a.thumb},timeLabelRef:J}),t("div",{className:a.bottomControlsRow,children:[t("div",{className:a.leftControls,children:[t(ys,{className:a.controlBtn}),t(Ss,{buttonClassName:a.controlBtn,onExpandedChange:ke.setShowVolumeSlider}),t("span",{className:a.timeDisplay,ref:J,children:[Kn(0)," / ",Kn(m.duration)]})]}),t("div",{className:a.rightControls,children:[S&&t("button",{className:a.nextEpisodeBtn,onClick:r,title:"Play next episode",children:"Next EP"}),k&&t("button",{className:`${a.controlBtn} ${I?a.active:""}`,onClick:Ae,"aria-label":I?"Turn subtitles off":"Turn subtitles on",children:t(le,{name:"closed-captioning"})}),t("button",{className:`${a.controlBtn} ${O?a.active:""}`,onClick:()=>O?M():A(),"aria-label":"Settings",children:t(le,{name:"cog"})}),t("button",{className:`${a.controlBtn} ${L?a.active:""}`,onClick:ve=>{ve.stopPropagation(),fe()},title:L?"Exit Theater Mode":"Theater Mode","aria-label":L?"Exit Theater Mode":"Theater Mode",children:t(le,{name:"tv"})}),t(_s,{className:a.controlBtn})]})]})]})})},bn=-6e4,Wn=6e4,Sr=500,Ja=({classes:s,delayMs:b,onDelayChange:O})=>{const[A,M]=g(null),k=A??b,I=F(O);I.current=O;const u=F(b);u.current=b;const l=F(null);l.current=A,y(()=>{M(null)},[b]),y(()=>()=>{const L=l.current;L!==null&&L!==u.current&&I.current(L)},[]);const S=L=>{u.current=L,l.current=null,I.current(L),M(null)},r=L=>{const fe=l.current??u.current,J=Math.max(bn,Math.min(Wn,fe+L));S(J)};return t(qe,{children:[t("div",{style:{display:"flex",gap:6,padding:"0.5rem 0.75rem 0.25rem"},children:[t("button",{type:"button",className:s.item,onClick:()=>r(-Sr),"aria-label":"Show subtitles 0.5 seconds earlier",style:{flex:1,justifyContent:"center"},children:t("span",{children:"-0.5s"})}),t("button",{type:"button",className:s.item,onClick:()=>r(Sr),"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(Es,{label:"Subtitle timing",display:Tr(k),min:bn,max:Wn,step:100,value:k,percent:(k-bn)/(Wn-bn)*100,onChange:L=>{const fe=Math.round(L);l.current=fe,M(fe)},onCommit:()=>{const L=l.current;L!==null&&S(L)}}),t("div",{className:s.note,children:"Positive delays subtitles (show later). Negative shows them earlier. 0.0s is default."})]})},Za=({view:s,onSelectView:b,onClose:O,player:A,onSubtitleStyleChange:M,streams:k,resolutionIdx:I,onResolutionChange:u,hasSubtitles:l,subtitles:S,selectedSubtitle:r,isSubtitleActive:L,onSubtitleChange:fe,audioTracks:J,selectedAudioTrack:m,onAudioTrackChange:ke,videoDelayEnabled:Ae,onVideoDelayToggle:ve,videoDelayMs:pe,onVideoDelayChange:_,onCalibrate:yt,subtitleDelayMs:Ge,onSubtitleDelayChange:E,ambientSettings:U,onAmbientChange:Q})=>{const{state:ce}=A,St=()=>t(qe,{children:[k.length>1&&t("button",{className:a.menuItem,onClick:()=>b("resolution"),children:[t("span",{children:"Resolution"}),t("span",{className:a.currentValue,children:k[I]?.quality||"Auto"})]}),l&&t("button",{className:a.menuItem,onClick:()=>b("subtitles"),children:[t("span",{children:"Subtitles"}),t("span",{className:a.currentValue,children:L?S[r]?.label||S[r]?.language:"Off"})]}),l&&t("button",{className:a.menuItem,onClick:()=>b("subtitle-style"),children:[t("span",{children:"Subtitle Style"}),t("span",{className:a.currentValue,children:[ce.subtitleFontSize.toFixed(1),"x · ",ce.subtitlePosition]})]}),l&&t("button",{className:a.menuItem,onClick:()=>b("subtitle-timing"),children:[t("span",{children:"Subtitle Timing"}),t("span",{className:a.currentValue,children:Tr(Ge)})]}),J.length>0&&t("button",{className:a.menuItem,onClick:()=>b("audio"),children:[t("span",{children:"Audio Track"}),t("span",{className:a.currentValue,children:J[m]?.label||J[m]?.language})]}),t("button",{className:a.menuItem,onClick:()=>b("av-sync"),children:[t("span",{children:"A/V Sync"}),t("span",{className:a.currentValue,children:Ae?`${pe}ms`:"Off"})]}),U&&Q&&t("button",{className:a.menuItem,onClick:()=>b("ambient"),children:[t("span",{children:"Ambient Light"}),t("span",{className:a.currentValue,children:U.enabled?"On":"Off"})]})]}),Le=()=>t(Hn,{classes:{item:a.menuItem,active:a.active},options:k.map((w,te)=>({key:String(te),label:w.quality,selected:te===I})),onSelect:w=>u(Number(w))}),Xe=()=>t(Hn,{classes:{item:a.menuItem,active:a.active},options:[{key:"off",label:"Off",selected:!L},...S.map((w,te)=>({key:String(te),label:w.label||w.language,selected:te===r}))],onSelect:w=>fe(w==="off"?-1:Number(w))}),ot=()=>t(Xs,{classes:{item:a.menuItem,active:a.active},values:{fontSize:ce.subtitleFontSize,position:ce.subtitlePosition,bgOpacity:ce.subtitleBgOpacity,bgColor:ce.subtitleBgColor,textColor:ce.subtitleTextColor,edge:ce.subtitleEdge,bold:ce.subtitleBold},onChange:M}),ae=()=>t(Ja,{classes:{item:a.menuItem,active:a.active,note:a.menuNote},delayMs:Ge,onDelayChange:w=>E?.(w)}),_t=()=>t(Hn,{classes:{item:a.menuItem,active:a.active},options:J.map((w,te)=>({key:String(te),label:w.label||w.language,selected:te===m})),onSelect:w=>ke(Number(w))}),Je=()=>t(Js,{classes:{item:a.menuItem,active:a.active,note:a.menuNote},enabled:Ae,delayMs:pe,onToggle:w=>ve?.(w),onDelayChange:w=>_?.(w),onCalibrate:yt}),Y=()=>U&&Q?t(Zs,{classes:{item:a.menuItem,active:a.active,note:a.menuNote},values:U,onChange:Q}):null;return t("div",{"data-speed-boost-ignore":"true",onClick:w=>w.stopPropagation(),children:t(Gs,{classes:{panel:a.settingsPanel,header:a.settingsHeader,backBtn:a.settingsBackBtn,title:a.settingsTitle,content:a.settingsContent},title:s==="main"?"Settings":s==="subtitle-style"?"Subtitle Style":s==="subtitle-timing"?"Subtitle Timing":s==="audio"?"Audio Track":s==="resolution"?"Resolution":s==="av-sync"?"A/V Sync":s==="ambient"?"Ambient Light":s.charAt(0).toUpperCase()+s.slice(1),onBack:()=>s==="main"?O():b("main"),children:[s==="main"&&St(),s==="resolution"&&Le(),s==="subtitles"&&Xe(),s==="subtitle-style"&&ot(),s==="subtitle-timing"&&ae(),s==="audio"&&_t(),s==="av-sync"&&Je(),s==="ambient"&&Y()]})})},eo=({player:s,title:b,episodeLabel:O,server:A,audioTracks:M,selectedAudioTrack:k,onAudioTrackChange:I,subtitles:u,selectedSubtitle:l,onSubtitleChange:S,streams:r,resolutionIdx:L,onResolutionChange:fe,onBack:J,children:m,videoDelayEnabled:ke=!1,onVideoDelayToggle:Ae,videoDelayMs:ve=0,onVideoDelayChange:pe,onCalibrateAvSync:_,subtitleDelayMs:yt=0,onSubtitleDelayChange:Ge,showNextEpisodeButton:E=!1,onNextEpisode:U,isLoading:Q=!1,isTheaterMode:ce,onTheaterModeToggle:St,ambientSettings:Le,onAmbientChange:Xe,hideChrome:ot=!1})=>{const{state:ae,refs:_t,actions:Je}=s,Y=_t.videoRef,{subtitleFontSize:w,subtitlePosition:te,subtitleBgOpacity:de,subtitleBgColor:Be,subtitleTextColor:Pe,subtitleEdge:ne,subtitleBold:Tt}=ae,[Ve,_e]=g(null),Ct=F(null),[Te,kt]=g(0);y(()=>{const me=Y.current;if(!me)return;const Z=()=>kt(me.clientHeight||0);Z();const et=new ResizeObserver(Z);return et.observe(me),()=>et.disconnect()},[Y]);const ue=Je.setSubtitleStyle;y(()=>{const me="tv-player-subtitle-style";let Z=document.getElementById(me);Z||(Z=document.createElement("style"),Z.id=me,document.head.appendChild(Z));const et={fontSize:w,position:te,bgOpacity:de,bgColor:Be,textColor:Pe,edge:ne,bold:Tt},re=Y.current,ct=Yn(w,Te||re?.clientHeight||720);if(Z.textContent=Ns({...et,fontSize:ct}),re){const It=()=>{const i=Number(te);return isNaN(i)?0:Math.max(0,Math.min(100,i))},tt=(i,c)=>{try{const z=i;z.snapToLines=!1,z.line=c}catch{}},ge=()=>{const i=ct*16,c=re.videoHeight||re.clientHeight||720,z=re.videoWidth||re.clientWidth||1280;return{step:i*1.3/c*100,chars:Math.max(20,Math.floor(z/(i*.55)))}},Ut=i=>{const c=Math.max(0,Math.min(100,100-It())),z=Array.from(i.activeCues??[]);if(z.length<=1){z.forEach(Re=>tt(Re,c));return}const{step:oe,chars:Ht}=ge();let At=c;for(let Re=z.length-1;Re>=0;Re--){const fn=String(z[Re].text??"").replace(/<[^>]*>/g,"").split(`
|
|
2
|
-
`).reduce((vn,he)=>vn+Math.max(1,Math.ceil(he.length/Ht)),0),Lt=At-fn*oe;tt(z[Re],Math.max(0,Lt)),At=Lt-oe*.4}},Ne=()=>{const i=Math.max(0,Math.min(100,100-It()));Array.from(re.textTracks).forEach(c=>{c.cues&&(Array.from(c.cues).forEach(z=>tt(z,i)),c.mode==="showing"&&Ut(c))})};Ne();const nt=i=>{const c=i.target;c.mode==="showing"&&Ut(c)},wt=()=>{Array.from(re.textTracks).forEach(i=>{i.removeEventListener("cuechange",nt),i.addEventListener("cuechange",nt)}),Ne()};Array.from(re.textTracks).forEach(i=>{i.addEventListener("cuechange",nt)}),re.textTracks.addEventListener("addtrack",wt);const xt=Array.from(re.querySelectorAll("track")),dt=()=>Ne();return xt.forEach(i=>i.addEventListener("load",dt)),()=>{Array.from(re.textTracks).forEach(i=>{i.removeEventListener("cuechange",nt)}),re.textTracks.removeEventListener("addtrack",wt),xt.forEach(i=>i.removeEventListener("load",dt))}}},[w,te,de,Be,Pe,ne,Tt,l,u,Y,Te]);const Me=u.length>0,Ee=l>=0,it=()=>{_e("main"),Je.setShowControls(!0)},Fe=()=>{_e(null)},Vt=ae.showControls||!!Ve,Ze=Ts(s.engine),Ue=Ze.audioTracks.find(me=>me.id===Ze.activeAudioTrack)??M[k],Ft=l>=0?u[l]??Ze.subtitleTracks.find(me=>me.id===l):void 0,Et=t(Is,{visible:Vt,title:b,episode:O,server:Q?void 0:A,audio:Q?void 0:Ue?.label||Ue?.language,subtitles:Q?void 0:Ft?.label||Ft?.language,onBack:J,classes:{overlay:a.controlsOverlay,hidden:a.hidden,top:a.topControls,backBtn:a.backBtn,titleInfo:a.videoTitleInfo,title:a.animeTitle,episode:a.episodeLabel}}),K=!Q&&!ae.isBuffering&&ae.duration>0?t(ws,{}):null,lt=t(Xa,{player:s,visible:Vt,settingsOpen:!!Ve,onOpenSettings:it,onCloseSettings:Fe,hasSubtitles:Me,isSubtitleActive:Ee,subtitles:u,onSubtitleChange:S,showNextEpisodeButton:E,onNextEpisode:U,isTheaterMode:ce,onTheaterModeToggle:St,timeLabelRef:Ct}),x=Ve?t(Za,{view:Ve,onSelectView:_e,onClose:Fe,player:s,onSubtitleStyleChange:ue,streams:r,resolutionIdx:L,onResolutionChange:fe,hasSubtitles:Me,subtitles:u,selectedSubtitle:l,isSubtitleActive:Ee,onSubtitleChange:S,audioTracks:M,selectedAudioTrack:k,onAudioTrackChange:I,videoDelayEnabled:ke,onVideoDelayToggle:Ae,videoDelayMs:ve,onVideoDelayChange:pe,onCalibrate:()=>{_e(null),_?.()},subtitleDelayMs:yt,onSubtitleDelayChange:Ge,ambientSettings:Le,onAmbientChange:Xe}):null,Nt=t(qe,{children:[Q&&t("div",{className:a.loadingOverlay,"aria-hidden":"true",children:t("div",{className:a.loadingDots,children:[t("div",{className:a.dot}),t("div",{className:a.dot}),t("div",{className:a.dot})]})}),ae.isBuffering&&!Q&&t("div",{className:a.bufferingOverlay,"aria-hidden":"true",children:t("div",{className:a.bufferingSpinner})}),ae.isSpeedBoostActive&&t("div",{className:a.speedBoostBadge,"aria-hidden":"true",children:[t("span",{children:"2x"}),t(le,{name:"forward",size:12})]})]});return t(xs,{engine:s.engine,topBar:Et,centerControls:K,bottomBar:!Q&&ae.duration>0?lt:null,settingsPanel:x,overlays:Nt,isInteracting:!!Ve||ae.showVolumeSlider,nativeControls:ae.useNativeControls,onStageClick:Fe,className:ae.isFullscreen?a.fullscreenFlat:"",chromeDisabled:ot,children:m})},to=({servers:s,selectedServer:b,onServerSelect:O})=>s.length===0?null:t("div",{className:hn.sourceSelectionContainer,children:[t("h4",{children:"Source"}),t("div",{className:hn.sourceButtons,children:s.map(A=>t("button",{className:`${hn.sourceButton} ${b===A?hn.active:""}`,onClick:()=>O(A),children:A},A))})]}),no=cs.memo(to);function ro({details:s,isMovie:b,season:O,episode:A,videoRef:M,active:k}){const I=F("");I.current||(I.current=`tv-${Date.now()}-${Math.random().toString(36).slice(2)}`);const u=C(()=>{if(!s)return;const l=M.current,S=b?"":`S${String(O).padStart(2,"0")}E${String(A).padStart(2,"0")}`;gt.discord.tvPresence.mutate({title:s.title,episodeLabel:S,isPlaying:l?!l.paused&&!l.ended:!0,thumbnail:s.poster,currentTime:l?l.currentTime:0,duration:l&&l.duration||0,isAdult:s.adult===!0,sessionId:I.current}).catch(()=>{}),gt.discord.heartbeat.mutate({sessionId:I.current}).catch(()=>{})},[s,b,O,A,M]);return y(()=>{if(!s)return;u();const l=window.setInterval(()=>{const S=M.current;(!S||!S.paused)&&u()},15e3);return()=>window.clearInterval(l)},[u,s,M]),y(()=>{if(!s||!k)return;const l=M.current;if(!l)return;const S=()=>u();return l.addEventListener("play",S),l.addEventListener("pause",S),l.addEventListener("seeked",S),()=>{l.removeEventListener("play",S),l.removeEventListener("pause",S),l.removeEventListener("seeked",S)}},[s,k,u,M]),y(()=>{const l=I.current,S=()=>hs(l),r=()=>S();return window.addEventListener("pagehide",r),window.addEventListener("beforeunload",r),()=>{window.removeEventListener("pagehide",r),window.removeEventListener("beforeunload",r),S()}},[]),{sendPresence:u}}function so(s,b,O){const A=()=>{const k=Array.isArray(s.audioTracks)?s.audioTracks.length:0,I=O.getWant(),u=k>0?Math.min(Math.max(0,I),k-1):I;s.audioTrack=u,u!==I&&O.onResolve(u)},M=(k,I)=>{const u=O.getWant(),l=Array.isArray(s.audioTracks)?s.audioTracks.length:0;if(I.id!==u&&u>=0&&u<l){s.audioTrack!==u&&(s.audioTrack=u);return}O.onResolve(I.id)};return s.on(b.MANIFEST_PARSED,A),s.on(b.AUDIO_TRACK_SWITCHED,M),()=>{s.off(b.MANIFEST_PARSED,A),s.off(b.AUDIO_TRACK_SWITCHED,M)}}const ao=/\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 oo(){try{if(ao.test(navigator.userAgent||""))return!0;const s=navigator.deviceMemory;if(typeof s=="number"&&s>0&&s<2)return!0}catch{}return!1}const io="_statusMsg_4sq8d_1",lo="_error_4sq8d_7",co="_spinner_4sq8d_11",uo="_spin_4sq8d_11",mo="_sourceLoader_4sq8d_16",ho="_ringSpinner_4sq8d_22",bo="_meta_4sq8d_40",fo="_year_4sq8d_48",vo="_rating_4sq8d_53",po="_typeBadge_4sq8d_62",go="_tv_4sq8d_70",yo="_movie_4sq8d_75",So="_controlLabel_4sq8d_80",_o="_select_4sq8d_90",To="_playerSection_4sq8d_102",Co="_video_4sq8d_106",ko="_videoHidden_4sq8d_128",Eo="_delayCanvas_4sq8d_133",No="_delayCanvasActive_4sq8d_146",Io="_subtitleOverlay_4sq8d_150",wo="_videoIframe_4sq8d_169",xo="_retryButton_4sq8d_177",Ao="_sidebarSeason_4sq8d_192",Lo="_mobileSeasonRow_4sq8d_208",Bo="_providerSelectWrap_4sq8d_222",Po="_genreRow_4sq8d_230",Mo="_genreChip_4sq8d_237",Ro="_metaRow_4sq8d_247",$o="_detailGrid_4sq8d_256",Do="_detailItem_4sq8d_264",Oo="_imdbLink_4sq8d_286",zo="_watchedOverlay_4sq8d_296",qo="_watchedTitle_4sq8d_318",Vo="_watchedSubtext_4sq8d_324",Fo="_watchedActions_4sq8d_330",f={statusMsg:io,error:lo,spinner:co,spin:uo,sourceLoader:mo,ringSpinner:ho,meta:bo,year:fo,rating:vo,typeBadge:po,tv:go,movie:yo,controlLabel:So,select:_o,playerSection:To,video:Co,videoHidden:ko,delayCanvas:Eo,delayCanvasActive:No,subtitleOverlay:Io,videoIframe:wo,retryButton:xo,sidebarSeason:Ao,mobileSeasonRow:Lo,providerSelectWrap:Bo,genreRow:Po,genreChip:Mo,metaRow:Ro,detailGrid:$o,detailItem:Do,imdbLink:Oo,watchedOverlay:zo,watchedTitle:qo,watchedSubtext:Vo,watchedActions:Fo},Uo=[],Ho=[];function _r({error:s,onRetry:b}){return t("div",{className:`${f.statusMsg} ${f.error}`,style:{flexDirection:"column",alignItems:"stretch",gap:8},children:t("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[t("span",{style:{flex:1},children:s}),t("button",{className:f.retryButton,onClick:b,children:"Retry"})]})})}const oi=()=>{const{id:s}=ds(),[b]=us(),O=F(b);O.current=b;const A=ms(),M=ks(),k=b.get("type"),I=bs(),u=!!I.session,l=u&&!I.session?.host,S=l&&["tv","movie"].includes(I.room?.selection.kind||"")?I.room?.selection:null,[r,L]=g(null),[fe,J]=g(()=>parseInt(b.get("s")||"1",10)||1),m=S?.season??fe,[ke,Ae]=g([]),[ve,pe]=g(()=>parseInt(b.get("e")||"1",10)||1),_=S?Number(S.episode):ve,[yt,Ge]=g(()=>{try{return R.getItem("tvProvider")||""}catch{return""}}),E=S?.provider??yt,[U,Q]=g([]),[ce,St]=g(""),[Le,Xe]=g(""),{options:ot,isFallback:ae,isLoading:_t}=ta(),Je=Se(()=>ot.filter(e=>(e.kind??"tv")==="tv").map(e=>({id:e.id,label:e.label,tier:e.tier==="embed"?"embed":"direct",servers:e.servers})),[ot]),Y=ae||Je.length===0?Uo:Je,w=Y.filter(e=>e.tier==="direct"),te=Y.filter(e=>e.tier==="embed"),[de,Be]=g(!1),[Pe,ne]=g(""),[Tt,Ve]=g([]),[_e,Ct]=g(0),[Te,kt]=g([]),[ue,Me]=g(-1),[Ee,it]=g(0),[Fe,Vt]=g(""),[Ze,Ue]=g(""),[Ft,Et]=g(()=>{try{return R.getItem("tvServer")||""}catch{return""}}),K=S?.source??Ft,lt=Se(()=>Y.find(e=>e.id===E),[Y,E]),x=lt?.tier==="embed",[Nt,me]=g([]),[Z,et]=g(""),[re,ct]=g(""),[It,tt]=g(!1),ge=Se(()=>Nt.length>0?Nt:lt?.servers??[],[Nt,lt]),Ut=Se(()=>Z&&!u?["Embed",...ge]:ge,[ge,Z,u]),Ne=It&&!!Z,nt=Ne?re||Z:"";y(()=>{if(!Z){ct("");return}let e=!1;return Fn(`/api/resolve?url=${encodeURIComponent(Z)}`).then(n=>{!e&&n.finalUrl&&ct(n.finalUrl)}).catch(()=>{}),()=>{e=!0}},[Z]);const wt=F([]);y(()=>{wt.current=U},[U]);const xt=F(_e);y(()=>{xt.current=_e},[_e]);const dt=F(ue);y(()=>{dt.current=ue},[ue]);const i=As({skipIntervals:Ho}),c=i.refs.videoRef,z=F(null),oe=F([]),Ht=F(null),At=F(null),{videoDelayMs:Re,videoDelayEnabled:Wt,setDelayEnabled:fn,handleVideoDelayChange:Lt,isCalibrating:vn,testClipActive:he,stopCalibration:pn,openAvSyncCalibrator:Cr,cancelAvSyncCalibrator:kr,applyAvSyncCalibrator:Er,toggleTestClip:Nr,calibReturnRef:Kt,effectiveVideoDelayMs:gn}=Ls(c),[ut,Ir]=g(()=>{try{const e=Number(R.getItem("tvSubtitleDelayMs"));if(Number.isFinite(e)&&e>=-6e4&&e<=6e4)return Math.round(e)}catch{}return 0}),yn=F(ut);yn.current=ut;const wr=C(e=>{const n=Math.max(-6e4,Math.min(6e4,Math.round(e)));if(yn.current!==n){yn.current=n,Ir(n);try{R.setItem("tvSubtitleDelayMs",String(n))}catch{}}},[]);Bs({videoRef:c,canvasRef:Ht,delayMs:gn,enabled:Wt});const Sn=Wt,ye=Sn||ut!==0,{settings:_n,update:xr}=Ps(),Tn=F(ye);Tn.current=ye;const Cn=C(()=>{if(!Tn.current)return;const e=c.current;e&&Array.from(e.textTracks).forEach(n=>{n.mode!=="hidden"&&(n.mode="hidden")})},[c]),{hasConsent:Bt,grant:Ar}=fs(),v=k==="movie";ro({details:r,isMovie:v,season:m,episode:_,videoRef:c,active:!x&&!de&&!Pe&&U.length>0});const Qt=s?vs(k||"tv",s):"",ee=Qt,$e=`${ee}:${m}:${_}:${E}:${K}`,Yt=Se(()=>!s||!r||x||Ne||de||Le!==$e||U[Ee]?.type!=="hls"?null:{kind:v?"movie":"tv",...v?{}:{season:m},showId:s,episode:String(v?1:_),provider:E,source:K,mode:"sub",title:r.title},[s,r,x,Ne,de,Le,$e,U,Ee,v,m,_,E,K]),jn=Ms(i.engine,Yt,de||!r),Gn=na(),jt=ra(),Gt=sa(),{toggle:Xn,bookmarkedIds:Lr,pending:Br}=aa(),{data:Jn}=oa(r?Qt:void 0),Pt=Jn?!!Jn.inLibrary:Qt?Lr.has(Qt):!1,Pr=C(()=>{!r||!s||Xn({tmdbId:Number(s),mediaType:k||"tv",title:r.title,poster:r.poster,year:r.year,adult:r.adult})},[r,s,k,Xn]),{data:He,isFetched:kn,isFetching:En}=ia(ee||void 0,m,_),Xt=Se(()=>ke.map(e=>e.episode_number).sort((e,n)=>e-n),[ke]),Mt=Xt.indexOf(_),Nn=Mt>0?Xt[Mt-1]:null,q=Mt>=0&&Mt<Xt.length-1?Xt[Mt+1]:null,Jt=Se(()=>(r?.seasons??[]).map(e=>e.season_number).filter(e=>Number.isFinite(e)).sort((e,n)=>e-n),[r]),De=Se(()=>{if(v||q!=null)return null;const e=Jt.indexOf(m);return e>=0&&e<Jt.length-1?Jt[e+1]:(r?.number_of_seasons??0)>m?m+1:null},[v,q,Jt,m,r?.number_of_seasons]),In=He?.currentTime??0,Zt=F(null),[We,en]=g(!1),[mt,Zn]=g(0),[Rt,er]=g(!1),[ht,bt]=g(!1),[Mr,wn]=g(!1),[Rr,$r]=g(""),[tn,Dr]=g(!1),[Or,xn]=g(!1),[tr,nr]=g(!1),{isTheaterMode:Oe,toggleTheaterMode:An,handleLayoutClick:zr}=Rs(),qr=He?.duration??0,Vr=He?.completed===1,Fr=kn&&(Vr||qt(In,qr)),ft=!u&&!he&&Fr&&!tr,Ur=C(()=>nr(!0),[]);y(()=>{const e=n=>{n.defaultPrevented||n.ctrlKey||n.metaKey||n.altKey||n.repeat||n.target.closest('input, textarea, button, select, a, [role="button"], [contenteditable="true"]')||n.key.toLowerCase()==="t"&&An()};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[An]),$s(i,(U.length>0||Ze!=="")&&!Oe&&!We&&!ht&&!ft);const Hr=ua(),[vt,Wr]=g(ca),Kr=C(e=>{Wr(e),da(e)},[]),Ke=F(!1),ze=F(null),Ln=F(0),G=F(null),nn=F(""),Qr=yr(In),$t=!u&&!Ke.current&&!tr&&(We||ht||Qr||ft),rn=F($t);rn.current=$t;const sn=F(!1);y(()=>{sn.current=Rt},[Rt]);const Qe=C((e,n)=>{if(!ee||!n||n<30)return;const o=qt(e,n);Math.abs(e-Ln.current)<10&&!o||(Ln.current=e,Gn.mutate({mediaId:ee,season:m,episode:_,currentTime:Math.floor(e),duration:Math.floor(n),completed:o,title:r?.title??null,poster:r?.poster??null,backdrop:r?.backdrop??null,year:r?.year??null,overview:r?.overview??null,tmdbId:r?.id??null,mediaType:k||"tv",adult:r?.adult?1:0}))},[ee,m,_,Gn,r,k]),Ie=C((e,n)=>{pn();const o=new URLSearchParams(b);o.set("type",b.get("type")||"tv"),o.set("s",String(e)),o.set("e",String(n)),A(`${window.location.pathname}?${o.toString()}`)},[b,A,pn]),Dt=C(()=>{const e=c.current;if(!e||v||q==null){wn(!1);return}const n=e.duration||0,o=e.currentTime||0;wn(n>0&&o/n>=.8)},[v,q,c]),an=C((e,n)=>["tv-sources",E,v?"movie":"tv",s,e,n,K],[E,v,s,K]),on=C(async(e,n)=>{if(!r||!s||!E)return{valid:!1,sources:[]};const o=v?"movie":"tv",d=await gt.tv.sources.query({provider:E,type:o,tmdbId:String(s),season:e,episode:n,title:r.title||"",year:r.year||"",totalSeasons:String(r.number_of_seasons||1),imdbId:r.imdb_id||"",...K?{server:K}:{}});return{valid:"valid"in d?d.valid:!1,error:"error"in d?d.error:void 0,sources:d.sources,referer:"referer"in d?d.referer:void 0,audioTracks:d.audioTracks,subtitles:"subtitles"in d?d.subtitles:void 0,servers:"servers"in d?d.servers:void 0,server:"server"in d?d.server:void 0,embedUrl:"embedUrl"in d?d.embedUrl:void 0}},[r,s,E,v,K]),rr=C(()=>{if(v||!r||!s||!E||x||q==null)return;const e=an(m,q);M.getQueryState(e)?.status!=="success"&&M.prefetchQuery({queryKey:e,queryFn:()=>on(m,q),staleTime:300*1e3,gcTime:1800*1e3})},[v,r,s,E,x,q,m,M,an,on]),Yr=C(()=>{if(he)return;Dt();const e=c.current;!e||e.paused||e.ended||(e.duration>0&&e.duration-e.currentTime<=60&&rr(),!ze.current&&(ze.current=setTimeout(()=>{ze.current=null,Qe(e.currentTime,e.duration||0)},5e3)))},[Qe,c,he,Dt,rr]),jr=C(()=>{const e=c.current;if(!(!e||!r)&&(ze.current&&clearTimeout(ze.current),ze.current=null,Qe(e.currentTime,e.duration||0),!l)){if(q!=null){vt&&(pe(q),Ie(m,q));return}$r(v?r.title:`${r.title} - Season ${m}`),bt(!0),Ke.current=!0}},[v,r,m,q,vt,Qe,Ie,c,l]),{checkEnd:ln,logDuration:sr}=Ds({videoRef:c,sourceType:x?"iframe":void 0,resetKey:`${ee}:${m}:${_}`,onEnd:jr}),Gr=C(()=>{i.actions.onPlay()},[i.actions]),Xr=C(()=>{i.actions.onPause();const e=c.current;e&&!e.ended&&Qe(e.currentTime,e.duration||0)},[i.actions,Qe,c]),Jr=C(()=>{const e=c.current;if(e){try{const n=parseFloat(R.getItem("playerVolume")||"");isNaN(n)||(e.volume=Math.max(0,Math.min(1,n))),e.muted=R.getItem("playerMuted")==="true"}catch{}if(G.current!=null&&G.current>0){try{e.currentTime=G.current}catch{}G.current=null}Dt()}},[c,Dt]),Bn=C(()=>{const e=c.current;if(e&&G.current!=null&&G.current>0){try{e.currentTime=G.current}catch{}G.current=null}},[c]),Zr=C(()=>{mt>0&&(G.current=mt);const e=c.current;if(e&&mt>0){try{e.currentTime=mt,G.current=null}catch{}e.play().catch(()=>{})}en(!1),Ke.current=!0},[mt,c]),ar=C(()=>{G.current=null;const e=c.current;e&&(e.currentTime=0,e.play().catch(()=>{})),en(!1),Ke.current=!0},[c]),or=C(()=>{q!=null&&(Ke.current=!0,pe(q),Ie(m,q))},[q,m,Ie]),ir=C(()=>{De!=null&&(bt(!1),Ke.current=!0,J(De),pe(1),Ie(De,1))},[De,Ie]),es=C(async()=>{if(ee)try{Pt?await jt.mutateAsync({id:ee,status:"Completed"}):r&&s&&(await Gt.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}),gr.success("Moved to Completed")),bt(!1),A("/")}catch{}},[ee,Pt,jt,Gt,r,s,k,A]);y(()=>{Ke.current=!1,Zt.current=null,en(!1),wn(!1),Zn(0),er(!1),nr(!1),sn.current=!1,G.current=null,Ln.current=0},[ee,m,_]),y(()=>{nn.current=$e},[$e]),y(()=>{kn&&(er(!0),sn.current=!0)},[kn,ee,m,_]),y(()=>{if(u||En||!He||Ke.current)return;const e=`${ee}:${m}:${_}`;if(Zt.current===e)return;Zt.current=e;const n=He,o=n.currentTime??0;yr(o)&&n.completed!==1&&!qt(o,n.duration??0)&&(Zn(o),en(!0))},[He,En,ee,m,_,u]),y(()=>{!u&&We&&c.current&&c.current.pause()},[We,c,u]),y(()=>{const e=c.current;return()=>{ze.current&&clearTimeout(ze.current),ze.current=null,!e?.ended&&i.engine.getState().duration>0&&Qe(i.engine.getTimeline().currentTime,i.engine.getState().duration)}},[i.engine,Qe,c]);const Pn=C(e=>{let n=null,o=!0;try{n=R.getItem("tvLastSubtitle"),o=R.getItem("tvSubtitlesEnabled")!=="false"}catch{}return Qn(e,{lastKey:n,enabled:o})},[]),Mn=C(e=>{if(!(e<0))try{R.setItem("tvSubtitlesEnabled","true"),R.setItem("tvSelectedSubtitle",String(e))}catch{}},[]),lr=C(e=>{if(e.length===0)return 0;let n=null;try{n=R.getItem("tvLastAudio")}catch{}if(n){const o=e.findIndex(B=>Un(B)===n);if(o>=0)return o;const d=n.indexOf("|||"),h=d>=0?n.slice(0,d):n,T=d>=0?n.slice(d+3):n,$=e.findIndex(B=>B.language===h||B.label===T);if($>=0)return $}return Qn(e,{lastKey:null,enabled:!0})},[]),cr=C(e=>{let n=null;try{n=R.getItem("tvLastQuality")}catch{}if(!n||e.length===0)return 0;const o=e.findIndex(B=>(B.quality||"")===n);if(o>=0)return o;const d=B=>{const X=/(\d{3,4})/.exec(B||"");return X?parseInt(X[1],10):0},h=d(n);if(!h)return 0;let T=0,$=1/0;return e.forEach((B,X)=>{const p=d(B.quality),H=Math.abs(p-h);p>0&&H<$&&($=H,T=X)}),T},[]),{data:dr}=la(ee||void 0),ur=Se(()=>(dr?.progress??[]).filter(n=>n.season===m&&(n.completed===1||qt(n.currentTime,n.duration))).map(n=>String(n.episode)),[dr,m]),mr=Se(()=>ke.map(e=>({id:String(e.episode_number),label:`Episode ${e.episode_number}`,sublabel:e.name||void 0,thumbnail:e.still_path?`https://image.tmdb.org/t/p/w185${e.still_path}`:void 0})),[ke]),hr=Se(()=>(r?.genres??[]).map(e=>e.name).slice(0,5),[r]),Rn=Se(()=>[r?.year,r?.status,r?.number_of_seasons?`${r.number_of_seasons} Season${r.number_of_seasons>1?"s":""}`:null,r?.number_of_episodes?`${r.number_of_episodes} Episodes`:null].filter(Boolean),[r]);y(()=>{if(!l&&Y.length!==0&&!Y.some(e=>e.id===E)){const e=Y.find(n=>n.tier==="direct")?.id??Y[0].id;Ge(e);try{R.setItem("tvProvider",e)}catch{}}},[Y,E,l]),y(()=>{me([]),et(""),ct(""),tt(!1)},[E]),y(()=>{if(!l&&ge.length!==0&&!ge.includes(K)){Et(ge[0]);try{R.setItem("tvServer",ge[0])}catch{}}},[ge,K,l]),y(()=>{if(!s){L(null),Q([]),Xe(""),ne(""),Ue("");return}const e=Number(s),n=k||"tv";L(null),Q([]),Xe(""),ne(""),Ue("");const o=parseInt(O.current.get("s")||"",10),d=parseInt(O.current.get("e")||"",10);J(isNaN(o)?1:o),pe(isNaN(d)?1:d),it(0),gt.tv.details.query({type:n,id:String(e)}).then(h=>{const T={id:h.id,title:h.title||"",overview:h.overview||"",vote_average:h.vote_average,year:h.year,poster:h.poster,backdrop:h.backdrop,imdb_id:h.imdb_id||void 0,adult:h.adult,seasons:h.seasons,number_of_seasons:h.number_of_seasons};L(T),T.seasons&&T.seasons.length>0&&isNaN(o)&&J(T.seasons[0].season_number)}).catch(()=>{})},[s,k]),y(()=>{if(!r||!s)return;if(!(r.seasons!==void 0||r.number_of_seasons!==void 0)){Ae([]);return}const n=parseInt(b.get("e")||"",10);gt.tv.episodes.query({id:String(s),season:String(m)}).then(o=>{const d=(o.episodes||[]).map(h=>({episode_number:h.episode_number,name:h.name||"",vote_average:h.vote_average,overview:h.overview||"",still_path:h.still_path||""}));Ae(d),d.length!==0&&pe(h=>!isNaN(n)&&d.some(T=>T.episode_number===n)?n:d.some(T=>T.episode_number===h)?h:d[0].episode_number)}).catch(()=>{})},[r,s,m,b]),y(()=>{if(!x||!r||!s)return;Fn(`/api/tv/embed/${E}/${v?"movie":"tv"}/${s}?season=${m}&episode=${_}`).then(n=>{if(n.url)return Ue(n.url),Fn(`/api/resolve?url=${encodeURIComponent(n.url)}`).then(o=>{o.finalUrl&&Ue(o.finalUrl)})}).catch(()=>{})},[E,r,s,m,_,v,x]);const cn=C(async()=>{if(!r||!s||!E||x||r.adult&&!Bt)return;const e=$e;Be(!0),ne(""),wt.current.length===0&&(Q([]),it(0),Ve([]),kt([]));try{const n=await M.fetchQuery({queryKey:an(m,_),queryFn:()=>on(m,_),staleTime:3e5,gcTime:18e5});if(nn.current!==e)return;if(Be(!1),!n.valid||!n.sources?.length){ne(n.error?`${n.error}`:ge.length>0?`No streams from ${K}. Try another server.`:"No streams available.");return}if(u&&K&&n.server&&n.server!==K){Q([]),ne("The host's selected server is unavailable. Automatic source switching is disabled in watch-along rooms.");return}!l&&!K&&n.server&&Et(n.server);const o=u?n.sources.filter(B=>B.type==="hls"):n.sources;if(u&&o.length===0){Q([]),ne("The room requires a direct HLS source. No compatible stream is available here.");return}Q(o),St(n.server||K),Xe(e),n.servers?.length&&me(n.servers),n.embedUrl&&et(n.embedUrl),it(cr(o)),n.referer&&Vt(n.referer);const d=n.audioTracks||[];Ve(d),Ct(d.length>0?lr(d):0);const h=n.subtitles||[];if(kt(h),h.length>0){const B=Pn(h);Me(B),Mn(B)}else Me(-1);const T=v?"movie":"tv",$=s;gt.tv.subtitles.query({type:T,tmdbId:String($),season:String(m),episode:String(_)}).then(B=>{if(nn.current!==e)return;const X=Array.isArray(B.subtitles)?B.subtitles:[];X.length!==0&&kt(p=>{const H=[...p,...X.filter(j=>!p.some(V=>V.url===j.url))];if(p.length===0){const j=Pn(H);Me(j),Mn(j)}return H})}).catch(()=>{}),ne("")}catch(n){if(nn.current!==e)return;Be(!1),ne(n instanceof Error?n.message:"Failed to load streams.")}},[r,s,E,m,_,v,x,Bt,ge,K,Pn,Mn,lr,cr,M,an,on,$e,u,l]),$n=C(()=>{const e=c.current;e&&!isNaN(e.currentTime)&&(G.current=e.currentTime)},[c]),ts=C(e=>{if(!(l||u&&e==="Embed")){if(e==="Embed"){tt(!0);return}$n(),tt(!1),Et(e);try{R.setItem("tvServer",e)}catch{}ne("")}},[$n,l,u]),ns=C(e=>{Ge(e);try{R.setItem("tvProvider",e)}catch{}},[]);y(()=>{E&&r&&!x&&cn()},[E,r,cn,x]),y(()=>{if(ft){i.engine.unload();return}if(!c.current)return;if(z.current=null,x||Ne||u&&U[Ee]?.type!=="hls"){i.engine.unload();return}if(he&&!u)return i.engine.loadSource({url:"/av-sync-test.mp4"},{autoPlay:!rn.current});if(Kt.current!=null&&(G.current=Kt.current,Kt.current=null),Le===$e&&G.current==null&&!rn.current)try{const p=c.current;p&&!p.ended&&p.currentTime>1&&(G.current=p.currentTime)}catch{}const n=G.current??0,o=!de&&Le===$e?Ne?"":U[Ee]?.url||"":"";if(!o){try{c.current?.pause(),c.current?.removeAttribute("src"),c.current?.load()}catch{}return}const d=c.current;d.pause(),d.removeAttribute("src"),d.load(),i.actions.resetMediaState();const h=`/api/tv/stream-proxy?url=${encodeURIComponent(o)}&referer=${encodeURIComponent(Fe)}&provider=${encodeURIComponent(E)}`,T=oo()||document.body.classList.contains("low-end"),$=T?60:180,B=i.engine.loadSource({url:h,hls:U[Ee]?.type==="hls"},{hlsConfig:{enableWorker:!0,lowLatencyMode:!1,startPosition:n>0?n:-1,maxBufferLength:$,maxMaxBufferLength:$+(T?30:60),backBufferLength:T?30:60,maxBufferSize:(T?120:360)*1e3*1e3,fragLoadPolicy:{default:{maxTimeToFirstByteMs:15e3,maxLoadTimeMs:45e3,timeoutRetry:{maxNumRetry:2,retryDelayMs:0,maxRetryDelayMs:0},errorRetry:{maxNumRetry:3,retryDelayMs:800,maxRetryDelayMs:6e3}}},manifestLoadPolicy:{default:{maxTimeToFirstByteMs:1e4,maxLoadTimeMs:25e3,timeoutRetry:{maxNumRetry:1,retryDelayMs:500,maxRetryDelayMs:2e3},errorRetry:{maxNumRetry:2,retryDelayMs:800,maxRetryDelayMs:4e3}}}},onHls:(p,H)=>{z.current=p;const j=()=>{let D=!1,P=0;try{D=R.getItem("tvSubtitlesEnabled")==="true";const N=parseInt(R.getItem("tvSelectedSubtitle")||"0",10);!isNaN(N)&&N>=0&&(P=N)}catch{}return{enabled:D,index:P}},V=()=>{if(typeof p.subtitleTrack!="number")return;if(oe.current.length>0){p.subtitleTrack=-1;return}const D=Array.isArray(p.subtitleTracks)?p.subtitleTracks:[];if(D.length===0){p.subtitleTrack=-1;return}const P=j();if(P.enabled){const N=P.index<D.length?P.index:0;p.subtitleTrack=N,Me(N),Cn()}else p.subtitleTrack=-1};so(p,H.Events,{getWant:()=>xt.current,onResolve:D=>Ct(D)}),p.on(H.Events.MANIFEST_PARSED,V),p.on(H.Events.SUBTITLE_TRACKS_UPDATED,()=>{V()}),p.on(H.Events.SUBTITLE_TRACK_SWITCH,(D,P)=>{if(oe.current.length>0){if(P.id!==-1)try{p.subtitleTrack=-1}catch{}return}const N=Array.isArray(p.subtitleTracks)?p.subtitleTracks:[];if(N.length!==0){if(P.id===-1){const Ce=j();if(Ce.enabled){const se=Ce.index<N.length?Ce.index:0;p.subtitleTrack=se;return}}Me(P.id),Cn()}})},onReady:()=>{(n>0||!rn.current&&sn.current)&&i.engine.play()},onError:p=>{ne(p.message),Be(!1),z.current=null}}),X=()=>{const j=d.error?.code===4?"Video source not supported or not found":"Failed to load video stream";ne(`${j}. The source may be invalid or expired. Try switching source or reloading.`),Be(!1)};return d.addEventListener("error",X),()=>{B(),z.current=null,d.removeEventListener("error",X)}},[U,Le,de,Ee,E,Fe,x,Ne,c,Kt,he,ee,m,_,Bn,Cn,i.actions,i.engine,$e,u,ft]),y(()=>{if(l||!Rt||We||ht||$t||x||he)return;const e=c.current;!e||!e.paused||e.ended||e.readyState<1||(Bn(),i.engine.play())},[Rt,We,ht,$t,x,he,Bn,c,l,i.engine]),y(()=>{const e=z.current;!e||typeof e.audioTrack!="number"||(e.audioTrack=_e)},[_e]),y(()=>{const e=z.current;!e||typeof e.subtitleTrack!="number"||!Array.isArray(e.subtitleTracks)||e.subtitleTracks.length===0||oe.current.length>0||(ue>=0?e.subtitleTrack=ue:e.subtitleTrack=-1)},[ue]),y(()=>{const e=c.current;if(!(!e||x)&&(e.querySelectorAll("track").forEach(n=>n.remove()),oe.current=[],Te.length!==0&&(Te.forEach(n=>{const o=document.createElement("track");o.kind="subtitles",o.label=n.label||n.language||"Unknown",o.srclang=n.language||n.label||"en";const d=`/api/subtitle-proxy?url=${encodeURIComponent(n.url)}&referer=${encodeURIComponent(Fe)}`;o.src=d,o.addEventListener("load",()=>{const h=oe.current.indexOf(o),T=o.track;if(T&&h>=0){const $=h===dt.current;T.mode=$&&!Tn.current?"showing":"hidden"}}),e.appendChild(o),oe.current.push(o)}),Te.length>0)))try{const n=z.current;n&&typeof n.subtitleTrack=="number"&&n.subtitleTrack!==-1&&(n.subtitleTrack=-1)}catch{}},[Te,Fe,x,E,K,c]),y(()=>{const e=c.current;if(!e||x)return;const n=z.current;oe.current.length>0&&n&&typeof n.subtitleTrack=="number"&&Array.isArray(n.subtitleTracks)&&n.subtitleTracks.length>0&&(n.subtitleTrack=-1);const o=()=>{const T=Yn(i.state.subtitleFontSize,e.clientHeight||720),$=Math.max(0,Math.min(100,100-i.state.subtitlePosition)),B=()=>{const V=T*16,D=e.videoHeight||e.clientHeight||720,P=e.videoWidth||e.clientWidth||1280;return{step:V*1.3/D*100,chars:Math.max(20,Math.floor(P/(V*.55)))}},X=(V,D)=>{const P=V;P.snapToLines=!1,P.line=D},p=V=>{if(!V.cues)return;Array.from(V.cues).forEach(se=>X(se,$));const D=Array.from(V.activeCues??[]);if(D.length<=1){D.forEach(se=>X(se,$));return}const{step:P,chars:N}=B();let Ce=$;for(let se=D.length-1;se>=0;se--){const Ye=String(D[se].text??"").replace(/<[^>]*>/g,"").split(`
|
|
3
|
-
`).reduce((un,Ot)=>un+Math.max(1,Math.ceil(Ot.length/N)),0);Ce=Math.max(0,Ce-Ye*P),X(D[se],Ce),Ce-=P*.4}},H=oe.current;if(H.length>0){H.forEach((V,D)=>{const P=V.track;if(!P)return;const N=D===ue;P.mode=N&&!ye?"showing":"hidden",N&&!ye&&p(P)});return}const j=Array.from(e.textTracks);j.length!==0&&j.forEach((V,D)=>{const P=D===ue;V.mode=P&&!ye?"showing":"hidden",P&&!ye&&p(V)})};o();const d=()=>o();e.textTracks.addEventListener("addtrack",d),e.addEventListener("loadedmetadata",o,{once:!0});const h=window.setTimeout(o,600);return()=>{e.textTracks.removeEventListener("addtrack",d),e.removeEventListener("loadedmetadata",o),window.clearTimeout(h)}},[ue,Te,x,E,c,ye,i.state.subtitleFontSize,i.state.subtitlePosition]),y(()=>{if(!ye)return;const e=c.current,n=At.current;if(!e||!n)return;const o=ut/1e3,d=gn/1e3,h=new Set;let T=[],$=-1,B=-1,X=-1,p=-1,H=0,j=0,V=!1;const D=()=>{const W=dt.current;if(W<0)return null;const je=oe.current;return je.length>0?je[W]?.track??null:Array.from(e.textTracks)[W]??null},P=(W,je)=>{const be=W.cues;if(!be||be.length===0)return Array.from(W.activeCues??[]);let rt=0,st=be.length;for(;rt<st;){const we=rt+st>>>1;be[we].endTime+o<je?rt=we+1:st=we}const zt=[];for(let we=rt;we<be.length;we++){const mn=be[we];if(mn.startTime+o>je)break;mn.endTime+o>=je&&zt.push(mn)}return zt},N=()=>{const W=D(),je=e.currentTime-d,be=W?P(W,je):[],rt=e.clientWidth,st=e.clientHeight,zt=e.videoWidth,we=e.videoHeight;if(be.length===T.length&&be.every((zn,qn)=>zn===T[qn])&&rt===$&&st===B&&zt===X&&we===p||(T=be,$=rt,B=st,X=zt,p=we,n.textContent="",be.length===0))return;const vr={fontSize:Yn(i.state.subtitleFontSize,st),position:i.state.subtitlePosition,bgOpacity:i.state.subtitleBgOpacity,bgColor:i.state.subtitleBgColor,textColor:i.state.subtitleTextColor,edge:i.state.subtitleEdge,bold:i.state.subtitleBold},os=Os(vr),is=zs(e,vr.position);be.forEach((zn,qn)=>{const pr=String(zn.text??"");if(!qs(pr).trim())return;const Vn=document.createElement("div"),ls=(be.length-1-qn)*1.7;Vn.style.cssText=`${os}
|
|
4
|
-
bottom: calc(${is}px + ${ls}em);`,Vn.innerHTML=Vs(pr),n.appendChild(Vn)})},Ce=()=>{Array.from(e.textTracks).forEach(W=>{h.has(W)||(h.add(W),W.addEventListener("cuechange",N))})},se=()=>{Ce(),N()},On=()=>{if(V||j)return;const W=()=>{j=0,!(V||e.paused||e.ended)&&(N(),On())};j=window.requestAnimationFrame(W)},Ye=e,un=()=>{H=0,N(),!V&&Ye.requestVideoFrameCallback&&(H=Ye.requestVideoFrameCallback(un))},Ot=()=>{N(),Ye.requestVideoFrameCallback?H||(H=Ye.requestVideoFrameCallback(un)):On()};Ce(),e.textTracks.addEventListener("addtrack",se),e.textTracks.addEventListener("removetrack",se),e.addEventListener("timeupdate",N),e.addEventListener("seeked",N),e.addEventListener("loadedmetadata",N),e.addEventListener("play",Ot);const br=Array.from(e.querySelectorAll("track"));br.forEach(W=>W.addEventListener("load",N));const fr=typeof ResizeObserver>"u"?null:new ResizeObserver(()=>N());return fr?.observe(e),N(),Ot(),()=>{V=!0,h.forEach(W=>W.removeEventListener("cuechange",N)),e.textTracks.removeEventListener("addtrack",se),e.textTracks.removeEventListener("removetrack",se),e.removeEventListener("timeupdate",N),e.removeEventListener("seeked",N),e.removeEventListener("loadedmetadata",N),e.removeEventListener("play",Ot),br.forEach(W=>W.removeEventListener("load",N)),fr?.disconnect(),j&&window.cancelAnimationFrame(j),H&&Ye.cancelVideoFrameCallback&&Ye.cancelVideoFrameCallback(H),n.textContent=""}},[ye,ut,ue,Te,gn,c,i.state.subtitleFontSize,i.state.subtitlePosition,i.state.subtitleBgOpacity,i.state.subtitleBgColor,i.state.subtitleTextColor,i.state.subtitleEdge,i.state.subtitleBold]);const Dn=()=>{L(null),Q([]),Ue(""),A(-1)},rs=C(e=>{l||(J(e),pe(1),Ie(e,1))},[Ie,l]),dn=!v&&r?.seasons&&r.seasons.length>1?t("label",{className:f.sidebarSeason,children:[t("span",{children:"Season"}),t("select",{disabled:l,value:m,onChange:e=>rs(parseInt(e.currentTarget.value,10)||1),className:f.select,children:r.seasons.map(e=>t("option",{value:e.season_number,children:["Season ",e.season_number," (",e.episode_count," ep)"]},e.season_number))})]}):null,pt=C(e=>{if(l)return;const n=parseInt(e,10);if(!isNaN(n)){try{c.current?.pause()}catch{}pe(n),Ie(m,n)}xn(!1)},[m,Ie,c,l]);y(()=>{if(v)return;const e=n=>{n.target.closest('input, textarea, button, select, a, [role="button"], [contenteditable="true"]')||n.key.toLowerCase()==="n"&&(q!=null?pt(String(q)):gr.error("No next episode available"))};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[v,q,pt]);const ss=e=>{Ct(e);try{const o=Tt[e];o&&R.setItem("tvLastAudio",Un(o))}catch{}const n=z.current;n&&n.audioTrack!==void 0&&(n.audioTrack=e)},as=e=>{Me(e);try{if(e===-1)R.setItem("tvSubtitlesEnabled","false");else{R.setItem("tvSubtitlesEnabled","true"),R.setItem("tvSelectedSubtitle",String(e));const h=Te[e];h&&R.setItem("tvLastSubtitle",Un(h))}}catch{}const n=c.current,o=z.current;if(o&&typeof o.subtitleTrack=="number"&&Array.isArray(o.subtitleTracks)&&o.subtitleTracks.length>0&&(o.subtitleTrack=oe.current.length>0||e<0?-1:e),!n)return;const d=oe.current;if(d.length>0){d.forEach((h,T)=>{const $=h.track;if(!$)return;const B=T===e;$.mode=B&&!ye?"showing":"hidden"});return}Array.from(n.textTracks).forEach((h,T)=>{const $=T===e;h.mode=$&&!ye?"showing":"hidden"})};return y(()=>{if(!r){document.title="TV & Movies - dango";return}document.title=v?`${r.title} - dango`:`${r.title} - Season ${m} Episode ${_} - dango`},[r,v,m,_]),y(()=>{if(!r||v)return;const e=new URLSearchParams(b),n=e.get("s"),o=e.get("e"),d=String(m),h=String(_);n===d&&o===h||(e.set("type",b.get("type")||"tv"),e.set("s",d),e.set("e",h),A(`${window.location.pathname}?${e.toString()}`,{replace:!0}))},[r,v,m,_,b,A]),t("div",{className:`${xe.playerPageLayout} ${Oe?xe.theaterMode:""} ${v?xe.noSidebar:""}`,onClick:zr,children:[Oe&&t(Fs,{videoRef:c,active:_n.enabled&&!x&&U.length>0&&!Pe&&!(r?.adult&&!Bt),settings:_n}),!Oe&&!v&&t("aside",{className:xe.episodeSidebar,children:r?t(Us,{episodes:mr,currentEpisode:String(_),watchedEpisodes:ur,onEpisodeClick:pt,header:dn}):t(Hs,{variant:"sidebar"})}),t("div",{className:xe.playerMain,children:[r&&t("div",{className:f.playerSection,onContextMenu:e=>e.preventDefault(),style:r.adult&&!Bt?{filter:"blur(14px)",pointerEvents:"none",userSelect:"none"}:void 0,children:x&&Ze&&!u?t("iframe",{src:Ze,className:f.videoIframe,allow:"autoplay; fullscreen",allowFullScreen:!0}):!x&&nt&&!u?t("iframe",{src:nt,className:f.videoIframe,allow:"autoplay; fullscreen",allowFullScreen:!0}):!x&&(U.length>0||de)?t(qe,{children:[Pe&&t(_r,{error:Pe,onRetry:cn}),t(eo,{player:i,title:r.title,episodeLabel:v?void 0:`S${m} E${_}`,server:ce||lt?.label||E,audioTracks:Tt,selectedAudioTrack:_e,onAudioTrackChange:ss,subtitles:Te,selectedSubtitle:ue,onSubtitleChange:as,streams:U,resolutionIdx:Ee,onResolutionChange:e=>{$n(),it(e);try{const n=U[e]?.quality;n&&R.setItem("tvLastQuality",n)}catch{}},onBack:Dn,videoDelayEnabled:Wt,onVideoDelayToggle:fn,videoDelayMs:Re,onVideoDelayChange:Lt,onCalibrateAvSync:u?void 0:Cr,subtitleDelayMs:ut,onSubtitleDelayChange:wr,showNextEpisodeButton:!l&&Mr&&!We&&!ht,onNextEpisode:or,isLoading:de,isTheaterMode:Oe,onTheaterModeToggle:An,ambientSettings:_n,onAmbientChange:xr,hideChrome:ft,children:ft?t("div",{className:f.watchedOverlay,children:[t(le,{name:"check-circle",size:48,style:{color:"var(--accent-lighter)"}}),t("p",{className:f.watchedTitle,children:v?"Movie watched":`S${m} E${_} watched`}),t("p",{className:f.watchedSubtext,children:"Replay from the beginning or continue with the next episode."}),t("div",{className:f.watchedActions,children:[t(at,{onClick:Ur,children:"Replay"}),q!=null?t(at,{variant:"secondary",onClick:or,children:"Next Episode"}):De!=null?t(at,{variant:"secondary",onClick:ir,children:"Next Season"}):null]})]}):t(qe,{children:[t(Cs,{autoPlay:!u&&Rt&&!$t,playsInline:!0,disablePictureInPicture:!0,className:`${f.video} ${Sn?f.videoHidden:""}`,onTimeUpdate:()=>{he||(Yr(),ln())},onEnded:()=>{he||ln(!0)},onPlay:Gr,onPause:Xr,onSeeked:()=>{he||(Dt(),ln())},onLoadedMetadata:()=>{Jr(),sr(),ln()},onDurationChange:()=>{sr()},onContextMenu:e=>e.preventDefault(),onError:()=>{ne("Video failed to load. Try another server or reload."),Be(!1)}}),t("canvas",{ref:Ht,className:`${f.delayCanvas} ${Sn?f.delayCanvasActive:""}`}),ye&&t("div",{ref:At,className:f.subtitleOverlay}),t(Ws,{isOpen:vn,ms:Re,onChange:Lt,onApply:Er,onClose:kr,testClipActive:he,onTestClip:Nr})]})})]}):Pe&&!x?t(_r,{error:Pe,onRetry:cn}):null}),t(ha,{playback:Yt?{selection:Yt,position:c.current?.currentTime||0,playing:!1,rate:i.engine.getState().playbackRate}:null,onCreate:()=>{pn(),i.engine.pause()},needsPlayback:jn.needsPlayback,onEnablePlayback:jn.enablePlayback}),u&&!de&&r&&!Yt&&t("p",{role:"alert",children:"The host's direct HLS source is unavailable here. Retry or leave the room to use another source."}),!Oe&&r&&t(Ks,{}),!Oe&&dn&&t("div",{className:f.mobileSeasonRow,children:dn}),!Oe&&r&&t("div",{className:ie.streamPanel,children:[t("div",{className:f.providerSelectWrap,children:t("label",{className:f.controlLabel,children:["Provider",t("select",{value:E,onChange:e=>ns(e.currentTarget.value),className:f.select,disabled:l||Y.length===0,children:_t?t("option",{value:"",children:"Loading..."}):Y.length===0?t("option",{value:"",children:"No providers available"}):t(qe,{children:[w.length>0&&t("optgroup",{label:"Direct HLS",children:w.map(e=>t("option",{value:e.id,children:e.label},e.id))}),te.length>0&&t("optgroup",{label:"Embeds",children:te.map(e=>t("option",{value:e.id,children:e.label},e.id))})]})})]})}),!l&&!x&&(de?t("div",{className:f.sourceLoader,children:t("div",{className:f.ringSpinner})}):t(no,{servers:Ut,selectedServer:It?"Embed":K,onServerSelect:ts}))]}),!Oe&&r&&t("div",{className:xe.playerInfoContainer,children:[t("div",{className:xe.playerInfoHeader,children:[t("div",{className:xe.playerAnimeCard,children:r.poster&&t(ps,{src:`https://image.tmdb.org/t/p/w342${r.poster}`,alt:r.title,loading:"lazy",decoding:"async"})}),t("div",{className:xe.videoTitleSection,children:[t("div",{className:ie.titleContainer,children:[t("h1",{children:r.title}),t("div",{className:f.meta,children:[t("span",{className:f.year,children:r.year}),r.vote_average!=null&&r.vote_average>0&&t("span",{className:f.rating,children:[t(le,{name:"star",size:12}),Number(r.vote_average).toFixed(1)]}),t("span",{className:`${f.typeBadge} ${f[v?"movie":"tv"]}`,children:v?"Movie":"TV Show"})]}),hr.length>0&&t("div",{className:f.genreRow,children:hr.map(e=>t("span",{className:f.genreChip,children:e},e))}),Rn.length>0&&t("div",{className:f.metaRow,children:Rn.map((e,n)=>t("span",{children:[e,n<Rn.length-1?" · ":""]},`${e}-${n}`))})]}),t("div",{className:ie.controls,children:[t("button",{className:`${ie.watchlistBtn} ${Pt?ie.inList:""}`,onClick:Pr,disabled:Br,type:"button",children:[Pt?t(le,{name:"check",size:14}):t(le,{name:"plus",size:14}),Pt?"In Watchlist":"Add to Watchlist"]}),!v&&t(qe,{children:[t("button",{className:`${ie.watchlistBtn}`,onClick:()=>Nn!=null&&pt(String(Nn)),disabled:l||Nn==null,type:"button",children:[t(le,{name:"chevron-left",size:14}),"Prev EP"]}),t("button",{className:`${ie.watchlistBtn}`,onClick:()=>q!=null&&pt(String(q)),disabled:l||q==null,type:"button",children:["Next EP",t(le,{name:"chevron-right",size:14})]}),!v&&t("button",{className:`${ie.watchlistBtn} ${ie.modeToggleBtn} ${vt?ie.modeToggleActive:""}`,onClick:()=>Kr(!vt),type:"button","aria-pressed":vt,children:vt?"AUTOPLAY: ON":"AUTOPLAY: OFF"}),Hr&&t("button",{className:`${ie.watchlistBtn}`,onClick:()=>xn(!0),type:"button",children:[t(le,{name:"list-ul",size:14}),"Episodes"]})]})]})]})]}),t("div",{className:xe.infoColumns,children:[t("div",{className:`${ie.descriptionSection} ${ie.synopsisFlat}`,children:[t("h3",{children:"Synopsis"}),t(ma,{text:r.overview,emptyText:"No description available."}),t("button",{className:ie.detailsToggleBtn,onClick:()=>Dr(!tn),type:"button",children:[tn?t(le,{name:"chevron-up"}):t(le,{name:"chevron-down"}),tn?"Hide Details":"Show Details"]})]}),tn&&t("div",{className:f.detailGrid,children:[r.first_air_date&&t("div",{className:f.detailItem,children:[t("strong",{children:v?"Release Date":"First Air Date"}),t("span",{children:r.first_air_date})]}),r.last_air_date&&t("div",{className:f.detailItem,children:[t("strong",{children:"Last Air Date"}),t("span",{children:r.last_air_date})]}),r.networks&&r.networks.length>0&&t("div",{className:f.detailItem,children:[t("strong",{children:"Networks"}),t("span",{children:r.networks.map(e=>e.name).join(", ")})]}),r.created_by&&r.created_by.length>0&&t("div",{className:f.detailItem,children:[t("strong",{children:"Created By"}),t("span",{children:r.created_by.map(e=>e.name).join(", ")})]}),r.episode_run_time&&r.episode_run_time.length>0&&t("div",{className:f.detailItem,children:[t("strong",{children:"Episode Runtime"}),t("span",{children:[r.episode_run_time[0]," min"]})]}),r.imdb_id&&t("div",{className:f.detailItem,children:[t("strong",{children:"IMDb"}),t("a",{href:`https://www.imdb.com/title/${r.imdb_id}`,target:"_blank",rel:"noopener noreferrer",className:f.imdbLink,children:"View on IMDb"})]})]})]})]}),!v&&t(Qs,{isOpen:Or,onClose:()=>xn(!1),episodes:mr,currentEpisode:String(_),watchedEpisodes:ur,onEpisodeClick:pt,header:dn}),r?.adult&&!Bt&&t(ea,{isOpen:!0,onClose:Dn,onGrant:Ar}),t(Ys,{isOpen:!u&&We&&!En&&Zt.current===`${ee}:${m}:${_}`&&He?.completed!==1&&!qt(In,He?.duration??0),onClose:ar,title:"Resume Watching",message:t(qe,{children:["You were at ",t("strong",{children:Kn(mt)})]}),restartLabel:"Start from Beginning",onResume:Zr,onRestart:ar}),t(js,{isOpen:ht,onClose:()=>bt(!1),title:v?"Movie Completed!":De!=null?"Season Complete!":"Show Completed!",heading:Rr,message:v?"You finished this movie!":De!=null?`You finished Season ${m}.`:"Congratulations! You finished all available episodes.",children:[t(at,{variant:"secondary",onClick:()=>bt(!1),children:"Close"}),De!=null?t(at,{onClick:ir,children:["Start Season ",De]}):t(qe,{children:[t(at,{onClick:()=>{bt(!1),Dn()},children:"Back to Details"}),t(at,{onClick:es,disabled:jt.isPending||Gt.isPending,children:jt.isPending||Gt.isPending?"Saving...":"Move to Completed"})]})]}),!r&&t("div",{className:f.statusMsg,children:[t(le,{name:"spinner",className:f.spinner})," Loading..."]})]})]})};export{oi as default};
|