@serifpersia/dango 3.9.2 → 3.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/client/dist/assets/{AnimeCard-DV3CayVB.js → AnimeCard-BHlM8RoB.js} +1 -1
- package/client/dist/assets/{AnimeInfo-C_yN40WV.js → AnimeInfo-DLwC6WnR.js} +1 -1
- package/client/dist/assets/{AnimeInfoPage-Dr9zOOq1.js → AnimeInfoPage-B0j9F2hU.js} +2 -2
- package/client/dist/assets/{Asmr-BzVhO0PK.js → Asmr-DgFfTykZ.js} +1 -1
- package/client/dist/assets/{AsmrPopup-CfCdTvhx.js → AsmrPopup-Bfu1bQUv.js} +1 -1
- package/client/dist/assets/{AsmrResetProgressModal-CLjzhb4H.js → AsmrResetProgressModal-D_RBg3SF.js} +1 -1
- package/client/dist/assets/{Home-wtyG5fKA.js → Home-VWUXCsSW.js} +1 -1
- package/client/dist/assets/{Insights-DGTqzxXr.js → Insights-CwSGX4GC.js} +1 -1
- package/client/dist/assets/{LibraryListPage-DhsV2n64.js → LibraryListPage-DwzMkJLe.js} +1 -1
- package/client/dist/assets/{ListeningList-BPD9igfn.js → ListeningList-C-ghEkHE.js} +1 -1
- package/client/dist/assets/{Manga-ClgoT4qk.js → Manga-CTviq-se.js} +1 -1
- package/client/dist/assets/{MangaInfoPage-B8fttN1T.js → MangaInfoPage-DQorLNmR.js} +1 -1
- package/client/dist/assets/{MangaReadPage-BTAVFeJH.js → MangaReadPage-BU7pnbhU.js} +1 -1
- package/client/dist/assets/{MangaResetProgressModal-CshoUUBm.js → MangaResetProgressModal-CEpFCn5U.js} +1 -1
- package/client/dist/assets/{Mature-DAgfZt9Q.js → Mature-WVld2bGr.js} +1 -1
- package/client/dist/assets/{MatureConsentModal-BhpY2wdn.js → MatureConsentModal-C0fwxUn1.js} +1 -1
- package/client/dist/assets/{MediaCard-Czkyxqgb.js → MediaCard-DODt4e_8.js} +1 -1
- package/client/dist/assets/{OptionListMenu-HllK8Z_u.js → OptionListMenu-eoSL7q1A.js} +1 -1
- package/client/dist/assets/Player-CnFL_CIh.js +56 -0
- package/client/dist/assets/{PlayerProvider-DGtOX3e2.js → PlayerProvider-CNH0eLGk.js} +1 -1
- package/client/dist/assets/{PlayerSettings-9iBVbWNR.js → PlayerSettings-BYuPEsZa.js} +1 -1
- package/client/dist/assets/{QueueOptionsButton-C3ptca9g.js → QueueOptionsButton-CexOZp0G.js} +1 -1
- package/client/dist/assets/{QueueRail-De3oifUM.js → QueueRail-CLnXPPDK.js} +1 -1
- package/client/dist/assets/{ReadingList-Bco6T_Jh.js → ReadingList-POp8yKgF.js} +1 -1
- package/client/dist/assets/{ResetProgressModal-Cx1SaMad.js → ResetProgressModal-D087dUGp.js} +1 -1
- package/client/dist/assets/{Search-B6dgK2Zu.js → Search-esyosyR6.js} +1 -1
- package/client/dist/assets/{Settings-DvOx960h.js → Settings-D2qVdRHh.js} +1 -1
- package/client/dist/assets/{SkeletonGrid-B2s8ytI8.js → SkeletonGrid-C5HzTMOs.js} +1 -1
- package/client/dist/assets/{Trackers-Bp-U_jYN.js → Trackers-DsapBRQp.js} +1 -1
- package/client/dist/assets/Tv-C-bNPNTQ.css +1 -0
- package/client/dist/assets/Tv-DfZ48kGX.js +4 -0
- package/client/dist/assets/{TvInfo-BiUMbdN7.js → TvInfo-Bh_CBYgl.js} +1 -1
- package/client/dist/assets/{TvPopup-DnwmyRRE.js → TvPopup-A8vCxpDl.js} +1 -1
- package/client/dist/assets/{TvSearch-C9VNflnp.js → TvSearch-CsuMidf9.js} +1 -1
- package/client/dist/assets/{TvWatchlist-Bt39ymiP.js → TvWatchlist-CkDX1fMV.js} +1 -1
- package/client/dist/assets/{VirtualKeyboard-BSILqgeU.js → VirtualKeyboard-CApnkNZd.js} +1 -1
- package/client/dist/assets/{WatchAlong-GtXJ-2Qq.js → WatchAlong-BJcqY5Ot.js} +1 -1
- package/client/dist/assets/{WatchAlongPanel-CxkbtjKg.js → WatchAlongPanel-Cl3cCsu3.js} +1 -1
- package/client/dist/assets/{Watchlist-CQ57yp82.js → Watchlist-CAL-bxfX.js} +1 -1
- package/client/dist/assets/{index-BYGDqzEf.js → index-CATULjSz.js} +2 -2
- package/client/dist/assets/{libraryInvalidation-CHW51Kbi.js → libraryInvalidation-DvWcvlfB.js} +1 -1
- package/client/dist/assets/{playbackCompletion-DrDOXJXe.js → playbackCompletion-D2uuKFOK.js} +1 -1
- package/client/dist/assets/{useAnimeInfoData-CZY3Ui-u.js → useAnimeInfoData-BtrH6xrZ.js} +1 -1
- package/client/dist/assets/{useMangaLibrary-x8zL6mOh.js → useMangaLibrary-D05_gl5b.js} +1 -1
- package/client/dist/assets/{useMangaPopup-DdrgbIw-.js → useMangaPopup-c1QB4Gjx.js} +1 -1
- package/client/dist/assets/{useProviders-Dk2T31ho.js → useProviders-Ba5UjJEI.js} +1 -1
- package/client/dist/assets/{useTv-CDh-n25T.js → useTv-CsHLVUFu.js} +1 -1
- package/client/dist/assets/{useTvLibrary-Dec7yfKF.js → useTvLibrary-BkQPZl2Q.js} +1 -1
- package/client/dist/assets/useWatchAlongPlayer-D4bdtfsi.js +10 -0
- package/client/dist/assets/useWatchAlongPlayer-Dk7zB7P4.css +1 -0
- package/client/dist/index.html +1 -1
- package/package.json +2 -2
- package/server/package.json +1 -1
- package/client/dist/assets/Player-BVGxVSGv.js +0 -56
- package/client/dist/assets/Tv-CDALArd3.css +0 -1
- package/client/dist/assets/Tv-t2tt4jji.js +0 -4
- package/client/dist/assets/useWatchAlongPlayer-D1o2zDEn.css +0 -1
- package/client/dist/assets/useWatchAlongPlayer-DpUPA4jD.js +0 -10
package/client/dist/assets/{libraryInvalidation-CHW51Kbi.js → libraryInvalidation-DvWcvlfB.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{q as r}from"./index-
|
|
1
|
+
import{q as r}from"./index-CATULjSz.js";const s={tv:{library:r.tvLibrary,continue:r.tvContinueWatching,progress:r.tvProgress},manga:{library:r.mangaLibrary,continue:r.mangaContinueReading,progress:r.mangaProgress},asmr:{library:r.asmrLibrary,continue:r.asmrContinueListening,progress:r.asmrProgress}};function t(a,e,n=!1){const i=s[e];n&&a.invalidateQueries({queryKey:[i.progress]}),a.invalidateQueries({queryKey:[i.library]}),a.invalidateQueries({queryKey:[i.continue]})}export{t as i};
|
package/client/dist/assets/{playbackCompletion-DrDOXJXe.js → playbackCompletion-D2uuKFOK.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{p as s}from"./index-
|
|
1
|
+
import{p as s}from"./index-CATULjSz.js";const r=.8,o=5,a="autoplayEnabled",E="watchedOverlayEnabled",S=(t,e)=>e>0&&t>=e*r,c=new Set(["FINISHED","ENDED","COMPLETED","CANCELED","CANCELLED","RELEASED"]),d=t=>!!t&&c.has(t.trim().toUpperCase()),n=.25,h=(t,e)=>e>0&&Number.isFinite(e)&&t>=e-n,C=t=>t>o,D=()=>{try{return s.getItem(a)==="true"}catch{return!1}},O=t=>{try{s.setItem(a,String(t))}catch{}},i=()=>{try{return s.getItem(E)!=="false"}catch{return!0}},y=t=>{try{s.setItem(E,String(t))}catch{}};export{r as C,D as a,d as b,O as c,h as d,C as h,S as i,i as l,y as s};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{q as g}from"./vendor-core-DfaOB3Rn.js";import{u as p,b as q,a as M}from"./vendor-query-BBT5_sHx.js";import{o as v,J as h,q as Q,t as y}from"./index-
|
|
1
|
+
import{q as g}from"./vendor-core-DfaOB3Rn.js";import{u as p,b as q,a as M}from"./vendor-query-BBT5_sHx.js";import{o as v,J as h,q as Q,t as y}from"./index-CATULjSz.js";import{u as A}from"./QueueOptionsButton-CexOZp0G.js";function k(t){const s=p(),c=v(),{data:i,isLoading:w,error:u}=A(t),n=c.watchlist.check.queryOptions({showId:t??""}).queryKey,{data:d}=q({...c.watchlist.check.queryOptions({showId:t??""}),enabled:!!t}),r=d?.inWatchlist??!1,{mutateAsync:l}=M({mutationFn:async({wasIn:e,meta:a})=>{if(!t)throw new Error("Missing showId");if(e)await y.watchlist.remove.mutate({id:t});else{const o=a?.names,m=a?.name||o?.romaji;if(!m)throw new Error("Missing show name");await y.watchlist.add.mutate({id:t,name:m,thumbnail:a?.thumbnail,nativeName:o?.native,englishName:o?.english,type:a?.type,isAdult:a?.isAdult})}return!e},onMutate:async({wasIn:e})=>{await s.cancelQueries({queryKey:n}),s.setQueryData(n,a=>({...a,inWatchlist:!e,status:a?.status??""}))},onError:e=>{s.invalidateQueries({queryKey:n}),h.error(e instanceof Error?e.message:"Failed to update watchlist")},onSuccess:e=>{h.success(e?"Added to watchlist":"Removed from watchlist"),s.invalidateQueries({queryKey:[Q.watchlist]})}}),f=g(async()=>{!t||!i||await l({wasIn:r,meta:i})},[t,i,r,l]);return{showMeta:i,inWatchlist:r,loadingMeta:w,error:u?u.message:null,toggleWatchlist:f}}export{k as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{T as d}from"./vendor-core-DfaOB3Rn.js";import{b as g,u as i,a as u}from"./vendor-query-BBT5_sHx.js";import{o as s,J as r,q as p}from"./index-
|
|
1
|
+
import{T as d}from"./vendor-core-DfaOB3Rn.js";import{b as g,u as i,a as u}from"./vendor-query-BBT5_sHx.js";import{o as s,J as r,q as p}from"./index-CATULjSz.js";import{i as c}from"./libraryInvalidation-DvWcvlfB.js";const F=e=>e.contentRating==="erotica"||e.contentRating==="pornographic"||e.type==="doujinshi";function q(e,t){const a=e.titles??{};return t==="englishName"?a.en||e.title:t==="nativeName"&&(a.native||a.romaji||e.altTitle)||e.title}function C(e){return{englishName:e.titles?.en??e.title,nativeName:e.titles?.native??e.titles?.romaji??e.altTitle??void 0}}const y=/^anilist:ch:(\d+)$/;function P(e){if(!e)return null;const t=y.exec(e.trim());if(!t)return null;const a=Number.parseInt(t[1],10);return Number.isFinite(a)?a:null}function R(e,t){const a=String(t),n=e.find(m=>(m.number??"").trim()===a);return n||(e.find(m=>{const o=Number.parseFloat((m.number??"").trim());return Number.isFinite(o)&&o===t})??null)}const O=["Reading","Completed","On-Hold","Dropped","Planned"],v=(e,t)=>`${e.toLowerCase()}:${t}`,T=(e="All",t=1,a=24)=>{const n=s();return g(n.mangaLibrary.list.queryOptions({status:e,page:t,limit:a}))},b=()=>{const e=s();return g({...e.mangaLibrary.ids.queryOptions(),staleTime:1e3*60})},$=e=>{const t=s();return g({...t.mangaLibrary.check.queryOptions({id:e??""}),enabled:!!e,staleTime:1e3*60})},E=e=>{const t=s();return g({...t.mangaLibrary.entry.queryOptions({id:e??""}),enabled:!!e,staleTime:1e3*60})},Q=()=>{const e=s(),t=i();return u(e.mangaLibrary.link.mutationOptions({onSuccess:a=>{r.success(a?.progressMigrated?"Linked - chapter progress carried over":"Linked to AniList entry"),t.invalidateQueries(e.mangaLibrary.pathFilter()),c(t,"manga")},onError:a=>{r.error(`Failed to link: ${a.message}`)}}))},N=(e=24)=>{const t=s();return g(t.mangaProgress.continueReading.queryOptions({limit:e}))},A=e=>{const t=s();return g({...t.mangaProgress.byManga.queryOptions({mangaId:e??""}),enabled:!!e})},L=()=>{const e=s(),t=i();return u(e.mangaLibrary.add.mutationOptions({onSuccess:(a,n)=>{n.silent||r.success("Bookmarked"),t.invalidateQueries(e.mangaLibrary.pathFilter()),t.invalidateQueries({queryKey:[p.mangaLibrary]})},onError:a=>{r.error(`Failed to bookmark: ${a.message}`)}}))},M=()=>{const e=s(),t=i();return u(e.mangaLibrary.remove.mutationOptions({onSuccess:()=>{r.success("Bookmark removed"),t.invalidateQueries(e.mangaLibrary.pathFilter()),c(t,"manga")},onError:a=>{r.error(`Failed to remove: ${a.message}`)}}))},B=()=>{const e=s(),t=i();return u(e.mangaLibrary.setStatus.mutationOptions({onSuccess:()=>{r.success("Status updated"),t.invalidateQueries(e.mangaLibrary.pathFilter()),c(t,"manga")},onError:a=>{r.error(`Failed to update status: ${a.message}`)}}))},I=()=>{const e=s(),t=i();return u(e.mangaProgress.save.mutationOptions({onSuccess:()=>{c(t,"manga",!0),t.invalidateQueries(e.mangaProgress.pathFilter())}}))},_=()=>{const e=s(),t=i();return u(e.mangaProgress.remove.mutationOptions({onSuccess:()=>{r.success("Progress reset"),c(t,"manga",!0),t.invalidateQueries(e.mangaProgress.pathFilter())},onError:a=>{r.error(`Failed to reset progress: ${a.message}`)}}))},j=()=>{const e=s(),t=i();return u(e.mangaLibrary.batchStatus.mutationOptions({onSuccess:a=>{r.success(`Status updated for ${a.updated??0} items`),t.invalidateQueries(e.mangaLibrary.pathFilter()),c(t,"manga")},onError:a=>{r.error(`Failed to update statuses: ${a.message}`)}}))},w=()=>{const e=s(),t=i();return u(e.mangaLibrary.removeMany.mutationOptions({onSuccess:a=>{const n=a.removed??0;r.success(`Removed ${n} ${n===1?"item":"items"} from reading list`),t.invalidateQueries(e.mangaLibrary.pathFilter()),c(t,"manga")},onError:a=>{r.error(`Failed to remove: ${a.message}`)}}))},x=()=>{const e=s(),t=i();return u(e.mangaProgress.removeMany.mutationOptions({onSuccess:a=>{const n=a.removed??0;r.success(`Reset progress for ${n} ${n===1?"item":"items"}`),c(t,"manga",!0),t.invalidateQueries(e.mangaProgress.pathFilter())},onError:a=>{r.error(`Failed to reset progress: ${a.message}`)}}))},H=()=>{const e=L(),t=M(),{data:a}=b(),n=d(()=>new Set(a?.ids||[]),[a]);return{toggle:o=>{const l=v(o.provider,o.id);n.has(l)?t.mutate(l):e.mutate({provider:o.provider,mangaId:o.id,title:o.title,cover:o.cover,altTitle:o.altTitle,contentRating:o.contentRating})},bookmarkedIds:n,pending:e.isPending||t.isPending}};export{O as M,C as a,N as b,E as c,L as d,Q as e,$ as f,A as g,M as h,F as i,B as j,R as k,I as l,v as m,T as n,j as o,P as p,w as q,q as r,x as s,_ as t,H as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as T}from"./vendor-core-DfaOB3Rn.js";import{ag as d,d as k}from"./index-
|
|
1
|
+
import{u as T}from"./vendor-core-DfaOB3Rn.js";import{ag as d,d as k}from"./index-CATULjSz.js";import{r as y}from"./useMangaLibrary-D05_gl5b.js";import{a as h}from"./MediaCard-DODt4e_8.js";import{u as M}from"./usePopup-DS9jMzp6.js";const B=({data:e,anchorRect:i,bookmarked:l,onToggleBookmark:n,onMouseEnter:p,onMouseLeave:c,onRequestClose:m})=>{const{data:o,isLoading:u}=d(e.provider,e.mangaId,e.rating||"safe",e.mature||!1),{titlePreference:g}=k(),s=o?.chapters.length??0,a=y({title:e.title,altTitle:o?.altTitle??e.altTitle},g),t=[],r=[o?.status,o?.type].filter(Boolean).join(" · ");r&&t.push({icon:"book",label:r}),s>0&&t.push({label:`${s} chapter${s===1?"":"s"}`}),e.progressLabel&&t.push({icon:"bookmark",label:e.progressLabel});const b=Array.isArray(o?.genres)?o.genres.filter(Boolean).slice(0,4).map(f=>f):[];return T(h,{anchorRect:i,title:a,subtitle:o?.altTitle&&o.altTitle!==a?`Also known as: ${o.altTitle}`:void 0,loading:u,meta:t,genres:b,synopsis:o?.description?o.description:"No synopsis available.",primaryAction:{to:e.readTarget,label:"Read now",icon:"book"},secondaryAction:{to:`/manga/${e.provider}/${encodeURIComponent(e.mangaId)}`,label:"Read more"},bookmarked:l,bookmarkLabel:"Bookmark",onToggleBookmark:n,onMouseEnter:p,onMouseLeave:c,onRequestClose:m})},I=()=>M();export{B as M,I as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{T as o}from"./vendor-core-DfaOB3Rn.js";import{b as a}from"./vendor-query-BBT5_sHx.js";import{q as i,S as n}from"./index-
|
|
1
|
+
import{T as o}from"./vendor-core-DfaOB3Rn.js";import{b as a}from"./vendor-query-BBT5_sHx.js";import{q as i,S as n}from"./index-CATULjSz.js";const l=300*1e3,c=()=>{const e=a({queryKey:[i.providers],queryFn:()=>n("/api/providers"),staleTime:l,retry:1}),r=Array.isArray(e.data)?e.data:null,s=o(()=>r&&r.length>0?r.filter(t=>t.loaded):[],[r]);return{...e,options:s,isFallback:!r||r.length===0}};export{c as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{N as c,u as o,S as d}from"./vendor-core-DfaOB3Rn.js";import{I as v}from"./vendor-icons-DrybRNxP.js";import{M as T}from"./MediaCard-
|
|
1
|
+
import{N as c,u as o,S as d}from"./vendor-core-DfaOB3Rn.js";import{I as v}from"./vendor-icons-DrybRNxP.js";import{M as T}from"./MediaCard-DODt4e_8.js";import{T as g}from"./TvPopup-A8vCxpDl.js";import{k as m,j as f,o as i}from"./index-CATULjSz.js";import{b as u}from"./vendor-query-BBT5_sHx.js";const P=c(({item:e})=>{const a=e.type==="tv"||e.type==="tvSeries"||e.type==="tvMiniSeries",s=m(e.type,e.id);return o(T,{item:{id:String(e.id),title:e.title,thumbnail:e.image,typeBadge:a?"TV":"Movie",isAdult:f(e)},linkTo:s,hoverIcon:"info",showInfoButton:!0,metaRow:o(d,{children:[e.year&&o("span",{style:{opacity:.75},children:e.year}),e.vote_average!=null&&o("span",{style:{display:"inline-flex",alignItems:"center",gap:3},children:[o(v,{name:"star",size:10}),Number(e.vote_average).toFixed(1)]})]}),renderPopup:(n,t)=>o(g,{item:e,anchorRect:n,onMouseEnter:t.onMouseEnter,onMouseLeave:t.onMouseLeave,onRequestClose:t.close})})}),p=1e3*60*5,_=e=>{const a=i(),{query:s,type:n,genre:t,year:r,sort_by:y,page:l}=e;return u({...a.tv.search.queryOptions({q:s?.trim()||"",type:n||"multi",genre:t||"",year:r&&r!=="ALL"?r:"",sortBy:y||"popularity.desc",page:l||1}),staleTime:p,retry:1})},b=(e="all",a="week",s=1,n=!0)=>{const t=i(),r=u({...t.tv.trending.queryOptions({mediaType:e,timeWindow:a,page:s}),enabled:n,staleTime:p,retry:1});return{...r,data:r.data}};export{P as T,_ as a,b as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{T as p}from"./vendor-core-DfaOB3Rn.js";import{b as c,u as i,a as n}from"./vendor-query-BBT5_sHx.js";import{o as a,J as o,q as m,t as y,ak as g}from"./index-
|
|
1
|
+
import{T as p}from"./vendor-core-DfaOB3Rn.js";import{b as c,u as i,a as n}from"./vendor-query-BBT5_sHx.js";import{o as a,J as o,q as m,t as y,ak as g}from"./index-CATULjSz.js";import{i as u}from"./libraryInvalidation-DvWcvlfB.js";const q=["Watching","Completed","On-Hold","Dropped","Planned"],b=(t,e)=>g(t,e),C=(t="All",e=1,r=24)=>{const s=a();return c(s.tvLibrary.list.queryOptions({status:t,page:e,limit:r}))},T=()=>{const t=a();return c({...t.tvLibrary.ids.queryOptions(),staleTime:1e3*60})},O=t=>{const e=a();return c({...e.tvLibrary.check.queryOptions({id:t||""}),enabled:!!t,staleTime:1e3*60})},k=(t=24)=>{const e=a();return c(e.tvProgress.continueWatching.queryOptions({limit:t}))},$=t=>{const e=a();return c({...e.tvProgress.getByMedia.queryOptions({mediaId:t||""}),enabled:!!t})},f=(t,e,r)=>{const s=a();return c({...s.tvProgress.latest.queryOptions({mediaId:t||"",season:e,episode:r}),enabled:!!t,staleTime:0})},h=()=>{const t=a(),e=i();return n({mutationFn:async r=>{const{silent:s,...d}=r;return y.tvLibrary.add.mutate(d)},onSuccess:(r,s)=>{s.silent||o.success("Added to TV watchlist"),e.invalidateQueries({queryKey:[m.tvLibrary]}),e.invalidateQueries(t.tvLibrary.pathFilter())},onError:r=>{o.error(`Failed to add: ${r.message}`)}})},L=()=>{const t=a(),e=i();return n(t.tvLibrary.remove.mutationOptions({onSuccess:()=>{o.success("Removed from TV watchlist"),u(e,"tv"),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())},onError:r=>{o.error(`Failed to remove: ${r.message}`)}}))},R=()=>{const t=a(),e=i();return n(t.tvLibrary.setStatus.mutationOptions({onSuccess:()=>{o.success("Status updated"),u(e,"tv"),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())},onError:r=>{o.error(`Failed to update status: ${r.message}`)}}))},B=()=>{const t=a(),e=i();return n(t.tvProgress.save.mutationOptions({onSuccess:()=>{u(e,"tv",!0),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())}}))},E=()=>{const t=a(),e=i();return n(t.tvProgress.remove.mutationOptions({onSuccess:()=>{o.success("Progress reset"),u(e,"tv",!0),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())},onError:r=>{o.error(`Failed to reset progress: ${r.message}`)}}))},I=()=>{const t=a(),e=i();return n(t.tvLibrary.batchStatus.mutationOptions({onSuccess:r=>{o.success(`Status updated for ${r.updated??0} items`),u(e,"tv"),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())},onError:r=>{o.error(`Failed to update statuses: ${r.message}`)}}))},A=()=>{const t=a(),e=i();return n(t.tvLibrary.removeMany.mutationOptions({onSuccess:r=>{const s=r.removed??0;o.success(`Removed ${s} ${s===1?"item":"items"} from TV watchlist`),u(e,"tv"),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())},onError:r=>{o.error(`Failed to remove: ${r.message}`)}}))},w=()=>{const t=a(),e=i();return n(t.tvProgress.removeMany.mutationOptions({onSuccess:r=>{const s=r.removed??0;o.success(`Reset progress for ${s} ${s===1?"item":"items"}`),u(e,"tv",!0),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())},onError:r=>{o.error(`Failed to reset progress: ${r.message}`)}}))},M=()=>{const t=h(),e=L(),{data:r}=T(),s=p(()=>new Set(r?.ids||[]),[r]);return{toggle:v=>{const l=b(v.mediaType,v.tmdbId);s.has(l)?e.mutate(l):t.mutate({...v,poster:v.poster||""})},bookmarkedIds:s,pending:t.isPending||e.isPending}};export{q as T,L as a,E as b,O as c,M as d,B as e,R as f,h as g,f as h,$ as i,C as j,I as k,A as l,w as m,k as u};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import{u as t,A as C,q as A,h as F,d as P,T as te,$ as ct}from"./vendor-core-DfaOB3Rn.js";import{p as M,al as lt,Q as He,B as X,a3 as se,o as dt,am as Re,q as U,ac as ut,t as pt,h as ht,a6 as ft,an as Fe,ao as mt}from"./index-CATULjSz.js";import{I as j}from"./vendor-icons-DrybRNxP.js";import{S as De,a as gt,s as G,f as We,m as yt,h as _t,d as bt,k as vt,u as St,n as ie}from"./PlayerProvider-CNH0eLGk.js";import{u as wt}from"./vendor-query-BBT5_sHx.js";import{i as ce,d as Ct}from"./playbackCompletion-D2uuKFOK.js";const kt="_controls_1ne4g_1",xt="_titleContainer_1ne4g_9",Tt="_scheduleInfo_1ne4g_15",Nt="_status_1ne4g_23",Lt="_nextEpisode_1ne4g_35",Pt="_watchlistBtn_1ne4g_45",Bt="_inList_1ne4g_73",At="_queueBtn_1ne4g_84",Et="_queueActive_1ne4g_96",$t="_modeToggleBtn_1ne4g_102",It="_modeToggleActive_1ne4g_109",Mt="_markWatchedBtn_1ne4g_130",Rt="_markWatchedDone_1ne4g_144",Ft="_streamPanel_1ne4g_155",Dt="_desktopEpisodeActions_1ne4g_169",Ot="_sourceLoader_1ne4g_175",qt="_episodeActions_1ne4g_188",Ht="_mobileEpisodeActions_1ne4g_202",Wt="_episodeNavBtn_1ne4g_206",zt="_primary_1ne4g_235",Vt="_secondary_1ne4g_245",Kt="_episodePickerBtn_1ne4g_249",Ut="_queueCountdown_1ne4g_253",Qt="_speedBoostBadge_1ne4g_268",Gt="_videoContainer_1ne4g_299",jt="_loadingOverlay_1ne4g_312",Yt="_loadingDots_1ne4g_326",Xt="_dot_1ne4g_331",Jt="_bounce_1ne4g_1",Zt="_bufferingOverlay_1ne4g_348",en="_bufferingSpinner_1ne4g_357",tn="_spin_1ne4g_459",nn="_videoIframe_1ne4g_381",rn="_videoElementHidden_1ne4g_404",sn="_upscalerCanvas_1ne4g_409",an="_upscalerActive_1ne4g_422",on="_upscalerStatusBadge_1ne4g_426",cn="_subtitleOverlay_1ne4g_441",ln="_spinner_1ne4g_459",dn="_errorOverlay_1ne4g_526",un="_retryButton_1ne4g_536",pn="_detailsToggleBtn_1ne4g_549",hn="_descriptionSection_1ne4g_572",fn="_synopsisFlat_1ne4g_580",mn="_fullscreenActive_1ne4g_614",gn="_errorSubtext_1ne4g_657",yn="_watchedOverlay_1ne4g_680",_n="_watchedTitle_1ne4g_702",bn="_watchedSubtext_1ne4g_708",vn="_watchedActions_1ne4g_714",Sn="_watchedActionsCentered_1ne4g_732",es={controls:kt,titleContainer:xt,scheduleInfo:Tt,status:Nt,nextEpisode:Lt,watchlistBtn:Pt,inList:Bt,queueBtn:At,queueActive:Et,modeToggleBtn:$t,modeToggleActive:It,markWatchedBtn:Mt,markWatchedDone:Rt,streamPanel:Ft,desktopEpisodeActions:Dt,sourceLoader:Ot,episodeActions:qt,mobileEpisodeActions:Ht,episodeNavBtn:Wt,primary:zt,secondary:Vt,episodePickerBtn:Kt,queueCountdown:Ut,speedBoostBadge:Qt,videoContainer:Gt,loadingOverlay:jt,loadingDots:Yt,dot:Xt,bounce:Jt,bufferingOverlay:Zt,bufferingSpinner:en,spin:tn,videoIframe:nn,videoElementHidden:rn,upscalerCanvas:sn,upscalerActive:an,upscalerStatusBadge:on,subtitleOverlay:cn,spinner:ln,errorOverlay:dn,retryButton:un,detailsToggleBtn:pn,descriptionSection:hn,synopsisFlat:fn,fullscreenActive:mn,errorSubtext:gn,watchedOverlay:yn,watchedTitle:_n,watchedSubtext:bn,watchedActions:vn,watchedActionsCentered:Sn},wn="_playerPageLayout_1rxx0_1",Cn="_noSidebar_1rxx0_15",kn="_episodeSidebar_1rxx0_19",xn="_playerMain_1rxx0_32",Tn="_videoPlayerWrapper_1rxx0_40",Nn="_playerInfoHeader_1rxx0_56",Ln="_playerAnimeCard_1rxx0_62",Pn="_playerInfoContainer_1rxx0_74",Bn="_infoColumns_1rxx0_104",An="_videoTitleSection_1rxx0_134",En="_theaterMode_1rxx0_308",ts={playerPageLayout:wn,noSidebar:Cn,episodeSidebar:kn,playerMain:xn,videoPlayerWrapper:Tn,playerInfoHeader:Nn,playerAnimeCard:Ln,playerInfoContainer:Pn,infoColumns:Bn,videoTitleSection:An,theaterMode:En},$n={fontSize:"subtitleFontSize",position:"subtitlePosition",bgOpacity:"subtitleBgOpacity",bgColor:"subtitleBgColor",textColor:"subtitleTextColor",edge:"subtitleEdge",bold:"subtitleBold"},Q={fontSize:1.8,position:0,bgOpacity:.5,bgColor:"#000000",textColor:"#ffffff",edge:"shadow",bold:!1},he=(e,n,s)=>Math.max(n,Math.min(s,e)),fe=e=>typeof e=="string"&&/^#[0-9a-fA-F]{6}$/.test(e),le=(e,n,s,o)=>{try{const r=M.getItem(e);if(r===null)return n;const i=parseFloat(r);return Number.isFinite(i)?he(i,s,o):n}catch{return n}};function In(){let e=Q.edge,n=Q.bgColor,s=Q.textColor,o=Q.bold;try{const r=M.getItem("subtitleEdge");(r==="shadow"||r==="outline"||r==="none")&&(e=r);const i=M.getItem("subtitleBgColor");fe(i)&&(n=i);const c=M.getItem("subtitleTextColor");fe(c)&&(s=c);const p=M.getItem("subtitleBold");p!==null&&(o=p==="true")}catch{}return{fontSize:le("subtitleFontSize",Q.fontSize,.5,10),position:le("subtitlePosition",Q.position,0,100),bgOpacity:le("subtitleBgOpacity",Q.bgOpacity,0,1),bgColor:n,textColor:s,edge:e,bold:o}}function ze(e,n){const s=`rgba(0, 0, 0, ${he(n,0,1)})`;if(!fe(e))return s;const o=parseInt(e.slice(1,3),16),r=parseInt(e.slice(3,5),16),i=parseInt(e.slice(5,7),16);return`rgba(${o}, ${r}, ${i}, ${he(n,0,1)})`}function Ve(e,n){return e==="none"?n<=0?"0 1px 3px rgba(0, 0, 0, 0.9)":"none":e==="outline"?["-1px 0 0 black","1px 0 0 black","0 -1px 0 black","0 1px 0 black","-1px -1px 0 black","1px -1px 0 black","-1px 1px 0 black","1px 1px 0 black","0 0 6px rgba(0, 0, 0, 0.9)"].join(", "):"0 0 4px black, 0 1px 2px rgba(0, 0, 0, 0.8)"}function ns(e){return`
|
|
2
|
+
video::cue {
|
|
3
|
+
font-size: ${e.fontSize}rem !important;
|
|
4
|
+
color: ${e.textColor} !important;
|
|
5
|
+
background-color: ${ze(e.bgColor,e.bgOpacity)} !important;
|
|
6
|
+
font-weight: ${e.bold?"bold":"normal"} !important;
|
|
7
|
+
text-shadow: ${Ve(e.edge,e.bgOpacity)} !important;
|
|
8
|
+
}
|
|
9
|
+
`}function rs(e){return[`font-size: ${e.fontSize}rem`,`color: ${e.textColor}`,`background-color: ${ze(e.bgColor,e.bgOpacity)}`,`font-weight: ${e.bold?"700":"400"}`,`text-shadow: ${Ve(e.edge,e.bgOpacity)}`,"padding: 0.2em 0.5em","border-radius: 0.25em","text-align: center","position: absolute","left: 50%","transform: translateX(-50%)","max-width: 92%","white-space: pre-wrap","overflow-wrap: break-word","line-height: 1.4"].join(`;
|
|
10
|
+
`)+";"}const Mn=new Set(["b","i","u","strong","em"]);function ss(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/<(\/?)([a-zA-Z]+)>/g,(s,o,r)=>Mn.has(r.toLowerCase())?`<${o}${r.toLowerCase()}>`:s)}function as(e){return e.replace(/<[^>]*>/g,"")}const os=["#ffffff","#ffff00","#7CFC00","#00e5ff","#ff9ff3","#ffa502"],is=["#000000","#1e272e","#2f3542","#3d0c02","#0c3d2e","#ffffff"];function cs(e,n){const s=Number.isFinite(e)?e*16:Q.fontSize*16;return!Number.isFinite(n)||n<=0?s/16:Math.min(s,Math.max(13,n*.07))/16}function ls(e){const n=Math.abs(e/1e3).toFixed(1);return e>0?`+${n}s`:e<0?`-${n}s`:"0.0s"}function ds(e,n){const s=e.clientWidth||0,o=e.clientHeight||0,r=e.videoWidth>0&&e.videoHeight>0?e.videoWidth/e.videoHeight:0;let i=o;r>0&&s>0&&o>0&&(i=s/o>r?o:s/r);const c=Math.max(0,(o-i)/2),p=Math.max(0,Math.min(100,Number(n)||0))/100*i;return c+p}const us=({isOpen:e,onClose:n,title:s,heading:o,message:r,children:i})=>t(He,{isOpen:e,onClose:n,title:s,width:"sm",children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t("button",{type:"button",className:lt.closeButton,onClick:n,"aria-label":"Close",children:t(j,{name:"times",size:16})}),t(j,{name:"check-circle",size:48,style:{color:"var(--accent-lighter)",marginBottom:"0.5rem"}}),t("p",{style:{fontSize:"1.1rem",fontWeight:600},children:o}),t("p",{style:{color:"var(--text-secondary)"},children:r}),i&&t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center",flexWrap:"wrap"},children:i})]})}),ps=({isOpen:e,onClose:n,title:s,message:o,resumeLabel:r="Resume",restartLabel:i="Start Over",onResume:c,onRestart:p})=>t(He,{isOpen:e,onClose:n,title:s,width:"sm",children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t("p",{children:o}),t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center"},children:[t(X,{variant:"secondary",onClick:p,children:i}),t(X,{onClick:c,children:r})]})]})}),Rn="_centerControls_1oa5h_1",Fn="_centerSkipBtn_1oa5h_14",Dn="_centerPlayPause_1oa5h_15",ae={centerControls:Rn,centerSkipBtn:Fn,centerPlayPause:Dn},hs=()=>t("div",{className:ae.centerControls,onClick:e=>e.stopPropagation(),children:[t(De,{seconds:-10,className:ae.centerSkipBtn}),t(gt,{className:ae.centerPlayPause,"data-speed-boost-ignore":"true"}),t(De,{seconds:10,className:ae.centerSkipBtn})]}),fs=({visible:e,title:n,episode:s,server:o,mode:r,audio:i,subtitles:c,onBack:p,classes:a})=>t("div",{className:`${a.overlay} ${e?"":a.hidden} `,"data-speed-boost-ignore":"true",style:{pointerEvents:"none",background:"none"},children:t("div",{className:a.top,onClick:u=>u.stopPropagation(),children:[t("button",{className:a.backBtn,onClick:u=>{u.stopPropagation(),p()},title:"Back","aria-label":"Back",children:t(j,{name:"chevron-left"})}),t("div",{className:`${a.titleInfo} ${G.topBarTitleInfo}`,children:[t("span",{className:a.title,children:n}),s&&t("span",{className:a.episode,children:s}),(r||o||i||c)&&t("div",{className:G.streamDetails,children:[r&&t("span",{className:G.modeTag,children:r.toUpperCase()}),o&&t("span",{title:`Server: ${o}`,children:["Server: ",o]}),i&&t("span",{title:`Audio: ${i}`,children:["Audio: ",i]}),c&&t("span",{title:`Subs: ${c}`,children:["Subs: ",c]})]})]})]})});function On(e){return e instanceof Element&&!!e.closest('button, input, select, textarea, a, [role="button"], [role="slider"], [data-player-ui="true"]')}function ms({engine:e,topBar:n,centerControls:s,bottomBar:o,settingsPanel:r,overlays:i,isInteracting:c=!1,nativeControls:p=!1,chromeDisabled:a=!1,className:u,onStageClick:b,children:x}){const _=We(e),E=yt(),l=C(void 0),d=C(void 0),k=C(0),h=C(c);h.current=c;const m=A(()=>{clearTimeout(l.current),l.current=void 0},[]),g=A(()=>{m();const L=e.getState();!L.isPlaying||L.isScrubbing||h.current||p||(l.current=setTimeout(()=>{const y=e.getState();h.current||y.isScrubbing||!y.isPlaying||e.setShowControls(!1)},E?5e3:3e3))},[e,E,p,m]),B=A(()=>{e.setShowControls(!0),g()},[e,g]);_t(e,B,!p&&!a),F(()=>(c||_.isScrubbing||!_.isPlaying?(e.setShowControls(!0),m()):g(),m),[e,c,_.isPlaying,_.isScrubbing,_.showControls,m,g]),F(()=>()=>{clearTimeout(d.current)},[]);const f=L=>{if(On(L.target)||p||a)return;b?.();const y=Date.now();if(y-k.current<280){clearTimeout(d.current),d.current=void 0,k.current=0,e.toggleFullscreen();return}k.current=y,clearTimeout(d.current),d.current=setTimeout(()=>{d.current=void 0,e.setShowControls(!e.getState().showControls),g()},280)},T=_.showControls||_.isScrubbing||c||!_.isPlaying;return t(bt,{engine:e,children:t("div",{ref:e.containerRef,"data-player-root":"true",className:`${G.shell} ${_.isFullscreen?G.shellFullscreen:""} ${u??""}`,style:{cursor:!T&&_.isFullscreen?"none":"default"},onContextMenu:L=>L.preventDefault(),onPointerMove:L=>{L.pointerType==="mouse"&&B()},onFocusIn:B,onMouseLeave:()=>{window.matchMedia?.("(hover: hover) and (pointer: fine)").matches&&e.getState().isPlaying&&!h.current&&e.setShowControls(!1)},children:[t("div",{className:G.stage,onClick:f,children:x}),i,(_.error||_.playBlocked)&&t("div",{className:G.engineStatus,"data-player-ui":"true",children:t(vt,{})}),!a&&!p&&t("div",{className:G.uiLayer,children:[t("div",{"data-player-ui":"true",children:n}),T&&s&&t("div",{"data-player-ui":"true",children:s}),t("div",{"data-player-ui":"true",children:o}),r&&t("div",{"data-player-ui":"true",children:r})]})]})})}const qn=e=>(e.language??e.lang??"").toLowerCase(),Hn=e=>(e.label??"").toLowerCase(),Wn=e=>`${e.language??e.lang??""}|||${e.label??""}`,zn=e=>qn(e).startsWith("en")||Hn(e).includes("english");function gs(e,n){if(e.length===0||n?.enabled===!1)return-1;const s=n?.lastKey??null;if(s){const r=e.findIndex(i=>Wn(i)===s);if(r>=0)return r}const o=e.findIndex(zn);return o>=0?o:0}const Vn="_statusArea_1xccu_1",Kn="_toggleBtn_1xccu_20",Un="_shortcuts_1xccu_46",Qn="_shortcutGroup_1xccu_56",Gn="_shortcut_1xccu_46",jn="_key_1xccu_70",Yn="_label_1xccu_91",S={statusArea:Vn,toggleBtn:Kn,shortcuts:Un,shortcutGroup:Qn,shortcut:Gn,key:jn,label:Yn},ys=({showTheater:e=!0})=>{const[n,s]=P(!1);return t("div",{className:S.statusArea,children:[t("button",{type:"button",className:S.toggleBtn,onClick:()=>s(o=>!o),"aria-expanded":n,"aria-controls":"player-shortcuts",children:[t(j,{name:"keyboard",size:14}),t("span",{children:"Keyboard Shortcuts"}),n?t(j,{name:"chevron-up",size:12}):t(j,{name:"chevron-down",size:12})]}),n&&t("div",{id:"player-shortcuts",className:S.shortcuts,children:[t("div",{className:S.shortcutGroup,children:[t("div",{className:S.shortcut,children:[t("span",{className:S.key,children:"↑"}),t("span",{className:S.key,children:"↓"}),t("span",{className:S.label,children:"Volume"})]}),t("div",{className:S.shortcut,children:[t("span",{className:S.key,children:"←"}),t("span",{className:S.key,children:"→"}),t("span",{className:S.label,children:"Seek"})]})]}),t("div",{className:S.shortcutGroup,children:[t("div",{className:S.shortcut,children:[t("span",{className:S.key,children:"Space"}),t("span",{className:S.label,children:"Play/Pause"})]}),t("div",{className:S.shortcut,children:[t("span",{className:S.key,children:"F"}),t("span",{className:S.label,children:"Fullscreen"})]}),t("div",{className:S.shortcut,children:[t("span",{className:S.key,children:"M"}),t("span",{className:S.label,children:"Mute"})]}),e&&t("div",{className:S.shortcut,children:[t("span",{className:S.key,children:"T"}),t("span",{className:S.label,children:"Theater"})]}),t("div",{className:S.shortcut,children:[t("span",{className:S.key,children:"P"}),t("span",{className:S.label,children:"Previous"})]}),t("div",{className:S.shortcut,children:[t("span",{className:S.key,children:"N"}),t("span",{className:S.label,children:"Next"})]})]})]})]})},Xn="_episodeListContainer_11isr_1",Jn="_drawerContainer_11isr_9",Zn="_episodeListHeader_11isr_14",er="_drawerHeader_11isr_20",tr="_episodeListTitle_11isr_29",nr="_rangeSelector_11isr_41",rr="_rangeButton_11isr_47",sr="_active_11isr_70",ar="_episodeList_11isr_1",or="_drawerList_11isr_90",ir="_episodeItem_11isr_119",cr="_watched_11isr_147",lr="_episodeThumb_11isr_175",dr="_episodeText_11isr_185",ur="_episodeLabel_11isr_193",pr="_episodeSub_11isr_198",N={episodeListContainer:Xn,drawerContainer:Jn,episodeListHeader:Zn,drawerHeader:er,episodeListTitle:tr,rangeSelector:nr,rangeButton:rr,active:sr,episodeList:ar,drawerList:or,episodeItem:ir,watched:cr,episodeThumb:lr,episodeText:dr,episodeLabel:ur,episodeSub:pr},hr=({episodes:e,currentEpisode:n,watchedEpisodes:s=[],onEpisodeClick:o,variant:r="sidebar",title:i="Episodes",header:c})=>{const[p,a]=P(0),u=C(null),b=te(()=>e.map(l=>typeof l=="string"?{id:l,label:`Episode ${l}`}:l),[e]),x=te(()=>new Set(s),[s]);F(()=>{const l=u.current;if(!l)return;let d=l.parentElement;for(;d;){const m=window.getComputedStyle(d);if((m.overflowY==="auto"||m.overflowY==="scroll")&&d.scrollHeight>d.clientHeight)break;d=d.parentElement}if(!d)return;const k=d.getBoundingClientRect(),h=l.getBoundingClientRect();d.scrollTop+=h.top+h.height/2-(k.top+d.clientHeight/2)},[n,p]);const _=te(()=>{if(b.length<=100)return[];const l=[];for(let d=0;d<b.length;d+=100){const k=d+1,h=Math.min(d+100,b.length);l.push(`${k}-${h}`)}return l},[b]),E=te(()=>{if(_.length===0)return b;const l=_[p];if(!l)return b;const[d,k]=l.split("-"),h=parseInt(d,10),m=parseInt(k,10);return b.slice(h-1,m)},[b,_,p]);return t("div",{className:`${N.episodeListContainer} ${r==="drawer"?N.drawerContainer:""}`,children:[t("div",{className:`${N.episodeListHeader} ${r==="drawer"?N.drawerHeader:""}`,children:[c,t("h3",{className:N.episodeListTitle,children:i}),_.length>0&&t("div",{className:N.rangeSelector,children:_.map((l,d)=>t("button",{className:`${N.rangeButton} ${p===d?N.active:""}`,onClick:()=>a(d),children:l},l))})]}),t("div",{className:`${N.episodeList} ${r==="drawer"?N.drawerList:""}`,children:E.map(l=>{const d=l.id===n,k=x.has(l.id)||l.watched===!0;return t("div",{ref:d?u:void 0,className:`${N.episodeItem} ${k?N.watched:""} ${d?N.active:""}`,onClick:()=>o(l.id),children:[l.thumbnail&&t("img",{src:l.thumbnail,alt:"",loading:"lazy",decoding:"async",className:N.episodeThumb}),t("span",{className:N.episodeText,children:[t("span",{className:N.episodeLabel,children:l.label??`Episode ${l.id}`}),l.sublabel&&t("span",{className:N.episodeSub,children:l.sublabel})]})]},l.id)})})]})},_s=({variant:e="sidebar",count:n=12})=>t("div",{className:`${N.episodeListContainer} ${e==="drawer"?N.drawerContainer:""}`,children:[t("div",{className:`${N.episodeListHeader} ${e==="drawer"?N.drawerHeader:""}`,children:[t("h3",{className:N.episodeListTitle,children:"Episodes"}),t("div",{className:N.rangeSelector,children:[t(se,{width:"60px",height:"28px",variant:"rectangular"}),t(se,{width:"60px",height:"28px",variant:"rectangular"}),t(se,{width:"60px",height:"28px",variant:"rectangular"})]})]}),t("div",{className:`${N.episodeList} ${e==="drawer"?N.drawerList:""}`,children:Array.from({length:n}).map((s,o)=>t("div",{className:N.episodeItem,style:{border:"none",background:"transparent"},children:t(se,{width:"120px",height:"1.2rem",variant:"text"})},o))})]}),fr="_shell_cys6s_1",mr="_overlay_cys6s_10",gr="_drawer_cys6s_21",yr="_handle_cys6s_56",_r="_header_cys6s_64",br="_headerCopy_cys6s_73",vr="_kicker_cys6s_79",Sr="_title_cys6s_87",wr="_closeBtn_cys6s_94",Cr="_body_cys6s_116",V={shell:fr,overlay:mr,drawer:gr,handle:yr,header:_r,headerCopy:br,kicker:vr,title:Sr,closeBtn:wr,body:Cr};function bs({isOpen:e,onClose:n,episodes:s,currentEpisode:o,watchedEpisodes:r=[],onEpisodeClick:i,title:c,header:p}){return F(()=>{if(!e)return;const a=b=>{b.key==="Escape"&&n()},u=document.body.style.overflow;return document.body.style.overflow="hidden",document.addEventListener("keydown",a),()=>{document.body.style.overflow=u,document.removeEventListener("keydown",a)}},[e,n]),e?ct(t("div",{className:V.shell,role:"dialog","aria-modal":"true","aria-label":"Episode picker",children:[t("button",{className:V.overlay,type:"button",onClick:n,"aria-label":"Close episodes"}),t("aside",{className:V.drawer,children:[t("div",{className:V.handle}),t("div",{className:V.header,children:[t("div",{className:V.headerCopy,children:[t("span",{className:V.kicker,children:"Episode picker"}),t("h3",{className:V.title,children:"Choose an episode"})]}),t("button",{className:V.closeBtn,type:"button",onClick:n,"aria-label":"Close",children:t(j,{name:"times"})})]}),t("div",{className:V.body,children:t(hr,{episodes:s,currentEpisode:o,watchedEpisodes:r,onEpisodeClick:i,variant:"drawer",title:c,header:p})})]})]}),document.body):null}const kr="_sourceSelectionContainer_g7xev_1",xr="_providerSelectContainer_g7xev_14",Tr="_providerSelect_g7xev_14",Nr="_sourceSelect_g7xev_1",Lr="_sourceButtons_g7xev_70",Pr="_sourceButton_g7xev_70",Br="_active_g7xev_95",vs={sourceSelectionContainer:kr,providerSelectContainer:xr,providerSelect:Tr,sourceSelect:Nr,sourceButtons:Lr,sourceButton:Pr,active:Br},Ss=({skipIntervals:e,showId:n,episodeNumber:s,episodeCount:o,sourceType:r,showMeta:i})=>{const c=wt(),p=dt(),{engine:a,mediaRef:u}=St({volumeKey:"playerVolume",mutedKey:"playerMuted"}),{isPlaying:b,isMuted:x,volume:_,duration:E,isScrubbing:l,isBuffering:d,isFullscreen:k,isSpeedBoostActive:h,showControls:m,playbackLocked:g}=We(a),B=a.containerRef,f=C(null),T=C(0),L=C(Math.random().toString(36).substring(2)),y=a.setShowControls,[I,q]=P(M.getItem("autoSkipEnabled")==="true"),[K,$]=P(null),[W]=P(In),[Ke,ge]=P(W.fontSize),[Ue,ye]=P(W.position),[Qe,_e]=P(W.bgOpacity),[Ge,be]=P(W.bgColor),[je,ve]=P(W.textColor),[Ye,Se]=P(W.edge),[Xe,we]=P(W.bold),Ce=A((v,R)=>{if({fontSize:w=>typeof w!="number"?!1:(ge(w),!0),position:w=>typeof w!="number"?!1:(ye(w),!0),bgOpacity:w=>typeof w!="number"?!1:(_e(w),!0),bgColor:w=>typeof w!="string"?!1:(be(w),!0),textColor:w=>typeof w!="string"?!1:(ve(w),!0),edge:w=>w!=="shadow"&&w!=="outline"&&w!=="none"?!1:(Se(w),!0),bold:w=>typeof w!="boolean"?!1:(we(w),!0)}[v](R))try{M.setItem($n[v],String(R))}catch{}},[]),[Je,Ze]=P([]),[et,tt]=P(null),[nt,rt]=P(!1),[st,at]=P(!1),[ot,ke]=P(()=>{try{return M.getItem("playerUseNativeControls")==="true"}catch{return!1}}),J=C(!1),ne=C(-1),re=A(()=>{const v=u.current;return!n||!s||!i?.name?null:{showId:n,episodeNumber:s,episodeCount:o,currentTime:a.getTimeline().currentTime,duration:a.getState().duration,showName:i.name,showThumbnail:i.thumbnail,nativeName:i.names?.native,englishName:i.names?.english,genres:Array.isArray(i.genres)?i.genres.map(R=>typeof R=="string"?R:R?.name).filter(Boolean):void 0,popularityScore:i.score,type:i.type,isPlaying:v?!v.paused:r==="iframe",sessionId:L.current,isAdult:i.isAdult}},[a,u,n,s,o,i,r]),D=A((v=!1,R=!1)=>{if(J.current)return!1;const H=re();if(!H)return!1;const w=u.current;if(!w&&!v&&r!=="iframe"||r!=="iframe"&&H.duration<=0)return!1;const z=a.getTimeline().currentTime;if(!R){if(z===0)return!1;const ee=w?Math.abs(z-ne.current):0;if(!v&&w&&z!==w.duration&&ee<5)return!1}return H.currentTime=z,ne.current=z,v?(async()=>{try{await Re("progress.updateProgress",H),c.invalidateQueries({queryKey:[U.playerData,n]}),c.invalidateQueries({queryKey:[U.videoSources,n,s]}),c.invalidateQueries({queryKey:[U.continueWatching]}),c.invalidateQueries({queryKey:[U.thisWeekSchedule]}),c.invalidateQueries(p.continueWatching.pathFilter())}catch(ee){console.error("Failed to update progress:",ee)}})():Re("progress.updateProgress",H).then(()=>{ce(H.currentTime,H.duration)&&c.invalidateQueries({queryKey:[U.playerData,n]})}).catch(ee=>console.error("Failed to update progress:",ee)),!0},[a,re,r,c,n,s,p.continueWatching,u]);F(()=>{const v=()=>{J.current||D(!0)};window.addEventListener("beforeunload",v),window.addEventListener("pagehide",v);const R=()=>{document.visibilityState==="hidden"&&v()};document.addEventListener("visibilitychange",R);const H=f;return()=>{window.removeEventListener("beforeunload",v),window.removeEventListener("pagehide",v),document.removeEventListener("visibilitychange",R),J.current||D(!0),H.current&&clearTimeout(H.current)}},[D]);const xe=A(()=>a.setShowControls(!0),[a]),Te=a.toggleFullscreen,Ne=A(()=>{a.togglePlay(),y(!0)},[a,y]),Le=A(()=>{a.toggleMute(),y(!0)},[a,y]),Pe=A(v=>{a.seekRelative(v),f.current&&clearTimeout(f.current),f.current=setTimeout(()=>D(!1,!0),1500),y(!0)},[a,D,y]),Be=A(()=>{J.current=!1,D(!1,!0)},[D]),Ae=A(()=>{y(!0),D(!1,!0)},[D,y]);F(()=>{J.current=!1,ne.current=-1,T.current=0,L.current=Math.random().toString(36).substring(2),a.reset()},[a,n,s]);const Ee=a.reset;F(()=>{const v=L.current;return()=>{ut(v)}},[a,n,s]),F(()=>{if(r!=="iframe")return;D(!1,!0);const v=setInterval(()=>{D(!1,!0)},6e4);return()=>clearInterval(v)},[r,D]);const $e=A(()=>{const v=u.current;if(!v)return;const R=v.currentTime||0,H=Date.now(),w=ce(R,v.duration)&&!ce(ne.current,v.duration);(w||H-T.current>6e4)&&D(!1,w)&&(T.current=H);const z=e.find(Z=>R>=Z.start_time&&R<Z.end_time)||null;$(Z=>Z?.skip_id!==z?.skip_id?z:Z),I&&z&&!v.paused&&!a.getState().playbackLocked&&(a.seek(z.end_time),$(null))},[u,e,I,D,a]),Ie=A(()=>{const v=re();v&&(v.currentTime=v.duration,pt.progress.updateProgress.mutate(v).then(()=>{c.invalidateQueries({queryKey:[U.playerData,n]}),c.invalidateQueries({queryKey:[U.videoSources,n,s]}),c.invalidateQueries({queryKey:[U.continueWatching]})}).catch(R=>console.error("Failed to send final progress:",R)))},[re,c,n,s]),Me=A(()=>{J.current=!0,Ie()},[Ie]),it=te(()=>({togglePlay:Ne,seek:Pe,toggleMute:Le,toggleFullscreen:Te,onPlay:Be,onPause:Ae,formatTime:ht,onTimeUpdate:$e,onEnded:Me,setShowControls:y,setIsAutoSkipEnabled:q,setCurrentSkipInterval:$,setSubtitleFontSize:ge,setSubtitlePosition:ye,setSubtitleBgOpacity:_e,setSubtitleBgColor:be,setSubtitleTextColor:ve,setSubtitleEdge:Se,setSubtitleBold:we,setSubtitleStyle:Ce,setAvailableSubtitles:Ze,setActiveSubtitleTrack:tt,setShowSettings:rt,setShowVolumeSlider:at,flashControls:xe,sendProgressUpdate:D,setUseNativeControls:ke,resetMediaState:Ee}),[Ne,Pe,Le,Te,Be,Ae,$e,Me,D,ke,Ee,xe,Ce,y]);return{engine:a,refs:{videoRef:u,playerContainerRef:B},state:{playbackLocked:g,isPlaying:b,isMuted:x,volume:_,isFullscreen:k,duration:E,showControls:m,isScrubbing:l,isAutoSkipEnabled:I,currentSkipInterval:K,subtitleFontSize:Ke,subtitlePosition:Ue,subtitleBgOpacity:Qe,subtitleBgColor:Ge,subtitleTextColor:je,subtitleEdge:Ye,subtitleBold:Xe,availableSubtitles:Je,activeSubtitleTrack:et,showSettings:nt,showVolumeSlider:st,isBuffering:d,isSpeedBoostActive:h,useNativeControls:ot},actions:it}};function Ar(){try{return typeof navigator<"u"&&/android/i.test(navigator.userAgent)}catch{return!1}}function ws(e,n){const{refs:s,actions:o}=e,r=C(n);r.current=n;const i=C(!1),c=C(!1),p=a=>{try{if(a)return a.matches}catch{}try{return window.innerWidth>window.innerHeight}catch{return!1}};F(()=>{if(!Ar())return;let a=null;const u=()=>{const b=s.playerContainerRef.current;if(p(a)){if(!r.current||!b||ie(s.videoRef.current)||c.current)return;i.current=!0,o.toggleFullscreen()}else c.current=!1,i.current&&(i.current=!1,ie(s.videoRef.current)&&o.toggleFullscreen())};try{a=window.matchMedia("(orientation: landscape)"),a.addEventListener?a.addEventListener("change",u):a.addListener(u)}catch{}return u(),()=>{try{a&&(a.removeEventListener?a.removeEventListener("change",u):a.removeListener(u))}catch{}}},[o,s.playerContainerRef,s.videoRef,n]),F(()=>{const a=()=>{if(!ie(s.videoRef.current)){i.current=!1;try{window.matchMedia("(orientation: landscape)").matches&&(c.current=!0)}catch{c.current=!0}}};return document.addEventListener("fullscreenchange",a),document.addEventListener("webkitfullscreenchange",a),()=>{document.removeEventListener("fullscreenchange",a),document.removeEventListener("webkitfullscreenchange",a)}},[s.videoRef])}const Er=e=>Math.max(8,Math.min(40,Math.ceil(e/16.7)+4));function Cs({videoRef:e,canvasRef:n,delayMs:s,enabled:o}){const r=C(s);r.current=s;const i=C([]),c=C(-1),p=C(-1),a=C(!1),u=C(0),b=C(null);F(()=>{const x=h=>{if(h)try{h.close()}catch{}},_=()=>{for(const h of i.current)x(h.bitmap);i.current=[]};if(!o){_(),c.current=-1,p.current=-1,a.current=!1,u.current=0;return}let E=!1;const l=()=>{b.current!==null&&(cancelAnimationFrame(b.current),b.current=null)},d=()=>{E||(l(),b.current=requestAnimationFrame(()=>{k()}))};async function k(){if(E)return;const h=e.current,m=n.current;if(!h||!m||h.videoWidth===0){d();return}if(h.paused||h.ended||document.hidden||h.readyState<HTMLMediaElement.HAVE_CURRENT_DATA){d();return}const g=h.getVideoPlaybackQuality().totalVideoFrames;if(g===c.current){d();return}(h.seeking||p.current>=0&&Math.abs(h.currentTime-p.current)>.5)&&(_(),a.current=!1,u.current=0,c.current=-1),p.current=h.currentTime,(m.width!==h.videoWidth||m.height!==h.videoHeight)&&(m.width=h.videoWidth,m.height=h.videoHeight);const B=Math.max(0,r.current||0);B>u.current&&(a.current=!1);try{const f=await createImageBitmap(h);if(E){x(f);return}c.current=g;const T=performance.now(),L=m.getContext("2d"),y=$=>{L&&L.drawImage($,0,0,m.width,m.height)};if(B<=0){_(),a.current=!1,u.current=0,y(f),x(f),d();return}const I=i.current;I.push({bitmap:f,capture:T});const q=Er(B);for(;I.length>q;)x(I.shift()?.bitmap);let K=-1;for(let $=I.length-1;$>=0;$--)if(T-I[$].capture>=B){K=$;break}if(K!==-1){for(let W=0;W<K;W++)x(I.shift()?.bitmap);const $=I.shift();$?(y($.bitmap),x($.bitmap),a.current=!0,u.current=B):y(f)}else if(!a.current)y(f);else{const $=I.shift();$?(y($.bitmap),x($.bitmap)):y(f)}}catch{}d()}return d(),()=>{E=!0,l();for(const h of i.current)try{h.bitmap.close()}catch{}i.current=[]}},[o,e,n])}const Oe=(e,n)=>{try{M.setItem("playerVideoDelayMs",String(e)),M.setItem("playerVideoDelayEnabled",String(n))}catch{}},qe=e=>{try{M.setItem("playerVideoDelayEnabled",String(e))}catch{}};function ks(e,n){const[s,o]=P(()=>{try{const g=Number(M.getItem("playerVideoDelayMs"));if(Number.isFinite(g)&&g>=0&&g<=500)return Math.round(g)}catch{}return 180}),[r,i]=P(()=>{try{return M.getItem("playerVideoDelayEnabled")==="true"}catch{return!1}}),[c,p]=P(!1),[a,u]=P(!1),b=C(null),x=C(null),_=g=>{const B=Math.max(0,Math.min(500,Math.round(g)));o(B);try{M.setItem("playerVideoDelayMs",String(B))}catch{}},E=g=>{i(g),qe(g)},l=A(()=>{u(!1),p(!1)},[]);return{videoDelayMs:s,videoDelayEnabled:r,setDelayEnabled:E,handleVideoDelayChange:_,isCalibrating:c,testClipActive:a,stopCalibration:l,openAvSyncCalibrator:()=>{b.current={enabled:r,ms:s},i(!0),qe(!0),n?.(),p(!0)},cancelAvSyncCalibrator:()=>{const g=b.current;b.current=null,g&&(o(g.ms),i(g.enabled),Oe(g.ms,g.enabled)),u(!1),p(!1)},applyAvSyncCalibrator:()=>{b.current=null,i(!0),Oe(s,!0),u(!1),p(!1)},toggleTestClip:()=>{if(a){u(!1);return}const g=e.current;g&&!isNaN(g.currentTime)&&(x.current=g.currentTime),u(!0)},calibReturnRef:x,effectiveVideoDelayMs:r?s:0}}function xs(){const[e,n]=P(()=>{try{return M.getItem("playerTheaterMode")==="true"}catch{return!1}});F(()=>{try{e?document.body.classList.add("theater-mode"):document.body.classList.remove("theater-mode")}catch(r){console.error(r)}return()=>{try{document.body.classList.remove("theater-mode")}catch(r){console.error(r)}}},[e]);const s=A(()=>{n(r=>{const i=!r;try{M.setItem("playerTheaterMode",i.toString())}catch{}return i})},[]),o=A(r=>{if(e&&r.target===r.currentTarget){n(!1);try{M.setItem("playerTheaterMode","false")}catch{}}},[e]);return{isTheaterMode:e,toggleTheaterMode:s,handleLayoutClick:o}}const Y={enabled:!0,blur:60,saturation:150,brightness:70,opacity:60};function $r(){try{const e=M.getItem("playerAmbientLight");if(!e)return Y;const n=JSON.parse(e),s=(o,r,i,c)=>{const p=Number(o);return Number.isFinite(p)?Math.max(i,Math.min(c,p)):r};return{enabled:n.enabled??Y.enabled,blur:s(n.blur,Y.blur,0,120),saturation:s(n.saturation,Y.saturation,0,200),brightness:s(n.brightness,Y.brightness,20,120),opacity:s(n.opacity,Y.opacity,10,100)}}catch{return Y}}function Ts(){const[e,n]=P($r),s=A(o=>{n(r=>{const i={...r,...o};try{M.setItem("playerAmbientLight",JSON.stringify(i))}catch{}return i})},[]);return{settings:e,update:s}}const Ir="_theaterAmbient_x9t0o_1",Mr={theaterAmbient:Ir},de=160,ue=90,Rr=120,Ns=({videoRef:e,active:n,settings:s,className:o})=>{const r=C(null);return F(()=>{if(!n)return;const i=r.current,c=e.current;if(!i||!c)return;const p=i.getContext("2d",{alpha:!1});if(!p)return;let a=0,u=0,b=!1;const x=()=>{if(!(c.readyState<2||!c.videoWidth))try{const d=c.videoWidth,k=c.videoHeight,h=de/ue,m=d/k;let g=d,B=k,f=0,T=0;m>h?(g=k*h,f=(d-g)/2):(B=d/h,T=(k-B)/2),p.drawImage(c,f,T,g,B,0,0,de,ue)}catch{}},_=d=>{b||c.paused||(a=requestAnimationFrame(_),!(d-u<Rr)&&(u=d,x()))},E=()=>{b||(cancelAnimationFrame(a),u=0,a=requestAnimationFrame(_))},l=()=>cancelAnimationFrame(a);return c.addEventListener("play",E),c.addEventListener("pause",l),c.addEventListener("seeked",x),c.addEventListener("loadeddata",x),a=requestAnimationFrame(_),()=>{b=!0,cancelAnimationFrame(a),c.removeEventListener("play",E),c.removeEventListener("pause",l),c.removeEventListener("seeked",x),c.removeEventListener("loadeddata",x)}},[n,e]),n?t("canvas",{ref:r,width:de,height:ue,"aria-hidden":"true",className:o??Mr.theaterAmbient,style:{filter:`blur(${s.blur}px) saturate(${s.saturation}%) brightness(${s.brightness}%)`,opacity:s.opacity/100}}):null},Fr="_row_1fq55_1",Dr="_rowHeader_1fq55_9",Or="_rowLabel_1fq55_17",qr="_rowValue_1fq55_28",Hr="_slider_1fq55_36",Wr="_swatches_1fq55_99",zr="_swatch_1fq55_99",Vr="_swatchPicked_1fq55_114",Kr="_colorInput_1fq55_120",Ur="_segmented_1fq55_131",O={row:Fr,rowHeader:Dr,rowLabel:Or,rowValue:qr,slider:Hr,swatches:Wr,swatch:zr,swatchPicked:Vr,colorInput:Kr,segmented:Ur},Qr=({label:e,display:n,min:s,max:o,step:r,value:i,percent:c,onChange:p,onCommit:a})=>t("div",{className:O.row,children:[t("div",{className:O.rowHeader,children:[t("span",{className:O.rowLabel,children:e}),t("span",{className:O.rowValue,children:n})]}),t("input",{type:"range",className:O.slider,min:s,max:o,step:r,value:i,"aria-label":e,"data-speed-boost-ignore":"true",onInput:u=>p(Number(u.target.value)),onMouseDown:u=>u.stopPropagation(),onPointerDown:u=>u.stopPropagation(),onTouchStart:u=>u.stopPropagation(),onPointerUp:a,onPointerCancel:a,onTouchEnd:a,onKeyUp:a,onBlur:a,style:{"--slider-percent":`${c}%`}})]}),Ls=({label:e,colors:n,value:s,onChange:o})=>t("div",{className:O.row,children:[t("div",{className:O.rowHeader,children:t("span",{className:O.rowLabel,children:e})}),t("div",{className:O.swatches,children:[n.map(r=>t("button",{type:"button","aria-label":`${e} ${r}`,"aria-pressed":s.toLowerCase()===r.toLowerCase(),onClick:()=>o(r),className:`${O.swatch} ${s.toLowerCase()===r.toLowerCase()?O.swatchPicked:""}`,style:{backgroundColor:r}},r)),t("input",{type:"color","aria-label":`Custom ${e.toLowerCase()}`,className:O.colorInput,value:s,"data-speed-boost-ignore":"true",onInput:r=>o(r.target.value),onMouseDown:r=>r.stopPropagation(),onPointerDown:r=>r.stopPropagation(),onTouchStart:r=>r.stopPropagation()})]})]});function Ps({label:e,options:n,value:s,onChange:o}){return t("div",{className:O.row,children:[t("div",{className:O.rowHeader,children:t("span",{className:O.rowLabel,children:e})}),t("div",{className:O.segmented,role:"group","aria-label":e,children:n.map(r=>t("button",{type:"button","aria-pressed":s===r,onClick:()=>o(r),children:[t("span",{children:r}),s===r&&t(j,{name:"check",size:10})]},r))})]})}const oe=10,me=500,pe=e=>Math.max(0,Math.min(me,Math.round(e))),Bs=({isOpen:e,ms:n,onChange:s,onApply:o,onClose:r,testClipActive:i,onTestClip:c})=>e?t("div",{role:"dialog","aria-label":"Calibrate audio video sync","data-speed-boost-ignore":"true",onClick:p=>p.stopPropagation(),style:{position:"absolute",right:8,bottom:112,width:"min(260px, calc(100% - 16px))",maxHeight:"calc(100% - 124px)",overflowY:"auto",overflowX:"hidden",zIndex:60,display:"flex",flexDirection:"column",alignItems:"center",gap:8,padding:12,borderRadius:"var(--radius-lg)",border:"1px solid var(--glass-border)",background:"rgba(18, 18, 22, 0.95)",boxShadow:"var(--glass-shadow)",backdropFilter:"blur(14px)",WebkitBackdropFilter:"blur(14px)",boxSizing:"border-box"},children:[t("div",{style:{fontSize:"0.8rem",fontWeight:800,color:"var(--text-primary)"},children:"A/V sync"}),t("div",{children:t(X,{size:"sm",variant:"secondary",onClick:c,children:i?"Back to video":"Preview test clip"})}),t("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",gap:6,flexWrap:"wrap"},children:[t(X,{size:"sm",onClick:()=>s(pe(n-oe)),"aria-label":"Decrease delay by 10 milliseconds",children:["− ",oe,"ms"]}),t("div",{style:{fontSize:"1.1rem",fontWeight:800,minWidth:64,textAlign:"center"},children:[n,"ms"]}),t(X,{size:"sm",onClick:()=>s(pe(n+oe)),"aria-label":"Increase delay by 10 milliseconds",children:["+ ",oe,"ms"]})]}),t(Qr,{label:"Video delay",display:`${n}ms`,min:0,max:me,step:5,value:n,percent:n/me*100,onChange:p=>s(pe(p))}),t("div",{style:{display:"flex",gap:8,justifyContent:"center",flexWrap:"wrap"},children:[t(X,{size:"sm",variant:"secondary",onClick:r,children:"Cancel"}),t(X,{size:"sm",onClick:o,children:["Apply ",n,"ms"]})]})]}):null;function As({videoRef:e,sourceType:n,resetKey:s,onEnd:o}){const r=C(!1),i=C(o);i.current=o,F(()=>{r.current=!1},[s]);const c=A(()=>{const a=e.current?.duration;!a||!Number.isFinite(a)||console.info(`[playback] duration ${a.toFixed(2)}s`)},[e]);return{checkEnd:A((a=!1)=>{const u=e.current;!u||n==="iframe"||r.current||!a&&!Ct(u.currentTime,u.duration)||(r.current=!0,console.info(`[playback] end reached at ${u.currentTime.toFixed(2)}s / ${u.duration.toFixed(2)}s`),i.current())},[n,e]),logDuration:c}}function Es(e,n,s){const o=ft(),r=C({watch:o,selection:n,loading:s});r.current={watch:o,selection:n,loading:s};const[i,c]=P(!1),p=C(""),a=C(""),u=C(""),b=C(!1),x=!!o.session&&!o.session.host;F(()=>(!o.session&&b.current&&e.applyRemotePlayback(void 0,!1,1),b.current=!!o.session,e.setPlaybackLocked(!!o.session&&(x||!o.connected)),o.session&&!o.connected&&e.applyRemotePlayback(void 0,!1,1),()=>e.setPlaybackLocked(!1)),[e,x,o.connected,o.session]);const _=A((E=!1)=>{const{watch:l,selection:d,loading:k}=r.current,h=e.mediaRef.current;if(!l.session||!l.room||!h)return;if(l.session.host){l.connected&&l.selfId!==u.current&&!k&&d&&h.readyState>=1&&(u.current=l.selfId,Fe(d,l.room.selection)&&e.applyRemotePlayback(l.room.position,!1,l.room.rate));return}const m=l.room,g=d&&Fe(d,m.selection);if(!l.connected||k||!g||h.readyState<1){e.applyRemotePlayback(void 0,!1,m.rate);return}const B=Date.now()+l.clock.offset-m.updatedAt<15e3;if(m.playing&&!B){e.applyRemotePlayback(void 0,!1,m.rate);return}const f=m.playing&&m.hostOnline&&B,T=Math.min(h.duration||1/0,mt({...m,playing:f},Date.now()+l.clock.offset)),L=T-h.currentTime,y=Math.abs(L)>(f?1.25:.15),I=f&&!y&&Math.abs(L)>.15?Math.min(4,Math.max(.25,m.rate*(L>0?1.03:.97))):m.rate,q=e.getState().playBlocked;e.applyRemotePlayback(y?T:void 0,f&&(!q||E),I),c(q&&f)},[e]);return F(()=>{if(!o.session)return;const E=()=>{const{watch:f,selection:T,loading:L}=r.current,y=e.mediaRef.current;if(!f.connected||!f.session?.host||!f.room)return;if(!T||L||!y||y.readyState<1){f.room.playing&&f.send({type:"update",...f.room,playing:!1});return}_();const I=e.getState(),q=!y.paused&&!y.ended&&!I.isBuffering,K={type:"update",selection:T,position:y.currentTime+(q?f.clock.latency/1e3*y.playbackRate:0),playing:q,rate:y.playbackRate},$=JSON.stringify(K);!q&&a.current===$||(a.current=$,f.send(K))},l=()=>{const{watch:f,selection:T,loading:L}=r.current,y=e.getState(),I=e.mediaRef.current,q=y.error||!L&&!T?"error":y.playBlocked?"blocked":L||!I||I.readyState<1?"loading":y.isBuffering?"buffering":"ready";f.connected&&`${f.selfId}:${q}`!==p.current&&(p.current=`${f.selfId}:${q}`,f.send({type:"status",status:q})),_()};let d=null;const k=["play","pause","seeked","ratechange","playing","waiting","canplay","ended"];let h;const m=()=>{clearTimeout(h),h=setTimeout(E,100)},g=setInterval(()=>{const f=e.mediaRef.current;d!==f&&(k.forEach(T=>d?.removeEventListener(T,m)),d=f,k.forEach(T=>d?.addEventListener(T,m))),l()},500),B=setInterval(E,3e3);return()=>{clearInterval(g),clearInterval(B),clearTimeout(h),k.forEach(T=>d?.removeEventListener(T,m));const{watch:f}=r.current;f.session?.host&&f.room&&f.connected&&f.send({type:"update",...f.room,playing:!1,position:e.mediaRef.current?.currentTime??f.room.position})}},[e,o.session,_]),F(()=>{_()},[o.room,o.connected,n,s,_]),{needsPlayback:i,enablePlayback:()=>_(!0)}}export{Ns as A,is as B,fs as C,Ps as D,_s as E,Q as F,Y as G,Qr as M,ms as P,ps as R,Ls as S,os as T,hs as a,vs as b,ns as c,rs as d,ds as e,cs as f,as as g,Es as h,ks as i,Cs as j,xs as k,As as l,ws as m,Ts as n,ts as o,gs as p,us as q,ss as r,Wn as s,hr as t,Ss as u,es as v,Bs as w,ys as x,bs as y,ls as z};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
._controls_1ne4g_1{display:flex;align-items:stretch;gap:1rem;flex-wrap:wrap;width:100%}._titleContainer_1ne4g_9{display:flex;flex-direction:column;gap:.75rem}._scheduleInfo_1ne4g_15{display:flex;gap:1rem;font-size:.95rem;color:var(--text-tertiary);align-items:center}._status_1ne4g_23{background:color-mix(in srgb,var(--accent) 10%,transparent);color:var(--accent-light);border:1px solid color-mix(in srgb,var(--accent) 20%,transparent);padding:.35rem .85rem;border-radius:var(--radius-full);font-weight:700;font-size:.75rem;text-transform:uppercase;letter-spacing:.05em}._nextEpisode_1ne4g_35{background:#ffffff0d;color:var(--text-secondary);padding:.35rem .85rem;border-radius:var(--radius-full);font-size:.8rem;font-weight:600;border:1px solid var(--glass-border)}._watchlistBtn_1ne4g_45{background:#ffffff0d;color:var(--text-primary);border:1px solid rgba(255,255,255,.09);padding:.55rem 1.1rem;border-radius:var(--radius-full);font-weight:600;cursor:pointer;transition:all var(--transition-fast);display:flex;align-items:center;gap:.5rem;font-size:.82rem;flex:0 1 auto;min-width:110px;justify-content:center;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);letter-spacing:.01em}._watchlistBtn_1ne4g_45:hover{background:#ffffff1a;border-color:#fff3;transform:translateY(-1px);box-shadow:0 4px 12px #00000040}._watchlistBtn_1ne4g_45._inList_1ne4g_73{background:color-mix(in srgb,var(--color-success) 12%,transparent);border-color:color-mix(in srgb,var(--color-success) 35%,transparent);color:var(--color-success)}._watchlistBtn_1ne4g_45._inList_1ne4g_73:hover{background:color-mix(in srgb,var(--color-success) 18%,transparent);border-color:var(--color-success)}._queueBtn_1ne4g_84{background:color-mix(in srgb,var(--accent) 8%,transparent);border-color:color-mix(in srgb,var(--accent) 25%,transparent);color:var(--accent-light)}._queueBtn_1ne4g_84:hover{background:color-mix(in srgb,var(--accent) 14%,transparent);border-color:color-mix(in srgb,var(--accent) 45%,transparent);color:var(--accent-lighter)}._queueActive_1ne4g_96{background:color-mix(in srgb,var(--accent) 15%,transparent);border-color:color-mix(in srgb,var(--accent) 60%,transparent);color:var(--accent-lighter)}._modeToggleBtn_1ne4g_102{background:#ffffff0d;color:var(--text-primary);border-color:#ffffff1a;flex:0 1 auto}._modeToggleActive_1ne4g_109{background:color-mix(in srgb,var(--color-info) 12%,transparent);border-color:color-mix(in srgb,var(--color-info) 45%,transparent);color:#dbeafe}._modeToggleActive_1ne4g_109:hover{background:color-mix(in srgb,var(--color-info) 18%,transparent);border-color:color-mix(in srgb,var(--color-info) 65%,transparent)}._watchlistBtn_1ne4g_45:disabled{opacity:.7;cursor:wait;transform:none}._watchlistBtn_1ne4g_45:disabled:hover{transform:none}._markWatchedBtn_1ne4g_130{background:color-mix(in srgb,var(--color-info) 8%,transparent);border-color:color-mix(in srgb,var(--color-info) 25%,transparent);color:#93c5fd;flex:0 1 auto;justify-content:center}._markWatchedBtn_1ne4g_130:hover{background:color-mix(in srgb,var(--color-info) 14%,transparent);border-color:color-mix(in srgb,var(--color-info) 45%,transparent);color:#dbeafe}._markWatchedDone_1ne4g_144{background:color-mix(in srgb,var(--color-success) 12%,transparent);border-color:color-mix(in srgb,var(--color-success) 35%,transparent);color:var(--color-success)}._markWatchedDone_1ne4g_144:hover{background:color-mix(in srgb,var(--color-success) 18%,transparent);border-color:var(--color-success)}._streamPanel_1ne4g_155{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.75rem 1rem;align-items:center;background:var(--glass-bg);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid var(--glass-border);border-radius:var(--radius-lg);padding:1rem 1.25rem;box-shadow:var(--glass-shadow)}._streamPanel_1ne4g_155 ._desktopEpisodeActions_1ne4g_169{flex:0 0 auto;align-self:center;margin:0}._streamPanel_1ne4g_155 ._sourceLoader_1ne4g_175{grid-column:1 / -1;animation:none}._streamPanel_1ne4g_155>:last-child:not(:first-child){grid-column:1 / -1}._streamPanel_1ne4g_155 select{max-width:320px}._episodeActions_1ne4g_188{display:flex;flex-wrap:wrap;gap:.75rem;margin:.5rem 0 .25rem}._desktopEpisodeActions_1ne4g_169{flex:1 1 320px;justify-content:flex-end;align-self:flex-end;margin:0}._mobileEpisodeActions_1ne4g_202{margin:.5rem 0 .25rem}._episodeNavBtn_1ne4g_206{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;border:1px solid var(--glass-border);border-radius:var(--radius-lg);padding:.7rem 1rem;background:#ffffff0d;color:var(--text-primary);cursor:pointer;font-size:.9rem;font-weight:700;transition:background-color var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast)}._episodeNavBtn_1ne4g_206:hover:not(:disabled){border-color:var(--text-secondary);background:#ffffff14}._episodeNavBtn_1ne4g_206:disabled{opacity:.5;cursor:not-allowed}._episodeNavBtn_1ne4g_206._primary_1ne4g_235{background:linear-gradient(135deg,var(--accent) 0%,var(--accent-dark) 100%);border-color:transparent;color:#fff}._episodeNavBtn_1ne4g_206._primary_1ne4g_235:hover:not(:disabled){background:linear-gradient(135deg,var(--accent-light) 0%,var(--accent) 100%)}._episodeNavBtn_1ne4g_206._secondary_1ne4g_245{background:#ffffff0a}._episodePickerBtn_1ne4g_249{display:none}._queueCountdown_1ne4g_253{position:absolute;left:50%;bottom:1.5rem;transform:translate(-50%);z-index:75;padding:.7rem 1rem;border:1px solid var(--glass-border);border-radius:var(--radius-md);background:#121216eb;color:#fff;font-weight:700;box-shadow:var(--glass-shadow)}._speedBoostBadge_1ne4g_268{position:absolute;top:1.5rem;left:50%;transform:translate(-50%);z-index:75;display:flex;align-items:center;gap:.7rem;padding:.65rem 1rem;border:1px solid color-mix(in srgb,var(--accent) 45%,transparent);border-radius:var(--radius-md);background:#121216eb;color:#f5f3ff;font-weight:800;letter-spacing:.06em;text-transform:none;box-shadow:var(--glass-shadow);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}._speedBoostBadge_1ne4g_268 span{line-height:1}._speedBoostBadge_1ne4g_268 svg{display:block;flex-shrink:0}._videoContainer_1ne4g_299{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#000;display:flex;justify-content:center;align-items:center;container-type:inline-size}._loadingOverlay_1ne4g_312{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;justify-content:center;align-items:center;z-index:10;background:#00000080;border-radius:inherit}._loadingDots_1ne4g_326{display:flex;gap:10px}._dot_1ne4g_331{width:12px;height:12px;border-radius:50%;background-color:var(--accent);animation:_bounce_1ne4g_1 1.4s infinite ease-in-out both;box-shadow:0 0 10px var(--accent-glow)}._dot_1ne4g_331:nth-child(1){animation-delay:-.32s}._dot_1ne4g_331:nth-child(2){animation-delay:-.16s}._bufferingOverlay_1ne4g_348{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);pointer-events:none;z-index:20}._bufferingSpinner_1ne4g_357{width:var(--size-48);height:var(--size-48);border-radius:var(--radius-full);background:conic-gradient(from 0deg,transparent 0deg 160deg,var(--accent) 300deg,var(--accent-lighter) 360deg),var(--track-bg);-webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 4px),#000 calc(100% - 4px));mask:radial-gradient(farthest-side,transparent calc(100% - 4px),#000 calc(100% - 4px));filter:drop-shadow(0 0 8px var(--accent-glow));animation:_spin_1ne4g_459 var(--duration-spin) linear infinite}@keyframes _spin_1ne4g_459{to{transform:rotate(360deg)}}._videoIframe_1ne4g_381{width:100%;height:100%;border:none;position:absolute;top:0;left:0;object-fit:cover;border-radius:inherit}._videoContainer_1ne4g_299 video{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;object-fit:contain;background-color:#000;border-radius:inherit}._videoContainer_1ne4g_299 video._videoElementHidden_1ne4g_404{opacity:0;pointer-events:none}._upscalerCanvas_1ne4g_409{position:absolute;top:0;left:0;width:100%;height:100%;z-index:2;object-fit:contain;opacity:0;pointer-events:none;border-radius:inherit}._upscalerCanvas_1ne4g_409._upscalerActive_1ne4g_422{opacity:1}._upscalerStatusBadge_1ne4g_426{position:absolute;top:12px;right:12px;z-index:4;background:#000000a6;color:var(--text-primary);font-size:.75rem;font-weight:600;padding:.35em .8em;border-radius:999px;border:1px solid var(--glass-border);pointer-events:none}._subtitleOverlay_1ne4g_441{position:absolute;top:0;left:0;width:100%;height:100%;z-index:3;pointer-events:none;overflow:hidden;border-radius:inherit}._sourceLoader_1ne4g_175{padding:.75rem;display:flex;justify-content:center}._spinner_1ne4g_459{width:40px;height:40px;border:4px solid rgba(255,255,255,.1);border-left-color:var(--accent);border-radius:50%;animation:_spin_1ne4g_459 1s linear infinite}@media(max-width:768px){._titleContainer_1ne4g_9 h1{font-size:1.25rem}._episodeActions_1ne4g_188{margin-top:.25rem}._controls_1ne4g_1{gap:.5rem}._watchlistBtn_1ne4g_45,._queueBtn_1ne4g_84,._markWatchedBtn_1ne4g_130,._modeToggleBtn_1ne4g_102{flex:1 1 calc(50% - .25rem);min-width:0;padding:.5rem .75rem;font-size:.78rem;gap:.4rem;border:none}._episodeNavBtn_1ne4g_206{flex:1 1 calc(50% - .25rem);min-width:0;padding:.6rem .9rem;font-size:.8rem;min-height:44px;border:none}._episodePickerBtn_1ne4g_249{display:inline-flex;flex-basis:100%;padding:.6rem .9rem;font-size:.78rem;min-height:44px;border:none;grid-column:1 / -1}._desktopEpisodeActions_1ne4g_169{display:none}._mobileEpisodeActions_1ne4g_202{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem}._streamPanel_1ne4g_155{grid-template-columns:minmax(0,1fr)}._errorOverlay_1ne4g_526{padding:1rem;gap:.5rem;overflow-y:auto}._errorOverlay_1ne4g_526 p{font-size:1rem}._retryButton_1ne4g_536{padding:.5rem 1.25rem;font-size:.9rem;margin-top:0}}@media(min-width:769px){._mobileEpisodeActions_1ne4g_202{display:none}}._detailsToggleBtn_1ne4g_549{background:transparent;border:1px solid var(--border-accent);color:var(--accent-light);padding:.5rem .9rem;border-radius:var(--radius-full);cursor:pointer;font-size:.85rem;font-weight:700;transition:all var(--transition-fast);display:flex;align-items:center;gap:.4rem;margin-top:1rem;width:fit-content}._detailsToggleBtn_1ne4g_549:hover{background:var(--accent-subtle);color:var(--accent-lighter);border-color:var(--accent)}._descriptionSection_1ne4g_572{margin-top:1.75rem;padding:1.5rem;background:#ffffff05;border-radius:var(--radius-lg);border:1px solid var(--glass-border)}._descriptionSection_1ne4g_572._synopsisFlat_1ne4g_580{margin-top:0;padding:0;background:none;border:0;border-radius:0;min-width:0}._synopsisFlat_1ne4g_580 p{max-width:80ch}._descriptionSection_1ne4g_572 h3{font-size:.95rem;font-weight:800;margin-bottom:.85rem;color:var(--text-primary);text-transform:uppercase;letter-spacing:.05em;display:flex;align-items:center;gap:.75rem}._descriptionSection_1ne4g_572 h3:before{content:"";width:4px;height:16px;background:var(--accent);border-radius:var(--radius-full);box-shadow:0 0 10px var(--accent-glow)}._videoContainer_1ne4g_299._fullscreenActive_1ne4g_614{border-radius:0}._videoContainer_1ne4g_299:fullscreen,._videoContainer_1ne4g_299:-webkit-full-screen{width:100vw;height:100vh;border-radius:0}._videoContainer_1ne4g_299:fullscreen video,._videoContainer_1ne4g_299:fullscreen canvas,._videoContainer_1ne4g_299:-webkit-full-screen video,._videoContainer_1ne4g_299:-webkit-full-screen canvas{border-radius:0}._errorOverlay_1ne4g_526{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;background:#000c;color:#fff;z-index:30;padding:2rem;text-align:center;gap:1rem;border-radius:inherit}._errorOverlay_1ne4g_526 p{margin:0;font-size:1.2rem;font-weight:500}._errorSubtext_1ne4g_657{color:var(--text-tertiary)!important;font-size:.9rem!important}._retryButton_1ne4g_536{background:var(--accent);color:var(--accent-text);border:none;padding:.6rem 2rem;border-radius:var(--radius-md);font-weight:600;cursor:pointer;transition:all .2s;margin-top:.5rem;box-shadow:0 4px 12px var(--accent-glow)}._retryButton_1ne4g_536:hover{background:var(--accent-light);transform:translateY(-2px)}._watchedOverlay_1ne4g_680{position:absolute;inset:0;z-index:5;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;padding:1.5rem;text-align:center;color:var(--text-primary);background:radial-gradient(circle at 50% 35%,color-mix(in srgb,var(--accent) 18%,transparent),transparent 60%),#000;border-radius:inherit}._watchedTitle_1ne4g_702{margin:0;font-size:1.2rem;font-weight:700}._watchedSubtext_1ne4g_708{margin:0;color:var(--text-secondary);font-size:.9rem}._watchedActions_1ne4g_714{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:10px;margin-top:.5rem;width:100%;max-width:560px}._watchedActions_1ne4g_714>:first-child{justify-self:end}._watchedActions_1ne4g_714>:last-child{justify-self:start}._watchedActionsCentered_1ne4g_732{display:flex;flex-wrap:wrap;justify-content:center}._watchedActionsCentered_1ne4g_732>div{display:contents}@media(max-width:480px){._watchedActions_1ne4g_714{display:flex;flex-wrap:wrap;justify-content:center}._watchedActions_1ne4g_714>div{display:contents}}._playerPageLayout_1rxx0_1{display:grid;grid-template-columns:320px 1fr;gap:2.5rem;padding:2rem;width:100%;max-width:1800px;margin:0 auto;align-items:start;min-height:calc(100vh - var(--header-height));background-color:transparent;animation:_fadeIn_1rxx0_1 .8s var(--ease-smooth)}._playerPageLayout_1rxx0_1._noSidebar_1rxx0_15{grid-template-columns:minmax(0,1fr)}._episodeSidebar_1rxx0_19{background:var(--glass-bg);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid var(--glass-border);border-radius:var(--radius-lg);overflow:visible;display:flex;flex-direction:column;box-shadow:var(--glass-shadow);animation:_slideUpIn_1rxx0_1 .8s var(--ease-smooth)}._playerMain_1rxx0_32{min-width:0;display:flex;flex-direction:column;gap:1.25rem;animation:_slideUpIn_1rxx0_1 .8s .1s var(--ease-smooth) both}._videoPlayerWrapper_1rxx0_40{width:100%;padding-top:56.25%;background-color:#000;border-radius:0;overflow:clip;isolation:isolate;position:relative;box-shadow:0 20px 50px #00000080;border:1px solid var(--glass-border)}._playerInfoHeader_1rxx0_56{display:flex;gap:2rem;align-items:flex-start}._playerAnimeCard_1rxx0_62{width:160px;flex-shrink:0;border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-xl);border:1px solid var(--glass-border);transform:translateZ(0);aspect-ratio:2/3;height:auto}._playerInfoContainer_1rxx0_74{background:var(--glass-bg);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid var(--glass-border);padding:2rem;border-radius:var(--radius-2xl);box-shadow:var(--glass-shadow);display:flex;flex-direction:column;position:relative;overflow:hidden}._playerInfoContainer_1rxx0_74:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent 0%,color-mix(in srgb,var(--accent) 40%,transparent) 50%,transparent 100%);pointer-events:none}._infoColumns_1rxx0_104{display:grid;grid-template-columns:minmax(0,1fr);gap:1.5rem 2.5rem;border-top:1px solid var(--border-primary);padding-top:1.5rem;margin-top:1.5rem}@media(min-width:1100px){._infoColumns_1rxx0_104:has(>:last-child:not(:first-child)){grid-template-columns:minmax(0,1.5fr) minmax(240px,1fr);align-items:start}}._playerAnimeCard_1rxx0_62 img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.8,.2,1),opacity .4s ease}._playerAnimeCard_1rxx0_62:hover img{transform:scale(1.1)}._videoTitleSection_1rxx0_134{flex:1;display:flex;flex-direction:column;justify-content:flex-start;gap:1.25rem}._videoTitleSection_1rxx0_134 h1{margin:0;font-size:2.25rem;line-height:1.1;font-weight:800;color:var(--text-primary);letter-spacing:-.02em}@keyframes _fadeIn_1rxx0_1{0%{opacity:0}to{opacity:1}}@keyframes _slideUpIn_1rxx0_1{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}@media(max-width:1280px){._playerPageLayout_1rxx0_1{grid-template-columns:280px 1fr;padding:1.5rem;gap:1.5rem}}@media(max-width:1024px){._playerPageLayout_1rxx0_1{display:flex;flex-direction:column;gap:2rem}._episodeSidebar_1rxx0_19{width:100%;height:auto;max-height:500px;position:static;order:2;overflow-y:auto;-webkit-overflow-scrolling:touch}._playerMain_1rxx0_32{order:1;width:100%}._playerInfoHeader_1rxx0_56{padding:0}}@media(max-width:768px){._playerPageLayout_1rxx0_1{padding:1rem;gap:1.5rem}._episodeSidebar_1rxx0_19{display:none}._playerMain_1rxx0_32{gap:1.5rem}._videoPlayerWrapper_1rxx0_40{border-radius:0}._playerInfoContainer_1rxx0_74{border-radius:var(--radius-xl);padding:1.5rem}._playerInfoHeader_1rxx0_56{flex-direction:row;align-items:flex-start;text-align:left;gap:1.5rem}._videoTitleSection_1rxx0_134 h1{font-size:1.75rem}._playerAnimeCard_1rxx0_62{width:100px}}@media(max-width:480px){._playerInfoHeader_1rxx0_56{flex-direction:column;align-items:center;text-align:center}._playerAnimeCard_1rxx0_62{width:120px}}@media(max-width:480px)and (orientation:portrait){._videoPlayerWrapper_1rxx0_40{padding-top:100%;position:relative}}@media(min-width:481px)and (max-width:768px)and (orientation:portrait){._videoPlayerWrapper_1rxx0_40{padding-top:75%;position:relative}}@media(max-width:900px)and (orientation:landscape){._playerPageLayout_1rxx0_1{padding:0;gap:0}._videoPlayerWrapper_1rxx0_40{border-radius:0;height:100vh;padding-top:0}._playerInfoContainer_1rxx0_74{padding:1.5rem}}body.low-end ._playerPageLayout_1rxx0_1,body.low-end ._episodeSidebar_1rxx0_19,body.low-end ._playerInfoContainer_1rxx0_74{animation:none!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;box-shadow:none!important;background:var(--bg-secondary)!important}body.low-end ._videoPlayerWrapper_1rxx0_40{box-shadow:none!important;border-color:var(--border-primary)!important}body.low-end ._episodeSidebar_1rxx0_19{background:var(--bg-secondary)!important}._theaterMode_1rxx0_308{display:flex!important;justify-content:center!important;align-items:center!important;position:fixed!important;top:0!important;left:0!important;width:100vw!important;height:100vh!important;min-height:100vh!important;max-width:none!important;padding:2.5rem!important;margin:0!important;background-color:var(--bg-main)!important;backdrop-filter:blur(24px)!important;-webkit-backdrop-filter:blur(24px)!important;animation:_fadeIn_1rxx0_1 .4s var(--ease-smooth)!important;overflow:hidden!important;z-index:var(--z-overlay)!important}._theaterMode_1rxx0_308 ._playerMain_1rxx0_32{width:90%!important;max-width:1200px!important;height:auto!important;aspect-ratio:16/9!important;gap:0!important;margin:auto!important;padding:0!important;animation:_scaleUpIn_1rxx0_1 .4s cubic-bezier(.25,1,.5,1)!important;position:relative!important;z-index:1!important}._theaterMode_1rxx0_308 ._videoPlayerWrapper_1rxx0_40{width:100%!important;height:100%!important;padding-top:0!important;border-radius:0!important;border-color:#ffffff26!important;box-shadow:0 20px 60px color-mix(in srgb,var(--accent) 15%,transparent),0 0 100px #000000e6!important;overflow:hidden!important;position:relative!important}@keyframes _scaleUpIn_1rxx0_1{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}body.theater-mode header,body.theater-mode footer{display:none!important}body.theater-mode main{padding:0!important;max-width:none!important;margin:0!important;width:100vw!important;height:100vh!important}body.theater-mode{overflow:hidden!important;background:#000!important}@media(max-width:768px){._theaterMode_1rxx0_308{padding:1rem!important}._theaterMode_1rxx0_308 ._playerMain_1rxx0_32{width:100%!important;max-width:none!important}}._centerControls_1oa5h_1{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%) scale(1);display:flex;align-items:center;gap:clamp(1rem,3cqw,2rem);z-index:10;pointer-events:auto;transition:transform .4s cubic-bezier(.2,.8,.2,1)}._centerSkipBtn_1oa5h_14,._centerPlayPause_1oa5h_15{display:flex;align-items:center;justify-content:center;padding:0;background:#0f0f112e;border:none;border-radius:50%;color:#ffffffe6;cursor:pointer;transition:background-color .15s ease,color .15s ease,transform .15s ease}._centerSkipBtn_1oa5h_14>svg,._centerPlayPause_1oa5h_15>svg{filter:drop-shadow(0 1px 1px rgba(0,0,0,.9)) drop-shadow(0 2px 4px rgba(0,0,0,.45))}._centerSkipBtn_1oa5h_14{width:clamp(3rem,6.5cqw,3.5rem);height:clamp(3rem,6.5cqw,3.5rem);font-size:clamp(1.4rem,2.8cqw,1.625rem)}._centerPlayPause_1oa5h_15{background:#0f0f113d;color:#fff;width:clamp(3.5rem,8cqw,4.75rem);height:clamp(3.5rem,8cqw,4.75rem);font-size:clamp(1.5rem,3.4cqw,1.875rem)}@media(hover:hover){._centerSkipBtn_1oa5h_14:hover:enabled{background:#0f0f1142;color:#fff}._centerPlayPause_1oa5h_15:hover:enabled{background:#0f0f1152}}._centerSkipBtn_1oa5h_14:active:enabled,._centerPlayPause_1oa5h_15:active:enabled{transform:scale(.96)}._centerSkipBtn_1oa5h_14:focus-visible,._centerPlayPause_1oa5h_15:focus-visible{outline:2px solid var(--accent-light);outline-offset:2px}._centerSkipBtn_1oa5h_14:disabled,._centerPlayPause_1oa5h_15:disabled{color:#ffffff73;cursor:default}@media(prefers-reduced-motion:reduce){._centerControls_1oa5h_1,._centerSkipBtn_1oa5h_14,._centerPlayPause_1oa5h_15{transition:none}._centerSkipBtn_1oa5h_14:active,._centerPlayPause_1oa5h_15:active{transform:none}}._statusArea_1xccu_1{display:flex;flex-direction:column;align-items:flex-start;gap:.6rem;background:var(--bg-secondary);border:1px solid var(--border-primary);padding:.75rem 1.25rem;border-radius:var(--radius-lg);margin-top:.5rem;margin-bottom:0;color:var(--text-secondary);box-shadow:var(--shadow-lg);width:fit-content;max-width:100%;-webkit-user-select:none;user-select:none;flex-wrap:wrap}._toggleBtn_1xccu_20{display:inline-flex;align-items:center;gap:.5rem;background:transparent;border:none;color:var(--text-secondary);font-size:.8rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;cursor:pointer;padding:.15rem .25rem;border-radius:var(--radius-sm);transition:color var(--transition-fast);pointer-events:auto}._toggleBtn_1xccu_20:hover{color:var(--text-primary)}._toggleBtn_1xccu_20 svg{color:var(--accent)}._shortcuts_1xccu_46{display:flex;gap:1.5rem;align-items:center;flex-wrap:wrap;padding-top:.6rem;border-top:1px solid var(--border-primary);width:100%}._shortcutGroup_1xccu_56{display:flex;gap:1rem;align-items:center;flex-wrap:nowrap}._shortcut_1xccu_46{display:flex;align-items:center;gap:.3rem;white-space:nowrap}._key_1xccu_70{background:#ffffff14;padding:.15rem .4rem;border-radius:5px;border:1px solid rgba(255,255,255,.1);font-weight:800;color:var(--text-primary);font-size:.75rem;min-width:1.4rem;height:1.4rem;display:flex;align-items:center;justify-content:center;font-family:var(--font-mono);box-shadow:0 1.5px #0000004d}._key_1xccu_70+._key_1xccu_70{margin-left:-.15rem}._label_1xccu_91{color:var(--text-tertiary);font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em}@media(max-width:768px){._statusArea_1xccu_1{display:none}}._episodeListContainer_11isr_1{display:flex;flex-direction:column;height:100%;min-height:0;background:transparent}._drawerContainer_11isr_9{height:auto;min-height:100%}._episodeListHeader_11isr_14{background:transparent;padding:var(--space-6);border-bottom:1px solid var(--glass-border)}._drawerHeader_11isr_20{position:sticky;top:0;z-index:5;background:#0c0c0ffa;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}._episodeListTitle_11isr_29{margin:0 0 var(--space-5) 0;font-size:.85rem;font-weight:800;color:var(--text-tertiary);display:flex;align-items:center;gap:var(--space-3);letter-spacing:.1em;text-transform:uppercase}._rangeSelector_11isr_41{display:flex;flex-wrap:wrap;gap:var(--space-2)}._rangeButton_11isr_47{background:#ffffff0a;border:1px solid var(--border-primary);color:var(--text-secondary);padding:.35rem .65rem;border-radius:var(--radius-full);font-size:.76rem;font-weight:600;transition:all var(--transition-fast);cursor:pointer}._rangeButton_11isr_47:hover{border-color:#ffffff40;color:var(--text-primary);background:#ffffff14}._rangeButton_11isr_47:focus-visible{outline:none;box-shadow:var(--shadow-focus)}._rangeButton_11isr_47._active_11isr_70{background:color-mix(in srgb,var(--accent) 15%,transparent);color:var(--accent-light);border-color:color-mix(in srgb,var(--accent) 50%,transparent);box-shadow:0 0 8px var(--accent-glow)}._episodeList_11isr_1{flex:1;display:flex;flex-direction:column;padding:var(--space-4);overflow-y:auto;-webkit-overflow-scrolling:touch;min-height:0;touch-action:pan-y;scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.14) transparent}._drawerList_11isr_90{overflow:visible;-webkit-overflow-scrolling:auto;touch-action:pan-y}._episodeList_11isr_1::-webkit-scrollbar{width:6px}._episodeList_11isr_1::-webkit-scrollbar-track{background:transparent}._episodeList_11isr_1::-webkit-scrollbar-thumb{background:#ffffff24;background-clip:padding-box;border-radius:var(--radius-full);border:2px solid transparent}._episodeList_11isr_1:hover::-webkit-scrollbar-thumb{background-color:#ffffff47}._episodeList_11isr_1::-webkit-scrollbar-thumb:hover{background-color:var(--accent)}._episodeItem_11isr_119{padding:var(--space-3) var(--space-4);margin-bottom:6px;border-radius:var(--radius-lg);cursor:pointer;transition:all var(--transition-fast);color:var(--text-secondary);font-weight:600;display:flex;justify-content:space-between;align-items:center;font-size:.88rem;border:1px solid transparent;background:#ffffff05}._episodeItem_11isr_119:hover{background:#ffffff12;color:var(--text-primary);transform:translate(4px);border-color:#ffffff1f}._episodeItem_11isr_119:focus-visible{outline:none;box-shadow:var(--shadow-focus)}._episodeItem_11isr_119._watched_11isr_147{color:var(--text-muted);opacity:.55}._episodeItem_11isr_119._watched_11isr_147:hover{opacity:.85}._episodeItem_11isr_119._active_11isr_70{background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent-light);border:1px solid color-mix(in srgb,var(--accent) 35%,transparent);box-shadow:0 2px 10px var(--accent-glow)}._episodeItem_11isr_119._active_11isr_70:hover{transform:none;background:color-mix(in srgb,var(--accent) 18%,transparent);border-color:color-mix(in srgb,var(--accent) 50%,transparent)}._episodeItem_11isr_119 span{display:flex;align-items:center;gap:var(--space-3)}._episodeThumb_11isr_175{width:76px;aspect-ratio:16 / 9;object-fit:cover;border-radius:var(--radius-sm);flex-shrink:0;background:var(--bg-tertiary);border:1px solid rgba(255,255,255,.08)}._episodeText_11isr_185{flex-direction:column!important;align-items:flex-start!important;gap:2px!important;min-width:0;flex:1}._episodeLabel_11isr_193{font-weight:700;color:inherit}._episodeSub_11isr_198{font-size:.78rem;font-weight:500;color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}._shell_cys6s_1{position:fixed;inset:0;z-index:var(--z-drawer);display:flex;align-items:flex-end;justify-content:center}._overlay_cys6s_10{position:absolute;inset:0;border:0;padding:0;background:#0000008f;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);animation:_fadeIn_cys6s_1 .2s ease-out}._drawer_cys6s_21{position:relative;z-index:1;width:min(100vw,100%);max-height:86vh;background:#0c0c0ffa;border-radius:var(--radius-lg) var(--radius-lg) 0 0;border:1px solid var(--glass-border);border-bottom:none;display:flex;flex-direction:column;overflow:hidden;animation:_slideUpIn_cys6s_1 .25s ease-out}@keyframes _fadeIn_cys6s_1{0%{opacity:0}to{opacity:1}}@keyframes _slideUpIn_cys6s_1{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}._handle_cys6s_56{width:52px;height:5px;border-radius:999px;background:#ffffff2e;margin:.7rem auto 0}._header_cys6s_64{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem;padding:1rem 1rem .9rem;border-bottom:1px solid var(--glass-border)}._headerCopy_cys6s_73{display:flex;flex-direction:column;gap:.25rem}._kicker_cys6s_79{color:var(--text-tertiary);font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.14em}._title_cys6s_87{margin:0;font-size:1.1rem;font-weight:800;color:var(--text-primary)}._closeBtn_cys6s_94{width:38px;height:38px;border-radius:999px;border:1px solid var(--glass-border);background:#ffffff0d;color:var(--text-primary);display:inline-flex;align-items:center;justify-content:center;cursor:pointer}._closeBtn_cys6s_94:hover{background:#ffffff1a}._closeBtn_cys6s_94:focus-visible{outline:none;box-shadow:var(--shadow-focus)}._body_cys6s_116{flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;touch-action:pan-y}._sourceSelectionContainer_g7xev_1{display:flex;flex-direction:column;gap:1rem;background:var(--glass-bg);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid var(--glass-border);padding:1.25rem 1.5rem;border-radius:var(--radius-xl);width:100%}._providerSelectContainer_g7xev_14{display:flex;flex-direction:column;gap:.6rem;width:100%}._providerSelect_g7xev_14,._sourceSelect_g7xev_1{height:40px;padding:0 1rem;background:var(--bg-tertiary);border:1px solid var(--border-primary);border-radius:var(--radius-md);color:var(--text-primary);font-size:.875rem;font-family:inherit;cursor:pointer;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%2371717a' stroke-width='2' viewBox='0 0 12 12'%3E%3Cpolyline points='3 5 6 8 9 5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 1rem center;transition:all var(--transition-fast);width:100%;max-width:400px}._providerSelect_g7xev_14:hover,._sourceSelect_g7xev_1:hover{border-color:var(--border-secondary);background-color:var(--bg-elevated)}._providerSelect_g7xev_14:focus,._sourceSelect_g7xev_1:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-glow)}._providerSelect_g7xev_14 option,._sourceSelect_g7xev_1 option{background:var(--bg-tertiary);color:var(--text-primary)}._sourceSelectionContainer_g7xev_1 h4,._providerSelectContainer_g7xev_14 h4{margin:0;color:var(--text-tertiary);font-weight:700;text-transform:uppercase;font-size:.7rem;letter-spacing:.1em}._sourceButtons_g7xev_70{display:flex;flex-wrap:wrap;gap:.5rem}._sourceButton_g7xev_70{background:#ffffff0a;color:var(--text-secondary);border:1px solid var(--glass-border);padding:.55rem 1.1rem;border-radius:var(--radius-md);cursor:pointer;font-size:.875rem;font-weight:600;transition:all var(--transition-fast)}._sourceButton_g7xev_70:hover{background:#ffffff17;border-color:#ffffff4d;color:var(--text-primary);transform:translateY(-1px)}._sourceButton_g7xev_70._active_g7xev_95{background:color-mix(in srgb,var(--accent) 14%,transparent);border-color:color-mix(in srgb,var(--accent) 55%,transparent);color:var(--accent-lighter);box-shadow:0 2px 12px var(--accent-glow)}._theaterAmbient_x9t0o_1{position:absolute!important;inset:0!important;width:100%!important;height:100%!important;object-fit:cover!important;transform:scale(1.15)!important;pointer-events:none!important;z-index:0!important}body.low-end ._theaterAmbient_x9t0o_1{display:none!important}._row_1fq55_1{display:flex;flex-direction:column;gap:.3rem;padding:.5rem .75rem .6rem;min-width:0}._rowHeader_1fq55_9{display:flex;align-items:baseline;justify-content:space-between;gap:.75rem;min-width:0}._rowLabel_1fq55_17{font-size:.68rem;font-weight:700;color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.05em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}._rowValue_1fq55_28{font-size:.72rem;font-weight:600;color:var(--text-secondary);font-variant-numeric:tabular-nums;white-space:nowrap}._slider_1fq55_36{width:100%;min-width:8rem;cursor:pointer;-webkit-appearance:none;appearance:none;background:transparent;height:1.375rem;margin:0;touch-action:pan-y}._slider_1fq55_36::-webkit-slider-runnable-track{width:100%;height:4px;background:linear-gradient(to right,var(--accent) 0%,var(--accent) var(--slider-percent, 0%),rgba(255,255,255,.25) var(--slider-percent, 0%),rgba(255,255,255,.25) 100%);border-radius:4px;border:none}._slider_1fq55_36::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:12px;height:12px;background-color:#fff;border:2px solid var(--accent);border-radius:50%;cursor:pointer;margin-top:-4px;box-shadow:0 0 8px #00000080}._slider_1fq55_36::-moz-range-track{width:100%;height:4px;background:#ffffff40;border-radius:4px;border:none}._slider_1fq55_36::-moz-range-progress{height:4px;background:var(--accent);border-radius:4px}._slider_1fq55_36::-moz-range-thumb{width:10px;height:10px;background-color:#fff;border:2px solid var(--accent);border-radius:50%;cursor:pointer;box-shadow:0 0 8px #00000080}._swatches_1fq55_99{display:flex;gap:.375rem;align-items:center}._swatch_1fq55_99{width:1.25rem;height:1.25rem;padding:0;border-radius:50%;cursor:pointer;flex:0 0 auto}._swatchPicked_1fq55_114{box-shadow:0 0 0 2px var(--panel-bg, #141416),0 0 0 3.5px var(--accent)}._colorInput_1fq55_120{width:1.75rem;height:1.25rem;padding:0;border:none;border-radius:.3rem;background:transparent;cursor:pointer;flex:0 0 auto}._segmented_1fq55_131{display:flex;gap:.25rem;background:#ffffff0d;border:1px solid var(--glass-border);border-radius:var(--radius-sm);padding:.2rem}._segmented_1fq55_131 button{flex:1 1 0;min-width:0;background:transparent;border:none;border-radius:calc(var(--radius-sm) - 2px);color:var(--text-secondary);font-size:.72rem;font-weight:700;text-transform:capitalize;padding:.3rem .25rem;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:.3rem;white-space:nowrap}._segmented_1fq55_131 button:hover{color:var(--text-primary)}._segmented_1fq55_131 button[aria-pressed=true]{background:color-mix(in srgb,var(--accent) 25%,transparent);color:var(--accent-light)}@media(pointer:coarse){._row_1fq55_1{gap:.4rem;padding:.6rem .85rem .7rem}._slider_1fq55_36{height:1.875rem}._slider_1fq55_36::-webkit-slider-thumb{width:16px;height:16px;margin-top:-6px}._slider_1fq55_36::-moz-range-thumb{width:14px;height:14px}._swatch_1fq55_99{width:1.5rem;height:1.5rem}._segmented_1fq55_131 button{padding:.5rem .25rem;min-height:2.5rem}}
|
package/client/dist/index.html
CHANGED
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
background-color: #0c0d12;
|
|
34
34
|
}
|
|
35
35
|
</style>
|
|
36
|
-
<script type="module" crossorigin src="/assets/index-
|
|
36
|
+
<script type="module" crossorigin src="/assets/index-CATULjSz.js"></script>
|
|
37
37
|
<link rel="modulepreload" crossorigin href="/assets/vendor-core-DfaOB3Rn.js">
|
|
38
38
|
<link rel="modulepreload" crossorigin href="/assets/vendor-query-BBT5_sHx.js">
|
|
39
39
|
<link rel="modulepreload" crossorigin href="/assets/vendor-icons-DrybRNxP.js">
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@serifpersia/dango",
|
|
3
|
-
"version": "3.9.
|
|
3
|
+
"version": "3.9.4",
|
|
4
4
|
"description": "A web application for watching anime.",
|
|
5
5
|
"main": "orchestrator.js",
|
|
6
6
|
"repository": {
|
|
@@ -69,5 +69,5 @@
|
|
|
69
69
|
"allowScripts": {
|
|
70
70
|
"esbuild@0.28.2": true
|
|
71
71
|
},
|
|
72
|
-
"versionDate": "2026-11-
|
|
72
|
+
"versionDate": "2026-11-03T23:39:40.300Z"
|
|
73
73
|
}
|
package/server/package.json
CHANGED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/PlayerSettings-9iBVbWNR.js","assets/vendor-core-DfaOB3Rn.js","assets/index-BYGDqzEf.js","assets/vendor-query-BBT5_sHx.js","assets/vendor-icons-DrybRNxP.js","assets/index-TGvIXMUj.css","assets/OptionListMenu-HllK8Z_u.js","assets/useWatchAlongPlayer-DpUPA4jD.js","assets/PlayerProvider-DGtOX3e2.js","assets/PlayerProvider-ZeplRma-.css","assets/playbackCompletion-DrDOXJXe.js","assets/useWatchAlongPlayer-D1o2zDEn.css","assets/PlayerSettings-CbGkvNJq.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{u as t,g as bt,h as U,P as Cr,z as Rr,d as re,A as R,q as Q,y as Mr,T as Ne,o as Nr,a as Pr,c as _r,_ as Ar,S as st}from"./vendor-core-DfaOB3Rn.js";import{p as X,a2 as zt,a3 as ot,o as xr,q as ae,t as ve,J as we,a4 as Lr,a5 as Ze,Q as St,a6 as Br,e as Dr,x as $r,y as Fr,z as Ir,A as Wr,d as Or,u as Ur,B as Re,h as Vt,a7 as Vr,a8 as Qr,f as Kr}from"./index-BYGDqzEf.js";import{P as qr,a as Gr,b as zr,F as Hr,s as jr,c as Yr}from"./PlayerProvider-DGtOX3e2.js";import{u as Ht,b as Qt,a as yt}from"./vendor-query-BBT5_sHx.js";import{p as Pt,s as Xr,C as Jr,a as Zr,P as en,b as Ge,c as Kt,f as jt,d as tn,e as rn,g as nn,r as sn,u as on,h as an,i as ln,j as cn,k as un,l as dn,m as mn,n as pn,o as Me,A as hn,q as qt,R as fn,E as vn,t as gn,v as g,w as yn,x as bn,y as Sn}from"./useWatchAlongPlayer-DpUPA4jD.js";import{I as fe}from"./vendor-icons-DrybRNxP.js";import{a as En,i as at,b as Yt,l as wn,c as kn}from"./playbackCompletion-DrDOXJXe.js";import{M as Tn}from"./MatureConsentModal-BhpY2wdn.js";import{u as Cn}from"./useIsMobile-Dvx1uJ82.js";import{s as Ae,Q as Rn}from"./QueueRail-De3oifUM.js";import{u as Mn,Q as Nn}from"./QueueOptionsButton-C3ptca9g.js";import{u as Xt}from"./useProviders-Dk2T31ho.js";import{A as Pn}from"./AnimeMetaDetails-B3-A7O5H.js";import{S as _n}from"./SynopsisText-B3Sa5pRv.js";import{W as An}from"./WatchAlongPanel-CxkbtjKg.js";import"./vendor-ui-3qrARCPr.js";const xn="_controlsOverlay_6uapd_1",Ln="_hidden_6uapd_21",Bn="_topControls_6uapd_27",Dn="_backBtn_6uapd_47",$n="_videoTitleInfo_6uapd_67",Fn="_animeTitle_6uapd_73",In="_episodeNumber_6uapd_83",Wn="_bottomControls_6uapd_91",On="_progressBarContainer_6uapd_110",Un="_progressBar_6uapd_110",Vn="_thumb_6uapd_129",Qn="_scrubbing_6uapd_144",Kn="_watchedBar_6uapd_148",qn="_bufferedBar_6uapd_149",Gn="_timeBubble_6uapd_191",zn="_skipSegment_6uapd_225",Hn="_op_6uapd_235",jn="_mixed_op_6uapd_236",Yn="_ed_6uapd_240",Xn="_mixed_ed_6uapd_241",Jn="_recap_6uapd_245",Zn="_mixed_recap_6uapd_246",es="_bottomControlsRow_6uapd_250",ts="_leftControls_6uapd_258",rs="_rightControls_6uapd_259",ns="_controlBtn_6uapd_266",ss="_theaterBtn_6uapd_307",os="_nextEpisodeBtn_6uapd_311",is="_active_6uapd_332",as="_timeDisplay_6uapd_336",ls="_skipControls_6uapd_344",L={controlsOverlay:xn,hidden:Ln,topControls:Bn,backBtn:Dn,videoTitleInfo:$n,animeTitle:Fn,episodeNumber:In,bottomControls:Wn,progressBarContainer:On,progressBar:Un,thumb:Vn,scrubbing:Qn,watchedBar:Kn,bufferedBar:qn,timeBubble:Gn,skipSegment:zn,op:Hn,mixed_op:jn,ed:Yn,mixed_ed:Xn,recap:Jn,mixed_recap:Zn,bottomControlsRow:es,leftControls:ts,rightControls:rs,controlBtn:ns,theaterBtn:ss,nextEpisodeBtn:os,active:is,timeDisplay:as,skipControls:ls},cs=({player:r,handlers:o,visible:u,skipIntervals:m,showNextEpisodeButton:T,onNextEpisode:i,isTheaterMode:s,onTheaterModeToggle:n,settingsBtnRef:a,timeDisplayRef:y})=>{const{state:p,actions:h}=r,{showSettings:b}=p;return t("div",{className:`${L.controlsOverlay} ${u?"":L.hidden} `,"data-speed-boost-ignore":"true",style:{pointerEvents:"none",background:"none",justifyContent:"flex-end"},children:t("div",{className:L.bottomControls,"data-speed-boost-ignore":"true",onClick:C=>C.stopPropagation(),children:[t(qr,{classes:{container:L.progressBarContainer,scrubbing:L.scrubbing,timeBubble:L.timeBubble,bar:L.progressBar,buffered:L.bufferedBar,watched:L.watchedBar,thumb:L.thumb},timeLabelRef:y,children:[p.duration>0&&r.state.currentSkipInterval&&t("div",{className:`${L.skipSegment} ${L[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(C=>{const e=C.start_time/p.duration*100,E=(C.end_time-C.start_time)/p.duration*100;return t("div",{className:`${L.skipSegment} ${L[C.skip_type]} `,style:{left:`${e}% `,width:`${E}% `},title:C.skip_type.toUpperCase()},C.skip_id)})]}),t("div",{className:L.bottomControlsRow,children:[t("div",{className:L.leftControls,children:[t(Gr,{className:L.controlBtn}),t(zr,{buttonClassName:L.controlBtn,onExpandedChange:h.setShowVolumeSlider}),t("span",{className:L.timeDisplay,ref:y,children:[h.formatTime(0)," / ",h.formatTime(p.duration)]}),p.currentSkipInterval&&!p.isAutoSkipEnabled&&!p.playbackLocked&&t("button",{className:L.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:L.rightControls,children:[t("div",{className:L.skipControls,children:T&&t("button",{className:L.nextEpisodeBtn,onClick:i,title:"Play next episode",children:"Next EP"})}),t("button",{className:`${L.controlBtn} ${o.isSubtitleActive?L.active:""}`,onClick:o.handleCCToggle,title:o.isSubtitleActive?"Disable Subtitles":"Enable Subtitles","aria-label":"Toggle Subtitles",children:t(fe,{name:"closed-captioning",size:22})}),t("button",{ref:a,className:`${L.controlBtn} ${b?L.active:""} `,onClick:()=>h.setShowSettings(!b),"aria-label":"Settings",children:t(fe,{name:"cog"})}),t("button",{className:`${L.controlBtn} ${L.theaterBtn} ${s?L.active:""} `,onClick:C=>{C.stopPropagation(),n()},title:s?"Exit Theater Mode":"Theater Mode","aria-label":s?"Exit Theater Mode":"Theater Mode",children:t(fe,{name:"tv"})}),t(Hr,{className:L.controlBtn})]})]})]})})};function us(r){const{state:o,refs:u,actions:m}=r,T=n=>{if(!u.videoRef.current)return;m.setActiveSubtitleTrack(n);try{if(n===null||n==="off")X.setItem("playerSubtitlesEnabled","false");else{X.setItem("playerSubtitlesEnabled","true");const y=o.availableSubtitles.find(p=>p.label===n||p.lang===n);y?X.setItem("playerLastSubtitle",Xr(y)):X.setItem("playerLastSubtitle",n)}}catch{}let a=!1;Array.from(u.videoRef.current.textTracks).forEach(y=>{const h=n!==null&&n!=="off"&&(y.language===n||y.label===n)&&!a;y.mode=h?"showing":"hidden",h&&(a=!0)})},i=o.activeSubtitleTrack!==null&&o.activeSubtitleTrack!=="off";return{handleSubtitleSelection:T,isSubtitleActive:i,handleCCToggle:()=>{if(!u.videoRef.current)return;if(i){T("off");return}if(o.availableSubtitles.length===0)return;let n=null;try{n=X.getItem("playerLastSubtitle")}catch{}const a=Pt(o.availableSubtitles,{lastKey:n,enabled:!0});if(a<0)return;const y=o.availableSubtitles[a];T(y.label||y.lang)}}}const ds=Rr(()=>zt(()=>import("./PlayerSettings-9iBVbWNR.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12]))),ms=({player:r,isAutoplayEnabled:o,onAutoplayChange:u,showNextEpisodeButton:m,onNextEpisode:T,videoSources:i,selectedSource:s,selectedLink:n,onSourceChange:a,loadingVideo:y,skipIntervals:p,animeTitle:h,episodeNumber:b,mode:C,isTheaterMode:e,onTheaterModeToggle:E,anime4kEnabled:k,onAnime4kToggle:M,anime4kSupported:A,anime4kProfile:v,onAnime4kProfileChange:d,anime4kInitializing:N,anime4kError:x,videoDelayEnabled:W,onVideoDelayToggle:H,videoDelayMs:K,onVideoDelayChange:G,onCalibrateAvSync:f,fallbackChoice:S,onFallbackChoiceChange:O,ambientSettings:j,onAmbientChange:V,children:B,overlays:Y,isInteractingExtra:P=!1,className:z,hideChrome:te=!1})=>{const{state:$,actions:be}=r,{showSettings:q}=$,{setShowSettings:l}=be,w=us(r),_=bt.useRef(null),D=bt.useRef(null),ue=bt.useRef(null);U(()=>{const pe=De=>{_.current&&!_.current.contains(De.target)&&D.current&&!D.current.contains(De.target)&&q&&l(!1)};return q&&document.addEventListener("mousedown",pe),()=>{document.removeEventListener("mousedown",pe)}},[q,l]);const ie=$.showControls||q||$.isScrubbing,J=$.activeSubtitleTrack!=="off"?$.availableSubtitles.find(pe=>pe.lang===$.activeSubtitleTrack||pe.label===$.activeSubtitleTrack):void 0,Pe=t(Jr,{visible:ie,title:h,episode:b?`Episode ${b}`:void 0,mode:C,server:y?void 0:s?.sourceName,subtitles:y?void 0:J?.label||J?.lang,onBack:()=>window.history.back(),classes:{overlay:L.controlsOverlay,hidden:L.hidden,top:L.topControls,backBtn:L.backBtn,titleInfo:L.videoTitleInfo,title:L.animeTitle,episode:L.episodeNumber}}),me=!y&&!$.isBuffering&&$.duration>0?t(Zr,{}):null,ne=t(cs,{player:r,handlers:w,visible:ie,skipIntervals:p,showNextEpisodeButton:m,onNextEpisode:T,isTheaterMode:e,onTheaterModeToggle:E,settingsBtnRef:D,timeDisplayRef:ue}),le=t(Cr,{fallback:null,children:t(ds,{ref:_,isOpen:q,onClose:()=>l(!1),videoSources:i,currentSource:s,currentLink:n,onSourceChange:a,subtitles:$.availableSubtitles,activeSubtitleTrack:$.activeSubtitleTrack,onSubtitleChange:w.handleSubtitleSelection,subtitleSettings:{fontSize:$.subtitleFontSize,position:$.subtitlePosition,bgOpacity:$.subtitleBgOpacity,bgColor:$.subtitleBgColor,textColor:$.subtitleTextColor,edge:$.subtitleEdge,bold:$.subtitleBold},onSubtitleSettingsChange:be.setSubtitleStyle,useNativeControls:!$.playbackLocked&&$.useNativeControls,onNativeControlsToggle:be.setUseNativeControls,anime4kEnabled:k,onAnime4kToggle:M,anime4kSupported:A,anime4kProfile:v,onAnime4kProfileChange:d,anime4kInitializing:N,anime4kError:x,videoDelayEnabled:W,onVideoDelayToggle:H,videoDelayMs:K,onVideoDelayChange:G,onCalibrateAvSync:f,isAutoSkipEnabled:$.isAutoSkipEnabled,onAutoSkipChange:pe=>{be.setIsAutoSkipEnabled(pe);try{X.setItem("autoSkipEnabled",pe.toString())}catch{}},isAutoplayEnabled:o,onAutoplayChange:u,fallbackChoice:S,onFallbackChoiceChange:O,isTheaterMode:e,ambientSettings:j,onAmbientChange:V})}),_e=q?t("div",{"data-speed-boost-ignore":"true",onClick:pe=>pe.stopPropagation(),children:le}):null;return t(en,{engine:r.engine,topBar:Pe,centerControls:me,bottomBar:!y&&$.duration>0?ne:null,settingsPanel:_e,overlays:Y,isInteracting:P||$.showSettings||$.showVolumeSlider,nativeControls:!$.playbackLocked&&$.useNativeControls,className:z,chromeDisabled:te,children:B})},ps=({count:r=3})=>t("section",{className:Ae.section,children:[t("div",{className:Ae.header,children:t("button",{className:Ae.headerToggle,disabled:!0,children:[t("span",{className:Ae.title,children:t(ot,{width:"60px",height:"1.2rem",variant:"text"})}),t(fe,{name:"chevron-down",style:{opacity:.3}})]})}),t("div",{className:Ae.list,children:Array.from({length:r}).map((o,u)=>t("div",{className:Ae.item,style:{pointerEvents:"none"},children:[t("div",{className:Ae.dragHandle,style:{opacity:.2},children:t(ot,{width:"16px",height:"16px",variant:"rectangular"})}),t("div",{className:Ae.thumbnail,style:{overflow:"hidden",background:"transparent"},children:t(ot,{width:"100%",height:"100%",variant:"rectangular"})}),t("div",{className:Ae.meta,children:[t(ot,{width:"80%",height:"1.2rem",variant:"text",className:Ae.metaGap}),t(ot,{width:"40%",height:"0.8rem",variant:"rectangular",style:{borderRadius:"var(--radius-sm)"}})]})]},u))})]}),hs={soft:"Softsub",hard:"Hardsub",mixed:"Mixed"},fs={direct:"Direct",embed:"Embed",cookie:"Needs cookie"},vs=["direct","cookie","embed"],gs=({selectedProvider:r,onProviderChange:o,isAdult:u,options:m})=>{const i=(m&&m.length>0?m:[]).filter(s=>s.mature===(u===!0));return t("div",{className:Ge.providerSelectContainer,children:[t("h4",{children:"Provider"}),t("select",{className:Ge.providerSelect,value:r,onChange:s=>o(s.currentTarget.value),children:vs.map(s=>{const n=i.filter(a=>(a.tier??"direct")===s);return n.length===0?null:t("optgroup",{label:fs[s],children:n.map(a=>t("option",{value:a.id,children:a.sub?`${a.label} (${hs[a.sub]})`:a.label},a.id))},s)})})]})},ys=({videoSources:r,selectedSource:o,selectedLink:u,onSourceChange:m,onLinkChange:T})=>{const i=Array.isArray(r)?r:[];if(i.length===0)return null;const s=o?.type==="iframe"&&(o.links?.length??0)>1;return t("div",{className:Ge.sourceSelectionContainer,children:[t("h4",{children:"Source"}),t("div",{className:Ge.sourceButtons,children:i.map((n,a)=>t("button",{className:`${Ge.sourceButton} ${o?.sourceName===n.sourceName?Ge.active:""} `,onClick:()=>m(n),children:n.sourceName},`${n.sourceName}-${a}`))}),s&&t("select",{className:Ge.sourceSelect,"aria-label":"Fallback embed quality",value:u?.link??o.links[0]?.link??"",onChange:n=>{const a=o.links.find(y=>y.link===n.currentTarget.value);a&&T(a)},children:o.links.map(n=>t("option",{value:n.link,children:n.resolutionStr},n.link))})]})},bs=bt.memo(ys,(r,o)=>r.selectedSource?.sourceName===o.selectedSource?.sourceName&&r.selectedLink?.link===o.selectedLink?.link&&r.videoSources===o.videoSources),Ss={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}},Es={low:"ModeB",balanced:"ModeA",high:"ModeAA",denoise:"ModeC"},ws=5,ks=15e3,Ts=`
|
|
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 Cs({videoRef:r,canvasRef:o,profile:u="balanced",delayMs:m=0}){const[T,i]=re(!1),[s,n]=re(()=>{try{return X.getItem("anime4kEnabled")==="true"}catch{return!1}}),[a,y]=re(!1),[p,h]=re(null),[b,C]=re(0),e=R(0),E=R(null),k=R(null),M=R(null),A=R(null),v=R(null),d=R(null),N=R(null),x=R(null),W=R(null),H=R(!1),K=R(-1),G=R(0),f=R(m);f.current=m;const S=R([]),O=R(!1),j=R(!1),V=R(!1),B=R(null),Y=R(-1),P=R(-1),z=R(!1),te=R(0);U(()=>{async function q(){if(typeof navigator>"u"||!navigator.gpu){i(!1);return}try{const l=await navigator.gpu.requestAdapter();i(!!l)}catch{i(!1)}}q()},[]),U(()=>{if(!s||!T)return;let q=!1;const l=++e.current,w=J=>{if(J)try{J.close()}catch{}},_=()=>{for(const J of S.current)w(J.bitmap);S.current=[]},D=J=>Math.max(8,Math.min(40,Math.ceil(J/16.7)+4));function ue(){W.current!==null&&(cancelAnimationFrame(W.current),W.current=null)}async function ie(){let J=r.current;const Pe=o.current;if(!J||!Pe||e.current!==l)return;const me=performance.now()+ks;for(;(!J||J.videoWidth===0)&&performance.now()<me;){if(await new Promise(ge=>requestAnimationFrame(ge)),q||e.current!==l)return;J=r.current}if(!J||J.videoWidth===0){!q&&e.current===l&&(h("Timed out waiting for video metadata"),y(!1),n(!1));return}const ne=J.videoWidth,le=J.videoHeight,_e=Math.max(ne,le),pe=window.innerWidth,De=window.innerHeight,et=Math.max(pe,De),tt=_e<et?et/_e:1,$e=Ss[u],lt=_e<=480?$e.sd:_e<=720?$e.hd:_e<=1080?$e.fhd:1,ze=Math.min(lt,tt);Pe.width=Math.round(ne*ze),Pe.height=Math.round(le*ze),y(!0),h(null),G.current=0,K.current=-1,Y.current=-1,P.current=-1,z.current=!1,te.current=0,_(),H.current=!1;try{let ge=function(){q||e.current!==l||(ue(),W.current=requestAnimationFrame(()=>{kt()}))};const{ModeA:He,ModeB:Et,ModeC:ct,ModeAA:ut}=await zt(async()=>{const{ModeA:I,ModeB:de,ModeC:ke,ModeAA:se}=await import("./index-BOKlZEHq.js").then(he=>he.i);return{ModeA:I,ModeB:de,ModeC:ke,ModeAA:se}},[]);if(q||e.current!==l)return;if(!navigator.gpu)throw new Error("WebGPU not available");const xe=await navigator.gpu.requestAdapter();if(q||e.current!==l)return;if(!xe)throw new Error("No GPU adapter found");const F=await xe.requestDevice();if(!F)throw new Error("Failed to get GPU device");if(q||e.current!==l){F.destroy();return}E.current=F;const Fe=Pe.getContext("webgpu");if(!Fe)throw new Error("Failed to get WebGPU context");k.current=Fe;const rt=navigator.gpu.getPreferredCanvasFormat();Fe.configure({device:F,format:rt,alphaMode:"premultiplied"});const Z=F.createTexture({size:[ne,le],format:"rgba16float",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),Ue=Es[u],Ve=Math.round(ne*ze),Ie=Math.round(le*ze),je=(()=>{switch(Ue){case"ModeB":return new Et({device:F,inputTexture:Z,nativeDimensions:{width:ne,height:le},targetDimensions:{width:Ve,height:Ie}});case"ModeC":return new ct({device:F,inputTexture:Z,nativeDimensions:{width:ne,height:le},targetDimensions:{width:Ve,height:Ie}});case"ModeAA":return new ut({device:F,inputTexture:Z,nativeDimensions:{width:ne,height:le},targetDimensions:{width:Ve,height:Ie}});default:return new He({device:F,inputTexture:Z,nativeDimensions:{width:ne,height:le},targetDimensions:{width:Ve,height:Ie}})}})(),Ye=je.getOutputTexture(),Xe=F.createSampler({magFilter:"linear",minFilter:"linear"}),dt=F.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
|
-
`}),Le=F.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),mt=F.createRenderPipeline({layout:F.createPipelineLayout({bindGroupLayouts:[Le]}),vertex:{module:dt,entryPoint:"vs"},fragment:{module:dt,entryPoint:"fs",targets:[{format:rt}]},primitive:{topology:"triangle-list"}}),pt=F.createBindGroup({layout:Le,entries:[{binding:0,resource:Ye.createView()},{binding:1,resource:Xe}]});try{const I=F.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,externalTexture:{}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),de=F.createShaderModule({code:Ts}),ke=F.createRenderPipeline({layout:F.createPipelineLayout({bindGroupLayouts:[I]}),vertex:{module:de,entryPoint:"vs"},fragment:{module:de,entryPoint:"fs",targets:[{format:"rgba16float"}]},primitive:{topology:"triangle-list"}});B.current={pipeline:ke,layout:I,inputView:Z.createView()}}catch{B.current=null}M.current=je,A.current=Z,v.current=Ye,d.current=mt,N.current=Xe,x.current=Le,j.current=!1,V.current=!1;async function wt(){const I=B.current;if(!I||j.current)return!1;const de=r.current;if(!de)return!1;const ke=!V.current;ke&&F.pushErrorScope("validation");try{const se=F.importExternalTexture({source:de}),he=F.createBindGroup({layout:I.layout,entries:[{binding:0,resource:se},{binding:1,resource:Xe}]}),oe=F.createCommandEncoder(),Te=oe.beginRenderPass({colorAttachments:[{view:I.inputView,loadOp:"load",storeOp:"store"}]});Te.setPipeline(I.pipeline),Te.setBindGroup(0,he),Te.draw(6),Te.end(),F.queue.submit([oe.finish()])}catch{return j.current=!0,B.current=null,!1}if(ke){const se=await F.popErrorScope().catch(()=>null);if(se)return console.warn("[anime4k] blit probe failed:",se.message),j.current=!0,B.current=null,!1;V.current=!0}return!0}y(!1);async function kt(){if(q||e.current!==l||!Fe)return;const I=r.current;if(!I||I.videoWidth===0){ge();return}if(I!==J||I.videoWidth!==ne||I.videoHeight!==le){C(he=>he+1);return}if(I.paused||I.ended||document.hidden||I.readyState<HTMLMediaElement.HAVE_CURRENT_DATA){ge();return}const de=I.getVideoPlaybackQuality().totalVideoFrames;if(de===P.current){ge();return}if(H.current){ge();return}const ke=I.currentTime;(I.seeking||Y.current>=0&&Math.abs(ke-Y.current)>.5)&&(_(),z.current=!1,te.current=0,P.current=-1),Y.current=ke;const se=Math.max(0,f.current||0);se>te.current&&(z.current=!1),H.current=!0;try{const he=performance.now();let oe=null,Te=!1;if(se<=0){S.current.length>0&&_(),z.current=!1,te.current=0;let Ee=!1;if(!O.current)try{F.queue.copyExternalImageToTexture({source:I},{texture:Z},[ne,le]),P.current=de,Ee=!0}catch(ce){if(ce instanceof TypeError)O.current=!0;else throw ce}if(!Ee&&!j.current&&B.current&&await wt()&&(P.current=de,Ee=!0),!Ee){const ce=await createImageBitmap(I);P.current=de,F.queue.copyExternalImageToTexture({source:ce},{texture:Z},[ne,le]),w(ce)}}else{const Ee=await createImageBitmap(I);P.current=de;const ce=S.current;ce.push({bitmap:Ee,capture:he});const ht=D(se);for(;ce.length>ht;)w(ce.shift()?.bitmap);let Je=-1;for(let ye=ce.length-1;ye>=0;ye--)if(he-ce[ye].capture>=se){Je=ye;break}if(Je!==-1){for(let Qe=0;Qe<Je;Qe++)w(ce.shift()?.bitmap);const ye=ce.shift();ye?(oe=ye.bitmap,z.current=!0,te.current=se):(oe=Ee,Te=!0)}else if(!z.current)oe=Ee,Te=!0;else{const ye=ce.shift();oe=ye?ye.bitmap:Ee,ye||(Te=!0)}if(!oe){H.current=!1,ge();return}F.queue.copyExternalImageToTexture({source:oe},{texture:Z},[ne,le]),Te||w(oe)}const nt=F.createCommandEncoder();await je.pass(nt);const Se=nt.beginRenderPass({colorAttachments:[{view:Fe.getCurrentTexture().createView(),clearValue:{r:0,g:0,b:0,a:1},loadOp:"clear",storeOp:"store"}]});Se.setPipeline(mt),Se.setBindGroup(0,pt),Se.draw(6),Se.end(),F.queue.submit([nt.finish()]),K.current=de,G.current=0,F.queue.onSubmittedWorkDone().then(()=>{e.current===l&&(H.current=!1)})}catch(he){if(H.current=!1,G.current+=1,G.current>=ws&&!q&&e.current===l){console.error(he),h(he instanceof Error?he.message:"Render error"),n(!1);return}}ge()}ge()}catch(ge){!q&&e.current===l&&(k.current?.unconfigure(),E.current?.destroy(),E.current=null,k.current=null,h(ge instanceof Error?ge.message:"Failed to initialize upscaler"),y(!1),n(!1))}}return ie(),()=>{q=!0,e.current+=1,ue(),_(),k.current?.unconfigure(),A.current&&(A.current.destroy(),A.current=null),v.current&&(v.current.destroy(),v.current=null),E.current&&(E.current.destroy(),E.current=null),M.current=null,d.current=null,N.current=null,x.current=null,B.current=null,k.current=null,H.current=!1}},[s,T,r,o,u,b]);const $=Q(q=>{n(q);try{X.setItem("anime4kEnabled",String(q))}catch{}},[]),be=Q(()=>{n(q=>{const l=!q;try{X.setItem("anime4kEnabled",String(l))}catch{}return l})},[]);return{isWebGPUSupported:T,isEnabled:s,isInitializing:a,error:p,toggle:be,setEnabled:$}}function Rs({videoRef:r,episodeKey:o,isEnabled:u,isSupported:m,mediaReady:T,isIframeSource:i,setEnabled:s}){const n=R(null),a=R(!1),y=R(!1),p=R(s);p.current=s,U(()=>{const h=n.current;n.current=o,!(h===null||h===o)&&(!u||!m||(a.current=!0,y.current=!1,p.current(!1)))},[o,u,m]),U(()=>{if(!a.current)return;if(u){y.current&&(a.current=!1);return}if(y.current=!0,!T)return;if(i){a.current=!1,p.current(!0);return}const h=r.current;if(!h)return;let b,C=!1;const e=()=>{C||(C=!0,a.current=!1,p.current(!0))};if(h.readyState>=2)return b=window.setTimeout(e,500),()=>window.clearTimeout(b);const E=()=>{window.setTimeout(e,500)};return h.addEventListener("canplay",E,{once:!0}),h.addEventListener("playing",E,{once:!0}),b=window.setTimeout(e,5e3),()=>{window.clearTimeout(b),h.removeEventListener("canplay",E),h.removeEventListener("playing",E)}},[u,T,i,r])}const Ms=()=>X.getItem("preferredMode")==="dub"?"dub":"sub",Ns=/^[a-z0-9-]+$/i,Jt=r=>r?"preferredProviderMature":"preferredProvider",Zt=r=>{const o=X.getItem(Jt(r));return o&&Ns.test(o)?o:null},er=(r,o)=>{X.setItem(Jt(o),r)},Ps=()=>Zt(!1)??"megaplay",_s=()=>({showMeta:{},episodes:[],watchedEpisodes:[],watchlistStatus:null,showCombinedDetails:!1,currentMode:Ms(),inWatchlist:!1,videoSources:[],selectedSource:null,selectedLink:null,isAutoplayEnabled:En(),showResumeModal:!0,resumeProgressPending:!0,resumeTime:0,resumeDuration:0,skipIntervals:[],selectedProvider:Ps(),loadingShowData:!0,loadingVideo:!1,error:null,showCookieModal:!1,cookieProvider:null});function As(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 Gt(r,o,u,m,T=!1){if(!r||!o)throw new Error("Missing params");try{const[i,s,n,a]=await Promise.all([ve.data.video.query({showId:r,episodeNumber:o,mode:u.currentMode,provider:u.selectedProvider}).catch(v=>{const d=v.data?.cause;return v.message==="AUTH_REQUIRED"&&d?.provider==="mkissa"&&m({type:"SET_STATE",payload:{showCookieModal:!0,cookieProvider:"mkissa"}}),null}),ve.progress.getEpisode.query({showId:r,episodeNumber:o}).catch(()=>null),ve.settings.getByKey.query({key:"preferredSource"}).catch(()=>null),ve.data.skipTimes.query({showId:r,episodeNumber:o}).catch(()=>[])]),y=n?.value,p=i?.filter(v=>{const d=v.sourceName.toLowerCase();return u.currentMode==="dub"?d.includes("eng")||d.includes("dub"):d.includes("jpn")||d.includes("sub")||!d.includes("eng")&&!d.includes("dub")})??[],h=p.length>0?p:i??[];let b=h.length>0?h[0]:null;if(y){const v=h.find(d=>d.sourceName===y);v&&(b=v)}const C=b&&b.links.length>0?[...b.links].sort((v,d)=>(parseInt(d.resolutionStr)||0)-(parseInt(v.resolutionStr)||0))[0]:null,e=s?.currentTime||0,E=s?.duration||0,k=e,A=(Array.isArray(a)?a:a?.results||[]).map(v=>({skip_id:v.skip_id||"",skip_type:v.skip_type||"",start_time:v.interval?.start_time??v.start_time??0,end_time:v.interval?.end_time??v.end_time??0})).filter(v=>v.end_time>0);return(!i||i.length===0)&&(T||we.error(`No video sources found for ${u.selectedProvider}`)),{videoSources:i,selectedSource:b,selectedLink:C,resumeTime:k,resumeDuration:E,showResumeModal:k>5&&!at(k,E)&&b?.type!=="iframe",skipIntervals:A,fetchedEpisodeNumber:o}}catch(i){const s=i;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 i}}const xs=(r,o,u,m)=>{const[T,i]=Mr(As,u,l=>({..._s(),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=Ne(()=>s?{...T,selectedProvider:s.provider,currentMode:s.mode}:T,[T,s]),a=Ht(),y=xr(),p=R(null),h=R(null),{options:b}=Xt(),C=Ne(()=>b.filter(l=>(l.kind??"anime")==="anime"),[b]),e=o||n.initialEpisode,E=`${r}:${e}`,k=R(E);U(()=>{k.current!==E&&(k.current=E,i({type:"SET_STATE",payload:{selectedSource:null,selectedLink:null}}))},[E,i]),U(()=>{!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,i({type:"SET_PROVIDER",payload:"animepahe"}))},[r,n.selectedProvider,s]);const{data:M,isLoading:A,error:v}=Mn(r),{data:d}=Qt({queryKey:[ae.playerData,r,n.currentMode,n.selectedProvider],queryFn:async()=>{if(!r)throw new Error("No showId");const l=async()=>{try{const ie=await ve.data.episodes.query({showId:r,mode:n.currentMode,provider:n.selectedProvider}).catch(()=>null);if(ie?.episodes?.length)return ie}catch{}return null},[w,_,D]=await Promise.all([l(),ve.watchlist.check.query({showId:r}).catch(()=>({inWatchlist:!1,status:null})),ve.progress.getWatchedEpisodes.query({showId:r}).catch(()=>[])]),ue=w?.episodes?w.episodes.sort((ie,J)=>parseFloat(ie)-parseFloat(J)):[];return{description:w?.description||"",episodes:ue,inWatchlist:_.inWatchlist,watchlistStatus:_.status??null,watchedEpisodes:D}},enabled:!!r});U(()=>{!o&&d?.episodes&&d.episodes.length>0&&!o&&i({type:"SET_STATE",payload:{initialEpisode:d.episodes[0]}})},[d,o]),U(()=>{if(s||M?.isAdult===void 0||h.current===r)return;const l=M.isAdult===!0,w=C.filter(D=>D.mature===l);if(w.length===0||C.find(D=>D.id===n.selectedProvider)?.mature===l)return;const _=Zt(l);h.current=r??null,i({type:"SET_PROVIDER",payload:w.find(D=>D.id===_)?.id??w[0].id})},[M?.isAdult,n.selectedProvider,r,C,s]),U(()=>{if(s||!r||!/^dango-mt-\d+$/.test(r)||h.current===`temp:${r}`)return;const l=M?.provider;l&&(h.current=`temp:${r}`,l!==n.selectedProvider&&i({type:"SET_PROVIDER",payload:l}))},[r,M,n.selectedProvider,s]);const{data:N,isLoading:x,isFetching:W,error:H}=Qt({queryKey:[ae.videoSources,r,e,n.selectedProvider,n.currentMode],queryFn:()=>Gt(r,e,n,i),enabled:!!r&&!!e&&!(n.showMeta?.isAdult===!0&&!m?.hasMatureConsent)}),{mutateAsync:K}=yt({mutationFn:async({wasIn:l,showMeta:w})=>{if(!r)throw new Error("Missing showId");if(l)await ve.watchlist.remove.mutate({id:r});else{const _=w.name||w.names?.romaji;if(!_)throw new Error("Missing show name");await ve.watchlist.add.mutate({id:r,name:_,thumbnail:w.thumbnail,nativeName:w.names?.native,englishName:w.names?.english,type:w.type,isAdult:w.isAdult})}return!l},onSuccess:l=>{we.success(l?"Added to watchlist":"Removed from watchlist"),a.invalidateQueries({queryKey:[ae.playerData,r]}),a.invalidateQueries({queryKey:[ae.showData,r]}),a.invalidateQueries({queryKey:[ae.watchlist]})},onError:l=>we.error(l instanceof Error?l.message:"Failed to update watchlist")}),G=Q(async()=>{!r||!M||await K({wasIn:!!d?.inWatchlist,showMeta:M})},[r,M,d?.inWatchlist,K]),f=Q(async l=>{try{await ve.settings.set.mutate({key:"preferredSource",value:l})}catch(w){console.error(w)}},[]),{mutateAsync:S,isPending:O}=yt({mutationFn:async({status:l})=>{if(!r)throw new Error("Missing showId");if(d?.inWatchlist)return await ve.watchlist.setStatus.mutate({id:r,status:l}),l;const w=M,_=w?.name||w?.names?.romaji;if(!w||!_)throw new Error("Missing show name");return await ve.watchlist.add.mutate({id:r,name:_,thumbnail:w.thumbnail,nativeName:w.names?.native,englishName:w.names?.english,type:w.type,isAdult:w.isAdult,status:l}),l},onSuccess:l=>{i({type:"SET_STATE",payload:{inWatchlist:!0,watchlistStatus:l}}),we.success(`Moved to ${l}`),a.invalidateQueries({queryKey:[ae.showData,r]}),a.invalidateQueries({queryKey:[ae.watchlist]}),a.invalidateQueries({queryKey:[ae.continueWatching]})},onError:()=>we.error("Failed to update watchlist status")}),j=Q(async()=>{await S({status:"Completed"})},[S]),{mutateAsync:V,isPending:B}=yt({mutationFn:async({episodeNumber:l,duration:w,showMeta:_,episodes:D})=>{await ve.progress.updateProgress.mutate({showId:r??"",episodeNumber:l,currentTime:w,duration:w,showName:_.name,showThumbnail:_.thumbnail,nativeName:_.names?.native,englishName:_.names?.english,genres:_.genres?.map(ue=>ue.name),popularityScore:Lr(_.score)??void 0,type:_.type,status:_.status,episodeCount:D.length,isAdult:_.isAdult})},onSuccess:(l,w)=>{we.success(`Episode ${w.episodeNumber} marked as watched`),a.invalidateQueries({queryKey:[ae.playerData,r]}),a.invalidateQueries({queryKey:[ae.showMeta,r]}),a.invalidateQueries({queryKey:[ae.videoSources,r,w.episodeNumber]}),a.invalidateQueries({queryKey:[ae.continueWatching]}),a.invalidateQueries({queryKey:[ae.thisWeekSchedule]}),a.invalidateQueries(y.continueWatching.pathFilter())},onError:()=>we.error("Failed to mark episode as watched")}),Y=Q(async(l,w)=>{!r||!M||await V({episodeNumber:l,duration:w,showMeta:M,episodes:d?.episodes||[]})},[r,M,d?.episodes,V]),{mutateAsync:P,isPending:z}=yt({mutationFn:async({episodeNumber:l})=>{await ve.progress.resetProgress.mutate({showId:r??"",episodeNumber:l})},onSuccess:()=>{we.success("Episode progress reset"),a.invalidateQueries({queryKey:[ae.playerData,r]}),a.invalidateQueries({queryKey:[ae.showMeta,r]}),a.invalidateQueries({queryKey:[ae.continueWatching]})},onError:()=>we.error("Failed to reset progress")}),te=Q(async l=>{r&&await P({episodeNumber:l})},[r,P]),$=Q(async()=>{i({type:"SET_STATE",payload:{showCombinedDetails:!n.showCombinedDetails}})},[n.showCombinedDetails]),be=Ne(()=>{const l=v||H,w=l?l.message:null,_=w==="AUTH_REQUIRED"?null:w,D=N&&N.fetchedEpisodeNumber===e?N:null,ue=!!N&&!D,ie=s?D?.videoSources?.find(me=>me.sourceName===s.source&&me.type!=="iframe"&&me.links.some(ne=>ne.hls))??null:null,Pe=(n.selectedSource?.sourceName===ie?.sourceName?ie?.links.find(me=>me.hls&&me.link===n.selectedLink?.link):null)??ie?.links.filter(me=>me.hls).slice().sort((me,ne)=>(parseInt(ne.resolutionStr)||0)-(parseInt(me.resolutionStr)||0))[0]??null;return{...n,currentEpisode:e,showMeta:{...n.showMeta||{},...M||{}},episodes:d?.episodes||[],watchedEpisodes:d?.watchedEpisodes||[],inWatchlist:!!d?.inWatchlist,watchlistStatus:d?.watchlistStatus??n.watchlistStatus??null,videoSources:D?.videoSources||[],selectedSource:s?ie:n.selectedSource||D?.selectedSource||null,selectedLink:s?Pe:n.selectedLink||D?.selectedLink||null,resumeTime:s?0:D?.resumeTime||0,resumeDuration:D?.resumeDuration||0,resumeProgressPending:W,showResumeModal:!s&&n.showResumeModal&&(D?.showResumeModal??!1),skipIntervals:D?.skipIntervals||[],loadingShowData:A,loadingVideo:x||ue,error:_,fetchedEpisodeNumber:D?.fetchedEpisodeNumber}},[n,M,d,N,A,x,W,v,H,e,s]),q=Q((l,w)=>{const _=w||r;if(!_||!l||_===r&&l===e)return;const ue=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(_)&&n.selectedProvider!=="animepahe"?"animepahe":n.selectedProvider,ie=["video-sources",_,l,ue,n.currentMode];a.getQueryState(ie)?.status!=="success"&&a.prefetchQuery({queryKey:ie,queryFn:()=>Gt(_,l,{selectedProvider:ue,currentMode:n.currentMode},i,!0),staleTime:300*1e3,gcTime:1800*1e3})},[r,e,a,n,i]);return{state:be,dispatch:i,toggleWatchlist:G,moveToCompleted:j,setPreferredSource:f,handleToggleDetails:$,markEpisodeWatched:Y,resetEpisodeProgress:te,prefetchEpisodeSources:q,isMarkingWatched:B,isResettingProgress:z,isUpdatingWatchlistStatus:O}};function Ls({onPrevious:r,onNext:o,onToggleTheater:u,flashControls:m}){U(()=>{const T=i=>{i.defaultPrevented||i.ctrlKey||i.metaKey||i.altKey||i.repeat||i.target.closest('input, textarea, button, select, a, [role="button"], [role="slider"], [contenteditable="true"]')||(["arrowup","arrowdown","arrowleft","arrowright"].includes(i.key.toLowerCase())&&m(),i.key.toLowerCase()==="n"&&o(),i.key.toLowerCase()==="p"&&r(),i.key.toLowerCase()==="t"&&u())};return document.addEventListener("keydown",T),()=>{document.removeEventListener("keydown",T)}},[m,o,r,u])}const it=(r,o,u)=>r.showId===o||!!u&&r.showId===u;function Bs({testClipActive:r,selectedSourceType:o,onEnded:u,queue:m,removeFromQueue:T,showId:i,showMetaId:s,showStatus:n,currentEpisode:a,isAutoplayEnabled:y,nextEpisode:p,previousEpisode:h,navigate:b,invalidateContinueWatching:C,dispatch:e}){const[E,k]=re(!1),[M,A]=re(null),[v,d]=re(null),N=R(T);N.current=T;const x=R(!1),W=Yt(n);U(()=>{x.current=!1,k(!1)},[i,a]);const H=Q(()=>{if(r||x.current)return;x.current=!0,u();const V=m.find(B=>it(B,i,s)&&B.episodeNumber===a);if(m.length>0){const B=m.findIndex(P=>it(P,i,s)&&P.episodeNumber===a),Y=B>=0?m[B+1]||null:m[0];d({nextItem:Y,playedItem:V||null}),A(2);return}if(V&&N.current({showId:V.showId,episodeNumber:V.episodeNumber}),y&&p){C(),b(`/watch/${i}/${p}`);return}!p&&W&&k(!0)},[u,b,m,i,s,a,p,y,C,r,W]),K=Q(()=>{if(m.length===0)return;u();const V=m.find(P=>it(P,i,s)&&P.episodeNumber===a),B=m.findIndex(P=>it(P,i,s)&&P.episodeNumber===a),Y=B>=0?m[B+1]||null:m[0];V&&T({showId:V.showId,episodeNumber:V.episodeNumber}),Y?b(`/watch/${Y.showId}/${Y.episodeNumber}`):!p&&W&&k(!0)},[u,b,m,T,i,s,a,p,W]),G=Q(()=>{p&&(C(),b(`/watch/${i}/${p}`)),k(!1),e({type:"SET_STATE",payload:{showResumeModal:!1}})},[p,b,i,e,C]),f=Q(()=>{m.length>0?K():p?G():we.error("No next episode available")},[m.length,K,G,p]),S=Q(()=>k(!1),[]),O=Q(()=>{d(null),A(null)},[]),j=Q(()=>{h&&b(`/watch/${i}/${h}`)},[h,b,i]);return U(()=>{const V=B=>{B.origin===window.location.origin&&o==="iframe"&&B.data?.type==="ANI_WEB_MEDIA_ENDED"&&H()};return window.addEventListener("message",V),()=>window.removeEventListener("message",V)},[H,o]),U(()=>{if(!v||M===null)return;if(M<=0){const{nextItem:B,playedItem:Y}=v;d(null),A(null),Y&&N.current({showId:Y.showId,episodeNumber:Y.episodeNumber}),B?b(`/watch/${B.showId}/${B.episodeNumber}`):!p&&W&&k(!0);return}const V=window.setTimeout(()=>{A(B=>B===null?null:B-1)},1e3);return()=>window.clearTimeout(V)},[v,M,b,p,W]),{showCompleteModal:E,queueCountdown:M,pendingQueueTransition:v,handleQueueTransition:K,handleNextEpisode:G,handleNShortcut:f,handlePreviousEpisode:j,handlePlaybackFinished:H,closeCompleteModal:S,cancelQueueTransition:O}}function Ds({videoRef:r,queue:o,showId:u,showMetaId:m,currentEpisode:T,selectedSource:i,hasNextEpisode:s,nextEpisode:n,prefetchEpisodeSources:a,matchesQueueItem:y}){const[p,h]=re(!1),b=R(a);b.current=a;const C=R("");U(()=>{h(!1)},[T]);const e=Q(()=>{const E=r.current;if(!E||i?.type==="iframe")return;const k=E.duration,M=E.currentTime;if(!k||Number.isNaN(k)){h(!1);return}if(k-M<=60){const A=o.findIndex(N=>y(N,u,m)&&N.episodeNumber===T),v=o.length>0?A>=0?o[A+1]||null:o[0]:null,d=v?`${v.showId}:${v.episodeNumber}`:s?`${u}:${n}`:"";d&&C.current!==d&&(C.current=d,v?b.current(v.episodeNumber,v.showId):b.current(n??""))}h(s&&at(M,k))},[r,i,o,u,m,T,s,n,y]);return{showNextEpisodePrompt:p,handleThresholds:e}}const Nt="fallbackChoice";function $s(){try{const r=X.getItem(Nt);return r==="iframe"||r==="retry"?r:null}catch{return null}}function Fs(r){try{r===null?X.removeItem(Nt):X.setItem(Nt,r)}catch{}}function Is({showId:r,episodeNumber:o,currentMode:u,selectedProvider:m,selectedSourceType:T,videoSources:i,isAdult:s,providerOrder:n,matureProviders:a,setPreferredSource:y,dispatch:p,showControls:h}){const b=R(!1),C=R([]),e=R(!1),[E,k]=re(null),[M,A]=re(!1),[v,d]=re(!1),[N,x]=re(()=>$s()??"ask"),W=Q(P=>{x(P),Fs(P==="ask"?null:P)},[]),H=R(N);U(()=>{H.current=N},[N]);const K=R(i);K.current=i;const G=Q(()=>{b.current=!1,C.current=[],e.current=!1,k(null),A(!1)},[]);U(()=>{G()},[G,r,o]);const f=Q(P=>{if(b.current)return;b.current=!0;const z=P.links[0];y(P.sourceName),p({type:"SET_STATE",payload:{selectedSource:P,selectedLink:z}}),k(null)},[p,y]),S=Q(()=>{const z=K.current.find(te=>te.type==="iframe");return z?.links?.length?z:null},[]),O=Q(async()=>{const P=n.filter(z=>{if(C.current.includes(z))return!1;const te=a.has(z);return s===void 0?!0:te===s});A(!0);try{for(const z of P){C.current.push(z);let te=null;try{te=await ve.data.video.query({showId:r,episodeNumber:o,mode:u,provider:z})}catch{continue}const $=(te??[]).filter(l=>{const w=l.sourceName.toLowerCase();return u==="dub"?w.includes("eng")||w.includes("dub"):w.includes("jpn")||w.includes("sub")||!w.includes("eng")&&!w.includes("dub")});if(($.length>0?$:te??[]).find(l=>l.type!=="iframe"&&l.links?.length)){C.current=[m],e.current=!1,p({type:"SET_STATE",payload:{selectedProvider:z,videoSources:[],selectedSource:null,selectedLink:null,loadingVideo:!0}}),er(z,s===!0),k(null),we.success(`Switched to ${z} (direct stream)`);return}}k({retryFailed:!0}),we.error("No working direct stream found on other providers")}finally{A(!1)}},[r,o,u,s,m,p,n,a]),j=Q(()=>{if(b.current||e.current||T!=="player")return;const P=S();if(!P)return;C.current.includes(m)||C.current.push(m);const z=H.current;if(z==="iframe"){f(P);return}if(z==="retry"){O();return}h(!0),k({retryFailed:!1})},[T,m,S,f,O,h]),V=Q(()=>{e.current=!0,k(null),d(!1)},[]),B=Q(()=>{v&&W("iframe");const P=S();P?f(P):k(null)},[v,W,S,f]),Y=Q(()=>{v&&W("retry"),O()},[v,W,O]);return{fallbackPrompt:E,isRetryingProvider:M,rememberFallbackChoice:v,setRememberFallbackChoice:d,fallbackChoice:N,updateFallbackChoice:W,dismissFallbackPrompt:V,chooseIframeFallback:B,chooseProviderRetry:Y,handleVideoSourceError:j,resetFallback:G}}function Ws({engine:r,videoRef:o,selectedSource:u,selectedLink:m,loadingVideo:T,testClipActive:i,resumeTime:s,resumeDuration:n=0,showResumeModal:a,disabled:y=!1,startOver:p=!1,resumeAt:h=null,calibReturnRef:b,setAvailableSubtitles:C,setActiveSubtitleTrack:e,onFatalError:E}){const k=R(null),M=R(s),A=R(n),v=R(a),d=R(E);return d.current=E,U(()=>{M.current=s,A.current=n,v.current=a},[s,n,a]),U(()=>{if(y){r.unload();return}const N=o.current;if(!N)return;for(;N.firstChild;)N.removeChild(N.firstChild);if(i)return r.loadSource({url:"/av-sync-test.mp4"},{autoPlay:!0});if(T||!u||!m||u.type==="iframe"){r.unload();return}p?k.current=0:b.current!=null?(k.current=b.current,b.current=null):k.current===null&&h!=null?k.current=h:k.current===null&&M.current>5&&!v.current&&!at(M.current,A.current)?k.current=M.current:k.current===null&&v.current&&(k.current=0);let x=m.link;if(x.startsWith("/api/proxy")||(x=`/api/proxy?url=${encodeURIComponent(x)}`,m.headers?.Referer&&(x+=`&referer=${encodeURIComponent(m.headers.Referer)}`)),u.subtitles){const K=X.getItem("playerSubtitlesEnabled")!=="false";let G=null;try{G=X.getItem("playerLastSubtitle")}catch{}const f=Pt(u.subtitles,{lastKey:G,enabled:K}),S=f>=0?u.subtitles[f]:null;u.subtitles.forEach(O=>{const j=document.createElement("track");j.kind="subtitles",j.label=O.label,j.srclang=O.lang;const V=O.src??O.url;if(V){let B=`/api/subtitle-proxy?url=${encodeURIComponent(V)}`;const Y=m.headers?.Referer;Y&&(B+=`&referer=${encodeURIComponent(Y)}`),j.src=B}S&&O.label===S.label&&O.lang===S.lang&&(j.default=!0),N.appendChild(j)}),K||e("off"),C(u.subtitles)}const W=k.current??0;k.current=null;const H=document.body.classList.contains("low-end");return r.loadSource({url:x,hls:m.hls},{initialTime:W,autoPlay:p||h!=null||!(v.current&&M.current>5)&&!at(M.current,A.current),hlsConfig:{maxBufferLength:H?15:30,maxMaxBufferLength:H?30:60,maxBufferSize:(H?25:60)*1e3*1e3,startLevel:-1},onHls:(K,G)=>{if(!u.subtitles?.length)return;const f=()=>{K.subtitleTrack!==-1&&(K.subtitleTrack=-1)};K.on(G.Events.SUBTITLE_TRACK_SWITCH,f),f()},onError:()=>d.current()})},[r,u,m,o,b,T,i,y,p,h,e,C]),{seekToTimeRef:k}}function Os({videoRef:r,availableSubtitles:o,activeSubtitleTrack:u,setAvailableSubtitles:m,setActiveSubtitleTrack:T}){U(()=>{const i=r.current;if(!i)return;const s=()=>{const n=Array.from(i.textTracks).map(a=>({label:a.label,lang:a.language,src:void 0,mode:a.mode}));m(n)};return i.textTracks.addEventListener("addtrack",s),i.textTracks.addEventListener("removetrack",s),s(),()=>{i.textTracks.removeEventListener("addtrack",s),i.textTracks.removeEventListener("removetrack",s)}},[r,m]),U(()=>{if(u===null&&o.length>0&&X.getItem("playerSubtitlesEnabled")!=="false"){let i=null;try{i=X.getItem("playerLastSubtitle")}catch{}const s=Pt(o,{lastKey:i,enabled:!0});if(s<0){T("off");return}const n=o[s];T(n.lang||n.label)}},[u,o,T]),U(()=>{const i=r.current;if(!i||o.length===0)return;const s=u;if(!(X.getItem("playerSubtitlesEnabled")!=="false")||s==="off"||s===null){Array.from(i.textTracks).forEach(y=>{y.mode="hidden"});return}let a=!1;if(Array.from(i.textTracks).forEach(y=>{const h=(y.language===s||y.label===s)&&!a;y.mode=h?"showing":"hidden",h&&(a=!0)}),!a&&i.textTracks.length>0){const y=Array.from(i.textTracks).find(p=>p.language==="en"||p.label==="English")||i.textTracks[0];y&&(y.mode="showing")}},[u,o,r])}function Us({videoRef:r,videoBoxH:o,style:u,sourceKey:m,activeSubtitleTrack:T,availableSubtitles:i}){U(()=>{const s="dynamic-subtitle-styles";let n=document.getElementById(s);n||(n=document.createElement("style"),n.id=s,document.head.appendChild(n)),n.textContent=Kt(u);const a=r.current;if(!a)return;const y=jt(u.fontSize,o||a.clientHeight||720);n.textContent=Kt({...u,fontSize:y});const p=()=>{const d=Number(u.position),N=isNaN(d)?0:Math.max(0,Math.min(100,d));return Math.max(0,Math.min(100,100-N))},h=(d,N)=>{try{const x=d;x.snapToLines=!1,x.line=N}catch{}},b=()=>{const d=y*16,N=a.videoHeight||a.clientHeight||720,x=a.videoWidth||a.clientWidth||1280;return{step:d*1.3/N*100,chars:Math.max(20,Math.floor(x/(d*.55)))}},C=d=>{const N=p(),x=Array.from(d.activeCues??[]);if(x.length<=1){x.forEach(G=>h(G,N));return}const{step:W,chars:H}=b();let K=N;for(let G=x.length-1;G>=0;G--){const S=String(x[G].text??"").replace(/<[^>]*>/g,"").split(`
|
|
55
|
-
`).reduce((j,V)=>j+Math.max(1,Math.ceil(V.length/H)),0),O=K-S*W;h(x[G],Math.max(0,O)),K=O-W*.4}},e=d=>{if(!d.cues)return;const N=p();Array.from(d.cues).forEach(x=>h(x,N)),d.mode==="showing"&&C(d)},E=()=>{Array.from(a.textTracks).forEach(e)};E();const k=d=>{const N=d.target;N.mode==="showing"&&C(N)};Array.from(a.textTracks).forEach(d=>{d.addEventListener("cuechange",k)});const M=()=>{Array.from(a.textTracks).forEach(d=>{d.removeEventListener("cuechange",k),d.addEventListener("cuechange",k)}),E()};a.textTracks.addEventListener("addtrack",M),a.textTracks.addEventListener("removetrack",M);const A=Array.from(a.querySelectorAll("track")),v=()=>{E()};return A.forEach(d=>{d.addEventListener("load",v)}),()=>{Array.from(a.textTracks).forEach(d=>{d.removeEventListener("cuechange",k)}),a.textTracks.removeEventListener("addtrack",M),a.textTracks.removeEventListener("removetrack",M),A.forEach(d=>{d.removeEventListener("load",v)})}},[u,o,r,m,T,i])}function Vs({videoRef:r,overlayRef:o,style:u,activeSubtitleTrack:m,delayMs:T,enabled:i}){U(()=>{if(!i)return;const s=r.current,n=o.current;if(!s||!n)return;const a=X.getItem("playerSubtitlesEnabled")!=="false",y=()=>{if(n.innerHTML="",!a||m==="off"||m===null)return;const b=Array.from(s.textTracks).find(v=>v.language===m||v.label===m);if(!b||b.mode!=="showing")return;const C=T/1e3;let e;if(C>0&&b.cues){const v=s.currentTime-C;e=Array.from(b.cues).filter(d=>d.startTime<=v&&v<=d.endTime)}else e=Array.from(b.activeCues??[]);if(e.length===0)return;const E={...u,fontSize:jt(u.fontSize,s.clientHeight||0)},k=tn(E),M=rn(s,E.position),A=Array.from(e);A.forEach((v,d)=>{const N=String(v.text??"");if(!nn(N).trim())return;const x=document.createElement("div"),W=(A.length-1-d)*1.7;x.style.cssText=`${k}
|
|
56
|
-
bottom: calc(${M}px + ${W}em);`,x.innerHTML=sn(N),n.appendChild(x)})},p=()=>y(),h=()=>y();return Array.from(s.textTracks).forEach(b=>{b.addEventListener("cuechange",p)}),s.addEventListener("timeupdate",h),y(),()=>{Array.from(s.textTracks).forEach(b=>{b.removeEventListener("cuechange",p)}),s.removeEventListener("timeupdate",h),n.innerHTML=""}},[m,T,i,o,u,r])}const Qs=({isOpen:r,onClose:o,onSuccess:u})=>{const m=()=>{u?.(),o()};return t(St,{isOpen:r,onClose:o,title:"MKissa Browser Verification",children:t("div",{className:Ze.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:Ze.actions,children:t("a",{className:Ze.link,href:"https://mkissa.to/anime",target:"_blank",rel:"noreferrer",children:"Open MKissa anime"})}),t("div",{className:Ze.actions,children:[t("button",{className:Ze.secondaryButton,onClick:o,children:"Cancel"}),t("button",{className:Ze.button,onClick:m,children:"Refresh Dango"})]})]})})},ao=()=>{const{id:r,episodeNumber:o}=Nr(),u=Pr(),m=Ht(),T=_r(),i=Br(),s=!!i.session,n=s&&!i.session?.host,{hasConsent:a,grant:y}=Dr(),{options:p}=Xt(),h=Ne(()=>p.filter(c=>(c.kind??"anime")==="anime"),[p]),b=Ne(()=>h.map(c=>c.id),[h]),C=Ne(()=>new Set(h.filter(c=>c.mature).map(c=>c.id)),[h]),{state:e,dispatch:E,toggleWatchlist:k,moveToCompleted:M,setPreferredSource:A,handleToggleDetails:v,markEpisodeWatched:d,resetEpisodeProgress:N,prefetchEpisodeSources:x,isMarkingWatched:W,isResettingProgress:H,isUpdatingWatchlistStatus:K}=xs(r,o,T.state||null,{hasMatureConsent:a,watchSelection:n?i.room?.selection:null});U(()=>{if(r&&e.showMeta?.id&&e.showMeta.id!==r){const c=o?`/watch/${e.showMeta.id}/${o}${window.location.search}`:`/watch/${e.showMeta.id}${window.location.search}`;u(c,{replace:!0})}},[r,e.showMeta?.id,o,u]);const G=Ne(()=>{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=on({skipIntervals:e.skipIntervals,showId:r,episodeNumber:e.currentEpisode?.toString(),episodeCount:e.episodes.length||void 0,sourceType:e.selectedSource?.type,showMeta:G}),{refs:S,actions:O}=f,j=Ne(()=>!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]),V=an(f.engine,j,e.loadingVideo||e.loadingShowData),B=Cn(),Y=R(null),P=R(null),z=R(null),[te,$]=re(()=>{try{const c=X.getItem("anime4kProfile");return["low","balanced","high","denoise"].includes(c)?c:"balanced"}catch{return"balanced"}}),{videoDelayMs:be,videoDelayEnabled:q,setDelayEnabled:l,handleVideoDelayChange:w,isCalibrating:_,testClipActive:D,stopCalibration:ue,openAvSyncCalibrator:ie,cancelAvSyncCalibrator:J,applyAvSyncCalibrator:Pe,toggleTestClip:me,calibReturnRef:ne,effectiveVideoDelayMs:le}=ln(S.videoRef,()=>O.setShowSettings(!1)),_e=R(null),[pe,De]=re(!1),[et,tt]=re(null);U(()=>{De(!1),tt(null)},[r,e.currentEpisode]);const $e=`${r??""}:${e.currentEpisode??""}`,[lt,ze]=re(null);U(()=>{e.loadingVideo||e.videoSources.length===0||ze(c=>c?.key===$e?c:{key:$e,watched:at(e.resumeTime,e.resumeDuration)})},[$e,e.loadingVideo,e.videoSources.length,e.resumeTime,e.resumeDuration]);const ge=lt?.key===$e&<.watched,[He]=re(wn),[Et,ct]=re(!1);U(()=>{ct(!1)},[r,e.currentEpisode]);const ut=!s&&!D&&ge&&e.videoSources.length>0&&!pe,xe=ut&&He,F=ut&&!He&&!Et,Fe=Q(()=>{tt(null),De(!0)},[]),rt=Q(()=>{tt(e.resumeTime),De(!0)},[e.resumeTime]),Z=Cs({videoRef:S.videoRef,canvasRef:P,profile:te,delayMs:le}),Ue=Z.isEnabled&&Z.isWebGPUSupported;Rs({videoRef:S.videoRef,episodeKey:`${r??""}:${e.currentEpisode??""}`,isEnabled:Z.isEnabled,isSupported:Z.isWebGPUSupported,mediaReady:!e.loadingVideo&&!!e.selectedLink,isIframeSource:e.selectedSource?.type==="iframe",setEnabled:Z.setEnabled}),cn({videoRef:S.videoRef,canvasRef:_e,delayMs:le,enabled:q&&!Ue});const Ve=q&&!Ue,Ie=Ue||Ve,[je,Ye]=re(!1),Xe=R(o);U(()=>{Xe.current!==o&&(Xe.current=o,ue())},[o,ue]);const dt=Q(()=>{m.invalidateQueries({queryKey:[ae.continueWatching]})},[m]),{data:Le=[],isLoading:mt}=$r(),pt=Fr(),wt=Ir(),kt=Wr(),{isTheaterMode:I,toggleTheaterMode:de,handleLayoutClick:ke}=un();Ar(()=>{if(f.state.isFullscreen||I)return;const c=S.playerContainerRef.current,ee=Y.current;if(!c||!ee)return;const qe=()=>{const Mt=c.getBoundingClientRect().height;ee.style.height=`${Mt}px`};qe();const Oe=new ResizeObserver(qe);return Oe.observe(c),()=>Oe.disconnect()},[f.state.isFullscreen,I,S.playerContainerRef]);const se=Ne(()=>e.episodes.findIndex(c=>c===e.currentEpisode),[e.episodes,e.currentEpisode]),he=se>0?e.episodes[se-1]:null,oe=se>=0&&se<e.episodes.length-1?e.episodes[se+1]:null,Te=se>-1&&se<e.episodes.length-1,nt=Yt(e.showMeta?.status),Se=!oe&&nt,Ee=!oe&&!Se,{showCompleteModal:ce,queueCountdown:ht,pendingQueueTransition:Je,handleQueueTransition:ye,handleNextEpisode:Qe,handleNShortcut:tr,handlePreviousEpisode:_t,handlePlaybackFinished:rr,closeCompleteModal:ft,cancelQueueTransition:nr}=Bs({testClipActive:D,selectedSourceType:e.selectedSource?.type,onEnded:O.onEnded,queue:Le,removeFromQueue:pt.mutate,showId:r,showMetaId:e.showMeta?.id,showStatus:e.showMeta?.status,currentEpisode:e.currentEpisode,isAutoplayEnabled:!n&&e.isAutoplayEnabled,nextEpisode:oe,previousEpisode:he,navigate:u,invalidateContinueWatching:dt,dispatch:E}),{showNextEpisodePrompt:sr,handleThresholds:Tt}=Ds({videoRef:S.videoRef,queue:Le,showId:r,showMetaId:e.showMeta?.id,currentEpisode:e.currentEpisode,selectedSource:e.selectedSource,hasNextEpisode:Te,nextEpisode:oe,prefetchEpisodeSources:x,matchesQueueItem:it}),{checkEnd:vt,logDuration:At}=dn({videoRef:S.videoRef,sourceType:e.selectedSource?.type,resetKey:`${r}:${e.currentEpisode}:${pe}`,onEnd:n?O.onEnded:rr}),xt=!s&&e.showResumeModal&&!e.resumeProgressPending,We=ce&&He,or=ce&&!He,Ke=xt||ce||F;mn(f,!!e.selectedLink&&!I&&!Ke&&!xe&&!We&&!F);const{fallbackPrompt:Lt,isRetryingProvider:Bt,rememberFallbackChoice:ir,setRememberFallbackChoice:ar,fallbackChoice:lr,updateFallbackChoice:cr,dismissFallbackPrompt:ur,chooseIframeFallback:dr,chooseProviderRetry:mr,handleVideoSourceError:Dt,resetFallback:$t}=Is({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:b,matureProviders:C,setPreferredSource:A,showControls:O.setShowControls,dispatch:E}),{seekToTimeRef:Ft}=Ws({engine:f.engine,videoRef:S.videoRef,selectedSource:e.selectedSource,selectedLink:e.selectedLink,loadingVideo:e.loadingVideo,testClipActive:!s&&D,resumeTime:s?0:e.resumeTime,resumeDuration:e.resumeDuration,showResumeModal:!s&&e.showResumeModal,disabled:xe||We,startOver:pe&&et==null,resumeAt:et,calibReturnRef:ne,setAvailableSubtitles:O.setAvailableSubtitles,setActiveSubtitleTrack:O.setActiveSubtitleTrack,onFatalError:s?()=>{}:Dt});U(()=>{(Ke||xe||We)&&f.state.isFullscreen&&f.actions.toggleFullscreen()},[Ke,xe,We,f.state.isFullscreen,f.actions]),U(()=>{Ke&&S.videoRef.current&&S.videoRef.current.pause()},[Ke,S.videoRef]);const{titlePreference:gt}=Or(),{lowEndMode:It}=Ur(),{settings:Ct,update:pr}=pn(),hr=I&&Ct.enabled&&!It&&e.selectedSource?.type!=="iframe"&&!!e.selectedLink,Be=Ne(()=>{if(!e.showMeta||e.loadingShowData)return"Loading...";const{name:c,names:ee}=e.showMeta;return gt==="name"?c||"Loading...":gt==="nativeName"?ee?.native||c||"Loading...":gt==="englishName"?ee?.english||c||"Loading...":c||"Loading..."},[e.showMeta,gt,e.loadingShowData]);U(()=>{Be&&Be!=="Loading..."&&e.currentEpisode&&(document.title=`► ${Be} Episode ${e.currentEpisode} - dango`)},[Be,e.currentEpisode]),Ls({onPrevious:n?()=>{}:_t,onNext:n?()=>{}:tr,onToggleTheater:de,flashControls:f.actions.flashControls});const{setAvailableSubtitles:fr,setActiveSubtitleTrack:vr}=O,Wt=Ne(()=>({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]);Os({videoRef:S.videoRef,availableSubtitles:f.state.availableSubtitles,activeSubtitleTrack:f.state.activeSubtitleTrack,setAvailableSubtitles:fr,setActiveSubtitleTrack:vr});const[gr,yr]=re(0);U(()=>{const c=S.videoRef.current;if(!c)return;const ee=()=>yr(c.clientHeight||0);ee();const qe=new ResizeObserver(ee);return qe.observe(c),()=>qe.disconnect()},[S.videoRef,e.selectedSource,e.selectedLink]),Us({videoRef:S.videoRef,videoBoxH:gr,style:Wt,sourceKey:`${e.selectedSource?.sourceName??""}:${e.selectedLink?.link??""}`,activeSubtitleTrack:f.state.activeSubtitleTrack,availableSubtitles:f.state.availableSubtitles}),Vs({videoRef:S.videoRef,overlayRef:z,style:Wt,activeSubtitleTrack:f.state.activeSubtitleTrack,delayMs:le,enabled:Ie}),U(()=>{try{X.setItem("anime4kProfile",te)}catch{}},[te]);const br=()=>{S.videoRef.current&&(S.videoRef.current.currentTime=e.resumeTime,S.videoRef.current.play()),E({type:"SET_STATE",payload:{showResumeModal:!1}})},Sr=()=>{S.videoRef.current&&(S.videoRef.current.currentTime=0,S.videoRef.current.play()),E({type:"SET_STATE",payload:{showResumeModal:!1}})},Er=Q(()=>{E({type:"SET_STATE",payload:{showResumeModal:!1}})},[E]),Rt=Q(async()=>{try{await M(),ft(),E({type:"SET_STATE",payload:{showResumeModal:!1}}),u("/")}catch{}},[M,ft,E,u]),Ot=(c,ee)=>t("div",{className:c,children:[t("button",{className:`${g.episodeNavBtn} ${g.secondary}`,onClick:_t,disabled:n||!he,type:"button",children:[t(fe,{name:"chevron-left",size:12}),"Prev EP"]}),t("button",{className:`${g.episodeNavBtn} ${g.primary}`,onClick:Qe,disabled:n||!oe,type:"button",children:["Next EP",t(fe,{name:"chevron-right",size:12})]}),ee==="mobile"&&B&&t("button",{className:`${g.episodeNavBtn} ${g.episodePickerBtn}`,onClick:()=>Ye(!0),type:"button",children:[t(fe,{name:"list-ul",size:12}),"Episodes"]}),t("button",{className:`${g.watchlistBtn}`,onClick:()=>e.currentEpisode&&N(e.currentEpisode),disabled:H||!e.currentEpisode,children:[t(fe,{name:"undo",size:14}),H?"Resetting...":"Reset Progress"]})]}),wr=c=>{E({type:"SET_STATE",payload:{isAutoplayEnabled:c}}),kn(c)},Ut=!!(e.currentEpisode&&e.watchedEpisodes.includes(e.currentEpisode)),kr=e.selectedProvider!=="megaplay"||e.selectedSource?.type==="iframe",Tr=Q(async()=>{if(!r||!e.currentEpisode||!e.showMeta.name||W)return;const c=S.videoRef.current?.duration,ee=Math.max(c||0,e.resumeDuration||0,Number(e.showMeta.episodeDuration||0)*60,1);await d(e.currentEpisode,ee)},[r,e.currentEpisode,e.showMeta,e.resumeDuration,d,W,S.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 Ce=e.loadingShowData||e.loadingVideo;return e.showMeta?.isAdult===!0&&!a?t("div",{className:Me.playerPageLayout,children:t(Tn,{isOpen:!0,onClose:()=>u("/home"),onGrant:y})}):t("div",{className:`${Me.playerPageLayout} ${I?Me.theaterMode:""}`,onClick:ke,children:[I&&t(hn,{videoRef:S.videoRef,active:hr,settings:Ct}),t(qt,{isOpen:or,onClose:ft,title:"Show Completed!",heading:Be,message:"Congratulations! You finished all available episodes.",children:t(Re,{onClick:Rt,disabled:K,children:K?"Saving...":"Move to Completed"})}),t(qt,{isOpen:F,onClose:()=>ct(!0),title:Se?"Show Completed!":"Episode Completed",heading:e.currentEpisode?`Episode ${e.currentEpisode}`:Be,message:Se?"Congratulations! You finished all available episodes.":"You've already watched this episode. Resume where you left off, replay it, or continue with the next episode.",children:[e.resumeTime>5&&t(Re,{variant:Ee?void 0:"secondary",onClick:rt,children:`Resume ${Vt(e.resumeTime)}`}),t(Re,{variant:"secondary",onClick:Fe,children:"Replay"}),oe&&t(Re,{onClick:Qe,children:`Watch EP ${oe}`}),Se&&t(Re,{onClick:Rt,disabled:K,children:K?"Saving...":"Move to Completed"})]}),t(fn,{isOpen:xt,onClose:Er,title:"Resume Playback?",message:t(st,{children:["You were watching at ",t("strong",{children:f.actions.formatTime(e.resumeTime)}),". Would you like to continue?"]}),onResume:br,onRestart:Sr}),t(St,{isOpen:!!Lt,onClose:ur,title:"Direct stream failed",width:"sm",children:[t(St.Body,{children:[t("p",{children:[t("strong",{children:e.selectedProvider}),"'s direct stream failed for this episode."]}),Lt?.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:ir,onChange:c=>ar(c.currentTarget.checked)}),"Remember my choice"]})]}),t(St.Actions,{children:[t(Re,{variant:"secondary",onClick:dr,children:"Continue with iframe"}),t(Re,{onClick:mr,disabled:Bt,children:Bt?"Searching…":"Try another provider"})]})]}),t(Vr,{isOpen:!!e.showCookieModal&&e.cookieProvider!=="mkissa",onClose:()=>E({type:"SET_STATE",payload:{showCookieModal:!1}}),onSuccess:()=>{m.invalidateQueries({queryKey:[ae.videoSources,r,e.currentEpisode,e.selectedProvider,e.currentMode]})}}),t(Qs,{isOpen:!!e.showCookieModal&&e.cookieProvider==="mkissa",onClose:()=>E({type:"SET_STATE",payload:{showCookieModal:!1}}),onSuccess:()=>{m.invalidateQueries({queryKey:[ae.videoSources,r,e.currentEpisode,e.selectedProvider,e.currentMode]})}}),!I&&t("aside",{ref:Y,className:Me.episodeSidebar,children:e.loadingShowData?t(vn,{variant:"sidebar"}):t(gn,{episodes:e.episodes,currentEpisode:e.currentEpisode??void 0,watchedEpisodes:e.watchedEpisodes,onEpisodeClick:c=>{n||u(`/watch/${r}/${c}`)}})}),t("div",{className:Me.playerMain,children:[t("div",{className:`${g.videoContainer} ${f.state.isFullscreen?"":Me.videoPlayerWrapper} ${f.state.isFullscreen?g.fullscreenActive:""}`,style:{...Ke?{visibility:"hidden"}:{}},onContextMenu:c=>c.preventDefault(),children:t(ms,{player:f,isAutoplayEnabled:e.isAutoplayEnabled,onAutoplayChange:wr,fallbackChoice:lr,onFallbackChoiceChange:cr,ambientSettings:Ct,onAmbientChange:pr,showNextEpisodeButton:!n&&!Ke&&sr&&Le.length===0,onNextEpisode:Qe,videoSources:n?[]:s?e.videoSources.filter(c=>c.type!=="iframe"&&c.links.some(ee=>ee.hls)):e.videoSources,selectedSource:e.selectedSource,selectedLink:e.selectedLink,onSourceChange:(c,ee)=>{n&&c.sourceName!==i.room?.selection.source||s&&(c.type==="iframe"||!ee.hls)||(S.videoRef.current&&!isNaN(S.videoRef.current.currentTime)&&(Ft.current=S.videoRef.current.currentTime),A(c.sourceName),E({type:"SET_STATE",payload:{selectedSource:c,selectedLink:ee,showResumeModal:e.showResumeModal&&c.type!=="iframe"}}))},loadingVideo:Ce,skipIntervals:e.skipIntervals,animeTitle:Be,episodeNumber:e.currentEpisode??void 0,mode:e.currentMode,isTheaterMode:I,onTheaterModeToggle:de,anime4kEnabled:Z.isEnabled,onAnime4kToggle:Z.toggle,anime4kSupported:Z.isWebGPUSupported,anime4kProfile:te,onAnime4kProfileChange:$,anime4kInitializing:Z.isInitializing,anime4kError:Z.error,videoDelayEnabled:q,onVideoDelayToggle:l,videoDelayMs:be,onVideoDelayChange:w,onCalibrateAvSync:s?()=>{}:ie,isInteractingExtra:je||_,className:jr.shellFill,hideChrome:xe||We||e.selectedSource?.type==="iframe",overlays:t(st,{children:[f.state.isSpeedBoostActive&&t("div",{className:g.speedBoostBadge,"aria-hidden":"true",children:[t("span",{children:"2x"}),t(fe,{name:"forward",size:12})]}),ht!==null&&Je?.nextItem&&t("div",{className:g.queueCountdown,children:["Queue next in ",ht,"s"]})]}),children:t(st,{children:[Ce&&t("div",{className:g.loadingOverlay,children:t("div",{className:g.loadingDots,children:[t("div",{className:g.dot}),t("div",{className:g.dot}),t("div",{className:g.dot})]})}),f.state.isBuffering&&!Ce&&e.selectedSource?.type!=="iframe"&&t("div",{className:g.bufferingOverlay,children:t("div",{className:g.bufferingSpinner})}),e.selectedSource?.type==="iframe"&&!s?!Ce&&t("iframe",{src:e.selectedLink?.link,className:g.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(st,{children:[!Ce&&e.videoSources.length===0&&t("div",{className:g.errorOverlay,children:[t("p",{children:["No sources found for this episode with ",e.selectedProvider,"."]}),t("p",{className:g.errorSubtext,children:"Please try selecting a different provider below."}),t("button",{className:g.retryButton,onClick:()=>window.location.reload(),"data-speed-boost-ignore":"true",style:{marginTop:8},children:"Retry"})]}),!Ce&&e.videoSources.length>0&&t(Yr,{controls:!f.state.playbackLocked&&f.state.useNativeControls,playsInline:!0,"webkit-playsinline":"true",disablePictureInPicture:!0,disableRemotePlayback:!0,onPlay:O.onPlay,onPause:O.onPause,onEnded:()=>{D||vt(!0)},onDurationChange:()=>{At()},onSeeked:()=>{D||(Tt(),vt())},onLoadedMetadata:()=>{Tt(),At(),D||vt()},onTimeUpdate:()=>{D||(O.onTimeUpdate(),Tt(),vt(),Je&&S.videoRef.current&&S.videoRef.current.currentTime<S.videoRef.current.duration-1&&nr())},onError:s?void 0:Dt,onContextMenu:c=>c.preventDefault(),className:Ie?g.videoElementHidden:""}),Z.isWebGPUSupported&&!Ce&&e.videoSources.length>0&&t("canvas",{ref:P,className:`${g.upscalerCanvas} ${Ue?g.upscalerActive:""}`}),!Ue&&!Ce&&e.videoSources.length>0&&t("canvas",{ref:_e,className:`${g.upscalerCanvas} ${Ve?g.upscalerActive:""}`}),Z.isEnabled&&Z.isWebGPUSupported&&Z.isInitializing&&t("div",{className:g.upscalerStatusBadge,children:"Preparing upscaler…"}),Ie&&t("div",{ref:z,className:g.subtitleOverlay}),t(yn,{isOpen:_,ms:be,onChange:w,onApply:Pe,onClose:J,testClipActive:D,onTestClip:me})]}),(xe||We)&&t("div",{className:g.watchedOverlay,children:[t(fe,{name:"check-circle",size:48,style:{color:"var(--accent-lighter)"}}),t("p",{className:g.watchedTitle,children:Se?"Show Completed!":e.currentEpisode?`Episode ${e.currentEpisode} watched`:"Watched"}),t("p",{className:g.watchedSubtext,children:Se?"Congratulations! You finished all available episodes.":"Resume where you left off, replay from the beginning, or continue with the next episode."}),t("div",{className:`${g.watchedActions} ${We?g.watchedActionsCentered:""}`,children:[t("div",{children:e.resumeTime>5&&!We&&t(Re,{variant:Ee?void 0:"secondary",onClick:rt,children:`Resume ${Vt(e.resumeTime)}`})}),t("div",{children:[oe&&t(Re,{onClick:Qe,children:`Watch EP ${oe}`}),Se&&t(Re,{onClick:Rt,disabled:K,children:K?"Saving...":"Move to Completed"})]}),t("div",{children:t(Re,{variant:"secondary",onClick:()=>{ft(),Fe()},children:"Replay"})})]})]})]})})}),t(An,{playback:j&&!Ce?{selection:j,position:S.videoRef.current?.currentTime||0,playing:!1,rate:f.engine.getState().playbackRate}:null,onCreate:()=>{ue(),f.engine.pause()},needsPlayback:V.needsPlayback,onEnablePlayback:V.enablePlayback}),s&&!Ce&&!j&&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."}),!I&&t(bn,{}),!I&&t(st,{children:[mt&&Le.length===0?t(ps,{count:3}):t(Rn,{title:"Queue",items:Le,currentShowId:r,currentEpisode:e.currentEpisode??void 0,onNextQueue:n?()=>{}:ye,onRemove:c=>pt.mutate({showId:c.showId,episodeNumber:c.episodeNumber}),onClear:()=>wt.mutate(),showClearAll:!0,onReorder:c=>kt.mutate(c.map(ee=>({id:ee.id,showId:ee.showId,episodeNumber:ee.episodeNumber})))}),t("div",{className:g.streamPanel,children:[!n&&t(gs,{selectedProvider:e.selectedProvider,isAdult:e.showMeta?.isAdult,options:h,onProviderChange:c=>{$t(),E({type:"SET_STATE",payload:{selectedProvider:c,videoSources:[],selectedSource:null,selectedLink:null,loadingVideo:!0}}),er(c,e.showMeta?.isAdult===!0)}}),Ot(`${g.episodeActions} ${g.desktopEpisodeActions}`,"desktop"),Ce?t("div",{className:g.sourceLoader,children:t("div",{className:g.spinner})}):n?t("p",{children:["Provider: ",e.selectedProvider," · Source: ",i.room?.selection.source," ·"," ",e.currentMode]}):t(bs,{videoSources:s?e.videoSources.filter(c=>c.type!=="iframe"&&c.links.some(ee=>ee.hls)):e.videoSources,selectedSource:e.selectedSource,selectedLink:e.selectedLink,onSourceChange:c=>{if(s&&(c.type==="iframe"||!c.links.some(Oe=>Oe.hls)))return;S.videoRef.current&&!isNaN(S.videoRef.current.currentTime)&&(Ft.current=S.videoRef.current.currentTime);const qe=(s?c.links.filter(Oe=>Oe.hls):c.links||[]).sort((Oe,Mt)=>(parseInt(Mt.resolutionStr)||0)-(parseInt(Oe.resolutionStr)||0))[0]||null;A(c.sourceName),E({type:"SET_STATE",payload:{selectedSource:c,selectedLink:qe,showResumeModal:e.showResumeModal&&c.type!=="iframe"}})},onLinkChange:c=>{e.selectedSource&&(A(e.selectedSource.sourceName),E({type:"SET_STATE",payload:{selectedLink:c}}))}})]}),t("div",{className:Me.playerInfoContainer,children:[t("div",{className:Me.playerInfoHeader,children:[t("div",{className:Me.playerAnimeCard,children:t(Qr,{src:Kr(e.showMeta.thumbnail||""),alt:Be,loading:"lazy",decoding:"async",onError:c=>{c.target.src="/placeholder.svg"}})}),t("div",{className:Me.videoTitleSection,children:[t("div",{className:g.titleContainer,children:[t("h1",{children:Be}),t("div",{className:g.scheduleInfo,children:[e.showMeta.status&&t("span",{className:g.status,children:e.showMeta.status}),e.showMeta.nextEpisodeAirDate&&t("span",{className:g.nextEpisode,children:["Next episode: ",e.showMeta.nextEpisodeAirDate]})]})]}),t("div",{className:g.controls,children:[t("button",{className:`${g.watchlistBtn} ${e.inWatchlist?g.inList:""}`,onClick:k,children:[e.inWatchlist?t(fe,{name:"check",size:14}):t(fe,{name:"plus",size:14}),e.inWatchlist?"In Watchlist":"Add to Watchlist"]}),t(Nn,{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:`${g.watchlistBtn} ${g.queueBtn}`,activeClassName:g.queueActive}),kr&&t("button",{className:`${g.watchlistBtn} ${g.markWatchedBtn} ${Ut?g.markWatchedDone:""}`,onClick:Tr,disabled:W||!e.currentEpisode,children:[t(fe,{name:"check",size:14}),W?"Saving...":Ut?"Watched":"Mark Watched"]}),t("button",{className:`${g.watchlistBtn} ${g.modeToggleBtn} ${e.currentMode==="dub"?g.modeToggleActive:""}`,disabled:n,onClick:()=>{const c=e.currentMode==="dub"?"sub":"dub";$t(),E({type:"SET_MODE",payload:c}),X.setItem("preferredMode",c)},type:"button","aria-pressed":e.currentMode==="dub",children:e.currentMode==="dub"?"DUB":"SUB"}),It&&t("button",{disabled:n,className:`${g.watchlistBtn} ${g.modeToggleBtn} ${f.state.useNativeControls?g.modeToggleActive:""}`,onClick:()=>{const c=!f.state.useNativeControls;f.actions.setUseNativeControls(c),X.setItem("playerUseNativeControls",c.toString())},type:"button",children:f.state.useNativeControls?"NATIVE: ON":"NATIVE: OFF"})]})]})]}),Ot(`${g.episodeActions} ${g.mobileEpisodeActions}`,"mobile"),t("div",{className:Me.infoColumns,children:[t("div",{className:`${g.descriptionSection} ${g.synopsisFlat}`,children:[t("h3",{children:"Synopsis"}),t(_n,{text:e.showMeta.description?e.showMeta.description.replace(/<[^>]*>?/gm,""):"",emptyText:"No description available."}),t("button",{className:g.detailsToggleBtn,onClick:v,children:[e.showCombinedDetails?t(fe,{name:"chevron-up"}):t(fe,{name:"chevron-down"}),e.showCombinedDetails?"Hide Details":"Show Details"]})]}),e.showCombinedDetails&&t(Pn,{showMeta:e.showMeta,styles:g})]})]})]})]}),t(Sn,{isOpen:je,onClose:()=>Ye(!1),episodes:e.episodes,currentEpisode:e.currentEpisode??void 0,watchedEpisodes:e.watchedEpisodes,onEpisodeClick:c=>{Ye(!1),u(`/watch/${r}/${c}`)}})]})};export{ao as default};
|