@serifpersia/dango 3.7.6 → 3.7.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/client/dist/assets/{AnimeCard-a7KkMGQv.js → AnimeCard-aZA4-g8o.js} +1 -1
- package/client/dist/assets/{AnimeInfo-De3gudGy.js → AnimeInfo-CFGRb1OW.js} +1 -1
- package/client/dist/assets/{AnimeInfoPage-adJHjnqz.js → AnimeInfoPage-CozJH4AM.js} +2 -2
- package/client/dist/assets/{Asmr-BH3j9n5n.js → Asmr-AxjnBdsh.js} +1 -1
- package/client/dist/assets/{AsmrResetProgressModal-CZGzmnlI.js → AsmrResetProgressModal-NKywttOY.js} +1 -1
- package/client/dist/assets/{Home-4lO9InFx.js → Home-CkdWZK2L.js} +1 -1
- package/client/dist/assets/{Insights-Co9pEzWb.js → Insights-DgnlUFjW.js} +1 -1
- package/client/dist/assets/{LibraryListPage-CgZiYRmp.js → LibraryListPage-CJxNJYC3.js} +1 -1
- package/client/dist/assets/{ListeningList-DX_Imiie.js → ListeningList-VZTVSt_i.js} +1 -1
- package/client/dist/assets/{Manga-tDOa59vQ.js → Manga-dDQAtejO.js} +1 -1
- package/client/dist/assets/{MangaInfoPage-D_3Rx6rr.js → MangaInfoPage-DzaSKarW.js} +1 -1
- package/client/dist/assets/{MangaReadPage-D0satiXp.js → MangaReadPage-CT6THZho.js} +1 -1
- package/client/dist/assets/{MangaResetProgressModal-Bd_lIuFo.js → MangaResetProgressModal-DrqN7OF0.js} +1 -1
- package/client/dist/assets/{Mature-DhozU6BP.js → Mature-BGitA9fy.js} +1 -1
- package/client/dist/assets/{MatureConsentModal-RZ_j_2BD.js → MatureConsentModal-DLVOORqW.js} +1 -1
- package/client/dist/assets/{MediaCard-BODgA6ir.js → MediaCard-DJNRuWDJ.js} +1 -1
- package/client/dist/assets/{OptionListMenu-CGazCg0C.js → OptionListMenu-CRaHF9k4.js} +1 -1
- package/client/dist/assets/Player-CdSjfMoO.js +56 -0
- package/client/dist/assets/{PlayerProvider-pi0at080.js → PlayerProvider-D02-hqdz.js} +1 -1
- package/client/dist/assets/{PlayerSettings-k4bqwbns.js → PlayerSettings-CXmAyRJh.js} +1 -1
- package/client/dist/assets/{QueueOptionsButton-C-y5QFrT.js → QueueOptionsButton-ByAwxtJ-.js} +1 -1
- package/client/dist/assets/{QueueRail-DGFI6xTM.js → QueueRail-BLf4fWOA.js} +1 -1
- package/client/dist/assets/{ReadingList-BB_fA_j0.js → ReadingList-Cm5omw5j.js} +1 -1
- package/client/dist/assets/{ResetProgressModal-DEnbScHS.js → ResetProgressModal-Dq-B23o_.js} +1 -1
- package/client/dist/assets/{Search-Dikasx2q.js → Search-C8rfGyYH.js} +1 -1
- package/client/dist/assets/{Settings-CCoAhBc0.js → Settings-Do5F5e2c.js} +1 -1
- package/client/dist/assets/{SkeletonGrid-w6TsxWu7.js → SkeletonGrid-sA6_IQY1.js} +1 -1
- package/client/dist/assets/{Trackers-CoM-8Hz9.js → Trackers-DeJr1sbR.js} +1 -1
- package/client/dist/assets/Tv-BkApELpu.js +4 -0
- package/client/dist/assets/{TvInfo-BjFZ57fG.js → TvInfo-C5cVdHka.js} +1 -1
- package/client/dist/assets/{TvPopup-D6UvGI7M.js → TvPopup-DyFUi32m.js} +1 -1
- package/client/dist/assets/{TvSearch-BDNZjbZo.js → TvSearch-BBYYrww5.js} +1 -1
- package/client/dist/assets/{TvWatchlist-er5RKLmv.js → TvWatchlist-SjHmyo2P.js} +1 -1
- package/client/dist/assets/{Watchlist-BiJ1SCAH.js → Watchlist-BnmsAcx0.js} +1 -1
- package/client/dist/assets/{index-BP1z44Uk.js → index-vb4WPdcb.js} +2 -2
- package/client/dist/assets/{libraryInvalidation-CVK2SYUR.js → libraryInvalidation-2sAPXNhJ.js} +1 -1
- package/client/dist/assets/{useAnimeInfoData-8RI9qMzw.js → useAnimeInfoData-Ai39I_f0.js} +1 -1
- package/client/dist/assets/{useAsmr-ClAcWwjW.js → useAsmr-XBCV7iDw.js} +1 -1
- package/client/dist/assets/{useAsmrPopup-CDcDqi0C.js → useAsmrPopup-DViHcQnO.js} +1 -1
- package/client/dist/assets/{useMangaLibrary-D3Foz2m_.js → useMangaLibrary-DrPp5K_1.js} +1 -1
- package/client/dist/assets/{useMangaPopup-kZzwoCN6.js → useMangaPopup-VGTfdKEu.js} +1 -1
- package/client/dist/assets/usePlaybackEnd-C5EyqR1L.js +10 -0
- package/client/dist/assets/{useProviders-OKWPunZg.js → useProviders-Bt-p5Jxv.js} +1 -1
- package/client/dist/assets/{useTv-BgO7EV-p.js → useTv-BpVapcT5.js} +1 -1
- package/client/dist/assets/{useTvLibrary-C6rSJQi_.js → useTvLibrary-BFRidauf.js} +1 -1
- package/client/dist/index.html +1 -1
- package/package.json +2 -2
- package/server/package.json +1 -1
- package/client/dist/assets/Player-M3yMiFzg.js +0 -56
- package/client/dist/assets/Tv-BLUeZ2n8.js +0 -4
- package/client/dist/assets/usePlaybackEnd-DmvZ__Ut.js +0 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
import{T as C}from"./vendor-core-DfaOB3Rn.js";import{b as p,u as d,a as l,e as Q}from"./vendor-query-BBT5_sHx.js";import{i as n,A as a,q as v,t as b}from"./index-
|
|
1
|
+
import{T as C}from"./vendor-core-DfaOB3Rn.js";import{b as p,u as d,a as l,e as Q}from"./vendor-query-BBT5_sHx.js";import{i as n,A as a,q as v,t as b}from"./index-vb4WPdcb.js";import{i as g}from"./libraryInvalidation-2sAPXNhJ.js";function k(s){return String(s||"").trim().toUpperCase()}function H(s){return k(s.id||s._id||"")}function K(s){return!!s.isAdult}const U=["Listening","Completed","On-Hold","Dropped","Planned"],T=s=>k(s),x=(s="All",r=1,e=24)=>{const t=n();return p(t.asmrLibrary.list.queryOptions({status:s,page:r,limit:e}))},_=()=>{const s=n();return p({...s.asmrLibrary.ids.queryOptions(),staleTime:1e3*60})},W=s=>{const r=n();return p({...r.asmrLibrary.check.queryOptions({id:s||""}),enabled:!!s,staleTime:1e3*60})},j=(s=24)=>{const r=n();return p(r.asmrProgress.continueListening.queryOptions({limit:s}))},z=s=>{const r=n();return p({...r.asmrProgress.getByWork.queryOptions({workId:s||""}),enabled:!!s})},B=()=>{const s=n(),r=d();return l({mutationFn:async e=>{const{silent:t,...m}=e;return b.asmrLibrary.add.mutate(m)},onSuccess:(e,t)=>{t.silent||a.success("Added to listening list"),r.invalidateQueries({queryKey:[v.asmrLibrary]}),r.invalidateQueries(s.asmrLibrary.pathFilter())},onError:e=>{a.error(`Failed to add: ${e.message}`)}})},R=()=>{const s=n(),r=d();return l(s.asmrLibrary.remove.mutationOptions({onSuccess:()=>{a.success("Removed from listening list"),g(r,"asmr"),r.invalidateQueries(s.asmrLibrary.pathFilter()),r.invalidateQueries(s.asmrProgress.pathFilter())},onError:e=>{a.error(`Failed to remove: ${e.message}`)}}))},Y=()=>{const s=n(),r=d();return l(s.asmrLibrary.setStatus.mutationOptions({onSuccess:()=>{a.success("Status updated"),g(r,"asmr"),r.invalidateQueries(s.asmrLibrary.pathFilter()),r.invalidateQueries(s.asmrProgress.pathFilter())},onError:e=>{a.error(`Failed to update status: ${e.message}`)}}))},J=()=>{const s=n(),r=d();return l(s.asmrProgress.save.mutationOptions({onSuccess:()=>{g(r,"asmr",!0),r.invalidateQueries(s.asmrLibrary.pathFilter()),r.invalidateQueries(s.asmrProgress.pathFilter())}}))},V=()=>{const s=n(),r=d();return l(s.asmrProgress.remove.mutationOptions({onSuccess:()=>{a.success("Progress reset"),g(r,"asmr",!0),r.invalidateQueries(s.asmrLibrary.pathFilter()),r.invalidateQueries(s.asmrProgress.pathFilter())},onError:e=>{a.error(`Failed to reset progress: ${e.message}`)}}))},X=()=>{const s=n(),r=d();return l(s.asmrLibrary.batchStatus.mutationOptions({onSuccess:e=>{a.success(`Status updated for ${e.updated??0} items`),g(r,"asmr"),r.invalidateQueries(s.asmrLibrary.pathFilter()),r.invalidateQueries(s.asmrProgress.pathFilter())},onError:e=>{a.error(`Failed to update statuses: ${e.message}`)}}))},Z=()=>{const s=n(),r=d();return l(s.asmrLibrary.removeMany.mutationOptions({onSuccess:e=>{const t=e.removed??0;a.success(`Removed ${t} ${t===1?"item":"items"} from listening list`),g(r,"asmr"),r.invalidateQueries(s.asmrLibrary.pathFilter()),r.invalidateQueries(s.asmrProgress.pathFilter())},onError:e=>{a.error(`Failed to remove: ${e.message}`)}}))},ss=()=>{const s=n(),r=d();return l(s.asmrProgress.removeMany.mutationOptions({onSuccess:e=>{const t=e.removed??0;a.success(`Reset progress for ${t} ${t===1?"item":"items"}`),g(r,"asmr",!0),r.invalidateQueries(s.asmrLibrary.pathFilter()),r.invalidateQueries(s.asmrProgress.pathFilter())},onError:e=>{a.error(`Failed to reset progress: ${e.message}`)}}))},rs=()=>{const s=B(),r=R(),{data:e}=_(),t=C(()=>new Set(e?.ids||[]),[e]);return{toggle:o=>{const i=T(o.rjCode);t.has(i)?r.mutate({id:i}):s.mutate({...o,thumbnail:o.thumbnail||""})},bookmarkedIds:t,pending:s.isPending||r.isPending}},f=300*1e3,F=15,es=(s,r,e,t)=>{const m=r+1,o=Q({queries:Array.from({length:m},(u,E)=>{const P=E+1;return{queryKey:[v.asmrBrowse,s,P,e,t],queryFn:()=>{const O=s.trim();return b.asmr.browse.query({q:O||void 0,page:P,sort:e&&e!=="latest"?e:void 0,rating:t||void 0})},staleTime:f}})}),i=o.flatMap(u=>u.data?.shows??[]),A=i.slice((r-1)*F,r*F),y=o[o.length-1]?.data,L=!!(y&&(y.hasNext||i.length>r*F)),S=o.some(u=>u.isLoading),c=o.some(u=>u.isFetching),q=o.some(u=>u.isError);return{data:{shows:A,hasNext:L},isLoading:S,isError:q,isFetching:c}},ts=s=>{const r=n(),e=p({...r.asmr.work.queryOptions({rj:s}),enabled:!!s,staleTime:f,refetchOnMount:"always"});return{...e,data:e.data}},$=15,h=6;function I(s){if(s.isAdult||!s.thumbnail)return!1;const r=(s.rating||"").toLowerCase();return r===""||r==="sfw"}function w(s,r){const e=new Set,t=[];for(const m of s)for(const o of m){if(t.length>=r)return t;const i=o.id||o._id;!i||e.has(i)||(e.add(i),I(o)&&t.push(o))}return t}const os=(s=!0)=>{const r=Q({queries:Array.from({length:$},(c,q)=>{const u=q+1;return{queryKey:[v.asmrBrowse,"",u,"popular_month",""],queryFn:()=>b.asmr.browse.query({page:u,sort:"popular_month"}),staleTime:f,enabled:s,retry:1}})}),e=r.map(c=>c.data?.shows??[]),t=w(e,h),m=r.every(c=>c.isFetched),o=s&&m&&t.length<h,i=p({queryKey:[v.asmrBrowse,"",1,"popular","sfw"],queryFn:()=>b.asmr.browse.query({page:1,sort:"popular",rating:"sfw"}),staleTime:f,enabled:o,retry:1}),A=i.data?.shows??[],y=t.length>=h?t.slice(0,h):w([t,A],h),L=s&&(r.some(c=>c.isLoading)||o&&i.isLoading),S=s&&m&&y.length===0&&r.some(c=>c.isError);return{data:y,isLoading:L,isError:S}};export{U as A,H as a,os as b,ts as c,W as d,rs as e,z as f,k as g,J as h,B as i,es as j,T as k,K as l,x as m,R as n,Y as o,X as p,Z as q,ss as r,V as s,j as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as b}from"./vendor-core-DfaOB3Rn.js";import{c as k}from"./useAsmr-
|
|
1
|
+
import{u as b}from"./vendor-core-DfaOB3Rn.js";import{c as k}from"./useAsmr-XBCV7iDw.js";import{a as g}from"./MediaCard-DJNRuWDJ.js";import{u as d}from"./usePopup-DS9jMzp6.js";const y=({data:o,anchorRect:n,bookmarked:a,onToggleBookmark:l,onMouseEnter:p,onMouseLeave:c,onRequestClose:u})=>{const{data:r,isLoading:m}=k(o.rjCode||null),e=r?.tracks.length??0,i=e>0,t=!m,s=[{icon:"headphones",label:t?i?`${e} track${e===1?"":"s"}`:"No tracks":"Loading tracks…"}];return o.rating&&s.push({label:o.rating.toUpperCase()}),o.isAdult&&s.push({label:"18+"}),o.progressLabel&&s.push({icon:"bookmark",label:o.progressLabel}),b(g,{anchorRect:n,title:o.title,subtitle:o.rjCode,cover:o.thumbnail,meta:s,synopsis:!t&&!r?.description?"Loading description…":r?.description??"No description available.",primaryAction:{to:o.listenTarget,label:i?"Listen now":t?"No tracks":"Loading…",icon:"play",disabled:!i},secondaryAction:{to:o.listenTarget,label:"Details"},bookmarked:a,bookmarkLabel:"Bookmark",onToggleBookmark:l,onMouseEnter:p,onMouseLeave:c,onRequestClose:u})},C=()=>d();export{y as A,C as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as u,c as f,u as c,a as g}from"./vendor-query-BBT5_sHx.js";import{q as v,t as b,i as o,A as s}from"./index-
|
|
1
|
+
import{b as u,c as f,u as c,a as g}from"./vendor-query-BBT5_sHx.js";import{q as v,t as b,i as o,A as s}from"./index-vb4WPdcb.js";import{T as L}from"./vendor-core-DfaOB3Rn.js";import{i as d}from"./libraryInvalidation-2sAPXNhJ.js";const q=300*1e3,h={mangadex:"https://mangadex.org/",mangapill:"https://www.mangapill.com/"},P=(e,a)=>`/api/proxy?url=${encodeURIComponent(a)}&referer=${encodeURIComponent(h[e])}`,B=(e,a)=>a&&(e==="mangapill"||e==="mangadex"?P(e,a):a),N=(e,a=!0)=>{const{provider:t,query:r,page:i,sort:n,status:m,type:p,rating:y,mature:l}=e;return u({queryKey:[v.mangaBrowse,t,r,i,n,m,p,y,l],queryFn:()=>b.manga.search.query({provider:t,q:r.trim()||void 0,page:i,sort:n||void 0,status:m||void 0,type:p||void 0,rating:y||void 0,mature:l?"1":void 0}),staleTime:q,enabled:a})},A=(e,a=14)=>{const{provider:t,query:r,sort:i,status:n,type:m,rating:p,mature:y}=e;return f({queryKey:[v.mangaBrowseInfinite,t,r,i,n,m,p,y,a],queryFn:({pageParam:l=1})=>b.manga.search.query({provider:t,q:r.trim()||void 0,page:l,limit:a,sort:i||void 0,status:n||void 0,type:m||void 0,rating:p||void 0,mature:y?"1":void 0}),initialPageParam:1,getNextPageParam:(l,M)=>l.hasNext?M.length+1:void 0,staleTime:q,enabled:!0})},I=(e,a,t="safe",r=!1)=>u({queryKey:[v.mangaDetail,e,a,t,r],queryFn:()=>b.manga.info.query({provider:e||"",id:a||"",rating:t,mature:r?"1":void 0}),enabled:!!e&&!!a,staleTime:q}),Q=(e,a,t)=>u({queryKey:[v.mangaPages,e,a],queryFn:()=>b.manga.pages.query({provider:e||"",id:a||""}),enabled:!!e&&!!a,staleTime:1800*1e3}),w=()=>{const e=o(),a=u({...e.manga.trending.queryOptions(),staleTime:600*1e3,retry:1});return{...a,data:a.data}},x=e=>e.contentRating==="erotica"||e.contentRating==="pornographic"||e.type==="doujinshi";function _(e,a){const t=e.titles??{};return a==="englishName"?t.en||e.title:a==="nativeName"&&(t.native||t.romaji||e.altTitle)||e.title}function D(e){return{englishName:e.titles?.en??e.title,nativeName:e.titles?.native??e.titles?.romaji??e.altTitle??void 0}}const S=/^anilist:ch:(\d+)$/;function K(e){if(!e)return null;const a=S.exec(e.trim());if(!a)return null;const t=Number.parseInt(a[1],10);return Number.isFinite(t)?t:null}function U(e,a){const t=String(a),r=e.find(i=>(i.number??"").trim()===t);return r||(e.find(i=>{const n=Number.parseFloat((i.number??"").trim());return Number.isFinite(n)&&n===a})??null)}const j=["Reading","Completed","On-Hold","Dropped","Planned"],F=(e,a)=>`${e.toLowerCase()}:${a}`,H=(e="All",a=1,t=24)=>{const r=o();return u(r.mangaLibrary.list.queryOptions({status:e,page:a,limit:t}))},R=()=>{const e=o();return u({...e.mangaLibrary.ids.queryOptions(),staleTime:1e3*60})},V=e=>{const a=o();return u({...a.mangaLibrary.check.queryOptions({id:e??""}),enabled:!!e,staleTime:1e3*60})},Y=e=>{const a=o();return u({...a.mangaLibrary.entry.queryOptions({id:e??""}),enabled:!!e,staleTime:1e3*60})},z=()=>{const e=o(),a=c();return g(e.mangaLibrary.link.mutationOptions({onSuccess:t=>{s.success(t?.progressMigrated?"Linked - chapter progress carried over":"Linked to AniList entry"),a.invalidateQueries(e.mangaLibrary.pathFilter()),d(a,"manga")},onError:t=>{s.error(`Failed to link: ${t.message}`)}}))},G=(e=24)=>{const a=o();return u(a.mangaProgress.continueReading.queryOptions({limit:e}))},J=e=>{const a=o();return u({...a.mangaProgress.byManga.queryOptions({mangaId:e??""}),enabled:!!e})},k=()=>{const e=o(),a=c();return g(e.mangaLibrary.add.mutationOptions({onSuccess:(t,r)=>{r.silent||s.success("Bookmarked"),a.invalidateQueries(e.mangaLibrary.pathFilter()),a.invalidateQueries({queryKey:[v.mangaLibrary]})},onError:t=>{s.error(`Failed to bookmark: ${t.message}`)}}))},C=()=>{const e=o(),a=c();return g(e.mangaLibrary.remove.mutationOptions({onSuccess:()=>{s.success("Bookmark removed"),a.invalidateQueries(e.mangaLibrary.pathFilter()),d(a,"manga")},onError:t=>{s.error(`Failed to remove: ${t.message}`)}}))},W=()=>{const e=o(),a=c();return g(e.mangaLibrary.setStatus.mutationOptions({onSuccess:()=>{s.success("Status updated"),a.invalidateQueries(e.mangaLibrary.pathFilter()),d(a,"manga")},onError:t=>{s.error(`Failed to update status: ${t.message}`)}}))},X=()=>{const e=o(),a=c();return g(e.mangaProgress.save.mutationOptions({onSuccess:()=>{d(a,"manga",!0),a.invalidateQueries(e.mangaProgress.pathFilter())}}))},Z=()=>{const e=o(),a=c();return g(e.mangaProgress.remove.mutationOptions({onSuccess:()=>{s.success("Progress reset"),d(a,"manga",!0),a.invalidateQueries(e.mangaProgress.pathFilter())},onError:t=>{s.error(`Failed to reset progress: ${t.message}`)}}))},ee=()=>{const e=o(),a=c();return g(e.mangaLibrary.batchStatus.mutationOptions({onSuccess:t=>{s.success(`Status updated for ${t.updated??0} items`),a.invalidateQueries(e.mangaLibrary.pathFilter()),d(a,"manga")},onError:t=>{s.error(`Failed to update statuses: ${t.message}`)}}))},ae=()=>{const e=o(),a=c();return g(e.mangaLibrary.removeMany.mutationOptions({onSuccess:t=>{const r=t.removed??0;s.success(`Removed ${r} ${r===1?"item":"items"} from reading list`),a.invalidateQueries(e.mangaLibrary.pathFilter()),d(a,"manga")},onError:t=>{s.error(`Failed to remove: ${t.message}`)}}))},te=()=>{const e=o(),a=c();return g(e.mangaProgress.removeMany.mutationOptions({onSuccess:t=>{const r=t.removed??0;s.success(`Reset progress for ${r} ${r===1?"item":"items"}`),d(a,"manga",!0),a.invalidateQueries(e.mangaProgress.pathFilter())},onError:t=>{s.error(`Failed to reset progress: ${t.message}`)}}))},re=()=>{const e=k(),a=C(),{data:t}=R(),r=L(()=>new Set(t?.ids||[]),[t]);return{toggle:n=>{const m=F(n.provider,n.id);r.has(m)?a.mutate(m):e.mutate({provider:n.provider,mangaId:n.id,title:n.title,cover:n.cover,altTitle:n.altTitle,contentRating:n.contentRating})},bookmarkedIds:r,pending:e.isPending||a.isPending}};export{te as A,Z as B,j as M,A as a,B as b,D as c,G as d,w as e,N as f,Y as g,k as h,x as i,z as j,I as k,V as l,F as m,J as n,C as o,W as p,K as q,_ as r,U as s,Q as t,re as u,P as v,X as w,H as x,ee as y,ae as z};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as k}from"./vendor-core-DfaOB3Rn.js";import{k as T,r as d}from"./useMangaLibrary-
|
|
1
|
+
import{u as k}from"./vendor-core-DfaOB3Rn.js";import{k as T,r as d}from"./useMangaLibrary-DrPp5K_1.js";import{d as y}from"./index-vb4WPdcb.js";import{a as h}from"./MediaCard-DJNRuWDJ.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}=T(e.provider,e.mangaId,e.rating||"safe",e.mature||!1),{titlePreference:g}=y(),s=o?.chapters.length??0,a=d({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 k(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};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import{u as t,A as S,q as B,h as F,d as k,T as J,$ as at}from"./vendor-core-DfaOB3Rn.js";import{M as De,B as K,S as re,i as ot,Y as Me,q as H,W as it,t as ct,g as lt}from"./index-vb4WPdcb.js";import{I as U}from"./vendor-icons-DrybRNxP.js";import{S as je,a as dt,f as Oe,m as ut,h as pt,d as ft,s as X,k as ht,u as mt,n as oe}from"./PlayerProvider-D02-hqdz.js";import{u as bt}from"./vendor-query-BBT5_sHx.js";import{i as ie,a as gt}from"./playbackCompletion-IPHm9fp5.js";const yt="_controls_pcbjf_1",_t="_titleContainer_pcbjf_9",vt="_scheduleInfo_pcbjf_15",St="_status_pcbjf_23",wt="_nextEpisode_pcbjf_35",Ct="_watchlistBtn_pcbjf_45",kt="_inList_pcbjf_72",xt="_queueBtn_pcbjf_83",Tt="_queueActive_pcbjf_95",Nt="_modeToggleBtn_pcbjf_101",Lt="_modeToggleActive_pcbjf_108",Bt="_markWatchedBtn_pcbjf_129",Et="_markWatchedDone_pcbjf_143",At="_streamPanel_pcbjf_154",Pt="_desktopEpisodeActions_pcbjf_168",$t="_sourceLoader_pcbjf_174",It="_episodeActions_pcbjf_187",Mt="_mobileEpisodeActions_pcbjf_201",jt="_episodeNavBtn_pcbjf_205",Ft="_primary_pcbjf_235",Rt="_secondary_pcbjf_245",Dt="_episodePickerBtn_pcbjf_249",Ot="_queueCountdown_pcbjf_253",qt="_speedBoostBadge_pcbjf_268",Ht="_videoContainer_pcbjf_299",Wt="_loadingOverlay_pcbjf_312",zt="_loadingDots_pcbjf_326",Vt="_dot_pcbjf_331",Kt="_bounce_pcbjf_1",Ut="_bufferingOverlay_pcbjf_348",Qt="_bufferingSpinner_pcbjf_357",Gt="_spin_pcbjf_444",Yt="_videoIframe_pcbjf_366",Xt="_videoElementHidden_pcbjf_389",Jt="_upscalerCanvas_pcbjf_394",Zt="_upscalerActive_pcbjf_407",er="_upscalerStatusBadge_pcbjf_411",tr="_subtitleOverlay_pcbjf_426",rr="_spinner_pcbjf_444",nr="_errorOverlay_pcbjf_505",sr="_retryButton_pcbjf_515",ar="_detailsToggleBtn_pcbjf_528",or="_descriptionSection_pcbjf_551",ir="_synopsisFlat_pcbjf_559",cr="_fullscreenActive_pcbjf_593",lr="_errorSubtext_pcbjf_636",Wn={controls:yt,titleContainer:_t,scheduleInfo:vt,status:St,nextEpisode:wt,watchlistBtn:Ct,inList:kt,queueBtn:xt,queueActive:Tt,modeToggleBtn:Nt,modeToggleActive:Lt,markWatchedBtn:Bt,markWatchedDone:Et,streamPanel:At,desktopEpisodeActions:Pt,sourceLoader:$t,episodeActions:It,mobileEpisodeActions:Mt,episodeNavBtn:jt,primary:Ft,secondary:Rt,episodePickerBtn:Dt,queueCountdown:Ot,speedBoostBadge:qt,videoContainer:Ht,loadingOverlay:Wt,loadingDots:zt,dot:Vt,bounce:Kt,bufferingOverlay:Ut,bufferingSpinner:Qt,spin:Gt,videoIframe:Yt,videoElementHidden:Xt,upscalerCanvas:Jt,upscalerActive:Zt,upscalerStatusBadge:er,subtitleOverlay:tr,spinner:rr,errorOverlay:nr,retryButton:sr,detailsToggleBtn:ar,descriptionSection:or,synopsisFlat:ir,fullscreenActive:cr,errorSubtext:lr},dr="_playerPageLayout_13s1u_1",ur="_noSidebar_13s1u_15",pr="_episodeSidebar_13s1u_19",fr="_playerMain_13s1u_32",hr="_videoPlayerWrapper_13s1u_40",mr="_playerInfoHeader_13s1u_56",br="_playerAnimeCard_13s1u_62",gr="_playerInfoContainer_13s1u_74",yr="_infoColumns_13s1u_86",_r="_videoTitleSection_13s1u_114",vr="_theaterMode_13s1u_288",zn={playerPageLayout:dr,noSidebar:ur,episodeSidebar:pr,playerMain:fr,videoPlayerWrapper:hr,playerInfoHeader:mr,playerAnimeCard:br,playerInfoContainer:gr,infoColumns:yr,videoTitleSection:_r,theaterMode:vr},Sr={fontSize:"subtitleFontSize",position:"subtitlePosition",bgOpacity:"subtitleBgOpacity",bgColor:"subtitleBgColor",textColor:"subtitleTextColor",edge:"subtitleEdge",bold:"subtitleBold"},W={fontSize:1.8,position:0,bgOpacity:.5,bgColor:"#000000",textColor:"#ffffff",edge:"shadow",bold:!1},pe=(e,r,s)=>Math.max(r,Math.min(s,e)),fe=e=>typeof e=="string"&&/^#[0-9a-fA-F]{6}$/.test(e),ce=(e,r,s,i)=>{try{const n=localStorage.getItem(e);if(n===null)return r;const o=parseFloat(n);return Number.isFinite(o)?pe(o,s,i):r}catch{return r}};function wr(){let e=W.edge,r=W.bgColor,s=W.textColor,i=W.bold;try{const n=localStorage.getItem("subtitleEdge");(n==="shadow"||n==="outline"||n==="none")&&(e=n);const o=localStorage.getItem("subtitleBgColor");fe(o)&&(r=o);const c=localStorage.getItem("subtitleTextColor");fe(c)&&(s=c);const u=localStorage.getItem("subtitleBold");u!==null&&(i=u==="true")}catch{}return{fontSize:ce("subtitleFontSize",W.fontSize,.5,10),position:ce("subtitlePosition",W.position,0,100),bgOpacity:ce("subtitleBgOpacity",W.bgOpacity,0,1),bgColor:r,textColor:s,edge:e,bold:i}}function qe(e,r){const s=`rgba(0, 0, 0, ${pe(r,0,1)})`;if(!fe(e))return s;const i=parseInt(e.slice(1,3),16),n=parseInt(e.slice(3,5),16),o=parseInt(e.slice(5,7),16);return`rgba(${i}, ${n}, ${o}, ${pe(r,0,1)})`}function He(e,r){return e==="none"?r<=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 Vn(e){return`
|
|
2
|
+
video::cue {
|
|
3
|
+
font-size: ${e.fontSize}rem !important;
|
|
4
|
+
color: ${e.textColor} !important;
|
|
5
|
+
background-color: ${qe(e.bgColor,e.bgOpacity)} !important;
|
|
6
|
+
font-weight: ${e.bold?"bold":"normal"} !important;
|
|
7
|
+
text-shadow: ${He(e.edge,e.bgOpacity)} !important;
|
|
8
|
+
}
|
|
9
|
+
`}function Kn(e){return[`font-size: ${e.fontSize}rem`,`color: ${e.textColor}`,`background-color: ${qe(e.bgColor,e.bgOpacity)}`,`font-weight: ${e.bold?"700":"400"}`,`text-shadow: ${He(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 Cr=new Set(["b","i","u","strong","em"]);function Un(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/<(\/?)([a-zA-Z]+)>/g,(s,i,n)=>Cr.has(n.toLowerCase())?`<${i}${n.toLowerCase()}>`:s)}function Qn(e){return e.replace(/<[^>]*>/g,"")}const Gn=["#ffffff","#ffff00","#7CFC00","#00e5ff","#ff9ff3","#ffa502"],Yn=["#000000","#1e272e","#2f3542","#3d0c02","#0c3d2e","#ffffff"];function Xn(e,r){const s=Number.isFinite(e)?e*16:W.fontSize*16;return!Number.isFinite(r)||r<=0?s/16:Math.min(s,Math.max(13,r*.07))/16}function Jn(e){const r=Math.abs(e/1e3).toFixed(1);return e>0?`+${r}s`:e<0?`-${r}s`:"0.0s"}function Zn(e,r){const s=e.clientWidth||0,i=e.clientHeight||0,n=e.videoWidth>0&&e.videoHeight>0?e.videoWidth/e.videoHeight:0;let o=i;n>0&&s>0&&i>0&&(o=s/i>n?i:s/n);const c=Math.max(0,(i-o)/2),u=Math.max(0,Math.min(100,Number(r)||0))/100*o;return c+u}const es=({isOpen:e,onClose:r,title:s,heading:i,message:n,children:o})=>t(De,{isOpen:e,onClose:r,title:s,width:"sm",children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t(U,{name:"check-circle",size:48,style:{color:"var(--accent-lighter)",marginBottom:"0.5rem"}}),t("p",{style:{fontSize:"1.1rem",fontWeight:600},children:i}),t("p",{style:{color:"var(--text-secondary)"},children:n}),o&&t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center",flexWrap:"wrap"},children:o})]})}),ts=({isOpen:e,onClose:r,title:s,message:i,resumeLabel:n="Resume",restartLabel:o="Start Over",onResume:c,onRestart:u})=>t(De,{isOpen:e,onClose:r,title:s,width:"sm",children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t("p",{children:i}),t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center"},children:[t(K,{variant:"secondary",onClick:u,children:o}),t(K,{onClick:c,children:n})]})]})}),kr="_centerControls_bxt8c_1",xr="_centerSkipBtn_bxt8c_15",Tr="_centerPlayPause_bxt8c_37",ne={centerControls:kr,centerSkipBtn:xr,centerPlayPause:Tr},rs=()=>t("div",{className:ne.centerControls,onClick:e=>e.stopPropagation(),children:[t(je,{seconds:-10,className:ne.centerSkipBtn}),t(dt,{className:ne.centerPlayPause,"data-speed-boost-ignore":"true"}),t(je,{seconds:10,className:ne.centerSkipBtn})]}),ns=({visible:e,title:r,episode:s,onBack:i,classes:n})=>t("div",{className:`${n.overlay} ${e?"":n.hidden} `,"data-speed-boost-ignore":"true",style:{pointerEvents:"none",background:"none"},children:t("div",{className:n.top,onClick:o=>o.stopPropagation(),children:[t("button",{className:n.backBtn,onClick:o=>{o.stopPropagation(),i()},title:"Back","aria-label":"Back",children:t(U,{name:"chevron-left"})}),t("div",{className:n.titleInfo,children:[t("span",{className:n.title,children:r}),s&&t("span",{className:n.episode,children:s})]})]})});function Nr(e){return e instanceof Element&&!!e.closest('button, input, select, textarea, a, [role="button"], [role="slider"], [data-player-ui="true"]')}function ss({engine:e,topBar:r,centerControls:s,bottomBar:i,settingsPanel:n,overlays:o,isInteracting:c=!1,nativeControls:u=!1,chromeDisabled:a=!1,className:l,onStageClick:b,children:C}){const g=Oe(e),A=ut(),p=S(void 0),d=S(void 0),N=S(0),f=S(c);f.current=c;const w=B(()=>{clearTimeout(p.current),p.current=void 0},[]),h=B(()=>{w();const x=e.getState();!x.isPlaying||x.isScrubbing||f.current||u||(p.current=setTimeout(()=>{const $=e.getState();f.current||$.isScrubbing||!$.isPlaying||e.setShowControls(!1)},A?5e3:3e3))},[e,A,u,w]),L=B(()=>{e.setShowControls(!0),h()},[e,h]);pt(e,L,!u&&!a),F(()=>(c||g.isScrubbing||!g.isPlaying?(e.setShowControls(!0),w()):h(),w),[e,c,g.isPlaying,g.isScrubbing,g.showControls,w,h]),F(()=>()=>{clearTimeout(d.current)},[]);const P=x=>{if(Nr(x.target)||u||a)return;b?.();const $=Date.now();if($-N.current<280){clearTimeout(d.current),d.current=void 0,N.current=0,e.toggleFullscreen();return}N.current=$,clearTimeout(d.current),d.current=setTimeout(()=>{d.current=void 0,e.setShowControls(!e.getState().showControls),h()},280)},R=g.showControls||g.isScrubbing||c||!g.isPlaying;return t(ft,{engine:e,children:t("div",{ref:e.containerRef,"data-player-root":"true",className:`${X.shell} ${g.isFullscreen?X.shellFullscreen:""} ${l??""}`,style:{cursor:!R&&g.isFullscreen?"none":"default"},onContextMenu:x=>x.preventDefault(),onPointerMove:x=>{x.pointerType==="mouse"&&L()},onFocusIn:L,onMouseLeave:()=>{window.matchMedia?.("(hover: hover) and (pointer: fine)").matches&&e.getState().isPlaying&&!f.current&&e.setShowControls(!1)},children:[t("div",{className:X.stage,onClick:P,children:C}),o,(g.error||g.playBlocked)&&t("div",{className:X.engineStatus,"data-player-ui":"true",children:t(ht,{})}),!a&&!u&&t("div",{className:X.uiLayer,children:[t("div",{"data-player-ui":"true",children:r}),R&&s&&t("div",{"data-player-ui":"true",children:s}),t("div",{"data-player-ui":"true",children:i}),n&&t("div",{"data-player-ui":"true",children:n})]})]})})}const Lr=e=>(e.language??e.lang??"").toLowerCase(),Br=e=>(e.label??"").toLowerCase(),Er=e=>`${e.language??e.lang??""}|||${e.label??""}`,Ar=e=>Lr(e).startsWith("en")||Br(e).includes("english");function as(e,r){if(e.length===0||r?.enabled===!1)return-1;const s=r?.lastKey??null;if(s){const n=e.findIndex(o=>Er(o)===s);if(n>=0)return n}const i=e.findIndex(Ar);return i>=0?i:0}const Pr="_statusArea_1xccu_1",$r="_toggleBtn_1xccu_20",Ir="_shortcuts_1xccu_46",Mr="_shortcutGroup_1xccu_56",jr="_shortcut_1xccu_46",Fr="_key_1xccu_70",Rr="_label_1xccu_91",_={statusArea:Pr,toggleBtn:$r,shortcuts:Ir,shortcutGroup:Mr,shortcut:jr,key:Fr,label:Rr},os=({showTheater:e=!0})=>{const[r,s]=k(!1);return t("div",{className:_.statusArea,children:[t("button",{type:"button",className:_.toggleBtn,onClick:()=>s(i=>!i),"aria-expanded":r,"aria-controls":"player-shortcuts",children:[t(U,{name:"keyboard",size:14}),t("span",{children:"Keyboard Shortcuts"}),r?t(U,{name:"chevron-up",size:12}):t(U,{name:"chevron-down",size:12})]}),r&&t("div",{id:"player-shortcuts",className:_.shortcuts,children:[t("div",{className:_.shortcutGroup,children:[t("div",{className:_.shortcut,children:[t("span",{className:_.key,children:"↑"}),t("span",{className:_.key,children:"↓"}),t("span",{className:_.label,children:"Volume"})]}),t("div",{className:_.shortcut,children:[t("span",{className:_.key,children:"←"}),t("span",{className:_.key,children:"→"}),t("span",{className:_.label,children:"Seek"})]})]}),t("div",{className:_.shortcutGroup,children:[t("div",{className:_.shortcut,children:[t("span",{className:_.key,children:"Space"}),t("span",{className:_.label,children:"Play/Pause"})]}),t("div",{className:_.shortcut,children:[t("span",{className:_.key,children:"F"}),t("span",{className:_.label,children:"Fullscreen"})]}),t("div",{className:_.shortcut,children:[t("span",{className:_.key,children:"M"}),t("span",{className:_.label,children:"Mute"})]}),e&&t("div",{className:_.shortcut,children:[t("span",{className:_.key,children:"T"}),t("span",{className:_.label,children:"Theater"})]}),t("div",{className:_.shortcut,children:[t("span",{className:_.key,children:"N"}),t("span",{className:_.label,children:"Next"})]})]})]})]})},Dr="_episodeListContainer_9tyin_1",Or="_drawerContainer_9tyin_9",qr="_episodeListHeader_9tyin_14",Hr="_drawerHeader_9tyin_20",Wr="_episodeListTitle_9tyin_29",zr="_rangeSelector_9tyin_41",Vr="_rangeButton_9tyin_47",Kr="_active_9tyin_70",Ur="_episodeList_9tyin_1",Qr="_drawerList_9tyin_89",Gr="_episodeItem_9tyin_118",Yr="_watched_9tyin_145",Xr="_episodeThumb_9tyin_167",Jr="_episodeText_9tyin_176",Zr="_episodeLabel_9tyin_184",en="_episodeSub_9tyin_189",v={episodeListContainer:Dr,drawerContainer:Or,episodeListHeader:qr,drawerHeader:Hr,episodeListTitle:Wr,rangeSelector:zr,rangeButton:Vr,active:Kr,episodeList:Ur,drawerList:Qr,episodeItem:Gr,watched:Yr,episodeThumb:Xr,episodeText:Jr,episodeLabel:Zr,episodeSub:en},tn=({episodes:e,currentEpisode:r,watchedEpisodes:s=[],onEpisodeClick:i,variant:n="sidebar",title:o="Episodes",header:c})=>{const[u,a]=k(0),l=S(null),b=J(()=>e.map(p=>typeof p=="string"?{id:p,label:`Episode ${p}`}:p),[e]),C=J(()=>new Set(s),[s]);F(()=>{const p=l.current;if(!p)return;let d=p.parentElement;for(;d;){const w=window.getComputedStyle(d);if((w.overflowY==="auto"||w.overflowY==="scroll")&&d.scrollHeight>d.clientHeight)break;d=d.parentElement}if(!d)return;const N=d.getBoundingClientRect(),f=p.getBoundingClientRect();d.scrollTop+=f.top+f.height/2-(N.top+d.clientHeight/2)},[r,u]);const g=J(()=>{if(b.length<=100)return[];const p=[];for(let d=0;d<b.length;d+=100){const N=d+1,f=Math.min(d+100,b.length);p.push(`${N}-${f}`)}return p},[b]),A=J(()=>{if(g.length===0)return b;const p=g[u];if(!p)return b;const[d,N]=p.split("-"),f=parseInt(d,10),w=parseInt(N,10);return b.slice(f-1,w)},[b,g,u]);return t("div",{className:`${v.episodeListContainer} ${n==="drawer"?v.drawerContainer:""}`,children:[t("div",{className:`${v.episodeListHeader} ${n==="drawer"?v.drawerHeader:""}`,children:[c,t("h3",{className:v.episodeListTitle,children:o}),g.length>0&&t("div",{className:v.rangeSelector,children:g.map((p,d)=>t("button",{className:`${v.rangeButton} ${u===d?v.active:""}`,onClick:()=>a(d),children:p},p))})]}),t("div",{className:`${v.episodeList} ${n==="drawer"?v.drawerList:""}`,children:A.map(p=>{const d=p.id===r,N=C.has(p.id)||p.watched===!0;return t("div",{ref:d?l:void 0,className:`${v.episodeItem} ${N?v.watched:""} ${d?v.active:""}`,onClick:()=>i(p.id),children:[p.thumbnail&&t("img",{src:p.thumbnail,alt:"",loading:"lazy",decoding:"async",className:v.episodeThumb}),t("span",{className:v.episodeText,children:[t("span",{className:v.episodeLabel,children:p.label??`Episode ${p.id}`}),p.sublabel&&t("span",{className:v.episodeSub,children:p.sublabel})]})]},p.id)})})]})},is=({variant:e="sidebar",count:r=12})=>t("div",{className:`${v.episodeListContainer} ${e==="drawer"?v.drawerContainer:""}`,children:[t("div",{className:`${v.episodeListHeader} ${e==="drawer"?v.drawerHeader:""}`,children:[t("h3",{className:v.episodeListTitle,children:"Episodes"}),t("div",{className:v.rangeSelector,children:[t(re,{width:"60px",height:"28px",variant:"rectangular"}),t(re,{width:"60px",height:"28px",variant:"rectangular"}),t(re,{width:"60px",height:"28px",variant:"rectangular"})]})]}),t("div",{className:`${v.episodeList} ${e==="drawer"?v.drawerList:""}`,children:Array.from({length:r}).map((s,i)=>t("div",{className:v.episodeItem,style:{border:"none",background:"transparent"},children:t(re,{width:"120px",height:"1.2rem",variant:"text"})},i))})]}),rn="_shell_cys6s_1",nn="_overlay_cys6s_10",sn="_drawer_cys6s_21",an="_handle_cys6s_56",on="_header_cys6s_64",cn="_headerCopy_cys6s_73",ln="_kicker_cys6s_79",dn="_title_cys6s_87",un="_closeBtn_cys6s_94",pn="_body_cys6s_116",q={shell:rn,overlay:nn,drawer:sn,handle:an,header:on,headerCopy:cn,kicker:ln,title:dn,closeBtn:un,body:pn};function cs({isOpen:e,onClose:r,episodes:s,currentEpisode:i,watchedEpisodes:n=[],onEpisodeClick:o,title:c,header:u}){return F(()=>{if(!e)return;const a=b=>{b.key==="Escape"&&r()},l=document.body.style.overflow;return document.body.style.overflow="hidden",document.addEventListener("keydown",a),()=>{document.body.style.overflow=l,document.removeEventListener("keydown",a)}},[e,r]),e?at(t("div",{className:q.shell,role:"dialog","aria-modal":"true","aria-label":"Episode picker",children:[t("button",{className:q.overlay,type:"button",onClick:r,"aria-label":"Close episodes"}),t("aside",{className:q.drawer,children:[t("div",{className:q.handle}),t("div",{className:q.header,children:[t("div",{className:q.headerCopy,children:[t("span",{className:q.kicker,children:"Episode picker"}),t("h3",{className:q.title,children:"Choose an episode"})]}),t("button",{className:q.closeBtn,type:"button",onClick:r,"aria-label":"Close",children:t(U,{name:"times"})})]}),t("div",{className:q.body,children:t(tn,{episodes:s,currentEpisode:i,watchedEpisodes:n,onEpisodeClick:o,variant:"drawer",title:c,header:u})})]})]}),document.body):null}const fn="_sourceSelectionContainer_1am19_1",hn="_providerSelectContainer_1am19_14",mn="_providerSelect_1am19_14",bn="_sourceSelect_1am19_1",gn="_sourceButtons_1am19_70",yn="_sourceButton_1am19_70",_n="_active_1am19_95",ls={sourceSelectionContainer:fn,providerSelectContainer:hn,providerSelect:mn,sourceSelect:bn,sourceButtons:gn,sourceButton:yn,active:_n},ds=({skipIntervals:e,showId:r,episodeNumber:s,episodeCount:i,sourceType:n,showMeta:o})=>{const c=bt(),u=ot(),{engine:a,mediaRef:l}=mt({volumeKey:"playerVolume",mutedKey:"playerMuted"}),{isPlaying:b,isMuted:C,volume:g,duration:A,isScrubbing:p,isBuffering:d,isFullscreen:N,isSpeedBoostActive:f,showControls:w}=Oe(a),h=a.containerRef,L=S(null),P=S(0),R=S(Math.random().toString(36).substring(2)),x=a.setShowControls,[$,D]=k(localStorage.getItem("autoSkipEnabled")==="true"),[ae,z]=k(null),[T]=k(wr),[Z,me]=k(T.fontSize),[We,be]=k(T.position),[ze,ge]=k(T.bgOpacity),[Ve,ye]=k(T.bgColor),[Ke,_e]=k(T.textColor),[Ue,ve]=k(T.edge),[Qe,Se]=k(T.bold),we=B((m,E)=>{if({fontSize:y=>typeof y!="number"?!1:(me(y),!0),position:y=>typeof y!="number"?!1:(be(y),!0),bgOpacity:y=>typeof y!="number"?!1:(ge(y),!0),bgColor:y=>typeof y!="string"?!1:(ye(y),!0),textColor:y=>typeof y!="string"?!1:(_e(y),!0),edge:y=>y!=="shadow"&&y!=="outline"&&y!=="none"?!1:(ve(y),!0),bold:y=>typeof y!="boolean"?!1:(Se(y),!0)}[m](E))try{localStorage.setItem(Sr[m],String(E))}catch{}},[]),[Ge,Ye]=k([]),[Xe,Je]=k(null),[Ze,et]=k(!1),[tt,rt]=k(!1),[nt,Ce]=k(()=>{try{return localStorage.getItem("playerUseNativeControls")==="true"}catch{return!1}}),Q=S(!1),ee=S(-1),te=B(()=>{const m=l.current;return!r||!s||!o?.name?null:{showId:r,episodeNumber:s,episodeCount:i,currentTime:a.getTimeline().currentTime,duration:a.getState().duration,showName:o.name,showThumbnail:o.thumbnail,nativeName:o.names?.native,englishName:o.names?.english,genres:Array.isArray(o.genres)?o.genres.map(E=>typeof E=="string"?E:E?.name).filter(Boolean):void 0,popularityScore:o.score,type:o.type,isPlaying:m?!m.paused:n==="iframe",sessionId:R.current,isAdult:o.isAdult}},[a,l,r,s,i,o,n]),I=B((m=!1,E=!1)=>{if(Q.current)return!1;const j=te();if(!j)return!1;const y=l.current;if(!y&&!m&&n!=="iframe"||n!=="iframe"&&j.duration<=0)return!1;const O=a.getTimeline().currentTime;if(!E){if(O===0)return!1;const Y=y?Math.abs(O-ee.current):0;if(!m&&y&&O!==y.duration&&Y<5)return!1}return j.currentTime=O,ee.current=O,m?(async()=>{try{await Me("progress.updateProgress",j),c.invalidateQueries({queryKey:[H.playerData,r]}),c.invalidateQueries({queryKey:[H.videoSources,r,s]}),c.invalidateQueries({queryKey:[H.continueWatching]}),c.invalidateQueries({queryKey:[H.thisWeekSchedule]}),c.invalidateQueries(u.continueWatching.pathFilter())}catch(Y){console.error("Failed to update progress:",Y)}})():Me("progress.updateProgress",j).then(()=>{ie(j.currentTime,j.duration)&&c.invalidateQueries({queryKey:[H.playerData,r]})}).catch(Y=>console.error("Failed to update progress:",Y)),!0},[a,te,n,c,r,s,u.continueWatching,l]);F(()=>{const m=()=>{Q.current||I(!0)};window.addEventListener("beforeunload",m),window.addEventListener("pagehide",m);const E=()=>{document.visibilityState==="hidden"&&m()};document.addEventListener("visibilitychange",E);const j=L;return()=>{window.removeEventListener("beforeunload",m),window.removeEventListener("pagehide",m),document.removeEventListener("visibilitychange",E),Q.current||I(!0),j.current&&clearTimeout(j.current)}},[I]);const ke=B(()=>a.setShowControls(!0),[a]),xe=a.toggleFullscreen,Te=B(()=>{a.togglePlay(),x(!0)},[a,x]),Ne=B(()=>{a.toggleMute(),x(!0)},[a,x]),Le=B(m=>{a.seekRelative(m),L.current&&clearTimeout(L.current),L.current=setTimeout(()=>I(!1,!0),1500),x(!0)},[a,I,x]),Be=B(()=>{Q.current=!1,I(!1,!0)},[I]),Ee=B(()=>{x(!0),I(!1,!0)},[I,x]);F(()=>{Q.current=!1,ee.current=-1,P.current=0,R.current=Math.random().toString(36).substring(2),a.reset()},[a,r,s]);const Ae=a.reset;F(()=>{const m=R.current;return()=>{it(m)}},[a,r,s]),F(()=>{if(n!=="iframe")return;I(!1,!0);const m=setInterval(()=>{I(!1,!0)},6e4);return()=>clearInterval(m)},[n,I]);const Pe=B(()=>{const m=l.current;if(!m)return;const E=m.currentTime||0,j=Date.now(),y=ie(E,m.duration)&&!ie(ee.current,m.duration);(y||j-P.current>6e4)&&I(!1,y)&&(P.current=j);const O=e.find(G=>E>=G.start_time&&E<G.end_time)||null;z(G=>G?.skip_id!==O?.skip_id?O:G),$&&O&&!m.paused&&(m.currentTime=O.end_time,z(null))},[l,e,$,I]),$e=B(()=>{const m=te();m&&(m.currentTime=m.duration,ct.progress.updateProgress.mutate(m).then(()=>{c.invalidateQueries({queryKey:[H.playerData,r]}),c.invalidateQueries({queryKey:[H.videoSources,r,s]}),c.invalidateQueries({queryKey:[H.continueWatching]})}).catch(E=>console.error("Failed to send final progress:",E)))},[te,c,r,s]),Ie=B(()=>{Q.current=!0,$e()},[$e]),st=J(()=>({togglePlay:Te,seek:Le,toggleMute:Ne,toggleFullscreen:xe,onPlay:Be,onPause:Ee,formatTime:lt,onTimeUpdate:Pe,onEnded:Ie,setShowControls:x,setIsAutoSkipEnabled:D,setCurrentSkipInterval:z,setSubtitleFontSize:me,setSubtitlePosition:be,setSubtitleBgOpacity:ge,setSubtitleBgColor:ye,setSubtitleTextColor:_e,setSubtitleEdge:ve,setSubtitleBold:Se,setSubtitleStyle:we,setAvailableSubtitles:Ye,setActiveSubtitleTrack:Je,setShowSettings:et,setShowVolumeSlider:rt,flashControls:ke,sendProgressUpdate:I,setUseNativeControls:Ce,resetMediaState:Ae}),[Te,Le,Ne,xe,Be,Ee,Pe,Ie,I,Ce,Ae,ke,we,x]);return{engine:a,refs:{videoRef:l,playerContainerRef:h},state:{isPlaying:b,isMuted:C,volume:g,isFullscreen:N,duration:A,showControls:w,isScrubbing:p,isAutoSkipEnabled:$,currentSkipInterval:ae,subtitleFontSize:Z,subtitlePosition:We,subtitleBgOpacity:ze,subtitleBgColor:Ve,subtitleTextColor:Ke,subtitleEdge:Ue,subtitleBold:Qe,availableSubtitles:Ge,activeSubtitleTrack:Xe,showSettings:Ze,showVolumeSlider:tt,isBuffering:d,isSpeedBoostActive:f,useNativeControls:nt},actions:st}};function vn(){try{return typeof navigator<"u"&&/android/i.test(navigator.userAgent)}catch{return!1}}function us(e,r){const{refs:s,actions:i}=e,n=S(r);n.current=r;const o=S(!1),c=S(!1),u=a=>{try{if(a)return a.matches}catch{}try{return window.innerWidth>window.innerHeight}catch{return!1}};F(()=>{if(!vn())return;let a=null;const l=()=>{const b=s.playerContainerRef.current;if(u(a)){if(!n.current||!b||oe(s.videoRef.current)||c.current)return;o.current=!0,i.toggleFullscreen()}else c.current=!1,o.current&&(o.current=!1,oe(s.videoRef.current)&&i.toggleFullscreen())};try{a=window.matchMedia("(orientation: landscape)"),a.addEventListener?a.addEventListener("change",l):a.addListener(l)}catch{}return l(),()=>{try{a&&(a.removeEventListener?a.removeEventListener("change",l):a.removeListener(l))}catch{}}},[i,s.playerContainerRef,s.videoRef,r]),F(()=>{const a=()=>{if(!oe(s.videoRef.current)){o.current=!1;try{window.matchMedia("(orientation: landscape)").matches&&(c.current=!0)}catch{c.current=!0}}};return document.addEventListener("fullscreenchange",a),document.addEventListener("webkitfullscreenchange",a),()=>{document.removeEventListener("fullscreenchange",a),document.removeEventListener("webkitfullscreenchange",a)}},[s.videoRef])}const Sn=e=>Math.max(8,Math.min(40,Math.ceil(e/16.7)+4));function ps({videoRef:e,canvasRef:r,delayMs:s,enabled:i}){const n=S(s);n.current=s;const o=S([]),c=S(-1),u=S(-1),a=S(!1),l=S(0),b=S(null);F(()=>{const C=f=>{if(f)try{f.close()}catch{}},g=()=>{for(const f of o.current)C(f.bitmap);o.current=[]};if(!i){g(),c.current=-1,u.current=-1,a.current=!1,l.current=0;return}let A=!1;const p=()=>{b.current!==null&&(cancelAnimationFrame(b.current),b.current=null)},d=()=>{A||(p(),b.current=requestAnimationFrame(()=>{N()}))};async function N(){if(A)return;const f=e.current,w=r.current;if(!f||!w||f.videoWidth===0){d();return}if(f.paused||f.ended||document.hidden||f.readyState<HTMLMediaElement.HAVE_CURRENT_DATA){d();return}const h=f.getVideoPlaybackQuality().totalVideoFrames;if(h===c.current){d();return}(f.seeking||u.current>=0&&Math.abs(f.currentTime-u.current)>.5)&&(g(),a.current=!1,l.current=0,c.current=-1),u.current=f.currentTime,(w.width!==f.videoWidth||w.height!==f.videoHeight)&&(w.width=f.videoWidth,w.height=f.videoHeight);const L=Math.max(0,n.current||0);L>l.current&&(a.current=!1);try{const P=await createImageBitmap(f);if(A){C(P);return}c.current=h;const R=performance.now(),x=w.getContext("2d"),$=T=>{x&&x.drawImage(T,0,0,w.width,w.height)};if(L<=0){g(),a.current=!1,l.current=0,$(P),C(P),d();return}const D=o.current;D.push({bitmap:P,capture:R});const ae=Sn(L);for(;D.length>ae;)C(D.shift()?.bitmap);let z=-1;for(let T=D.length-1;T>=0;T--)if(R-D[T].capture>=L){z=T;break}if(z!==-1){for(let Z=0;Z<z;Z++)C(D.shift()?.bitmap);const T=D.shift();T?($(T.bitmap),C(T.bitmap),a.current=!0,l.current=L):$(P)}else if(!a.current)$(P);else{const T=D.shift();T?($(T.bitmap),C(T.bitmap)):$(P)}}catch{}d()}return d(),()=>{A=!0,p();for(const f of o.current)try{f.bitmap.close()}catch{}o.current=[]}},[i,e,r])}const Fe=(e,r)=>{try{localStorage.setItem("playerVideoDelayMs",String(e)),localStorage.setItem("playerVideoDelayEnabled",String(r))}catch{}},Re=e=>{try{localStorage.setItem("playerVideoDelayEnabled",String(e))}catch{}};function fs(e,r){const[s,i]=k(()=>{try{const h=Number(localStorage.getItem("playerVideoDelayMs"));if(Number.isFinite(h)&&h>=0&&h<=500)return Math.round(h)}catch{}return 180}),[n,o]=k(()=>{try{return localStorage.getItem("playerVideoDelayEnabled")==="true"}catch{return!1}}),[c,u]=k(!1),[a,l]=k(!1),b=S(null),C=S(null),g=h=>{const L=Math.max(0,Math.min(500,Math.round(h)));i(L);try{localStorage.setItem("playerVideoDelayMs",String(L))}catch{}},A=h=>{o(h),Re(h)},p=B(()=>{l(!1),u(!1)},[]);return{videoDelayMs:s,videoDelayEnabled:n,setDelayEnabled:A,handleVideoDelayChange:g,isCalibrating:c,testClipActive:a,stopCalibration:p,openAvSyncCalibrator:()=>{b.current={enabled:n,ms:s},o(!0),Re(!0),r?.(),u(!0)},cancelAvSyncCalibrator:()=>{const h=b.current;b.current=null,h&&(i(h.ms),o(h.enabled),Fe(h.ms,h.enabled)),l(!1),u(!1)},applyAvSyncCalibrator:()=>{b.current=null,o(!0),Fe(s,!0),l(!1),u(!1)},toggleTestClip:()=>{if(a){l(!1);return}const h=e.current;h&&!isNaN(h.currentTime)&&(C.current=h.currentTime),l(!0)},calibReturnRef:C,effectiveVideoDelayMs:n?s:0}}function hs(){const[e,r]=k(()=>{try{return localStorage.getItem("playerTheaterMode")==="true"}catch{return!1}});F(()=>{try{e?document.body.classList.add("theater-mode"):document.body.classList.remove("theater-mode")}catch(n){console.error(n)}return()=>{try{document.body.classList.remove("theater-mode")}catch(n){console.error(n)}}},[e]);const s=B(()=>{r(n=>{const o=!n;try{localStorage.setItem("playerTheaterMode",o.toString())}catch{}return o})},[]),i=B(n=>{if(e&&n.target===n.currentTarget){r(!1);try{localStorage.setItem("playerTheaterMode","false")}catch{}}},[e]);return{isTheaterMode:e,toggleTheaterMode:s,handleLayoutClick:i}}const V={enabled:!0,blur:60,saturation:150,brightness:70,opacity:60};function wn(){try{const e=localStorage.getItem("playerAmbientLight");if(!e)return V;const r=JSON.parse(e),s=(i,n,o,c)=>{const u=Number(i);return Number.isFinite(u)?Math.max(o,Math.min(c,u)):n};return{enabled:r.enabled??V.enabled,blur:s(r.blur,V.blur,0,120),saturation:s(r.saturation,V.saturation,0,200),brightness:s(r.brightness,V.brightness,20,120),opacity:s(r.opacity,V.opacity,10,100)}}catch{return V}}function ms(){const[e,r]=k(wn),s=B(i=>{r(n=>{const o={...n,...i};try{localStorage.setItem("playerAmbientLight",JSON.stringify(o))}catch{}return o})},[]);return{settings:e,update:s}}const Cn="_theaterAmbient_x9t0o_1",kn={theaterAmbient:Cn},le=160,de=90,xn=120,bs=({videoRef:e,active:r,settings:s,className:i})=>{const n=S(null);return F(()=>{if(!r)return;const o=n.current,c=e.current;if(!o||!c)return;const u=o.getContext("2d",{alpha:!1});if(!u)return;let a=0,l=0,b=!1;const C=()=>{if(!(c.readyState<2||!c.videoWidth))try{const d=c.videoWidth,N=c.videoHeight,f=le/de,w=d/N;let h=d,L=N,P=0,R=0;w>f?(h=N*f,P=(d-h)/2):(L=d/f,R=(N-L)/2),u.drawImage(c,P,R,h,L,0,0,le,de)}catch{}},g=d=>{b||c.paused||(a=requestAnimationFrame(g),!(d-l<xn)&&(l=d,C()))},A=()=>{b||(cancelAnimationFrame(a),l=0,a=requestAnimationFrame(g))},p=()=>cancelAnimationFrame(a);return c.addEventListener("play",A),c.addEventListener("pause",p),c.addEventListener("seeked",C),c.addEventListener("loadeddata",C),a=requestAnimationFrame(g),()=>{b=!0,cancelAnimationFrame(a),c.removeEventListener("play",A),c.removeEventListener("pause",p),c.removeEventListener("seeked",C),c.removeEventListener("loadeddata",C)}},[r,e]),r?t("canvas",{ref:n,width:le,height:de,"aria-hidden":"true",className:i??kn.theaterAmbient,style:{filter:`blur(${s.blur}px) saturate(${s.saturation}%) brightness(${s.brightness}%)`,opacity:s.opacity/100}}):null},Tn="_row_1fq55_1",Nn="_rowHeader_1fq55_9",Ln="_rowLabel_1fq55_17",Bn="_rowValue_1fq55_28",En="_slider_1fq55_36",An="_swatches_1fq55_99",Pn="_swatch_1fq55_99",$n="_swatchPicked_1fq55_114",In="_colorInput_1fq55_120",Mn="_segmented_1fq55_131",M={row:Tn,rowHeader:Nn,rowLabel:Ln,rowValue:Bn,slider:En,swatches:An,swatch:Pn,swatchPicked:$n,colorInput:In,segmented:Mn},jn=({label:e,display:r,min:s,max:i,step:n,value:o,percent:c,onChange:u,onCommit:a})=>t("div",{className:M.row,children:[t("div",{className:M.rowHeader,children:[t("span",{className:M.rowLabel,children:e}),t("span",{className:M.rowValue,children:r})]}),t("input",{type:"range",className:M.slider,min:s,max:i,step:n,value:o,"aria-label":e,"data-speed-boost-ignore":"true",onInput:l=>u(Number(l.target.value)),onMouseDown:l=>l.stopPropagation(),onPointerDown:l=>l.stopPropagation(),onTouchStart:l=>l.stopPropagation(),onPointerUp:a,onPointerCancel:a,onTouchEnd:a,onKeyUp:a,onBlur:a,style:{"--slider-percent":`${c}%`}})]}),gs=({label:e,colors:r,value:s,onChange:i})=>t("div",{className:M.row,children:[t("div",{className:M.rowHeader,children:t("span",{className:M.rowLabel,children:e})}),t("div",{className:M.swatches,children:[r.map(n=>t("button",{type:"button","aria-label":`${e} ${n}`,"aria-pressed":s.toLowerCase()===n.toLowerCase(),onClick:()=>i(n),className:`${M.swatch} ${s.toLowerCase()===n.toLowerCase()?M.swatchPicked:""}`,style:{backgroundColor:n}},n)),t("input",{type:"color","aria-label":`Custom ${e.toLowerCase()}`,className:M.colorInput,value:s,"data-speed-boost-ignore":"true",onInput:n=>i(n.target.value),onMouseDown:n=>n.stopPropagation(),onPointerDown:n=>n.stopPropagation(),onTouchStart:n=>n.stopPropagation()})]})]});function ys({label:e,options:r,value:s,onChange:i}){return t("div",{className:M.row,children:[t("div",{className:M.rowHeader,children:t("span",{className:M.rowLabel,children:e})}),t("div",{className:M.segmented,role:"group","aria-label":e,children:r.map(n=>t("button",{type:"button","aria-pressed":s===n,onClick:()=>i(n),children:[t("span",{children:n}),s===n&&t(U,{name:"check",size:10})]},n))})]})}const se=10,he=500,ue=e=>Math.max(0,Math.min(he,Math.round(e))),_s=({isOpen:e,ms:r,onChange:s,onApply:i,onClose:n,testClipActive:o,onTestClip:c})=>e?t("div",{role:"dialog","aria-label":"Calibrate audio video sync","data-speed-boost-ignore":"true",onClick:u=>u.stopPropagation(),style:{position:"absolute",right:8,bottom:112,width:"min(260px, calc(100% - 16px))",maxHeight:"calc(100% - 124px)",overflowY:"auto",overflowX:"hidden",zIndex:60,display:"flex",flexDirection:"column",alignItems:"center",gap:8,padding:12,borderRadius:"var(--radius-lg)",border:"1px solid var(--glass-border)",background:"rgba(18, 18, 22, 0.95)",boxShadow:"var(--glass-shadow)",backdropFilter:"blur(14px)",WebkitBackdropFilter:"blur(14px)",boxSizing:"border-box"},children:[t("div",{style:{fontSize:"0.8rem",fontWeight:800,color:"var(--text-primary)"},children:"A/V sync"}),t("div",{children:t(K,{size:"sm",variant:"secondary",onClick:c,children:o?"Back to video":"Preview test clip"})}),t("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",gap:6,flexWrap:"wrap"},children:[t(K,{size:"sm",onClick:()=>s(ue(r-se)),"aria-label":"Decrease delay by 10 milliseconds",children:["− ",se,"ms"]}),t("div",{style:{fontSize:"1.1rem",fontWeight:800,minWidth:64,textAlign:"center"},children:[r,"ms"]}),t(K,{size:"sm",onClick:()=>s(ue(r+se)),"aria-label":"Increase delay by 10 milliseconds",children:["+ ",se,"ms"]})]}),t(jn,{label:"Video delay",display:`${r}ms`,min:0,max:he,step:5,value:r,percent:r/he*100,onChange:u=>s(ue(u))}),t("div",{style:{display:"flex",gap:8,justifyContent:"center",flexWrap:"wrap"},children:[t(K,{size:"sm",variant:"secondary",onClick:n,children:"Cancel"}),t(K,{size:"sm",onClick:i,children:["Apply ",r,"ms"]})]})]}):null;function vs({videoRef:e,sourceType:r,resetKey:s,onEnd:i}){const n=S(!1),o=S(i);o.current=i,F(()=>{n.current=!1},[s]);const c=B(()=>{const a=e.current?.duration;!a||!Number.isFinite(a)||console.info(`[playback] duration ${a.toFixed(2)}s`)},[e]);return{checkEnd:B((a=!1)=>{const l=e.current;!l||r==="iframe"||n.current||!a&&!gt(l.currentTime,l.duration)||(n.current=!0,console.info(`[playback] end reached at ${l.currentTime.toFixed(2)}s / ${l.duration.toFixed(2)}s`),o.current())},[r,e]),logDuration:c}}export{bs as A,Yn as B,rs as C,W as D,is as E,V as F,jn as M,ss as P,ts as R,gs as S,Gn as T,ns as a,ls as b,Vn as c,Kn as d,Zn as e,Xn as f,Qn as g,fs as h,ps as i,hs as j,vs as k,us as l,ms as m,zn as n,es as o,as as p,tn as q,Un as r,Er as s,Wn as t,ds as u,_s as v,os as w,cs as x,Jn as y,ys as z};
|
|
@@ -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,J 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,J as n}from"./index-vb4WPdcb.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 l,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 l,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-DJNRuWDJ.js";import{T as g}from"./TvPopup-DyFUi32m.js";import{c as m,i as f}from"./useTvLibrary-BFRidauf.js";import{b as i}from"./vendor-query-BBT5_sHx.js";import{i as p}from"./index-vb4WPdcb.js";const _=l(({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})})}),u=1e3*60*5,b=e=>{const a=p(),{query:s,type:n,genre:t,year:r,sort_by:y,page:c}=e;return i({...a.tv.search.queryOptions({q:s?.trim()||"",type:n||"multi",genre:t||"",year:r&&r!=="ALL"?r:"",sortBy:y||"popularity.desc",page:c||1}),staleTime:u,retry:1})},A=(e="all",a="week",s=1,n=!0)=>{const t=p(),r=i({...t.tv.trending.queryOptions({mediaType:e,timeWindow:a,page:s}),enabled:n,staleTime:u,retry:1});return{...r,data:r.data}};export{_ as T,b as a,A as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{T as p}from"./vendor-core-DfaOB3Rn.js";import{b as v,u as i,a as n}from"./vendor-query-BBT5_sHx.js";import{i as a,A as o,q as y,t as g}from"./index-
|
|
1
|
+
import{T as p}from"./vendor-core-DfaOB3Rn.js";import{b as v,u as i,a as n}from"./vendor-query-BBT5_sHx.js";import{i as a,A as o,q as y,t as g}from"./index-vb4WPdcb.js";import{i as u}from"./libraryInvalidation-2sAPXNhJ.js";const l=t=>String(t).toLowerCase()==="movie"?"movie":"tv",h=(t,e)=>`${l(t)}:${e}`,Q=(t,e)=>{const r=l(t);return`/tv/${e}?type=${r}`},$=(t,e,r,s)=>{const c=new URLSearchParams;return c.set("type",l(t)),r!==void 0&&c.set("s",String(r)),s!==void 0&&c.set("e",String(s)),`/tv/${e}/watch?${c.toString()}`},O=t=>t.adult===!0||t.adult===1,R={10759:"Action & Adventure",16:"Animation",35:"Comedy",80:"Crime",99:"Documentary",18:"Drama",10751:"Family",10762:"Kids",9648:"Mystery",10765:"Sci-Fi & Fantasy",37:"Western"},f={28:"Action",12:"Adventure",16:"Animation",35:"Comedy",80:"Crime",99:"Documentary",18:"Drama",10751:"Family",14:"Fantasy",36:"History",27:"Horror",9648:"Mystery",10749:"Romance",878:"Sci-Fi",53:"Thriller",10752:"War",37:"Western"},A=["Watching","Completed","On-Hold","Dropped","Planned"],T=(t,e)=>h(t,e),E=(t="All",e=1,r=24)=>{const s=a();return v(s.tvLibrary.list.queryOptions({status:t,page:e,limit:r}))},b=()=>{const t=a();return v({...t.tvLibrary.ids.queryOptions(),staleTime:1e3*60})},k=t=>{const e=a();return v({...e.tvLibrary.check.queryOptions({id:t||""}),enabled:!!t,staleTime:1e3*60})},M=(t=24)=>{const e=a();return v(e.tvProgress.continueWatching.queryOptions({limit:t}))},B=t=>{const e=a();return v({...e.tvProgress.getByMedia.queryOptions({mediaId:t||""}),enabled:!!t})},I=(t,e,r)=>{const s=a();return v({...s.tvProgress.latest.queryOptions({mediaId:t||"",season:e,episode:r}),enabled:!!t,staleTime:0})},F=()=>{const t=a(),e=i();return n({mutationFn:async r=>{const{silent:s,...c}=r;return g.tvLibrary.add.mutate(c)},onSuccess:(r,s)=>{s.silent||o.success("Added to TV watchlist"),e.invalidateQueries({queryKey:[y.tvLibrary]}),e.invalidateQueries(t.tvLibrary.pathFilter())},onError:r=>{o.error(`Failed to add: ${r.message}`)}})},S=()=>{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}`)}}))},w=()=>{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}`)}}))},D=()=>{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())}}))},W=()=>{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}`)}}))},V=()=>{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}`)}}))},_=()=>{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}`)}}))},U=()=>{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}`)}}))},H=()=>{const t=F(),e=S(),{data:r}=b(),s=p(()=>new Set(r?.ids||[]),[r]);return{toggle:d=>{const m=T(d.mediaType,d.tmdbId);s.has(m)?e.mutate(m):t.mutate({...d,poster:d.poster||""})},bookmarkedIds:s,pending:t.isPending||e.isPending}};export{f as M,R as T,S as a,W as b,Q as c,h as d,k as e,H as f,D as g,w as h,O as i,F as j,I as k,B as l,E as m,l as n,V as o,_ as p,U as q,A as r,$ as t,M as u};
|
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-vb4WPdcb.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.7.
|
|
3
|
+
"version": "3.7.7",
|
|
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-10-
|
|
72
|
+
"versionDate": "2026-10-24T00:10:33.684Z"
|
|
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-k4bqwbns.js","assets/vendor-core-DfaOB3Rn.js","assets/vendor-icons-DrybRNxP.js","assets/OptionListMenu-CGazCg0C.js","assets/usePlaybackEnd-DmvZ__Ut.js","assets/index-BP1z44Uk.js","assets/vendor-query-BBT5_sHx.js","assets/index-5x1mF1nD.css","assets/PlayerProvider-pi0at080.js","assets/PlayerProvider-N2pT5gty.css","assets/playbackCompletion-IPHm9fp5.js","assets/usePlaybackEnd-BMf_H2dw.css","assets/PlayerSettings-BXGe3F5k.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{u as t,g as dt,h as F,P as zt,z as jt,d as ae,A as R,q as O,y as Ht,T as Me,o as Yt,a as Xt,c as Jt,_ as Zt,S as ct}from"./vendor-core-DfaOB3Rn.js";import{P as er,a as tr,b as rr,F as nr,s as sr,c as or}from"./PlayerProvider-pi0at080.js";import{u as Rt,b as Tt,a as yt}from"./vendor-query-BBT5_sHx.js";import{p as St,s as ar,C as ir,P as lr,a as cr,b as Ie,c as Ct,f as Nt,d as ur,e as dr,g as mr,r as fr,u as pr,h as hr,i as vr,j as gr,k as yr,l as br,m as Sr,n as be,A as Er,o as wr,R as kr,E as Tr,q as Cr,t as w,v as Mr,w as Rr,x as Nr}from"./usePlaybackEnd-DmvZ__Ut.js";import{I as me}from"./vendor-icons-DrybRNxP.js";import{_ as Pt,S as Ye,i as Pr,q as oe,t as de,A as we,O as Ar,P as Ve,M as mt,e as _r,m as xr,n as Br,o as Lr,p as Dr,d as $r,u as Ir,B as ut,Q as Fr,f as Or}from"./index-BP1z44Uk.js";import{l as Wr,i as Ur,s as Vr}from"./playbackCompletion-IPHm9fp5.js";import{M as Qr}from"./MatureConsentModal-RZ_j_2BD.js";import{u as Kr}from"./useIsMobile-Dvx1uJ82.js";import{s as Ee,Q as Gr}from"./QueueRail-DGFI6xTM.js";import{u as qr,Q as zr}from"./QueueOptionsButton-C-y5QFrT.js";import{u as At}from"./useProviders-OKWPunZg.js";import{A as jr}from"./AnimeMetaDetails-B3-A7O5H.js";import{S as Hr}from"./SynopsisText-B3Sa5pRv.js";import"./vendor-ui-3qrARCPr.js";const Yr="_controlsOverlay_cejny_1",Xr="_hidden_cejny_21",Jr="_topControls_cejny_27",Zr="_backBtn_cejny_47",en="_videoTitleInfo_cejny_67",tn="_animeTitle_cejny_73",rn="_episodeNumber_cejny_83",nn="_bottomControls_cejny_91",sn="_progressBarContainer_cejny_110",on="_progressBar_cejny_110",an="_thumb_cejny_129",ln="_scrubbing_cejny_144",cn="_watchedBar_cejny_148",un="_bufferedBar_cejny_149",dn="_timeBubble_cejny_187",mn="_skipSegment_cejny_221",fn="_bottomControlsRow_cejny_231",pn="_leftControls_cejny_239",hn="_rightControls_cejny_240",vn="_controlBtn_cejny_247",gn="_theaterBtn_cejny_288",yn="_nextEpisodeBtn_cejny_292",bn="_active_cejny_313",Sn="_timeDisplay_cejny_317",En="_skipControls_cejny_325",x={controlsOverlay:Yr,hidden:Xr,topControls:Jr,backBtn:Zr,videoTitleInfo:en,animeTitle:tn,episodeNumber:rn,bottomControls:nn,progressBarContainer:sn,progressBar:on,thumb:an,scrubbing:ln,watchedBar:cn,bufferedBar:un,timeBubble:dn,skipSegment:mn,bottomControlsRow:fn,leftControls:pn,rightControls:hn,controlBtn:vn,theaterBtn:gn,nextEpisodeBtn:yn,active:bn,timeDisplay:Sn,skipControls:En},wn=({player:r,handlers:n,visible:l,skipIntervals:m,showNextEpisodeButton:i,onNextEpisode:o,isTheaterMode:s,onTheaterModeToggle:c,settingsBtnRef:u,timeDisplayRef:f})=>{const{state:k,refs:e,actions:a}=r,{showSettings:A}=k;return t("div",{className:`${x.controlsOverlay} ${l?"":x.hidden} `,"data-speed-boost-ignore":"true",style:{pointerEvents:"none",background:"none",justifyContent:"flex-end"},children:t("div",{className:x.bottomControls,"data-speed-boost-ignore":"true",onClick:h=>h.stopPropagation(),children:[t(er,{classes:{container:x.progressBarContainer,scrubbing:x.scrubbing,timeBubble:x.timeBubble,bar:x.progressBar,buffered:x.bufferedBar,watched:x.watchedBar,thumb:x.thumb},timeLabelRef:f,children:[k.duration>0&&r.state.currentSkipInterval&&t("div",{className:`${x.skipSegment} ${x[r.state.currentSkipInterval.skip_type]} `,style:{left:`${r.state.currentSkipInterval.start_time/k.duration*100}% `,width:`${(r.state.currentSkipInterval.end_time-r.state.currentSkipInterval.start_time)/k.duration*100}% `}}),m.map(h=>{const C=h.start_time/k.duration*100,M=(h.end_time-h.start_time)/k.duration*100;return t("div",{className:`${x.skipSegment} ${x[h.skip_type]} `,style:{left:`${C}% `,width:`${M}% `},title:h.skip_type.toUpperCase()},h.skip_id)})]}),t("div",{className:x.bottomControlsRow,children:[t("div",{className:x.leftControls,children:[t(tr,{className:x.controlBtn}),t(rr,{buttonClassName:x.controlBtn,onExpandedChange:a.setShowVolumeSlider}),t("span",{className:x.timeDisplay,ref:f,children:[a.formatTime(0)," / ",a.formatTime(k.duration)]}),k.currentSkipInterval&&!k.isAutoSkipEnabled&&t("button",{className:x.controlBtn,onClick:()=>{e.videoRef.current&&k.currentSkipInterval&&(e.videoRef.current.currentTime=k.currentSkipInterval.end_time,a.setCurrentSkipInterval(null))},children:["Skip ",k.currentSkipInterval.skip_type==="op"?"Opening":"Ending"]})]}),t("div",{className:x.rightControls,children:[t("div",{className:x.skipControls,children:i&&t("button",{className:x.nextEpisodeBtn,onClick:o,title:"Play next episode",children:"Next EP"})}),t("button",{className:`${x.controlBtn} ${n.isSubtitleActive?x.active:""}`,onClick:n.handleCCToggle,title:n.isSubtitleActive?"Disable Subtitles":"Enable Subtitles","aria-label":"Toggle Subtitles",children:t(me,{name:"closed-captioning",size:22})}),t("button",{ref:u,className:`${x.controlBtn} ${A?x.active:""} `,onClick:()=>a.setShowSettings(!A),"aria-label":"Settings",children:t(me,{name:"cog"})}),t("button",{className:`${x.controlBtn} ${x.theaterBtn} ${s?x.active:""} `,onClick:h=>{h.stopPropagation(),c()},title:s?"Exit Theater Mode":"Theater Mode","aria-label":s?"Exit Theater Mode":"Theater Mode",children:t(me,{name:"tv"})}),t(nr,{className:x.controlBtn})]})]})]})})};function kn(r){const{state:n,refs:l,actions:m}=r,i=c=>{if(!l.videoRef.current)return;m.setActiveSubtitleTrack(c);try{if(c===null||c==="off")localStorage.setItem("playerSubtitlesEnabled","false");else{localStorage.setItem("playerSubtitlesEnabled","true");const f=n.availableSubtitles.find(k=>k.label===c||k.lang===c);f?localStorage.setItem("playerLastSubtitle",ar(f)):localStorage.setItem("playerLastSubtitle",c)}}catch{}let u=!1;Array.from(l.videoRef.current.textTracks).forEach(f=>{const e=c!==null&&c!=="off"&&(f.language===c||f.label===c)&&!u;f.mode=e?"showing":"hidden",e&&(u=!0)})},o=n.activeSubtitleTrack!==null&&n.activeSubtitleTrack!=="off";return{handleSubtitleSelection:i,isSubtitleActive:o,handleCCToggle:()=>{if(!l.videoRef.current)return;if(o){i("off");return}if(n.availableSubtitles.length===0)return;let c=null;try{c=localStorage.getItem("playerLastSubtitle")}catch{}const u=St(n.availableSubtitles,{lastKey:c,enabled:!0});if(u<0)return;const f=n.availableSubtitles[u];i(f.label||f.lang)}}}const Tn=jt(()=>Pt(()=>import("./PlayerSettings-k4bqwbns.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12]))),Cn=({player:r,isAutoplayEnabled:n,onAutoplayChange:l,showNextEpisodeButton:m,onNextEpisode:i,videoSources:o,selectedSource:s,selectedLink:c,onSourceChange:u,loadingVideo:f,skipIntervals:k,animeTitle:e,episodeNumber:a,isTheaterMode:A,onTheaterModeToggle:h,anime4kEnabled:C,onAnime4kToggle:M,anime4kSupported:N,anime4kProfile:B,onAnime4kProfileChange:y,anime4kInitializing:p,anime4kError:P,videoDelayEnabled:d,onVideoDelayToggle:S,videoDelayMs:_,onVideoDelayChange:z,onCalibrateAvSync:W,fallbackChoice:H,onFallbackChoiceChange:j,ambientSettings:D,onAmbientChange:L,children:K,overlays:U,isInteractingExtra:b=!1,className:g,hideChrome:T=!1})=>{const{state:E,actions:Y}=r,{showSettings:X}=E,{setShowSettings:V}=Y,Q=kn(r),Z=dt.useRef(null),Se=dt.useRef(null),Ae=dt.useRef(null);F(()=>{const q=he=>{Z.current&&!Z.current.contains(he.target)&&Se.current&&!Se.current.contains(he.target)&&X&&V(!1)};return X&&document.addEventListener("mousedown",q),()=>{document.removeEventListener("mousedown",q)}},[X,V]);const Re=E.showControls||X||E.isScrubbing,ee=t(cr,{visible:Re,title:e,episode:a?`Episode ${a}`:void 0,onBack:()=>window.history.back(),classes:{overlay:x.controlsOverlay,hidden:x.hidden,top:x.topControls,backBtn:x.backBtn,titleInfo:x.videoTitleInfo,title:x.animeTitle,episode:x.episodeNumber}}),G=!f&&!E.isBuffering&&E.duration>0?t(ir,{}):null,ke=t(wn,{player:r,handlers:Q,visible:Re,skipIntervals:k,showNextEpisodeButton:m,onNextEpisode:i,isTheaterMode:A,onTheaterModeToggle:h,settingsBtnRef:Se,timeDisplayRef:Ae}),_e=t(zt,{fallback:null,children:t(Tn,{ref:Z,isOpen:X,onClose:()=>V(!1),videoSources:o,currentSource:s,currentLink:c,onSourceChange:u,subtitles:E.availableSubtitles,activeSubtitleTrack:E.activeSubtitleTrack,onSubtitleChange:Q.handleSubtitleSelection,subtitleSettings:{fontSize:E.subtitleFontSize,position:E.subtitlePosition,bgOpacity:E.subtitleBgOpacity,bgColor:E.subtitleBgColor,textColor:E.subtitleTextColor,edge:E.subtitleEdge,bold:E.subtitleBold},onSubtitleSettingsChange:Y.setSubtitleStyle,useNativeControls:E.useNativeControls,onNativeControlsToggle:Y.setUseNativeControls,anime4kEnabled:C,onAnime4kToggle:M,anime4kSupported:N,anime4kProfile:B,onAnime4kProfileChange:y,anime4kInitializing:p,anime4kError:P,videoDelayEnabled:d,onVideoDelayToggle:S,videoDelayMs:_,onVideoDelayChange:z,onCalibrateAvSync:W,isAutoSkipEnabled:E.isAutoSkipEnabled,onAutoSkipChange:q=>{Y.setIsAutoSkipEnabled(q);try{localStorage.setItem("autoSkipEnabled",q.toString())}catch{}},isAutoplayEnabled:n,onAutoplayChange:l,fallbackChoice:H,onFallbackChoiceChange:j,isTheaterMode:A,ambientSettings:D,onAmbientChange:L})}),te=X?t("div",{"data-speed-boost-ignore":"true",onClick:q=>q.stopPropagation(),children:_e}):null;return t(lr,{engine:r.engine,topBar:ee,centerControls:G,bottomBar:!f&&E.duration>0?ke:null,settingsPanel:te,overlays:U,isInteracting:b||E.showSettings||E.showVolumeSlider,nativeControls:E.useNativeControls,className:g,chromeDisabled:T,children:K})},Mn=({count:r=3})=>t("section",{className:Ee.section,children:[t("div",{className:Ee.header,children:t("button",{className:Ee.headerToggle,disabled:!0,children:[t("span",{className:Ee.title,children:t(Ye,{width:"60px",height:"1.2rem",variant:"text"})}),t(me,{name:"chevron-down",style:{opacity:.3}})]})}),t("div",{className:Ee.list,children:Array.from({length:r}).map((n,l)=>t("div",{className:Ee.item,style:{pointerEvents:"none"},children:[t("div",{className:Ee.dragHandle,style:{opacity:.2},children:t(Ye,{width:"16px",height:"16px",variant:"rectangular"})}),t("div",{className:Ee.thumbnail,style:{overflow:"hidden",background:"transparent"},children:t(Ye,{width:"100%",height:"100%",variant:"rectangular"})}),t("div",{className:Ee.meta,children:[t(Ye,{width:"80%",height:"1.2rem",variant:"text",className:Ee.metaGap}),t(Ye,{width:"40%",height:"0.8rem",variant:"rectangular",style:{borderRadius:"var(--radius-sm)"}})]})]},l))})]}),Rn={soft:"Softsub",hard:"Hardsub",mixed:"Mixed"},Nn={direct:"Direct",embed:"Embed",cookie:"Needs cookie"},Pn=["direct","cookie","embed"],An=({selectedProvider:r,onProviderChange:n,isAdult:l,options:m})=>{const o=(m&&m.length>0?m:[]).filter(s=>s.mature===(l===!0));return t("div",{className:Ie.providerSelectContainer,children:[t("h4",{children:"Provider"}),t("select",{className:Ie.providerSelect,value:r,onChange:s=>n(s.currentTarget.value),children:Pn.map(s=>{const c=o.filter(u=>(u.tier??"direct")===s);return c.length===0?null:t("optgroup",{label:Nn[s],children:c.map(u=>t("option",{value:u.id,children:u.sub?`${u.label} (${Rn[u.sub]})`:u.label},u.id))},s)})})]})},_n=({videoSources:r,selectedSource:n,selectedLink:l,onSourceChange:m,onLinkChange:i})=>{const o=Array.isArray(r)?r:[];if(o.length===0)return null;const s=n?.type==="iframe"&&(n.links?.length??0)>1;return t("div",{className:Ie.sourceSelectionContainer,children:[t("h4",{children:"Source"}),t("div",{className:Ie.sourceButtons,children:o.map((c,u)=>t("button",{className:`${Ie.sourceButton} ${n?.sourceName===c.sourceName?Ie.active:""} `,onClick:()=>m(c),children:c.sourceName},`${c.sourceName}-${u}`))}),s&&t("select",{className:Ie.sourceSelect,"aria-label":"Fallback embed quality",value:l?.link??n.links[0]?.link??"",onChange:c=>{const u=n.links.find(f=>f.link===c.currentTarget.value);u&&i(u)},children:n.links.map(c=>t("option",{value:c.link,children:c.resolutionStr},c.link))})]})},xn=dt.memo(_n,(r,n)=>r.selectedSource?.sourceName===n.selectedSource?.sourceName&&r.selectedLink?.link===n.selectedLink?.link&&r.videoSources===n.videoSources),Bn={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}},Ln={low:"ModeB",balanced:"ModeA",high:"ModeAA",denoise:"ModeC"},Dn=5,$n=15e3,In=`
|
|
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 Fn({videoRef:r,canvasRef:n,profile:l="balanced",delayMs:m=0}){const[i,o]=ae(!1),[s,c]=ae(()=>{try{return localStorage.getItem("anime4kEnabled")==="true"}catch{return!1}}),[u,f]=ae(!1),[k,e]=ae(null),[a,A]=ae(0),h=R(0),C=R(null),M=R(null),N=R(null),B=R(null),y=R(null),p=R(null),P=R(null),d=R(null),S=R(null),_=R(!1),z=R(-1),W=R(0),H=R(m);H.current=m;const j=R([]),D=R(!1),L=R(!1),K=R(!1),U=R(null),b=R(-1),g=R(-1),T=R(!1),E=R(0);F(()=>{async function V(){if(typeof navigator>"u"||!navigator.gpu){o(!1);return}try{const Q=await navigator.gpu.requestAdapter();o(!!Q)}catch{o(!1)}}V()},[]),F(()=>{if(!s||!i)return;let V=!1;const Q=++h.current,Z=G=>{if(G)try{G.close()}catch{}},Se=()=>{for(const G of j.current)Z(G.bitmap);j.current=[]},Ae=G=>Math.max(8,Math.min(40,Math.ceil(G/16.7)+4));function Re(){S.current!==null&&(cancelAnimationFrame(S.current),S.current=null)}async function ee(){let G=r.current;const ke=n.current;if(!G||!ke||h.current!==Q)return;const _e=performance.now()+$n;for(;(!G||G.videoWidth===0)&&performance.now()<_e;){if(await new Promise(le=>requestAnimationFrame(le)),V||h.current!==Q)return;G=r.current}if(!G||G.videoWidth===0){!V&&h.current===Q&&(e("Timed out waiting for video metadata"),f(!1),c(!1));return}const te=G.videoWidth,q=G.videoHeight,he=Math.max(te,q),ft=window.innerWidth,xe=window.innerHeight,Je=Math.max(ft,xe),Ze=he<Je?Je/he:1,Qe=Bn[l],pt=he<=480?Qe.sd:he<=720?Qe.hd:he<=1080?Qe.fhd:1,ie=Math.min(pt,Ze);ke.width=Math.round(te*ie),ke.height=Math.round(q*ie),f(!0),e(null),W.current=0,z.current=-1,b.current=-1,g.current=-1,T.current=!1,E.current=0,Se(),_.current=!1;try{let le=function(){V||h.current!==Q||(Re(),S.current=requestAnimationFrame(()=>{at()}))};const{ModeA:ht,ModeB:Te,ModeC:et,ModeAA:Ke}=await Pt(async()=>{const{ModeA:I,ModeB:re,ModeC:fe,ModeAA:ce}=await import("./index-BOKlZEHq.js").then(ue=>ue.i);return{ModeA:I,ModeB:re,ModeC:fe,ModeAA:ce}},[]);if(V||h.current!==Q)return;if(!navigator.gpu)throw new Error("WebGPU not available");const tt=await navigator.gpu.requestAdapter();if(V||h.current!==Q)return;if(!tt)throw new Error("No GPU adapter found");const $=await tt.requestDevice();if(!$)throw new Error("Failed to get GPU device");if(V||h.current!==Q){$.destroy();return}C.current=$;const Ne=ke.getContext("webgpu");if(!Ne)throw new Error("Failed to get WebGPU context");M.current=Ne;const Ge=navigator.gpu.getPreferredCanvasFormat();Ne.configure({device:$,format:Ge,alphaMode:"premultiplied"});const ve=$.createTexture({size:[te,q],format:"rgba16float",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),rt=Ln[l],Fe=Math.round(te*ie),Oe=Math.round(q*ie),qe=(()=>{switch(rt){case"ModeB":return new Te({device:$,inputTexture:ve,nativeDimensions:{width:te,height:q},targetDimensions:{width:Fe,height:Oe}});case"ModeC":return new et({device:$,inputTexture:ve,nativeDimensions:{width:te,height:q},targetDimensions:{width:Fe,height:Oe}});case"ModeAA":return new Ke({device:$,inputTexture:ve,nativeDimensions:{width:te,height:q},targetDimensions:{width:Fe,height:Oe}});default:return new ht({device:$,inputTexture:ve,nativeDimensions:{width:te,height:q},targetDimensions:{width:Fe,height:Oe}})}})(),Be=qe.getOutputTexture(),ze=$.createSampler({magFilter:"linear",minFilter:"linear"}),nt=$.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=$.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),De=$.createRenderPipeline({layout:$.createPipelineLayout({bindGroupLayouts:[Le]}),vertex:{module:nt,entryPoint:"vs"},fragment:{module:nt,entryPoint:"fs",targets:[{format:Ge}]},primitive:{topology:"triangle-list"}}),st=$.createBindGroup({layout:Le,entries:[{binding:0,resource:Be.createView()},{binding:1,resource:ze}]});try{const I=$.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,externalTexture:{}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),re=$.createShaderModule({code:In}),fe=$.createRenderPipeline({layout:$.createPipelineLayout({bindGroupLayouts:[I]}),vertex:{module:re,entryPoint:"vs"},fragment:{module:re,entryPoint:"fs",targets:[{format:"rgba16float"}]},primitive:{topology:"triangle-list"}});U.current={pipeline:fe,layout:I,inputView:ve.createView()}}catch{U.current=null}N.current=qe,B.current=ve,y.current=Be,p.current=De,P.current=ze,d.current=Le,L.current=!1,K.current=!1;async function ot(){const I=U.current;if(!I||L.current)return!1;const re=r.current;if(!re)return!1;const fe=!K.current;fe&&$.pushErrorScope("validation");try{const ce=$.importExternalTexture({source:re}),ue=$.createBindGroup({layout:I.layout,entries:[{binding:0,resource:ce},{binding:1,resource:ze}]}),pe=$.createCommandEncoder(),ge=pe.beginRenderPass({colorAttachments:[{view:I.inputView,loadOp:"load",storeOp:"store"}]});ge.setPipeline(I.pipeline),ge.setBindGroup(0,ue),ge.draw(6),ge.end(),$.queue.submit([pe.finish()])}catch{return L.current=!0,U.current=null,!1}if(fe){const ce=await $.popErrorScope().catch(()=>null);if(ce)return console.warn("[anime4k] blit probe failed:",ce.message),L.current=!0,U.current=null,!1;K.current=!0}return!0}f(!1);async function at(){if(V||h.current!==Q||!Ne)return;const I=r.current;if(!I||I.videoWidth===0){le();return}if(I!==G||I.videoWidth!==te||I.videoHeight!==q){A(ue=>ue+1);return}if(I.paused||I.ended||document.hidden||I.readyState<HTMLMediaElement.HAVE_CURRENT_DATA){le();return}const re=I.getVideoPlaybackQuality().totalVideoFrames;if(re===g.current){le();return}if(_.current){le();return}const fe=I.currentTime;(I.seeking||b.current>=0&&Math.abs(fe-b.current)>.5)&&(Se(),T.current=!1,E.current=0,g.current=-1),b.current=fe;const ce=Math.max(0,H.current||0);ce>E.current&&(T.current=!1),_.current=!0;try{const ue=performance.now();let pe=null,ge=!1;if(ce<=0){j.current.length>0&&Se(),T.current=!1,E.current=0;let ye=!1;if(!D.current)try{$.queue.copyExternalImageToTexture({source:I},{texture:ve},[te,q]),g.current=re,ye=!0}catch(ne){if(ne instanceof TypeError)D.current=!0;else throw ne}if(!ye&&!L.current&&U.current&&await ot()&&(g.current=re,ye=!0),!ye){const ne=await createImageBitmap(I);g.current=re,$.queue.copyExternalImageToTexture({source:ne},{texture:ve},[te,q]),Z(ne)}}else{const ye=await createImageBitmap(I);g.current=re;const ne=j.current;ne.push({bitmap:ye,capture:ue});const it=Ae(ce);for(;ne.length>it;)Z(ne.shift()?.bitmap);let Ue=-1;for(let se=ne.length-1;se>=0;se--)if(ue-ne[se].capture>=ce){Ue=se;break}if(Ue!==-1){for(let He=0;He<Ue;He++)Z(ne.shift()?.bitmap);const se=ne.shift();se?(pe=se.bitmap,T.current=!0,E.current=ce):(pe=ye,ge=!0)}else if(!T.current)pe=ye,ge=!0;else{const se=ne.shift();pe=se?se.bitmap:ye,se||(ge=!0)}if(!pe){_.current=!1,le();return}$.queue.copyExternalImageToTexture({source:pe},{texture:ve},[te,q]),ge||Z(pe)}const je=$.createCommandEncoder();await qe.pass(je);const We=je.beginRenderPass({colorAttachments:[{view:Ne.getCurrentTexture().createView(),clearValue:{r:0,g:0,b:0,a:1},loadOp:"clear",storeOp:"store"}]});We.setPipeline(De),We.setBindGroup(0,st),We.draw(6),We.end(),$.queue.submit([je.finish()]),z.current=re,W.current=0,$.queue.onSubmittedWorkDone().then(()=>{h.current===Q&&(_.current=!1)})}catch(ue){if(_.current=!1,W.current+=1,W.current>=Dn&&!V&&h.current===Q){console.error(ue),e(ue instanceof Error?ue.message:"Render error"),c(!1);return}}le()}le()}catch(le){!V&&h.current===Q&&(M.current?.unconfigure(),C.current?.destroy(),C.current=null,M.current=null,e(le instanceof Error?le.message:"Failed to initialize upscaler"),f(!1),c(!1))}}return ee(),()=>{V=!0,h.current+=1,Re(),Se(),M.current?.unconfigure(),B.current&&(B.current.destroy(),B.current=null),y.current&&(y.current.destroy(),y.current=null),C.current&&(C.current.destroy(),C.current=null),N.current=null,p.current=null,P.current=null,d.current=null,U.current=null,M.current=null,_.current=!1}},[s,i,r,n,l,a]);const Y=O(V=>{c(V);try{localStorage.setItem("anime4kEnabled",String(V))}catch{}},[]),X=O(()=>{c(V=>{const Q=!V;try{localStorage.setItem("anime4kEnabled",String(Q))}catch{}return Q})},[]);return{isWebGPUSupported:i,isEnabled:s,isInitializing:u,error:k,toggle:X,setEnabled:Y}}function On({videoRef:r,episodeKey:n,isEnabled:l,isSupported:m,mediaReady:i,isIframeSource:o,setEnabled:s}){const c=R(null),u=R(!1),f=R(!1),k=R(s);k.current=s,F(()=>{const e=c.current;c.current=n,!(e===null||e===n)&&(!l||!m||(u.current=!0,f.current=!1,k.current(!1)))},[n,l,m]),F(()=>{if(!u.current)return;if(l){f.current&&(u.current=!1);return}if(f.current=!0,!i)return;if(o){u.current=!1,k.current(!0);return}const e=r.current;if(!e)return;let a,A=!1;const h=()=>{A||(A=!0,u.current=!1,k.current(!0))};if(e.readyState>=2)return a=window.setTimeout(h,500),()=>window.clearTimeout(a);const C=()=>{window.setTimeout(h,500)};return e.addEventListener("canplay",C,{once:!0}),e.addEventListener("playing",C,{once:!0}),a=window.setTimeout(h,5e3),()=>{window.clearTimeout(a),e.removeEventListener("canplay",C),e.removeEventListener("playing",C)}},[l,i,o,r])}const Wn=()=>localStorage.getItem("preferredMode")==="dub"?"dub":"sub",Un=/^[a-z0-9-]+$/i,_t=r=>r?"preferredProviderMature":"preferredProvider",xt=r=>{const n=localStorage.getItem(_t(r));return n&&Un.test(n)?n:null},Bt=(r,n)=>{localStorage.setItem(_t(n),r)},Vn=()=>xt(!1)??"megaplay",Qn=()=>({showMeta:{},episodes:[],watchedEpisodes:[],watchlistStatus:null,showCombinedDetails:!1,currentMode:Wn(),inWatchlist:!1,videoSources:[],selectedSource:null,selectedLink:null,isAutoplayEnabled:Wr(),showResumeModal:!0,resumeTime:0,resumeDuration:0,skipIntervals:[],selectedProvider:Vn(),loadingShowData:!0,loadingVideo:!1,error:null,showCookieModal:!1,cookieProvider:null});function Kn(r,n){switch(n.type){case"SET_STATE":return{...r,...n.payload};case"SET_MODE":return{...r,currentMode:n.payload,videoSources:[],selectedSource:null,selectedLink:null};case"SET_PROVIDER":return{...r,selectedProvider:n.payload};default:return r}}async function Mt(r,n,l,m,i=!1){if(!r||!n)throw new Error("Missing params");try{const[o,s,c,u]=await Promise.all([de.data.video.query({showId:r,episodeNumber:n,mode:l.currentMode,provider:l.selectedProvider}).catch(y=>{const p=y.data?.cause;return y.message==="AUTH_REQUIRED"&&p?.provider==="mkissa"&&m({type:"SET_STATE",payload:{showCookieModal:!0,cookieProvider:"mkissa"}}),null}),de.progress.getEpisode.query({showId:r,episodeNumber:n}).catch(()=>null),de.settings.getByKey.query({key:"preferredSource"}).catch(()=>null),de.data.skipTimes.query({showId:r,episodeNumber:n}).catch(()=>[])]),f=c?.value,k=o?.filter(y=>{const p=y.sourceName.toLowerCase();return l.currentMode==="dub"?p.includes("eng")||p.includes("dub"):p.includes("jpn")||p.includes("sub")||!p.includes("eng")&&!p.includes("dub")})??[],e=k.length>0?k:o??[];let a=e.length>0?e[0]:null;if(f){const y=e.find(p=>p.sourceName===f);y&&(a=y)}const A=a&&a.links.length>0?a.links.sort((y,p)=>(parseInt(p.resolutionStr)||0)-(parseInt(y.resolutionStr)||0))[0]:null,h=s?.currentTime||0,C=s?.duration||0,M=h,B=(Array.isArray(u)?u:u?.results||[]).map(y=>({skip_id:y.skip_id||"",skip_type:y.skip_type||"",start_time:y.interval?.start_time??y.start_time??0,end_time:y.interval?.end_time??y.end_time??0})).filter(y=>y.end_time>0);return(!o||o.length===0)&&(i||we.error(`No video sources found for ${l.selectedProvider}`)),{videoSources:o,selectedSource:a,selectedLink:A,resumeTime:M,resumeDuration:C,showResumeModal:M>5&&a?.type!=="iframe",skipIntervals:B,fetchedEpisodeNumber:n}}catch(o){const s=o;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:n};throw o}}const Gn=(r,n,l,m)=>{const[i,o]=Ht(Kn,l,b=>({...Qn(),showMeta:b?.name?{name:b.name,thumbnail:b.thumbnail,nativeName:b.nativeName,englishName:b.englishName,names:{romaji:b.name||b.englishName,english:b.englishName||b.name,native:b.nativeName}}:{}})),s=Rt(),c=Pr(),u=R(null),f=R(null),{options:k}=At(),e=Me(()=>k.filter(b=>(b.kind??"anime")==="anime"),[k]),a=n||i.initialEpisode,A=R(a);F(()=>{A.current!==a&&(A.current=a,o({type:"SET_STATE",payload:{selectedSource:null,selectedLink:null}}))},[a,o]),F(()=>{r&&/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(r)&&i.selectedProvider!=="animepahe"&&u.current!==r&&(u.current=r,o({type:"SET_PROVIDER",payload:"animepahe"}))},[r,i.selectedProvider]);const{data:h,isLoading:C,error:M}=qr(r),{data:N}=Tt({queryKey:[oe.playerData,r,i.currentMode,i.selectedProvider],queryFn:async()=>{if(!r)throw new Error("No showId");const b=async()=>{try{const X=await de.data.episodes.query({showId:r,mode:i.currentMode,provider:i.selectedProvider}).catch(()=>null);if(X?.episodes?.length)return X}catch{}return null},[g,T,E]=await Promise.all([b(),de.watchlist.check.query({showId:r}).catch(()=>({inWatchlist:!1,status:null})),de.progress.getWatchedEpisodes.query({showId:r}).catch(()=>[])]),Y=g?.episodes?g.episodes.sort((X,V)=>parseFloat(X)-parseFloat(V)):[];return{description:g?.description||"",episodes:Y,inWatchlist:T.inWatchlist,watchlistStatus:T.status??null,watchedEpisodes:E}},enabled:!!r});F(()=>{!n&&N?.episodes&&N.episodes.length>0&&!n&&o({type:"SET_STATE",payload:{initialEpisode:N.episodes[0]}})},[N,n]),F(()=>{if(h?.isAdult===void 0||f.current===r)return;const b=h.isAdult===!0,g=e.filter(E=>E.mature===b);if(g.length===0||e.find(E=>E.id===i.selectedProvider)?.mature===b)return;const T=xt(b);f.current=r??null,o({type:"SET_PROVIDER",payload:g.find(E=>E.id===T)?.id??g[0].id})},[h?.isAdult,i.selectedProvider,r,e]),F(()=>{if(!r||!/^dango-mt-\d+$/.test(r)||f.current===`temp:${r}`)return;const b=h?.provider;b&&(f.current=`temp:${r}`,b!==i.selectedProvider&&o({type:"SET_PROVIDER",payload:b}))},[r,h,i.selectedProvider]);const{data:B,isLoading:y,error:p}=Tt({queryKey:[oe.videoSources,r,a,i.selectedProvider,i.currentMode],queryFn:()=>Mt(r,a,i,o),enabled:!!r&&!!a&&!(i.showMeta?.isAdult===!0&&!m?.hasMatureConsent)}),{mutateAsync:P}=yt({mutationFn:async({wasIn:b,showMeta:g})=>{if(!r)throw new Error("Missing showId");if(b)await de.watchlist.remove.mutate({id:r});else{const T=g.name||g.names?.romaji;if(!T)throw new Error("Missing show name");await de.watchlist.add.mutate({id:r,name:T,thumbnail:g.thumbnail,nativeName:g.names?.native,englishName:g.names?.english,type:g.type,isAdult:g.isAdult})}return!b},onSuccess:b=>{we.success(b?"Added to watchlist":"Removed from watchlist"),s.invalidateQueries({queryKey:[oe.playerData,r]}),s.invalidateQueries({queryKey:[oe.showData,r]}),s.invalidateQueries({queryKey:[oe.watchlist]})},onError:b=>we.error(b instanceof Error?b.message:"Failed to update watchlist")}),d=O(async()=>{!r||!h||await P({wasIn:!!N?.inWatchlist,showMeta:h})},[r,h,N?.inWatchlist,P]),S=O(async b=>{try{await de.settings.set.mutate({key:"preferredSource",value:b})}catch(g){console.error(g)}},[]),{mutateAsync:_,isPending:z}=yt({mutationFn:async({status:b})=>{if(!r)throw new Error("Missing showId");if(N?.inWatchlist)return await de.watchlist.setStatus.mutate({id:r,status:b}),b;const g=h,T=g?.name||g?.names?.romaji;if(!g||!T)throw new Error("Missing show name");return await de.watchlist.add.mutate({id:r,name:T,thumbnail:g.thumbnail,nativeName:g.names?.native,englishName:g.names?.english,type:g.type,isAdult:g.isAdult,status:b}),b},onSuccess:b=>{o({type:"SET_STATE",payload:{inWatchlist:!0,watchlistStatus:b}}),we.success(`Moved to ${b}`),s.invalidateQueries({queryKey:[oe.showData,r]}),s.invalidateQueries({queryKey:[oe.watchlist]}),s.invalidateQueries({queryKey:[oe.continueWatching]})},onError:()=>we.error("Failed to update watchlist status")}),W=O(async()=>{await _({status:"Completed"})},[_]),{mutateAsync:H,isPending:j}=yt({mutationFn:async({episodeNumber:b,duration:g,showMeta:T,episodes:E})=>{await de.progress.updateProgress.mutate({showId:r??"",episodeNumber:b,currentTime:g,duration:g,showName:T.name,showThumbnail:T.thumbnail,nativeName:T.names?.native,englishName:T.names?.english,genres:T.genres?.map(Y=>Y.name),popularityScore:Ar(T.score)??void 0,type:T.type,status:T.status,episodeCount:E.length,isAdult:T.isAdult})},onSuccess:(b,g)=>{we.success(`Episode ${g.episodeNumber} marked as watched`),s.invalidateQueries({queryKey:[oe.playerData,r]}),s.invalidateQueries({queryKey:[oe.showMeta,r]}),s.invalidateQueries({queryKey:[oe.videoSources,r,g.episodeNumber]}),s.invalidateQueries({queryKey:[oe.continueWatching]}),s.invalidateQueries({queryKey:[oe.thisWeekSchedule]}),s.invalidateQueries(c.continueWatching.pathFilter())},onError:()=>we.error("Failed to mark episode as watched")}),D=O(async(b,g)=>{!r||!h||await H({episodeNumber:b,duration:g,showMeta:h,episodes:N?.episodes||[]})},[r,h,N?.episodes,H]),L=O(async()=>{o({type:"SET_STATE",payload:{showCombinedDetails:!i.showCombinedDetails}})},[i.showCombinedDetails]),K=Me(()=>{const b=M||p,g=b?b.message:null,T=g==="AUTH_REQUIRED"?null:g,E=B&&B.fetchedEpisodeNumber===a?B:null,Y=!!B&&!E;return{...i,currentEpisode:a,showMeta:{...i.showMeta||{},...h||{}},episodes:N?.episodes||[],watchedEpisodes:N?.watchedEpisodes||[],inWatchlist:!!N?.inWatchlist,watchlistStatus:N?.watchlistStatus??i.watchlistStatus??null,videoSources:E?.videoSources||[],selectedSource:i.selectedSource||E?.selectedSource||null,selectedLink:i.selectedLink||E?.selectedLink||null,resumeTime:E?.resumeTime||0,resumeDuration:E?.resumeDuration||0,showResumeModal:i.showResumeModal&&(E?.showResumeModal??!1),skipIntervals:E?.skipIntervals||[],loadingShowData:C,loadingVideo:y||Y,error:T,fetchedEpisodeNumber:E?.fetchedEpisodeNumber}},[i,h,N,B,C,y,M,p,a]),U=O((b,g)=>{const T=g||r;if(!T||!b||T===r&&b===a)return;const Y=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(T)&&i.selectedProvider!=="animepahe"?"animepahe":i.selectedProvider,X=["video-sources",T,b,Y,i.currentMode];s.getQueryState(X)?.status!=="success"&&s.prefetchQuery({queryKey:X,queryFn:()=>Mt(T,b,{selectedProvider:Y,currentMode:i.currentMode},o,!0),staleTime:300*1e3,gcTime:1800*1e3})},[r,a,s,i,o]);return{state:K,dispatch:o,toggleWatchlist:d,moveToCompleted:W,setPreferredSource:S,handleToggleDetails:L,markEpisodeWatched:D,prefetchEpisodeSources:U,isMarkingWatched:j,isUpdatingWatchlistStatus:z}};function qn({onNext:r,onToggleTheater:n,flashControls:l}){F(()=>{const m=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())&&l(),i.key.toLowerCase()==="n"&&r(),i.key.toLowerCase()==="t"&&n())};return document.addEventListener("keydown",m),()=>{document.removeEventListener("keydown",m)}},[l,r,n])}const Xe=(r,n,l)=>r.showId===n||!!l&&r.showId===l;function zn({testClipActive:r,selectedSourceType:n,onEnded:l,queue:m,removeFromQueue:i,showId:o,showMetaId:s,currentEpisode:c,isAutoplayEnabled:u,nextEpisode:f,previousEpisode:k,navigate:e,invalidateContinueWatching:a,dispatch:A}){const[h,C]=ae(!1),[M,N]=ae(null),[B,y]=ae(null),p=R(i);p.current=i;const P=R(!1);F(()=>{P.current=!1,C(!1)},[o,c]);const d=O(()=>{if(r||P.current)return;P.current=!0,l();const D=m.find(L=>Xe(L,o,s)&&L.episodeNumber===c);if(m.length>0){const L=m.findIndex(U=>Xe(U,o,s)&&U.episodeNumber===c),K=L>=0?m[L+1]||null:m[0];y({nextItem:K,playedItem:D||null}),N(2);return}if(D&&p.current({showId:D.showId,episodeNumber:D.episodeNumber}),u&&f){a(),e(`/watch/${o}/${f}`);return}f||C(!0)},[l,e,m,o,s,c,f,u,a,r]),S=O(()=>{if(m.length===0)return;l();const D=m.find(U=>Xe(U,o,s)&&U.episodeNumber===c),L=m.findIndex(U=>Xe(U,o,s)&&U.episodeNumber===c),K=L>=0?m[L+1]||null:m[0];D&&i({showId:D.showId,episodeNumber:D.episodeNumber}),K?e(`/watch/${K.showId}/${K.episodeNumber}`):f||C(!0)},[l,e,m,i,o,s,c,f]),_=O(()=>{f&&(a(),e(`/watch/${o}/${f}`)),C(!1),A({type:"SET_STATE",payload:{showResumeModal:!1}})},[f,e,o,A,a]),z=O(()=>{m.length>0?S():f?_():we.error("No next episode available")},[m.length,S,_,f]),W=O(()=>C(!1),[]),H=O(()=>{y(null),N(null)},[]),j=O(()=>{k&&e(`/watch/${o}/${k}`)},[k,e,o]);return F(()=>{const D=L=>{L.origin===window.location.origin&&n==="iframe"&&L.data?.type==="ANI_WEB_MEDIA_ENDED"&&d()};return window.addEventListener("message",D),()=>window.removeEventListener("message",D)},[d,n]),F(()=>{if(!B||M===null)return;if(M<=0){const{nextItem:L,playedItem:K}=B;y(null),N(null),K&&p.current({showId:K.showId,episodeNumber:K.episodeNumber}),L?e(`/watch/${L.showId}/${L.episodeNumber}`):f||C(!0);return}const D=window.setTimeout(()=>{N(L=>L===null?null:L-1)},1e3);return()=>window.clearTimeout(D)},[B,M,e,f]),{showCompleteModal:h,queueCountdown:M,pendingQueueTransition:B,handleQueueTransition:S,handleNextEpisode:_,handleNShortcut:z,handlePreviousEpisode:j,handlePlaybackFinished:d,closeCompleteModal:W,cancelQueueTransition:H}}function jn({videoRef:r,queue:n,showId:l,showMetaId:m,currentEpisode:i,selectedSource:o,hasNextEpisode:s,nextEpisode:c,prefetchEpisodeSources:u,matchesQueueItem:f}){const[k,e]=ae(!1),a=R(u);a.current=u;const A=R("");F(()=>{e(!1)},[i]);const h=O(()=>{const C=r.current;if(!C||o?.type==="iframe")return;const M=C.duration,N=C.currentTime;if(!M||Number.isNaN(M)){e(!1);return}if(M-N<=60){const B=n.findIndex(P=>f(P,l,m)&&P.episodeNumber===i),y=n.length>0?B>=0?n[B+1]||null:n[0]:null,p=y?`${y.showId}:${y.episodeNumber}`:s?`${l}:${c}`:"";p&&A.current!==p&&(A.current=p,y?a.current(y.episodeNumber,y.showId):a.current(c??""))}e(s&&Ur(N,M))},[r,o,n,l,m,i,s,c,f]);return{showNextEpisodePrompt:k,handleThresholds:h}}const bt="fallbackChoice";function Hn(){try{const r=localStorage.getItem(bt);return r==="iframe"||r==="retry"?r:null}catch{return null}}function Yn(r){try{r===null?localStorage.removeItem(bt):localStorage.setItem(bt,r)}catch{}}function Xn({showId:r,episodeNumber:n,currentMode:l,selectedProvider:m,selectedSourceType:i,videoSources:o,isAdult:s,providerOrder:c,matureProviders:u,setPreferredSource:f,dispatch:k,showControls:e}){const a=R(!1),A=R([]),h=R(!1),[C,M]=ae(null),[N,B]=ae(!1),[y,p]=ae(!1),[P,d]=ae(()=>Hn()??"ask"),S=O(g=>{d(g),Yn(g==="ask"?null:g)},[]),_=R(P);F(()=>{_.current=P},[P]);const z=R(o);z.current=o;const W=O(()=>{a.current=!1,A.current=[],h.current=!1,M(null),B(!1)},[]);F(()=>{W()},[W,r,n]);const H=O(g=>{if(a.current)return;a.current=!0;const T=g.links[0];f(g.sourceName),k({type:"SET_STATE",payload:{selectedSource:g,selectedLink:T}}),M(null)},[k,f]),j=O(()=>{const T=z.current.find(E=>E.type==="iframe");return T?.links?.length?T:null},[]),D=O(async()=>{const g=c.filter(T=>{if(A.current.includes(T))return!1;const E=u.has(T);return s===void 0?!0:E===s});B(!0);try{for(const T of g){A.current.push(T);let E=null;try{E=await de.data.video.query({showId:r,episodeNumber:n,mode:l,provider:T})}catch{continue}const Y=(E??[]).filter(Q=>{const Z=Q.sourceName.toLowerCase();return l==="dub"?Z.includes("eng")||Z.includes("dub"):Z.includes("jpn")||Z.includes("sub")||!Z.includes("eng")&&!Z.includes("dub")});if((Y.length>0?Y:E??[]).find(Q=>Q.type!=="iframe"&&Q.links?.length)){A.current=[m],h.current=!1,k({type:"SET_STATE",payload:{selectedProvider:T,videoSources:[],selectedSource:null,selectedLink:null,loadingVideo:!0}}),Bt(T,s===!0),M(null),we.success(`Switched to ${T} (direct stream)`);return}}M({retryFailed:!0}),we.error("No working direct stream found on other providers")}finally{B(!1)}},[r,n,l,s,m,k,c,u]),L=O(()=>{if(a.current||h.current||i!=="player")return;const g=j();if(!g)return;A.current.includes(m)||A.current.push(m);const T=_.current;if(T==="iframe"){H(g);return}if(T==="retry"){D();return}e(!0),M({retryFailed:!1})},[i,m,j,H,D,e]),K=O(()=>{h.current=!0,M(null),p(!1)},[]),U=O(()=>{y&&S("iframe");const g=j();g?H(g):M(null)},[y,S,j,H]),b=O(()=>{y&&S("retry"),D()},[y,S,D]);return{fallbackPrompt:C,isRetryingProvider:N,rememberFallbackChoice:y,setRememberFallbackChoice:p,fallbackChoice:P,updateFallbackChoice:S,dismissFallbackPrompt:K,chooseIframeFallback:U,chooseProviderRetry:b,handleVideoSourceError:L,resetFallback:W}}function Jn({engine:r,videoRef:n,selectedSource:l,selectedLink:m,loadingVideo:i,testClipActive:o,resumeTime:s,showResumeModal:c,calibReturnRef:u,setAvailableSubtitles:f,setActiveSubtitleTrack:k,onFatalError:e}){const a=R(null),A=R(s),h=R(c),C=R(e);return C.current=e,F(()=>{A.current=s,h.current=c},[s,c]),F(()=>{const M=n.current;if(!M)return;for(;M.firstChild;)M.removeChild(M.firstChild);if(o)return r.loadSource({url:"/av-sync-test.mp4"},{autoPlay:!0});if(i||!l||!m||l.type==="iframe"){r.unload();return}u.current!=null?(a.current=u.current,u.current=null):a.current===null&&A.current>5&&!h.current?a.current=A.current:a.current===null&&h.current&&(a.current=0);let N=m.link;if(N.startsWith("/api/proxy")||(N=`/api/proxy?url=${encodeURIComponent(N)}`,m.headers?.Referer&&(N+=`&referer=${encodeURIComponent(m.headers.Referer)}`)),l.subtitles){const p=localStorage.getItem("playerSubtitlesEnabled")!=="false";let P=null;try{P=localStorage.getItem("playerLastSubtitle")}catch{}const d=St(l.subtitles,{lastKey:P,enabled:p}),S=d>=0?l.subtitles[d]:null;l.subtitles.forEach(_=>{const z=document.createElement("track");z.kind="subtitles",z.label=_.label,z.srclang=_.lang;const W=_.src??_.url;if(W){let H=`/api/subtitle-proxy?url=${encodeURIComponent(W)}`;const j=m.headers?.Referer;j&&(H+=`&referer=${encodeURIComponent(j)}`),z.src=H}S&&_.label===S.label&&_.lang===S.lang&&(z.default=!0),M.appendChild(z)}),p||k("off"),f(l.subtitles)}const B=a.current??0;a.current=null;const y=document.body.classList.contains("low-end");return r.loadSource({url:N,hls:m.hls},{initialTime:B,autoPlay:!(h.current&&A.current>5),hlsConfig:{maxBufferLength:y?15:30,maxMaxBufferLength:y?30:60,maxBufferSize:(y?25:60)*1e3*1e3,startLevel:-1},onHls:(p,P)=>{if(!l.subtitles?.length)return;const d=()=>{p.subtitleTrack!==-1&&(p.subtitleTrack=-1)};p.on(P.Events.SUBTITLE_TRACK_SWITCH,d),d()},onError:()=>C.current()})},[r,l,m,n,u,i,o,k,f]),{seekToTimeRef:a}}function Zn({videoRef:r,availableSubtitles:n,activeSubtitleTrack:l,setAvailableSubtitles:m,setActiveSubtitleTrack:i}){F(()=>{const o=r.current;if(!o)return;const s=()=>{const c=Array.from(o.textTracks).map(u=>({label:u.label,lang:u.language,src:void 0,mode:u.mode}));m(c)};return o.textTracks.addEventListener("addtrack",s),o.textTracks.addEventListener("removetrack",s),s(),()=>{o.textTracks.removeEventListener("addtrack",s),o.textTracks.removeEventListener("removetrack",s)}},[r,m]),F(()=>{if(l===null&&n.length>0&&localStorage.getItem("playerSubtitlesEnabled")!=="false"){let o=null;try{o=localStorage.getItem("playerLastSubtitle")}catch{}const s=St(n,{lastKey:o,enabled:!0});if(s<0){i("off");return}const c=n[s];i(c.lang||c.label)}},[l,n,i]),F(()=>{const o=r.current;if(!o||n.length===0)return;const s=l;if(!(localStorage.getItem("playerSubtitlesEnabled")!=="false")||s==="off"||s===null){Array.from(o.textTracks).forEach(f=>{f.mode="hidden"});return}let u=!1;if(Array.from(o.textTracks).forEach(f=>{const e=(f.language===s||f.label===s)&&!u;f.mode=e?"showing":"hidden",e&&(u=!0)}),!u&&o.textTracks.length>0){const f=Array.from(o.textTracks).find(k=>k.language==="en"||k.label==="English")||o.textTracks[0];f&&(f.mode="showing")}},[l,n,r])}function es({videoRef:r,videoBoxH:n,style:l,sourceKey:m,activeSubtitleTrack:i,availableSubtitles:o}){F(()=>{const s="dynamic-subtitle-styles";let c=document.getElementById(s);c||(c=document.createElement("style"),c.id=s,document.head.appendChild(c)),c.textContent=Ct(l);const u=r.current;if(!u)return;const f=Nt(l.fontSize,n||u.clientHeight||720);c.textContent=Ct({...l,fontSize:f});const k=()=>{const p=Number(l.position),P=isNaN(p)?0:Math.max(0,Math.min(100,p));return Math.max(0,Math.min(100,100-P))},e=(p,P)=>{try{const d=p;d.snapToLines=!1,d.line=P}catch{}},a=()=>{const p=f*16,P=u.videoHeight||u.clientHeight||720,d=u.videoWidth||u.clientWidth||1280;return{step:p*1.3/P*100,chars:Math.max(20,Math.floor(d/(p*.55)))}},A=p=>{const P=k(),d=Array.from(p.activeCues??[]);if(d.length<=1){d.forEach(W=>e(W,P));return}const{step:S,chars:_}=a();let z=P;for(let W=d.length-1;W>=0;W--){const j=String(d[W].text??"").replace(/<[^>]*>/g,"").split(`
|
|
55
|
-
`).reduce((L,K)=>L+Math.max(1,Math.ceil(K.length/_)),0),D=z-j*S;e(d[W],Math.max(0,D)),z=D-S*.4}},h=p=>{if(!p.cues)return;const P=k();Array.from(p.cues).forEach(d=>e(d,P)),p.mode==="showing"&&A(p)},C=()=>{Array.from(u.textTracks).forEach(h)};C();const M=p=>{const P=p.target;P.mode==="showing"&&A(P)};Array.from(u.textTracks).forEach(p=>{p.addEventListener("cuechange",M)});const N=()=>{Array.from(u.textTracks).forEach(p=>{p.removeEventListener("cuechange",M),p.addEventListener("cuechange",M)}),C()};u.textTracks.addEventListener("addtrack",N),u.textTracks.addEventListener("removetrack",N);const B=Array.from(u.querySelectorAll("track")),y=()=>{C()};return B.forEach(p=>{p.addEventListener("load",y)}),()=>{Array.from(u.textTracks).forEach(p=>{p.removeEventListener("cuechange",M)}),u.textTracks.removeEventListener("addtrack",N),u.textTracks.removeEventListener("removetrack",N),B.forEach(p=>{p.removeEventListener("load",y)})}},[l,n,r,m,i,o])}function ts({videoRef:r,overlayRef:n,style:l,activeSubtitleTrack:m,delayMs:i,enabled:o}){F(()=>{if(!o)return;const s=r.current,c=n.current;if(!s||!c)return;const u=localStorage.getItem("playerSubtitlesEnabled")!=="false",f=()=>{if(c.innerHTML="",!u||m==="off"||m===null)return;const a=Array.from(s.textTracks).find(y=>y.language===m||y.label===m);if(!a||a.mode!=="showing")return;const A=i/1e3;let h;if(A>0&&a.cues){const y=s.currentTime-A;h=Array.from(a.cues).filter(p=>p.startTime<=y&&y<=p.endTime)}else h=Array.from(a.activeCues??[]);if(h.length===0)return;const C={...l,fontSize:Nt(l.fontSize,s.clientHeight||0)},M=ur(C),N=dr(s,C.position),B=Array.from(h);B.forEach((y,p)=>{const P=String(y.text??"");if(!mr(P).trim())return;const d=document.createElement("div"),S=(B.length-1-p)*1.7;d.style.cssText=`${M}
|
|
56
|
-
bottom: calc(${N}px + ${S}em);`,d.innerHTML=fr(P),c.appendChild(d)})},k=()=>f(),e=()=>f();return Array.from(s.textTracks).forEach(a=>{a.addEventListener("cuechange",k)}),s.addEventListener("timeupdate",e),f(),()=>{Array.from(s.textTracks).forEach(a=>{a.removeEventListener("cuechange",k)}),s.removeEventListener("timeupdate",e),c.innerHTML=""}},[m,i,o,n,l,r])}const rs=({isOpen:r,onClose:n,onSuccess:l})=>{const m=()=>{l?.(),n()};return t(mt,{isOpen:r,onClose:n,title:"MKissa Browser Verification",children:t("div",{className:Ve.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:Ve.actions,children:t("a",{className:Ve.link,href:"https://mkissa.to/anime",target:"_blank",rel:"noreferrer",children:"Open MKissa anime"})}),t("div",{className:Ve.actions,children:[t("button",{className:Ve.secondaryButton,onClick:n,children:"Cancel"}),t("button",{className:Ve.button,onClick:m,children:"Refresh Dango"})]})]})})},bs=()=>{const{id:r,episodeNumber:n}=Yt(),l=Xt(),m=Rt(),i=Jt(),{hasConsent:o,grant:s}=_r(),{options:c}=At(),u=Me(()=>c.filter(v=>(v.kind??"anime")==="anime"),[c]),f=Me(()=>u.map(v=>v.id),[u]),k=Me(()=>new Set(u.filter(v=>v.mature).map(v=>v.id)),[u]),{state:e,dispatch:a,toggleWatchlist:A,moveToCompleted:h,setPreferredSource:C,handleToggleDetails:M,markEpisodeWatched:N,prefetchEpisodeSources:B,isMarkingWatched:y,isUpdatingWatchlistStatus:p}=Gn(r,n,i.state||null,{hasMatureConsent:o});F(()=>{if(r&&e.showMeta?.id&&e.showMeta.id!==r){const v=n?`/watch/${e.showMeta.id}/${n}${window.location.search}`:`/watch/${e.showMeta.id}${window.location.search}`;l(v,{replace:!0})}},[r,e.showMeta?.id,n,l]);const P=Me(()=>{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]),d=pr({skipIntervals:e.skipIntervals,showId:r,episodeNumber:e.currentEpisode?.toString(),episodeCount:e.episodes.length||void 0,sourceType:e.selectedSource?.type,showMeta:P}),{refs:S,actions:_}=d,z=Kr(),W=R(null),H=R(null),j=R(null),[D,L]=ae(()=>{try{const v=localStorage.getItem("anime4kProfile");return["low","balanced","high","denoise"].includes(v)?v:"balanced"}catch{return"balanced"}}),{videoDelayMs:K,videoDelayEnabled:U,setDelayEnabled:b,handleVideoDelayChange:g,isCalibrating:T,testClipActive:E,stopCalibration:Y,openAvSyncCalibrator:X,cancelAvSyncCalibrator:V,applyAvSyncCalibrator:Q,toggleTestClip:Z,calibReturnRef:Se,effectiveVideoDelayMs:Ae}=hr(S.videoRef,()=>_.setShowSettings(!1)),Re=R(null),ee=Fn({videoRef:S.videoRef,canvasRef:H,profile:D,delayMs:Ae}),G=ee.isEnabled&&ee.isWebGPUSupported;On({videoRef:S.videoRef,episodeKey:`${r??""}:${e.currentEpisode??""}`,isEnabled:ee.isEnabled,isSupported:ee.isWebGPUSupported,mediaReady:!e.loadingVideo&&!!e.selectedLink,isIframeSource:e.selectedSource?.type==="iframe",setEnabled:ee.setEnabled}),vr({videoRef:S.videoRef,canvasRef:Re,delayMs:Ae,enabled:U&&!G});const ke=U&&!G,_e=G||ke,[te,q]=ae(!1),he=R(n);F(()=>{he.current!==n&&(he.current=n,Y())},[n,Y]);const ft=O(()=>{m.invalidateQueries({queryKey:[oe.continueWatching]})},[m]),{data:xe=[],isLoading:Je}=xr(),Ze=Br(),Qe=Lr(),pt=Dr(),{isTheaterMode:ie,toggleTheaterMode:le,handleLayoutClick:ht}=gr();Zt(()=>{if(d.state.isFullscreen||ie)return;const v=S.playerContainerRef.current,J=W.current;if(!v||!J)return;const $e=()=>{const gt=v.getBoundingClientRect().height;J.style.height=`${gt}px`};$e();const lt=new ResizeObserver($e);return lt.observe(v),()=>lt.disconnect()},[d.state.isFullscreen,ie,S.playerContainerRef]);const Te=Me(()=>e.episodes.findIndex(v=>v===e.currentEpisode),[e.episodes,e.currentEpisode]),et=Te>0?e.episodes[Te-1]:null,Ke=Te>=0&&Te<e.episodes.length-1?e.episodes[Te+1]:null,tt=Te>-1&&Te<e.episodes.length-1,{showCompleteModal:$,queueCountdown:Ne,pendingQueueTransition:Ge,handleQueueTransition:ve,handleNextEpisode:rt,handleNShortcut:Fe,handlePreviousEpisode:Oe,handlePlaybackFinished:qe,closeCompleteModal:Be,cancelQueueTransition:ze}=zn({testClipActive:E,selectedSourceType:e.selectedSource?.type,onEnded:_.onEnded,queue:xe,removeFromQueue:Ze.mutate,showId:r,showMetaId:e.showMeta?.id,currentEpisode:e.currentEpisode,isAutoplayEnabled:e.isAutoplayEnabled,nextEpisode:Ke,previousEpisode:et,navigate:l,invalidateContinueWatching:ft,dispatch:a}),{showNextEpisodePrompt:nt,handleThresholds:Le}=jn({videoRef:S.videoRef,queue:xe,showId:r,showMetaId:e.showMeta?.id,currentEpisode:e.currentEpisode,selectedSource:e.selectedSource,hasNextEpisode:tt,nextEpisode:Ke,prefetchEpisodeSources:B,matchesQueueItem:Xe}),{checkEnd:De,logDuration:st}=yr({videoRef:S.videoRef,sourceType:e.selectedSource?.type,resetKey:`${r}:${e.currentEpisode}`,onEnd:qe}),ot=e.showResumeModal,at=$,I=ot||at;br(d,!!e.selectedLink&&!ie&&!I);const{fallbackPrompt:re,isRetryingProvider:fe,rememberFallbackChoice:ce,setRememberFallbackChoice:ue,fallbackChoice:pe,updateFallbackChoice:ge,dismissFallbackPrompt:je,chooseIframeFallback:We,chooseProviderRetry:ye,handleVideoSourceError:ne,resetFallback:it}=Xn({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:f,matureProviders:k,setPreferredSource:C,showControls:_.setShowControls,dispatch:a}),{seekToTimeRef:Ue}=Jn({engine:d.engine,videoRef:S.videoRef,selectedSource:e.selectedSource,selectedLink:e.selectedLink,loadingVideo:e.loadingVideo,testClipActive:E,resumeTime:e.resumeTime,showResumeModal:e.showResumeModal,calibReturnRef:Se,setAvailableSubtitles:_.setAvailableSubtitles,setActiveSubtitleTrack:_.setActiveSubtitleTrack,onFatalError:ne});F(()=>{I&&d.state.isFullscreen&&d.actions.toggleFullscreen()},[I,d.state.isFullscreen,d.actions]),F(()=>{I&&S.videoRef.current&&S.videoRef.current.pause()},[I,S.videoRef]);const{titlePreference:se}=$r(),{lowEndMode:He}=Ir(),{settings:vt,update:Lt}=Sr(),Dt=ie&&vt.enabled&&!He&&e.selectedSource?.type!=="iframe"&&!!e.selectedLink,Pe=Me(()=>{if(!e.showMeta||e.loadingShowData)return"Loading...";const{name:v,names:J}=e.showMeta;return se==="name"?v||"Loading...":se==="nativeName"?J?.native||v||"Loading...":se==="englishName"?J?.english||v||"Loading...":v||"Loading..."},[e.showMeta,se,e.loadingShowData]);F(()=>{Pe&&Pe!=="Loading..."&&e.currentEpisode&&(document.title=`► ${Pe} Episode ${e.currentEpisode} - dango`)},[Pe,e.currentEpisode]),qn({onNext:Fe,onToggleTheater:le,flashControls:d.actions.flashControls});const{setAvailableSubtitles:$t,setActiveSubtitleTrack:It}=_,Et=Me(()=>({fontSize:d.state.subtitleFontSize,position:d.state.subtitlePosition,bgOpacity:d.state.subtitleBgOpacity,bgColor:d.state.subtitleBgColor,textColor:d.state.subtitleTextColor,edge:d.state.subtitleEdge,bold:d.state.subtitleBold}),[d.state.subtitleFontSize,d.state.subtitlePosition,d.state.subtitleBgOpacity,d.state.subtitleBgColor,d.state.subtitleTextColor,d.state.subtitleEdge,d.state.subtitleBold]);Zn({videoRef:S.videoRef,availableSubtitles:d.state.availableSubtitles,activeSubtitleTrack:d.state.activeSubtitleTrack,setAvailableSubtitles:$t,setActiveSubtitleTrack:It});const[Ft,Ot]=ae(0);F(()=>{const v=S.videoRef.current;if(!v)return;const J=()=>Ot(v.clientHeight||0);J();const $e=new ResizeObserver(J);return $e.observe(v),()=>$e.disconnect()},[S.videoRef,e.selectedSource,e.selectedLink]),es({videoRef:S.videoRef,videoBoxH:Ft,style:Et,sourceKey:`${e.selectedSource?.sourceName??""}:${e.selectedLink?.link??""}`,activeSubtitleTrack:d.state.activeSubtitleTrack,availableSubtitles:d.state.availableSubtitles}),ts({videoRef:S.videoRef,overlayRef:j,style:Et,activeSubtitleTrack:d.state.activeSubtitleTrack,delayMs:Ae,enabled:_e}),F(()=>{try{localStorage.setItem("anime4kProfile",D)}catch{}},[D]);const Wt=()=>{S.videoRef.current&&(S.videoRef.current.currentTime=e.resumeTime,S.videoRef.current.play()),a({type:"SET_STATE",payload:{showResumeModal:!1}})},Ut=()=>{S.videoRef.current&&(S.videoRef.current.currentTime=0,S.videoRef.current.play()),a({type:"SET_STATE",payload:{showResumeModal:!1}})},Vt=O(()=>{a({type:"SET_STATE",payload:{showResumeModal:!1}})},[a]),Qt=O(async()=>{try{await h(),Be(),a({type:"SET_STATE",payload:{showResumeModal:!1}}),l("/")}catch{}},[h,Be,a,l]),wt=(v,J)=>t("div",{className:v,children:[t("button",{className:`${w.episodeNavBtn} ${w.secondary}`,onClick:Oe,disabled:!et,type:"button",children:[t(me,{name:"chevron-left",size:12}),"Prev EP"]}),t("button",{className:`${w.episodeNavBtn} ${w.primary}`,onClick:rt,disabled:!Ke,type:"button",children:["Next EP",t(me,{name:"chevron-right",size:12})]}),J==="mobile"&&z&&t("button",{className:`${w.episodeNavBtn} ${w.episodePickerBtn}`,onClick:()=>q(!0),type:"button",children:[t(me,{name:"list-ul",size:12}),"Episodes"]})]}),Kt=v=>{a({type:"SET_STATE",payload:{isAutoplayEnabled:v}}),Vr(v)},kt=!!(e.currentEpisode&&e.watchedEpisodes.includes(e.currentEpisode)),Gt=e.selectedProvider!=="megaplay"||e.selectedSource?.type==="iframe",qt=O(async()=>{if(!r||!e.currentEpisode||!e.showMeta.name||y)return;const v=S.videoRef.current?.duration,J=Math.max(v||0,e.resumeDuration||0,Number(e.showMeta.episodeDuration||0)*60,1);await N(e.currentEpisode,J)},[r,e.currentEpisode,e.showMeta,e.resumeDuration,N,y,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&&!o?t("div",{className:be.playerPageLayout,children:t(Qr,{isOpen:!0,onClose:()=>l("/home"),onGrant:s})}):t("div",{className:`${be.playerPageLayout} ${ie?be.theaterMode:""}`,onClick:ht,children:[ie&&t(Er,{videoRef:S.videoRef,active:Dt,settings:vt}),t(wr,{isOpen:at,onClose:Be,title:"Show Completed!",heading:Pe,message:"Congratulations! You finished all available episodes.",children:[t(ut,{variant:"secondary",onClick:Be,children:"Close"}),t(ut,{onClick:Qt,disabled:p,children:p?"Saving...":"Move to Completed"})]}),t(kr,{isOpen:ot,onClose:Vt,title:"Resume Playback?",message:t(ct,{children:["You were watching at ",t("strong",{children:d.actions.formatTime(e.resumeTime)}),". Would you like to continue?"]}),onResume:Wt,onRestart:Ut}),t(mt,{isOpen:!!re,onClose:je,title:"Direct stream failed",width:"sm",children:[t(mt.Body,{children:[t("p",{children:[t("strong",{children:e.selectedProvider}),"'s direct stream failed for this episode."]}),re?.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:ce,onChange:v=>ue(v.currentTarget.checked)}),"Remember my choice"]})]}),t(mt.Actions,{children:[t(ut,{variant:"secondary",onClick:We,children:"Continue with iframe"}),t(ut,{onClick:ye,disabled:fe,children:fe?"Searching…":"Try another provider"})]})]}),t(Fr,{isOpen:!!e.showCookieModal&&e.cookieProvider!=="mkissa",onClose:()=>a({type:"SET_STATE",payload:{showCookieModal:!1}}),onSuccess:()=>{m.invalidateQueries({queryKey:[oe.videoSources,r,e.currentEpisode,e.selectedProvider,e.currentMode]})}}),t(rs,{isOpen:!!e.showCookieModal&&e.cookieProvider==="mkissa",onClose:()=>a({type:"SET_STATE",payload:{showCookieModal:!1}}),onSuccess:()=>{m.invalidateQueries({queryKey:[oe.videoSources,r,e.currentEpisode,e.selectedProvider,e.currentMode]})}}),!ie&&t("aside",{ref:W,className:be.episodeSidebar,children:e.loadingShowData?t(Tr,{variant:"sidebar"}):t(Cr,{episodes:e.episodes,currentEpisode:e.currentEpisode??void 0,watchedEpisodes:e.watchedEpisodes,onEpisodeClick:v=>l(`/watch/${r}/${v}`)})}),t("div",{className:be.playerMain,children:[t("div",{className:`${w.videoContainer} ${d.state.isFullscreen?"":be.videoPlayerWrapper} ${d.state.isFullscreen?w.fullscreenActive:""}`,style:{...I?{visibility:"hidden"}:{}},onContextMenu:v=>v.preventDefault(),children:t(Cn,{player:d,isAutoplayEnabled:e.isAutoplayEnabled,onAutoplayChange:Kt,fallbackChoice:pe,onFallbackChoiceChange:ge,ambientSettings:vt,onAmbientChange:Lt,showNextEpisodeButton:!I&&nt&&xe.length===0,onNextEpisode:rt,videoSources:e.videoSources,selectedSource:e.selectedSource,selectedLink:e.selectedLink,onSourceChange:(v,J)=>{S.videoRef.current&&!isNaN(S.videoRef.current.currentTime)&&(Ue.current=S.videoRef.current.currentTime),C(v.sourceName),a({type:"SET_STATE",payload:{selectedSource:v,selectedLink:J,showResumeModal:e.showResumeModal&&v.type!=="iframe"}})},loadingVideo:Ce,skipIntervals:e.skipIntervals,animeTitle:Pe,episodeNumber:e.currentEpisode??void 0,isTheaterMode:ie,onTheaterModeToggle:le,anime4kEnabled:ee.isEnabled,onAnime4kToggle:ee.toggle,anime4kSupported:ee.isWebGPUSupported,anime4kProfile:D,onAnime4kProfileChange:L,anime4kInitializing:ee.isInitializing,anime4kError:ee.error,videoDelayEnabled:U,onVideoDelayToggle:b,videoDelayMs:K,onVideoDelayChange:g,onCalibrateAvSync:X,isInteractingExtra:te||T,className:sr.shellFill,hideChrome:e.selectedSource?.type==="iframe",overlays:t(ct,{children:[d.state.isSpeedBoostActive&&t("div",{className:w.speedBoostBadge,"aria-hidden":"true",children:[t("span",{children:"2x"}),t(me,{name:"forward",size:12})]}),Ne!==null&&Ge?.nextItem&&t("div",{className:w.queueCountdown,children:["Queue next in ",Ne,"s"]})]}),children:[Ce&&t("div",{className:w.loadingOverlay,children:t("div",{className:w.loadingDots,children:[t("div",{className:w.dot}),t("div",{className:w.dot}),t("div",{className:w.dot})]})}),d.state.isBuffering&&!Ce&&e.selectedSource?.type!=="iframe"&&t("div",{className:w.bufferingOverlay,children:t("div",{className:w.bufferingSpinner})}),e.selectedSource?.type==="iframe"?!Ce&&t("iframe",{src:e.selectedLink?.link,className:w.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(ct,{children:[!Ce&&e.videoSources.length===0&&t("div",{className:w.errorOverlay,children:[t("p",{children:["No sources found for this episode with ",e.selectedProvider,"."]}),t("p",{className:w.errorSubtext,children:"Please try selecting a different provider below."}),t("button",{className:w.retryButton,onClick:()=>window.location.reload(),"data-speed-boost-ignore":"true",style:{marginTop:8},children:"Retry"})]}),!Ce&&e.videoSources.length>0&&t(or,{controls:d.state.useNativeControls,playsInline:!0,"webkit-playsinline":"true",disablePictureInPicture:!0,disableRemotePlayback:!0,onPlay:_.onPlay,onPause:_.onPause,onEnded:()=>{E||De(!0)},onDurationChange:()=>{st()},onSeeked:()=>{E||(Le(),De())},onLoadedMetadata:()=>{Le(),st(),E||De()},onTimeUpdate:()=>{E||(_.onTimeUpdate(),Le(),De(),Ge&&S.videoRef.current&&S.videoRef.current.currentTime<S.videoRef.current.duration-1&&ze())},onError:ne,onContextMenu:v=>v.preventDefault(),className:_e?w.videoElementHidden:""}),ee.isWebGPUSupported&&!Ce&&e.videoSources.length>0&&t("canvas",{ref:H,className:`${w.upscalerCanvas} ${G?w.upscalerActive:""}`}),!G&&!Ce&&e.videoSources.length>0&&t("canvas",{ref:Re,className:`${w.upscalerCanvas} ${ke?w.upscalerActive:""}`}),ee.isEnabled&&ee.isWebGPUSupported&&ee.isInitializing&&t("div",{className:w.upscalerStatusBadge,children:"Preparing upscaler…"}),_e&&t("div",{ref:j,className:w.subtitleOverlay}),t(Mr,{isOpen:T,ms:K,onChange:g,onApply:Q,onClose:V,testClipActive:E,onTestClip:Z})]})]})}),!ie&&t(Rr,{}),!ie&&t(ct,{children:[Je&&xe.length===0?t(Mn,{count:3}):t(Gr,{title:"Queue",items:xe,currentShowId:r,currentEpisode:e.currentEpisode??void 0,onNextQueue:ve,onRemove:v=>Ze.mutate({showId:v.showId,episodeNumber:v.episodeNumber}),onClear:()=>Qe.mutate(),showClearAll:!0,onReorder:v=>pt.mutate(v.map(J=>({id:J.id,showId:J.showId,episodeNumber:J.episodeNumber})))}),t("div",{className:w.streamPanel,children:[t(An,{selectedProvider:e.selectedProvider,isAdult:e.showMeta?.isAdult,options:u,onProviderChange:v=>{it(),a({type:"SET_STATE",payload:{selectedProvider:v,videoSources:[],selectedSource:null,selectedLink:null,loadingVideo:!0}}),Bt(v,e.showMeta?.isAdult===!0)}}),wt(`${w.episodeActions} ${w.desktopEpisodeActions}`,"desktop"),Ce?t("div",{className:w.sourceLoader,children:t("div",{className:w.spinner})}):t(xn,{videoSources:e.videoSources,selectedSource:e.selectedSource,selectedLink:e.selectedLink,onSourceChange:v=>{S.videoRef.current&&!isNaN(S.videoRef.current.currentTime)&&(Ue.current=S.videoRef.current.currentTime);const $e=(v.links||[]).sort((lt,gt)=>(parseInt(gt.resolutionStr)||0)-(parseInt(lt.resolutionStr)||0))[0]||null;C(v.sourceName),a({type:"SET_STATE",payload:{selectedSource:v,selectedLink:$e,showResumeModal:e.showResumeModal&&v.type!=="iframe"}})},onLinkChange:v=>{e.selectedSource&&(C(e.selectedSource.sourceName),a({type:"SET_STATE",payload:{selectedLink:v}}))}})]}),t("div",{className:be.playerInfoContainer,children:[t("div",{className:be.playerInfoHeader,children:[t("div",{className:be.playerAnimeCard,children:t("img",{src:Or(e.showMeta.thumbnail||""),alt:Pe,loading:"lazy",decoding:"async",onError:v=>{v.target.src="/placeholder.svg"}})}),t("div",{className:be.videoTitleSection,children:[t("div",{className:w.titleContainer,children:[t("h1",{children:Pe}),t("div",{className:w.scheduleInfo,children:[e.showMeta.status&&t("span",{className:w.status,children:e.showMeta.status}),e.showMeta.nextEpisodeAirDate&&t("span",{className:w.nextEpisode,children:["Next episode: ",e.showMeta.nextEpisodeAirDate]})]})]}),t("div",{className:w.controls,children:[t("button",{className:`${w.watchlistBtn} ${e.inWatchlist?w.inList:""}`,onClick:A,children:[e.inWatchlist?t(me,{name:"check",size:14}):t(me,{name:"plus",size:14}),e.inWatchlist?"In Watchlist":"Add to Watchlist"]}),t(zr,{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:`${w.watchlistBtn} ${w.queueBtn}`,activeClassName:w.queueActive}),Gt&&t("button",{className:`${w.watchlistBtn} ${w.markWatchedBtn} ${kt?w.markWatchedDone:""}`,onClick:qt,disabled:y||!e.currentEpisode,children:[t(me,{name:"check",size:14}),y?"Saving...":kt?"Watched":"Mark Watched"]}),t("button",{className:`${w.watchlistBtn} ${w.modeToggleBtn} ${e.currentMode==="dub"?w.modeToggleActive:""}`,onClick:()=>{const v=e.currentMode==="dub"?"sub":"dub";it(),a({type:"SET_MODE",payload:v}),localStorage.setItem("preferredMode",v)},type:"button","aria-pressed":e.currentMode==="dub",children:e.currentMode==="dub"?"DUB":"SUB"}),He&&t("button",{className:`${w.watchlistBtn} ${w.modeToggleBtn} ${d.state.useNativeControls?w.modeToggleActive:""}`,onClick:()=>{const v=!d.state.useNativeControls;d.actions.setUseNativeControls(v),localStorage.setItem("playerUseNativeControls",v.toString())},type:"button",children:d.state.useNativeControls?"NATIVE: ON":"NATIVE: OFF"})]})]})]}),wt(`${w.episodeActions} ${w.mobileEpisodeActions}`,"mobile"),t("div",{className:be.infoColumns,children:[t("div",{className:`${w.descriptionSection} ${w.synopsisFlat}`,children:[t("h3",{children:"Synopsis"}),t(Hr,{text:e.showMeta.description?e.showMeta.description.replace(/<[^>]*>?/gm,""):"",emptyText:"No description available."}),t("button",{className:w.detailsToggleBtn,onClick:M,children:[e.showCombinedDetails?t(me,{name:"chevron-up"}):t(me,{name:"chevron-down"}),e.showCombinedDetails?"Hide Details":"Show Details"]})]}),e.showCombinedDetails&&t(jr,{showMeta:e.showMeta,styles:w})]})]})]})]}),t(Nr,{isOpen:te,onClose:()=>q(!1),episodes:e.episodes,currentEpisode:e.currentEpisode??void 0,watchedEpisodes:e.watchedEpisodes,onEpisodeClick:v=>{q(!1),l(`/watch/${r}/${v}`)}})]})};export{bs as default};
|