@serifpersia/dango 4.0.0 → 4.0.2
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-B-3qrNhu.js +1 -0
- package/client/dist/assets/AnimeInfo-DXoNbSao.js +1 -0
- package/client/dist/assets/{AnimeInfoPage-DLf7SyVa.js → AnimeInfoPage-CRWoCwXo.js} +2 -2
- package/client/dist/assets/{Asmr-Dsuu6xgC.js → Asmr-z6PNn8Ld.js} +1 -1
- package/client/dist/assets/{AsmrPopup-CQC440HI.js → AsmrPopup-Cc-aIYXd.js} +1 -1
- package/client/dist/assets/{AsmrResetProgressModal-CEnhUV7K.js → AsmrResetProgressModal-D4Mp_-lx.js} +1 -1
- package/client/dist/assets/Home-9ZTaG1WX.js +1 -0
- package/client/dist/assets/Home-Bmc4hGfd.css +1 -0
- package/client/dist/assets/Insights-Bf92STPA.js +1 -0
- package/client/dist/assets/{LibraryListPage-DnwV1dP1.js → LibraryListPage-CNjzasIi.js} +1 -1
- package/client/dist/assets/{ListeningList-DR4z9phs.js → ListeningList-1mBIfxxH.js} +1 -1
- package/client/dist/assets/{Manga-Cd_q6M_o.js → Manga-B3_TdzgY.js} +1 -1
- package/client/dist/assets/MangaInfoPage-DnDwJDWC.js +1 -0
- package/client/dist/assets/{MangaReadPage-Dh4rEwtO.js → MangaReadPage-Cq4NYq31.js} +1 -1
- package/client/dist/assets/{MangaResetProgressModal-DVJbgVwK.js → MangaResetProgressModal-DaZmK9CX.js} +1 -1
- package/client/dist/assets/{Mature-DCBXh2Dl.js → Mature-CbQWqjUS.js} +1 -1
- package/client/dist/assets/{MatureConsentModal-D34i8744.js → MatureConsentModal-CEoZ_OA0.js} +1 -1
- package/client/dist/assets/MediaCard-B-TmXdgl.js +1 -0
- package/client/dist/assets/MediaCard-BfQaS9n5.css +1 -0
- package/client/dist/assets/{OptionListMenu-BjsiUrW1.js → OptionListMenu-ArbsAjlv.js} +1 -1
- package/client/dist/assets/{Player-Cy24aKqh.js → Player-4wh-a_ee.js} +3 -3
- package/client/dist/assets/{PlayerProvider-BbsS7ai1.js → PlayerProvider-CbamWD19.js} +1 -1
- package/client/dist/assets/{PlayerSettings-cJWnEwcK.js → PlayerSettings-DehU56D4.js} +1 -1
- package/client/dist/assets/{QueueOptionsButton-JAUAWTzf.js → QueueOptionsButton-DqoDQST5.js} +1 -1
- package/client/dist/assets/QueueRail-ClrcV9LL.js +1 -0
- package/client/dist/assets/{ReadingList-EboHnXxk.js → ReadingList-Cy1BKzJs.js} +1 -1
- package/client/dist/assets/{ResetProgressModal-Daj-RqHv.js → ResetProgressModal-BdcBPlC1.js} +1 -1
- package/client/dist/assets/{Search-83zyS4iX.js → Search-5PvZ8pAC.js} +1 -1
- package/client/dist/assets/Settings-O0oOrEUd.js +21 -0
- package/client/dist/assets/{SkeletonGrid-D2FNyELs.js → SkeletonGrid-DqN0laN_.js} +1 -1
- package/client/dist/assets/{Trackers-Da4Q2-ta.js → Trackers-DxBWYwss.js} +2 -2
- package/client/dist/assets/{Tv-lRDoqQLs.js → Tv-Ox6p6iEx.js} +3 -3
- package/client/dist/assets/TvInfo-DjPQ7BZn.js +1 -0
- package/client/dist/assets/{TvPopup-vBayJw7b.js → TvPopup-CCTQiS84.js} +1 -1
- package/client/dist/assets/{TvSearch-Vg-ncyei.js → TvSearch-Baig87wj.js} +1 -1
- package/client/dist/assets/{TvWatchlist-CEt3I21U.js → TvWatchlist-D-yxvaKC.js} +1 -1
- package/client/dist/assets/{VirtualKeyboard-CADCu5f_.js → VirtualKeyboard-Bf7wvuX3.js} +1 -1
- package/client/dist/assets/{WatchAlong-Cc2HhkiG.js → WatchAlong-D9NsqbWz.js} +1 -1
- package/client/dist/assets/{WatchAlongPanel-D3FLPJz0.js → WatchAlongPanel-DRsYyjM7.js} +1 -1
- package/client/dist/assets/{Watchlist-CUFpDT9-.js → Watchlist-oYAx_dFL.js} +1 -1
- package/client/dist/assets/{index-B9fL2VIP.js → index-CPhXtUuw.js} +5 -5
- package/client/dist/assets/index-YxVpiwVZ.css +1 -0
- package/client/dist/assets/{libraryInvalidation-Cnx2xRQb.js → libraryInvalidation-hcASRQHn.js} +1 -1
- package/client/dist/assets/{playbackCompletion-CKlwK8SG.js → playbackCompletion-D1Gm0GbH.js} +1 -1
- package/client/dist/assets/{useAnimeInfoData-hTms4q2e.js → useAnimeInfoData-BsFz9uiF.js} +1 -1
- package/client/dist/assets/{useMangaLibrary-CUNeIgcg.js → useMangaLibrary-DbvnlYV9.js} +1 -1
- package/client/dist/assets/{useMangaPopup-s5QTNQMd.js → useMangaPopup-2lqmdmS5.js} +1 -1
- package/client/dist/assets/{useProviders-twwSG5Ji.js → useProviders-BgAgACS8.js} +1 -1
- package/client/dist/assets/{useTv-CmriRQC3.js → useTv-OX_q_uaI.js} +1 -1
- package/client/dist/assets/{useTvLibrary-abNJVIr4.js → useTvLibrary-DaLHYFID.js} +1 -1
- package/client/dist/assets/useWatchAlongPlayer-B7Yj2s3s.js +10 -0
- package/client/dist/index.html +2 -2
- package/package.json +2 -2
- package/server/dist/server.js +1 -1
- package/server/package.json +1 -1
- package/client/dist/assets/AnimeCard-SI0B6et0.js +0 -1
- package/client/dist/assets/AnimeInfo-SoCwFMy3.js +0 -1
- package/client/dist/assets/Home-D_Hd4SUo.css +0 -1
- package/client/dist/assets/Home-ioBgiYqI.js +0 -1
- package/client/dist/assets/Insights-DZx-ZzP2.js +0 -1
- package/client/dist/assets/MangaInfoPage-DVGzzTOa.js +0 -1
- package/client/dist/assets/MediaCard-CJ-18Ma8.css +0 -1
- package/client/dist/assets/MediaCard-JRLogrma.js +0 -1
- package/client/dist/assets/QueueRail-Ck96ehEp.js +0 -1
- package/client/dist/assets/Settings-Bv8Y_ao5.js +0 -21
- package/client/dist/assets/TvInfo-9UDA16_u.js +0 -1
- package/client/dist/assets/index-B8IsmFl4.css +0 -1
- package/client/dist/assets/useWatchAlongPlayer-CtnbRVOZ.js +0 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as D,A as w,q as Z,h as g,u as e,S as le,o as be,p as we,a as Ne,T as ye}from"./vendor-core-DfaOB3Rn.js";import{E as Ce}from"./ErrorMessage-hMt90aG4.js";import{ah as ke,ai as Ie,p as X,q as $e,e as Se,ag as Pe,d as Re,t as ce}from"./index-B9fL2VIP.js";import{I as S}from"./vendor-icons-C1Pj_eSX.js";import{u as Me}from"./vendor-query-BBT5_sHx.js";import{s as t}from"./Manga.module-depGEacJ.js";import{m as xe,r as Ee,g as Te,l as Le,p as Be,k as ze}from"./useMangaLibrary-CUNeIgcg.js";import{p as Ae}from"./page.module-C1MlZzf3.js";import"./libraryInvalidation-Cnx2xRQb.js";const de="mangaReadMode",ue="mangaFitMode";function Fe(){try{return X.getItem(de)==="page"?"page":"strip"}catch{return"strip"}}function Ue(){try{return X.getItem(ue)==="height"?"height":"width"}catch{return"width"}}const De=({provider:h,mangaTitle:p,chapter:f,chapters:y,onBack:C,onOpenChapter:v,initialPage:u=0,onProgress:V})=>{const[c,P]=D(Fe),[B,i]=D(Ue),[d,z]=D(0),[A,M]=D(new Set),[b,k]=D(0),N=w(null),x=w([]),Y=Me(),{data:_,isLoading:j,isError:R}=ke(h,f.id),s=_?.pages??[],m=s.map(n=>Ie(h,n)),$=w(0),F=w(0),E=w(!1);F.current=s.length;const T=y.findIndex(n=>n.id===f.id),a=T>0?[...y.slice(0,T)].reverse().find(n=>!n.externalUrl)??null:null,o=T>=0?y.slice(T+1).find(n=>!n.externalUrl)??null:null,I=Z(n=>{E.current=!0,z(r=>{const l=r+n;return l<0?(a&&v(a),0):l>=s.length?(o&&v(o),r):l})},[s.length,a,o,v]);g(()=>{E.current=!1,$.current=Math.max(0,u),z(Math.max(0,u)),M(new Set),x.current=[],u<=0&&window.scrollTo(0,0)},[f.id,u]);const J=w(V);J.current=V;const ee=w(""),O=w(null),te=w(null),[W,ge]=D(0),L=Z(()=>{const n=c==="strip"?x.current[$.current]:te.current,r=n?.querySelector("img");if(!n||!r)return;const l=Math.max(0,(n.clientWidth-r.clientWidth)/2)+8;ge(H=>Math.abs(H-l)<1?H:l)},[c]);g(()=>{$.current=d,s.length!==0&&J.current?.(Math.min(d+1,s.length),s.length)},[d,s.length]),g(()=>{u<=0||E.current||$.current===0&&(E.current=!1,$.current=u,z(u))},[u]),g(()=>{if(c!=="strip"||s.length===0||u<=0)return;const n=`${f.id}:${u}`;if(ee.current===n)return;ee.current=n;const r=window.setTimeout(()=>{x.current[Math.min(u,s.length-1)]?.scrollIntoView({block:"start"})},150);return()=>window.clearTimeout(r)},[c,s.length,u,f.id]),g(()=>{document.title=`${p} Ch. ${f.number} - dango`},[p,f.number]),g(()=>{try{X.setItem(de,c)}catch{}},[c]),g(()=>{try{X.setItem(ue,B)}catch{}},[B]),g(()=>{c==="page"&&window.scrollTo(0,0)},[c]),g(()=>{if(c!=="page"||s.length===0)return;const n=r=>{r.key==="ArrowRight"||r.key===" "?(r.preventDefault(),I(1)):r.key==="ArrowLeft"&&(r.preventDefault(),I(-1))};return window.addEventListener("keydown",n),()=>window.removeEventListener("keydown",n)},[c,s.length,I]),g(()=>{if(c!=="strip"||s.length===0)return;let n=0;const r=()=>{n=0;const H=window.innerHeight*.3,G=x.current;let q=-1,se=0;for(let Q=0;Q<G.length;Q++){const ie=G[Q];if(!ie)continue;const oe=ie.getBoundingClientRect();if(oe.height>4&&se++,oe.top<=H)q=Q;else break}q<0||se<Math.min(3,G.length)||(q!==$.current&&(E.current=!0,$.current=q,z(q)),L())},l=()=>{n||(n=requestAnimationFrame(r))};return O.current=l,l(),window.addEventListener("scroll",l,{passive:!0}),window.addEventListener("resize",l),()=>{window.removeEventListener("scroll",l),window.removeEventListener("resize",l),n&&cancelAnimationFrame(n),O.current=null}},[c,s.length,_,L]),g(()=>{if(!(c!=="page"||s.length===0))return L(),window.addEventListener("resize",L),()=>window.removeEventListener("resize",L)},[c,d,s.length,L]);const he=n=>{N.current=n.touches[0].clientX},me=n=>{if(N.current===null)return;const r=n.changedTouches[0].clientX-N.current;N.current=null,!(Math.abs(r)<50)&&I(r<0?1:-1)},K=n=>{n&&v(n)},ne=n=>M(r=>{if(r.has(n))return r;const l=new Set(r);return l.add(n),l}),pe=n=>{M(r=>{const l=new Set(r);return l.delete(n),l}),k(r=>r+1)},fe=()=>{M(new Set),k(n=>n+1),Y.invalidateQueries({queryKey:[$e.mangaPages,h,f.id]})},ve=s.length>0&&A.size>=s.length,ae=n=>b>0?`${n}&n=${b}`:n,re=n=>e("div",{className:t.deadPage,role:"alert",children:[e("span",{children:["Page ",n+1," failed to load"]}),e("button",{className:t.pageBtn,onClick:()=>pe(n),children:[e(S,{name:"sync-alt",size:12})," Retry"]})]}),U=B==="height";return e("div",{className:t.readerShell,children:[e("div",{className:t.readerBar,children:[e("button",{className:t.readerIconBtn,onClick:C,"aria-label":"Back to chapters",children:e(S,{name:"chevron-left",size:14})}),e("span",{className:t.readerTitle,children:[p," - Ch. ",f.number,f.title?` ${f.title}`:""]}),s.length>0&&e("span",{className:t.readerCounter,children:[Math.min(d+1,s.length)," / ",s.length]}),e("div",{className:t.readerSegment,role:"group","aria-label":"Reading mode",children:[e("button",{type:"button","aria-pressed":c==="strip",className:c==="strip"?t.readerSegmentActive:"",onClick:()=>P("strip"),children:"Strip"}),e("button",{type:"button","aria-pressed":c==="page",className:c==="page"?t.readerSegmentActive:"",onClick:()=>P("page"),children:"Page"})]}),e("div",{className:t.readerSegment,role:"group","aria-label":"Fit mode",children:[e("button",{type:"button","aria-pressed":!U,className:U?"":t.readerSegmentActive,onClick:()=>i("width"),title:"Fit width - best for portrait / phones",children:"Wide"}),e("button",{type:"button","aria-pressed":U,className:U?t.readerSegmentActive:"",onClick:()=>i("height"),title:"Fit height - best for landscape / desktop",children:"Tall"})]}),e("button",{className:t.readerIconBtn,disabled:!a,onClick:()=>K(a),"aria-label":"Previous chapter",children:e(S,{name:"chevron-left",size:14})}),e("button",{className:t.readerIconBtn,disabled:!o,onClick:()=>K(o),"aria-label":"Next chapter",children:e(S,{name:"chevron-right",size:14})})]}),R?e("p",{className:t.statusMsg,children:"Failed to load pages. Please try again."}):j?e("div",{className:t.readerPages,"aria-hidden":!0,children:Array.from({length:3}).map((n,r)=>e("div",{className:`${t.skeletonThumb} ${t.shimmer}`,style:{width:"100%",maxWidth:"56rem",aspectRatio:"3 / 4"}},r))}):s.length===0?e("p",{className:t.statusMsg,children:"No pages found for this chapter."}):ve?e("div",{className:t.failedBox,children:[e("p",{className:t.statusMsg,children:"Page images failed to load (expired or blocked links)."}),e("button",{className:t.pageBtn,onClick:fe,children:[e(S,{name:"sync-alt",size:12})," Reload pages"]})]}):c==="strip"?e("div",{className:`${t.readerPages} ${U?t.readerPagesTall:""}`,children:m.map((n,r)=>e("div",{ref:l=>{x.current[r]=l},className:t.readerPageWrap,children:[r===d&&e("div",{className:t.ribbon,style:W>0?{right:W}:void 0,"aria-hidden":"true",children:e(S,{name:"bookmark",size:12})},d),A.has(r)?re(r):e("img",{className:t.readerPage,src:ae(n),alt:`Page ${r+1}`,loading:r<3?"eager":"lazy",decoding:"async",draggable:!1,onLoad:()=>O.current?.(),onError:()=>ne(r)})]},`${r}-${s[r].slice(-32)}`))}):e(le,{children:[e("div",{ref:te,className:`${t.pageView} ${U?t.pageViewTall:""}`,onTouchStart:he,onTouchEnd:me,children:[e("div",{className:t.ribbon,style:W>0?{right:W}:void 0,"aria-hidden":"true",children:e(S,{name:"bookmark",size:12})},d),e("button",{className:`${t.tapZone} ${t.tapZoneLeft}`,onClick:()=>I(-1),"aria-label":"Previous page",children:e("span",{className:t.tapChevron,children:e(S,{name:"chevron-left",size:16})})}),A.has(d)?re(d):e("img",{className:t.pageImage,src:ae(m[d]),alt:`Page ${d+1} of ${s.length}`,decoding:"async",draggable:!1,onLoad:()=>L(),onError:()=>ne(d)},`${d}-${s[d].slice(-32)}`),e("button",{className:`${t.tapZone} ${t.tapZoneRight}`,onClick:()=>I(1),"aria-label":"Next page",children:e("span",{className:t.tapChevron,children:e(S,{name:"chevron-right",size:16})})})]}),e("nav",{className:t.pagination,"aria-label":"Page navigation",children:[e("button",{className:t.pageBtn,disabled:d<=0,onClick:()=>I(-1),children:"Previous page"}),e("span",{className:t.pageIndicator,children:[d+1," / ",s.length]}),e("button",{className:t.pageBtn,disabled:d>=s.length-1,onClick:()=>I(1),children:"Next page"})]})]}),(a||o)&&e("nav",{className:t.pagination,children:[e("button",{className:t.pageBtn,disabled:!a,onClick:()=>K(a),children:"Previous chapter"}),e("button",{className:t.pageBtn,disabled:!o,onClick:()=>K(o),children:"Next chapter"})]})]})},_e=800,qe=5e3;function Oe(){const{provider:h="",id:p=""}=be(),[f]=we(),y=Ne(),C=f.get("chapter")||"",v=f.get("rating")||"safe",{hasConsent:u}=Se(),V=u?v:"safe",c=h&&p?xe(h,p):"",P=h.toLowerCase()==="anilist";g(()=>{P&&p&&y(`/manga/anilist/${encodeURIComponent(p)}`,{replace:!0})},[P,p,y]);const B=Pe(!P&&h?h:null,!P&&p?p:null,V,u),i=B.data,{titlePreference:d}=Re(),z=i?Ee(i,d):"Manga",A=Te(c||void 0),M=Le(),b=i&&C?i.chapters.find(a=>a.id===C)??null:null,k=Be(C),N=k!=null&&i?ze(i.chapters,k):null;g(()=>{if(k!=null&&N&&N.id!==C){const a=new URLSearchParams;a.set("chapter",N.id),u&&v!=="safe"&&a.set("rating",v),y(`/manga/${h}/${encodeURIComponent(p)}/read?${a.toString()}`,{replace:!0})}},[k,N,C,u,v,h,p,y]);const x=k!=null&&!!i&&!!N,Y=k!=null&&!!i&&!N,_=ye(()=>{const a=(A.data?.progress??[]).find(o=>o.chapterId===C);return a&&a.page>0?a.page:0},[A.data,C]),j=_>1?_-1:0,R=w(null),s=w(null),m=Z(()=>{R.current&&(clearTimeout(R.current),R.current=null);const a=s.current;s.current=null,a&&c&&M.mutate({mangaId:c,chapterId:a.chapterId,chapterNumber:a.chapterNumber,page:a.page,pageCount:a.pageCount,title:i?.title??null,cover:i?.cover??null,provider:h||null,altTitle:i?.altTitle??null,contentRating:i?.contentRating??null})},[c,M,i?.title,i?.cover,i?.altTitle,i?.contentRating,h]),$=Z((a,o)=>{b&&(s.current={chapterId:b.id,chapterNumber:b.number,page:a,pageCount:o},R.current&&clearTimeout(R.current),R.current=setTimeout(m,_e))},[b,m]);g(()=>{m()},[C,m]),g(()=>()=>m(),[m]),g(()=>{const a=window.setInterval(()=>{s.current&&m()},qe);return()=>window.clearInterval(a)},[m]),g(()=>{const a=()=>{document.visibilityState==="hidden"&&m()},o=()=>m();return document.addEventListener("visibilitychange",a),window.addEventListener("pagehide",o),()=>{document.removeEventListener("visibilitychange",a),window.removeEventListener("pagehide",o)}},[m]);const F=w("");F.current||(F.current=`manga-${Date.now()}-${Math.random().toString(36).slice(2)}`),g(()=>{if(!i||!b)return;const a=i.contentRating==="erotica"||i.contentRating==="pornographic"||i.type==="doujinshi",o=()=>{ce.discord.mangaPresence.mutate({title:i.title,chapterLabel:`Chapter ${b.number}`,isPlaying:!0,thumbnail:i.cover||"",thumbnails:[i.cover].filter(Boolean),isAdult:a,sessionId:F.current}).catch(()=>{}),ce.discord.heartbeat.mutate({sessionId:F.current}).catch(()=>{})};o();const I=window.setInterval(o,6e4);return()=>window.clearInterval(I)},[i,b]);const E=a=>{if(m(),a.externalUrl){window.open(a.externalUrl,"_blank","noopener,noreferrer");return}const o=new URLSearchParams;o.set("chapter",a.id),u&&v!=="safe"&&o.set("rating",v),y(`/manga/${h}/${encodeURIComponent(p)}/read?${o.toString()}`)},T=()=>{m();const a=new URLSearchParams;u&&v!=="safe"&&a.set("rating",v);const o=a.toString()?`?${a.toString()}`:"";y(`/manga/${h}/${encodeURIComponent(p)}${o}`)};return P?null:e("div",{className:Ae.page,children:B.isLoading||x?e("div",{className:t.readerPages,"aria-hidden":!0,children:Array.from({length:3}).map((a,o)=>e("div",{className:`${t.skeletonThumb} ${t.shimmer}`,style:{width:"100%",maxWidth:"56rem",aspectRatio:"3 / 4"}},o))}):!i||!b?e(le,{children:[e("button",{className:t.backBtn,onClick:T,children:"Back to title"}),e(Ce,{message:Y?`Chapter ${k} isn't available from ${h} for this title.`:"Failed to load this chapter. Please try again."})]}):e(De,{provider:h,mangaTitle:z,chapter:b,chapters:i.chapters,onBack:T,onOpenChapter:E,initialPage:j,onProgress:$},b.id)})}export{Oe as default};
|
|
1
|
+
import{d as D,A as w,q as Z,h as g,u as e,S as le,o as be,p as we,a as Ne,T as ye}from"./vendor-core-DfaOB3Rn.js";import{E as Ce}from"./ErrorMessage-hMt90aG4.js";import{ah as ke,ai as Ie,p as X,q as $e,e as Se,ag as Pe,d as Re,t as ce}from"./index-CPhXtUuw.js";import{I as S}from"./vendor-icons-C1Pj_eSX.js";import{u as Me}from"./vendor-query-BBT5_sHx.js";import{s as t}from"./Manga.module-depGEacJ.js";import{m as xe,r as Ee,g as Te,l as Le,p as Be,k as ze}from"./useMangaLibrary-DbvnlYV9.js";import{p as Ae}from"./page.module-C1MlZzf3.js";import"./libraryInvalidation-hcASRQHn.js";const de="mangaReadMode",ue="mangaFitMode";function Fe(){try{return X.getItem(de)==="page"?"page":"strip"}catch{return"strip"}}function Ue(){try{return X.getItem(ue)==="height"?"height":"width"}catch{return"width"}}const De=({provider:h,mangaTitle:p,chapter:f,chapters:y,onBack:C,onOpenChapter:v,initialPage:u=0,onProgress:V})=>{const[c,P]=D(Fe),[B,i]=D(Ue),[d,z]=D(0),[A,M]=D(new Set),[b,k]=D(0),N=w(null),x=w([]),Y=Me(),{data:_,isLoading:j,isError:R}=ke(h,f.id),s=_?.pages??[],m=s.map(n=>Ie(h,n)),$=w(0),F=w(0),E=w(!1);F.current=s.length;const T=y.findIndex(n=>n.id===f.id),a=T>0?[...y.slice(0,T)].reverse().find(n=>!n.externalUrl)??null:null,o=T>=0?y.slice(T+1).find(n=>!n.externalUrl)??null:null,I=Z(n=>{E.current=!0,z(r=>{const l=r+n;return l<0?(a&&v(a),0):l>=s.length?(o&&v(o),r):l})},[s.length,a,o,v]);g(()=>{E.current=!1,$.current=Math.max(0,u),z(Math.max(0,u)),M(new Set),x.current=[],u<=0&&window.scrollTo(0,0)},[f.id,u]);const J=w(V);J.current=V;const ee=w(""),O=w(null),te=w(null),[W,ge]=D(0),L=Z(()=>{const n=c==="strip"?x.current[$.current]:te.current,r=n?.querySelector("img");if(!n||!r)return;const l=Math.max(0,(n.clientWidth-r.clientWidth)/2)+8;ge(H=>Math.abs(H-l)<1?H:l)},[c]);g(()=>{$.current=d,s.length!==0&&J.current?.(Math.min(d+1,s.length),s.length)},[d,s.length]),g(()=>{u<=0||E.current||$.current===0&&(E.current=!1,$.current=u,z(u))},[u]),g(()=>{if(c!=="strip"||s.length===0||u<=0)return;const n=`${f.id}:${u}`;if(ee.current===n)return;ee.current=n;const r=window.setTimeout(()=>{x.current[Math.min(u,s.length-1)]?.scrollIntoView({block:"start"})},150);return()=>window.clearTimeout(r)},[c,s.length,u,f.id]),g(()=>{document.title=`${p} Ch. ${f.number} - dango`},[p,f.number]),g(()=>{try{X.setItem(de,c)}catch{}},[c]),g(()=>{try{X.setItem(ue,B)}catch{}},[B]),g(()=>{c==="page"&&window.scrollTo(0,0)},[c]),g(()=>{if(c!=="page"||s.length===0)return;const n=r=>{r.key==="ArrowRight"||r.key===" "?(r.preventDefault(),I(1)):r.key==="ArrowLeft"&&(r.preventDefault(),I(-1))};return window.addEventListener("keydown",n),()=>window.removeEventListener("keydown",n)},[c,s.length,I]),g(()=>{if(c!=="strip"||s.length===0)return;let n=0;const r=()=>{n=0;const H=window.innerHeight*.3,G=x.current;let q=-1,se=0;for(let Q=0;Q<G.length;Q++){const ie=G[Q];if(!ie)continue;const oe=ie.getBoundingClientRect();if(oe.height>4&&se++,oe.top<=H)q=Q;else break}q<0||se<Math.min(3,G.length)||(q!==$.current&&(E.current=!0,$.current=q,z(q)),L())},l=()=>{n||(n=requestAnimationFrame(r))};return O.current=l,l(),window.addEventListener("scroll",l,{passive:!0}),window.addEventListener("resize",l),()=>{window.removeEventListener("scroll",l),window.removeEventListener("resize",l),n&&cancelAnimationFrame(n),O.current=null}},[c,s.length,_,L]),g(()=>{if(!(c!=="page"||s.length===0))return L(),window.addEventListener("resize",L),()=>window.removeEventListener("resize",L)},[c,d,s.length,L]);const he=n=>{N.current=n.touches[0].clientX},me=n=>{if(N.current===null)return;const r=n.changedTouches[0].clientX-N.current;N.current=null,!(Math.abs(r)<50)&&I(r<0?1:-1)},K=n=>{n&&v(n)},ne=n=>M(r=>{if(r.has(n))return r;const l=new Set(r);return l.add(n),l}),pe=n=>{M(r=>{const l=new Set(r);return l.delete(n),l}),k(r=>r+1)},fe=()=>{M(new Set),k(n=>n+1),Y.invalidateQueries({queryKey:[$e.mangaPages,h,f.id]})},ve=s.length>0&&A.size>=s.length,ae=n=>b>0?`${n}&n=${b}`:n,re=n=>e("div",{className:t.deadPage,role:"alert",children:[e("span",{children:["Page ",n+1," failed to load"]}),e("button",{className:t.pageBtn,onClick:()=>pe(n),children:[e(S,{name:"sync-alt",size:12})," Retry"]})]}),U=B==="height";return e("div",{className:t.readerShell,children:[e("div",{className:t.readerBar,children:[e("button",{className:t.readerIconBtn,onClick:C,"aria-label":"Back to chapters",children:e(S,{name:"chevron-left",size:14})}),e("span",{className:t.readerTitle,children:[p," - Ch. ",f.number,f.title?` ${f.title}`:""]}),s.length>0&&e("span",{className:t.readerCounter,children:[Math.min(d+1,s.length)," / ",s.length]}),e("div",{className:t.readerSegment,role:"group","aria-label":"Reading mode",children:[e("button",{type:"button","aria-pressed":c==="strip",className:c==="strip"?t.readerSegmentActive:"",onClick:()=>P("strip"),children:"Strip"}),e("button",{type:"button","aria-pressed":c==="page",className:c==="page"?t.readerSegmentActive:"",onClick:()=>P("page"),children:"Page"})]}),e("div",{className:t.readerSegment,role:"group","aria-label":"Fit mode",children:[e("button",{type:"button","aria-pressed":!U,className:U?"":t.readerSegmentActive,onClick:()=>i("width"),title:"Fit width - best for portrait / phones",children:"Wide"}),e("button",{type:"button","aria-pressed":U,className:U?t.readerSegmentActive:"",onClick:()=>i("height"),title:"Fit height - best for landscape / desktop",children:"Tall"})]}),e("button",{className:t.readerIconBtn,disabled:!a,onClick:()=>K(a),"aria-label":"Previous chapter",children:e(S,{name:"chevron-left",size:14})}),e("button",{className:t.readerIconBtn,disabled:!o,onClick:()=>K(o),"aria-label":"Next chapter",children:e(S,{name:"chevron-right",size:14})})]}),R?e("p",{className:t.statusMsg,children:"Failed to load pages. Please try again."}):j?e("div",{className:t.readerPages,"aria-hidden":!0,children:Array.from({length:3}).map((n,r)=>e("div",{className:`${t.skeletonThumb} ${t.shimmer}`,style:{width:"100%",maxWidth:"56rem",aspectRatio:"3 / 4"}},r))}):s.length===0?e("p",{className:t.statusMsg,children:"No pages found for this chapter."}):ve?e("div",{className:t.failedBox,children:[e("p",{className:t.statusMsg,children:"Page images failed to load (expired or blocked links)."}),e("button",{className:t.pageBtn,onClick:fe,children:[e(S,{name:"sync-alt",size:12})," Reload pages"]})]}):c==="strip"?e("div",{className:`${t.readerPages} ${U?t.readerPagesTall:""}`,children:m.map((n,r)=>e("div",{ref:l=>{x.current[r]=l},className:t.readerPageWrap,children:[r===d&&e("div",{className:t.ribbon,style:W>0?{right:W}:void 0,"aria-hidden":"true",children:e(S,{name:"bookmark",size:12})},d),A.has(r)?re(r):e("img",{className:t.readerPage,src:ae(n),alt:`Page ${r+1}`,loading:r<3?"eager":"lazy",decoding:"async",draggable:!1,onLoad:()=>O.current?.(),onError:()=>ne(r)})]},`${r}-${s[r].slice(-32)}`))}):e(le,{children:[e("div",{ref:te,className:`${t.pageView} ${U?t.pageViewTall:""}`,onTouchStart:he,onTouchEnd:me,children:[e("div",{className:t.ribbon,style:W>0?{right:W}:void 0,"aria-hidden":"true",children:e(S,{name:"bookmark",size:12})},d),e("button",{className:`${t.tapZone} ${t.tapZoneLeft}`,onClick:()=>I(-1),"aria-label":"Previous page",children:e("span",{className:t.tapChevron,children:e(S,{name:"chevron-left",size:16})})}),A.has(d)?re(d):e("img",{className:t.pageImage,src:ae(m[d]),alt:`Page ${d+1} of ${s.length}`,decoding:"async",draggable:!1,onLoad:()=>L(),onError:()=>ne(d)},`${d}-${s[d].slice(-32)}`),e("button",{className:`${t.tapZone} ${t.tapZoneRight}`,onClick:()=>I(1),"aria-label":"Next page",children:e("span",{className:t.tapChevron,children:e(S,{name:"chevron-right",size:16})})})]}),e("nav",{className:t.pagination,"aria-label":"Page navigation",children:[e("button",{className:t.pageBtn,disabled:d<=0,onClick:()=>I(-1),children:"Previous page"}),e("span",{className:t.pageIndicator,children:[d+1," / ",s.length]}),e("button",{className:t.pageBtn,disabled:d>=s.length-1,onClick:()=>I(1),children:"Next page"})]})]}),(a||o)&&e("nav",{className:t.pagination,children:[e("button",{className:t.pageBtn,disabled:!a,onClick:()=>K(a),children:"Previous chapter"}),e("button",{className:t.pageBtn,disabled:!o,onClick:()=>K(o),children:"Next chapter"})]})]})},_e=800,qe=5e3;function Oe(){const{provider:h="",id:p=""}=be(),[f]=we(),y=Ne(),C=f.get("chapter")||"",v=f.get("rating")||"safe",{hasConsent:u}=Se(),V=u?v:"safe",c=h&&p?xe(h,p):"",P=h.toLowerCase()==="anilist";g(()=>{P&&p&&y(`/manga/anilist/${encodeURIComponent(p)}`,{replace:!0})},[P,p,y]);const B=Pe(!P&&h?h:null,!P&&p?p:null,V,u),i=B.data,{titlePreference:d}=Re(),z=i?Ee(i,d):"Manga",A=Te(c||void 0),M=Le(),b=i&&C?i.chapters.find(a=>a.id===C)??null:null,k=Be(C),N=k!=null&&i?ze(i.chapters,k):null;g(()=>{if(k!=null&&N&&N.id!==C){const a=new URLSearchParams;a.set("chapter",N.id),u&&v!=="safe"&&a.set("rating",v),y(`/manga/${h}/${encodeURIComponent(p)}/read?${a.toString()}`,{replace:!0})}},[k,N,C,u,v,h,p,y]);const x=k!=null&&!!i&&!!N,Y=k!=null&&!!i&&!N,_=ye(()=>{const a=(A.data?.progress??[]).find(o=>o.chapterId===C);return a&&a.page>0?a.page:0},[A.data,C]),j=_>1?_-1:0,R=w(null),s=w(null),m=Z(()=>{R.current&&(clearTimeout(R.current),R.current=null);const a=s.current;s.current=null,a&&c&&M.mutate({mangaId:c,chapterId:a.chapterId,chapterNumber:a.chapterNumber,page:a.page,pageCount:a.pageCount,title:i?.title??null,cover:i?.cover??null,provider:h||null,altTitle:i?.altTitle??null,contentRating:i?.contentRating??null})},[c,M,i?.title,i?.cover,i?.altTitle,i?.contentRating,h]),$=Z((a,o)=>{b&&(s.current={chapterId:b.id,chapterNumber:b.number,page:a,pageCount:o},R.current&&clearTimeout(R.current),R.current=setTimeout(m,_e))},[b,m]);g(()=>{m()},[C,m]),g(()=>()=>m(),[m]),g(()=>{const a=window.setInterval(()=>{s.current&&m()},qe);return()=>window.clearInterval(a)},[m]),g(()=>{const a=()=>{document.visibilityState==="hidden"&&m()},o=()=>m();return document.addEventListener("visibilitychange",a),window.addEventListener("pagehide",o),()=>{document.removeEventListener("visibilitychange",a),window.removeEventListener("pagehide",o)}},[m]);const F=w("");F.current||(F.current=`manga-${Date.now()}-${Math.random().toString(36).slice(2)}`),g(()=>{if(!i||!b)return;const a=i.contentRating==="erotica"||i.contentRating==="pornographic"||i.type==="doujinshi",o=()=>{ce.discord.mangaPresence.mutate({title:i.title,chapterLabel:`Chapter ${b.number}`,isPlaying:!0,thumbnail:i.cover||"",thumbnails:[i.cover].filter(Boolean),isAdult:a,sessionId:F.current}).catch(()=>{}),ce.discord.heartbeat.mutate({sessionId:F.current}).catch(()=>{})};o();const I=window.setInterval(o,6e4);return()=>window.clearInterval(I)},[i,b]);const E=a=>{if(m(),a.externalUrl){window.open(a.externalUrl,"_blank","noopener,noreferrer");return}const o=new URLSearchParams;o.set("chapter",a.id),u&&v!=="safe"&&o.set("rating",v),y(`/manga/${h}/${encodeURIComponent(p)}/read?${o.toString()}`)},T=()=>{m();const a=new URLSearchParams;u&&v!=="safe"&&a.set("rating",v);const o=a.toString()?`?${a.toString()}`:"";y(`/manga/${h}/${encodeURIComponent(p)}${o}`)};return P?null:e("div",{className:Ae.page,children:B.isLoading||x?e("div",{className:t.readerPages,"aria-hidden":!0,children:Array.from({length:3}).map((a,o)=>e("div",{className:`${t.skeletonThumb} ${t.shimmer}`,style:{width:"100%",maxWidth:"56rem",aspectRatio:"3 / 4"}},o))}):!i||!b?e(le,{children:[e("button",{className:t.backBtn,onClick:T,children:"Back to title"}),e(Ce,{message:Y?`Chapter ${k} isn't available from ${h} for this title.`:"Failed to load this chapter. Please try again."})]}):e(De,{provider:h,mangaTitle:z,chapter:b,chapters:i.chapters,onBack:T,onOpenChapter:E,initialPage:j,onProgress:$},b.id)})}export{Oe as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as a}from"./vendor-core-DfaOB3Rn.js";import{R as i}from"./ResetProgressModal-
|
|
1
|
+
import{u as a}from"./vendor-core-DfaOB3Rn.js";import{R as i}from"./ResetProgressModal-BdcBPlC1.js";import{t as n,h as g}from"./useMangaLibrary-DbvnlYV9.js";const M=({mangaId:e,title:r,onClose:o})=>{const s=n(),t=g();return a(i,{isOpen:!!e,itemName:r,progressKind:"reading",listLabel:"my reading list",onClose:o,onConfirm:m=>{e&&(s.mutate({mangaId:e}),m&&t.mutate(e))}})};export{M};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as $e,p as ke,h as ue,d as i,T as me,u as t,S as he}from"./vendor-core-DfaOB3Rn.js";import{b as ge}from"./vendor-query-BBT5_sHx.js";import{o as qe,e as Fe,B as W,aa as Ue,t as q,J as Ye}from"./index-B9fL2VIP.js";import{I as pe}from"./vendor-icons-C1Pj_eSX.js";import{P as ve}from"./MediaCard-JRLogrma.js";import{A as xe}from"./AnimeCard-SI0B6et0.js";import{S as Ve}from"./SkeletonGrid-D2FNyELs.js";import{M as He}from"./MatureConsentModal-D34i8744.js";import{E as Ke}from"./ErrorMessage-hMt90aG4.js";import{u as Qe}from"./useProviders-twwSG5Ji.js";import{s as a}from"./Search.module-C_qwCdHS.js";import"./vendor-ui-3qrARCPr.js";import"./useIsMobile-Dvx1uJ82.js";import"./useAnimeInfoData-hTms4q2e.js";import"./QueueOptionsButton-JAUAWTzf.js";import"./playbackCompletion-CKlwK8SG.js";const We="_shrinkSelect_130sm_1",ze="_tightGrid_130sm_7",z={shrinkSelect:We,tightGrid:ze},je=[{value:"anilist",label:"AniList"},{value:"mal",label:"MAL"}],Je=[{value:"POPULARITY_DESC",label:"Popularity"},{value:"TRENDING_DESC",label:"Trending"},{value:"SCORE_DESC",label:"Score"},{value:"START_DATE_DESC",label:"Newest"},{value:"FAVOURITES_DESC",label:"Favourites"}],Ze=[{value:"",label:"All Status"},{value:"RELEASING",label:"Currently Airing"},{value:"FINISHED",label:"Finished"},{value:"NOT_YET_RELEASED",label:"Not Yet Released"}],Xe=[{value:"",label:"Relevance"},{value:"visits:desc",label:"Most Visited"},{value:"title:asc",label:"Title A-Z"}],et={recent:"Latest",popular:"Popular",views:"Most Viewed",rating:"Top Rated",random:"Random"},tt=[{value:"ALL",label:"All Seasons"},{value:"Winter",label:"Winter"},{value:"Spring",label:"Spring"},{value:"Summer",label:"Summer"},{value:"Fall",label:"Fall"}],fe=m=>m.split("-").map(u=>u&&u[0].toUpperCase()+u.slice(1)).join(" "),at=new Set(["page","limit","year","minScore","minEpisodes"]),rt=new Set(["provider","query","page","limit","type","status","season","year","country","genres","genre","excludeGenres","sortBy","order","studio","blacklist","minScore","minEpisodes"]);function st(m){const u=new URLSearchParams(m),s={};for(const[b,y]of u.entries())rt.has(b)&&(at.has(b)?s[b]=Number(y)||0:s[b]=y);return s}function Ct(){const m=$e(),u=qe(),[s,b]=ke(),{hasConsent:y,grant:Se}=Fe();ue(()=>{document.title="Mature - dango"},[]);const[l,be]=i(s.get("provider")||"anilist"),[N,j]=i(s.get("query")||""),[L,F]=i(s.get("query")||""),[O,g]=i(parseInt(s.get("page")||"1",10)||1),[I,U]=i(()=>{const e=s.get("sortBy");return e||(l==="mal"?"SCORE_DESC":"POPULARITY_DESC")}),[_,J]=i(s.get("sortBy")||""),[C,ye]=i(s.get("status")||""),[D,Ne]=i(s.get("season")||"ALL"),[G,Ce]=i(s.get("year")||"ALL"),[p,M]=i(s.get("genre")||s.get("genres")||""),[Y,Ae]=i(s.get("order")||"recent"),[x,Ee]=i(s.get("studio")||""),[B,Te]=i(s.get("studio")||""),[Z,X]=i([]),[V,Pe]=i(!1),[Re,ee]=i(null),{options:te}=Qe(),ae=me(()=>te.filter(e=>e.mature&&(e.kind??"anime")==="anime"),[te]),re=me(()=>[...je,...ae.map(e=>({value:e.id,label:e.label}))],[ae]),{data:w}=ge({...u.data.matureFilters.queryOptions(),enabled:y,staleTime:1/0}),c=l==="anilist"||l==="mal",H=c?void 0:w?.providers?.[l],T=H?.browse,P=H?.genres??[],A=H?.orders??[],se=A.length>0&&!A.includes(Y)?A[0]:Y,$=!c&&(T?.genre===!0||P.length>0||Z.length>0),v=!c&&(T?.order===!0||A.length>0),E=!c&&T?.studio===!0,le=!c&&T?.sort===!0,K=c?14:T?.pageSize??14,f=e=>{const r=new URLSearchParams;if(e.provider!=="anilist"&&r.set("provider",e.provider),e.query.trim()&&r.set("query",e.query.trim()),e.page>1&&r.set("page",String(e.page)),e.provider==="anilist")e.sort!=="POPULARITY_DESC"&&r.set("sortBy",e.sort),e.status&&r.set("status",e.status),e.season!=="ALL"&&r.set("season",e.season),e.year!=="ALL"&&r.set("year",e.year);else if(e.provider==="mal")e.sort!=="SCORE_DESC"&&r.set("sortBy",e.sort),e.status&&r.set("status",e.status);else{const n=w?.providers?.[e.provider]?.browse,d=w?.providers?.[e.provider]?.orders??[],o=d.length>0&&!d.includes(e.remoteOrder)?d[0]:e.remoteOrder;(!n||n.sort)&&e.remoteSort&&r.set("sortBy",e.remoteSort),(!n||n.genre)&&e.genre&&r.set("genre",e.genre),(!n||n.order)&&o!==(d[0]??"recent")&&r.set("order",o),(!n||n.studio)&&e.studio.trim()&&r.set("studio",e.studio.trim())}b(r,{replace:!0})},S=(e={})=>({provider:l,query:L,page:O,sort:I,remoteSort:_,status:C,season:D,year:G,genre:p,remoteOrder:Y,studio:B,...e}),Le=(()=>{const e=new URLSearchParams;return e.set("provider",l),L.trim()&&e.set("query",L.trim()),e.set("page",String(O)),e.set("limit",String(K)),l==="anilist"&&(e.set("sortBy",I),C&&e.set("status",C),D!=="ALL"&&e.set("season",D),G!=="ALL"&&e.set("year",G)),l==="mal"?(e.set("sortBy",I),C&&e.set("status",C)):c||($&&p&&e.set("genre",p),v&&e.set("order",se),le&&_&&e.set("sortBy",_),E&&B.trim()&&e.set("studio",B.trim())),e.toString()})(),{data:h,isLoading:Oe,isError:Ie,error:_e}=ge({...u.data.matureSearch.queryOptions(st(Le)),enabled:y});ue(()=>{const e=h?.genres;!c&&P.length===0&&e&&e.length>0&&X(r=>{const n=new Set(r.map(o=>o.slug)),d=[...r];for(const o of e)o.slug&&!n.has(o.slug)&&(n.add(o.slug),d.push(o));return d.length===r.length?r:d})},[h,l,c,P.length]);const k=(h?.data||[]).map(e=>({...e,isAdult:!0})),ie=h?.hasMore??!1,ne=h?.total!=null?Math.max(1,Math.ceil(h.total/K)):void 0,R=()=>{Ue(),g(1);let e=p;!c&&!v&&N.trim()&&(e=""),M(e),E&&Te(x),F(N),f(S({query:N,page:1,genre:e,studio:E?x:B}))},De=e=>{be(e),g(1),J(""),M(""),X([]),e==="mal"?U("SCORE_DESC"):e==="anilist"&&U("POPULARITY_DESC"),F(N),f(S({provider:e,page:1,remoteSort:"",genre:"",query:N}))},Ge=e=>{M(e),g(1),e&&(j(""),F("")),f(S({genre:e,page:1,query:e?"":L}))},oe=e=>{g(e),f(S({page:e})),window.scrollTo({top:0,behavior:"smooth"})},Me=async(e,r)=>{const n=r.id||r._id;if(l!=="mal"&&!/^\d+$/.test(n)&&(e.preventDefault(),e.stopPropagation(),!Re)){ee(n);try{if(l!=="anilist"){let o=!1;try{o=(await q.data.anilistStatus.query())?.available===!0}catch{o=!1}if(o){const de=await q.data.matureResolve.query({title:r.name});m(`/anime/${de.id}`);return}const ce=await q.data.matureAllocate.mutate({provider:l,nativeId:n,title:r.name,thumbnail:r.thumbnail});if(!ce?.id)throw new Error("Allocate failed");m(`/anime/${ce.id}`);return}const d=await q.data.matureResolve.query({title:r.name});m(`/anime/${d.id}`)}catch{Ye.error("Could not match this title on AniList")}finally{ee(null)}}},Q=new Date().getFullYear(),Be=[{value:"ALL",label:"All Years"},...Array.from({length:Q-1980+1},(e,r)=>({value:String(Q-r),label:String(Q-r)}))],we=P.length>0?P.map(e=>({value:e,label:fe(e)})):Z.map(e=>({value:e.slug,label:e.name}));return y?t("div",{className:"page-container",children:[t("div",{className:a.header,children:[t("h1",{className:a.pageTitle,children:"Mature"}),t("p",{className:a.pageSubtitle,children:"Browse 18+ titles across AniList and streaming providers"})]}),t("div",{className:a.filterContainer,children:[t("div",{className:a.searchBarWrapper,children:[t("div",{className:a.inputIconWrapper,children:[t(pe,{name:"search",className:a.searchIcon}),t("input",{type:"text",placeholder:`Search ${re.find(e=>e.value===l)?.label}...`,value:N,onChange:e=>j(e.currentTarget.value),onKeyDown:e=>{e.key==="Enter"&&R()},className:a.searchInput})]}),t("div",{className:a.searchActions,children:[t("select",{value:l,onChange:e=>De(e.currentTarget.value),className:a.providerSelect,"aria-label":"Provider",children:re.map(e=>t("option",{value:e.value,children:e.label},e.value))}),t(W,{onClick:R,className:a.searchBtn,children:"Search"}),c&&t("button",{onClick:()=>Pe(!V),className:`${a.filterToggleBtn} ${V?a.active:""}`,children:[t(pe,{name:"filter"})," Filters"]}),le&&t("select",{value:_,onChange:e=>{J(e.currentTarget.value),g(1),f(S({remoteSort:e.currentTarget.value,page:1}))},className:a.providerSelect,"aria-label":"Sort",children:Xe.map(e=>t("option",{value:e.value,children:e.label},e.value))})]})]}),(l==="anilist"||l==="mal")&&t("div",{className:`${a.advancedFilters} ${V?a.show:""}`,children:[t("div",{className:a.filterDivider}),t("div",{className:a.filterGrid,children:[t("div",{className:a.filterItem,children:[t("label",{children:"Sort By"}),t("select",{value:I,onChange:e=>U(e.currentTarget.value),children:Je.map(e=>t("option",{value:e.value,children:e.label},e.value))})]}),t("div",{className:a.filterItem,children:[t("label",{children:"Status"}),t("select",{value:C,onChange:e=>ye(e.currentTarget.value),children:Ze.map(e=>t("option",{value:e.value,children:e.label},e.value))})]}),l==="anilist"&&t(he,{children:[t("div",{className:a.filterItem,children:[t("label",{children:"Season"}),t("select",{value:D,onChange:e=>Ne(e.currentTarget.value),children:tt.map(e=>t("option",{value:e.value,children:e.label},e.value))})]}),t("div",{className:a.filterItem,children:[t("label",{children:"Year"}),t("select",{value:G,onChange:e=>Ce(e.currentTarget.value),children:Be.map(e=>t("option",{value:e.value,children:e.label},e.value))})]})]})]}),t("div",{className:a.filterActions,children:t(W,{onClick:R,className:a.searchBtn,children:"Apply Filters"})})]}),!c&&!!w&&($||v||E)&&t("div",{className:`${a.advancedFilters} ${a.show}`,children:[t("div",{className:a.filterDivider}),t("div",{className:`${a.filterGrid} ${z.tightGrid}`,children:[v&&t("div",{className:`${a.filterItem} ${z.shrinkSelect}`,children:[t("label",{children:"Order"}),t("select",{value:se,onChange:e=>{Ae(e.currentTarget.value),g(1),f(S({remoteOrder:e.currentTarget.value,page:1}))},children:(A.length>0?A:["recent"]).map(e=>t("option",{value:e,children:et[e]||e},e))})]}),$&&t("div",{className:`${a.filterItem} ${z.shrinkSelect}`,children:[t("label",{children:"Genre"}),t("select",{value:p,onChange:e=>{v?(M(e.currentTarget.value),g(1),f(S({genre:e.currentTarget.value,page:1}))):Ge(e.currentTarget.value)},children:[t("option",{value:"",children:"All Genres"}),we.map(e=>t("option",{value:e.value,children:e.label},e.value))]})]}),E&&t("div",{className:a.filterItem,children:[t("label",{children:"Studio"}),t("input",{type:"text",placeholder:"Studio name...",value:x,onChange:e=>Ee(e.currentTarget.value),onKeyDown:e=>{e.key==="Enter"&&R()},className:a.searchInput})]})]}),p&&$&&!v&&t("p",{className:a.pageSubtitle,children:["Browsing the ",fe(p)," genre - search text is ignored while a genre is selected."]}),(v||E)&&t("div",{className:a.filterActions,children:t(W,{onClick:R,className:a.searchBtn,children:"Apply Filters"})})]})]}),Ie&&t(Ke,{message:_e?.message||"Search failed"}),Oe?t(Ve,{count:K}):k.length===0?t("div",{className:a.noResults,children:[t("h3",{children:"No results found"}),t("p",{children:"Try a different query, genre or provider"})]}):t(he,{children:[t("div",{className:a.resultsHeader,children:[t("h2",{className:a.resultsTitle,children:[h?.total??k.length," result",(h?.total??k.length)===1?"":"s"]}),t("div",{className:a.pagination,children:t(ve,{page:O,totalPages:ne,canGoNext:ie,onChange:oe,variant:"labeled"})})]}),t("div",{className:a.resultsGrid,children:k.map(e=>t("div",{onClickCapture:r=>Me(r,e),children:t(xe,{anime:e})},`${l}-${e._id}`))}),t("div",{className:a.bottomPagination,children:t("div",{className:a.pagination,children:t(ve,{page:O,totalPages:ne,canGoNext:ie,onChange:oe,variant:"labeled"})})})]})]}):t(He,{isOpen:!0,onClose:()=>m("/"),onGrant:Se})}export{Ct as default};
|
|
1
|
+
import{a as $e,p as ke,h as ue,d as i,T as me,u as t,S as he}from"./vendor-core-DfaOB3Rn.js";import{b as ge}from"./vendor-query-BBT5_sHx.js";import{o as qe,e as Fe,B as W,aa as Ue,t as q,K as Ye}from"./index-CPhXtUuw.js";import{I as pe}from"./vendor-icons-C1Pj_eSX.js";import{P as ve}from"./MediaCard-B-TmXdgl.js";import{A as xe}from"./AnimeCard-B-3qrNhu.js";import{S as Ke}from"./SkeletonGrid-DqN0laN_.js";import{M as Ve}from"./MatureConsentModal-CEoZ_OA0.js";import{E as He}from"./ErrorMessage-hMt90aG4.js";import{u as Qe}from"./useProviders-BgAgACS8.js";import{s as a}from"./Search.module-C_qwCdHS.js";import"./vendor-ui-3qrARCPr.js";import"./useIsMobile-Dvx1uJ82.js";import"./useAnimeInfoData-BsFz9uiF.js";import"./QueueOptionsButton-DqoDQST5.js";import"./playbackCompletion-D1Gm0GbH.js";const We="_shrinkSelect_130sm_1",ze="_tightGrid_130sm_7",z={shrinkSelect:We,tightGrid:ze},je=[{value:"anilist",label:"AniList"},{value:"mal",label:"MAL"}],Ze=[{value:"POPULARITY_DESC",label:"Popularity"},{value:"TRENDING_DESC",label:"Trending"},{value:"SCORE_DESC",label:"Score"},{value:"START_DATE_DESC",label:"Newest"},{value:"FAVOURITES_DESC",label:"Favourites"}],Je=[{value:"",label:"All Status"},{value:"RELEASING",label:"Currently Airing"},{value:"FINISHED",label:"Finished"},{value:"NOT_YET_RELEASED",label:"Not Yet Released"}],Xe=[{value:"",label:"Relevance"},{value:"visits:desc",label:"Most Visited"},{value:"title:asc",label:"Title A-Z"}],et={recent:"Latest",popular:"Popular",views:"Most Viewed",rating:"Top Rated",random:"Random"},tt=[{value:"ALL",label:"All Seasons"},{value:"Winter",label:"Winter"},{value:"Spring",label:"Spring"},{value:"Summer",label:"Summer"},{value:"Fall",label:"Fall"}],fe=m=>m.split("-").map(u=>u&&u[0].toUpperCase()+u.slice(1)).join(" "),at=new Set(["page","limit","year","minScore","minEpisodes"]),rt=new Set(["provider","query","page","limit","type","status","season","year","country","genres","genre","excludeGenres","sortBy","order","studio","blacklist","minScore","minEpisodes"]);function st(m){const u=new URLSearchParams(m),s={};for(const[b,y]of u.entries())rt.has(b)&&(at.has(b)?s[b]=Number(y)||0:s[b]=y);return s}function Ct(){const m=$e(),u=qe(),[s,b]=ke(),{hasConsent:y,grant:Se}=Fe();ue(()=>{document.title="Mature - dango"},[]);const[l,be]=i(s.get("provider")||"anilist"),[N,j]=i(s.get("query")||""),[L,F]=i(s.get("query")||""),[O,g]=i(parseInt(s.get("page")||"1",10)||1),[I,U]=i(()=>{const e=s.get("sortBy");return e||(l==="mal"?"SCORE_DESC":"POPULARITY_DESC")}),[_,Z]=i(s.get("sortBy")||""),[C,ye]=i(s.get("status")||""),[D,Ne]=i(s.get("season")||"ALL"),[G,Ce]=i(s.get("year")||"ALL"),[p,M]=i(s.get("genre")||s.get("genres")||""),[Y,Ae]=i(s.get("order")||"recent"),[x,Ee]=i(s.get("studio")||""),[B,Te]=i(s.get("studio")||""),[J,X]=i([]),[K,Pe]=i(!1),[Re,ee]=i(null),{options:te}=Qe(),ae=me(()=>te.filter(e=>e.mature&&(e.kind??"anime")==="anime"),[te]),re=me(()=>[...je,...ae.map(e=>({value:e.id,label:e.label}))],[ae]),{data:w}=ge({...u.data.matureFilters.queryOptions(),enabled:y,staleTime:1/0}),c=l==="anilist"||l==="mal",V=c?void 0:w?.providers?.[l],T=V?.browse,P=V?.genres??[],A=V?.orders??[],se=A.length>0&&!A.includes(Y)?A[0]:Y,$=!c&&(T?.genre===!0||P.length>0||J.length>0),v=!c&&(T?.order===!0||A.length>0),E=!c&&T?.studio===!0,le=!c&&T?.sort===!0,H=c?14:T?.pageSize??14,f=e=>{const r=new URLSearchParams;if(e.provider!=="anilist"&&r.set("provider",e.provider),e.query.trim()&&r.set("query",e.query.trim()),e.page>1&&r.set("page",String(e.page)),e.provider==="anilist")e.sort!=="POPULARITY_DESC"&&r.set("sortBy",e.sort),e.status&&r.set("status",e.status),e.season!=="ALL"&&r.set("season",e.season),e.year!=="ALL"&&r.set("year",e.year);else if(e.provider==="mal")e.sort!=="SCORE_DESC"&&r.set("sortBy",e.sort),e.status&&r.set("status",e.status);else{const n=w?.providers?.[e.provider]?.browse,d=w?.providers?.[e.provider]?.orders??[],o=d.length>0&&!d.includes(e.remoteOrder)?d[0]:e.remoteOrder;(!n||n.sort)&&e.remoteSort&&r.set("sortBy",e.remoteSort),(!n||n.genre)&&e.genre&&r.set("genre",e.genre),(!n||n.order)&&o!==(d[0]??"recent")&&r.set("order",o),(!n||n.studio)&&e.studio.trim()&&r.set("studio",e.studio.trim())}b(r,{replace:!0})},S=(e={})=>({provider:l,query:L,page:O,sort:I,remoteSort:_,status:C,season:D,year:G,genre:p,remoteOrder:Y,studio:B,...e}),Le=(()=>{const e=new URLSearchParams;return e.set("provider",l),L.trim()&&e.set("query",L.trim()),e.set("page",String(O)),e.set("limit",String(H)),l==="anilist"&&(e.set("sortBy",I),C&&e.set("status",C),D!=="ALL"&&e.set("season",D),G!=="ALL"&&e.set("year",G)),l==="mal"?(e.set("sortBy",I),C&&e.set("status",C)):c||($&&p&&e.set("genre",p),v&&e.set("order",se),le&&_&&e.set("sortBy",_),E&&B.trim()&&e.set("studio",B.trim())),e.toString()})(),{data:h,isLoading:Oe,isError:Ie,error:_e}=ge({...u.data.matureSearch.queryOptions(st(Le)),enabled:y});ue(()=>{const e=h?.genres;!c&&P.length===0&&e&&e.length>0&&X(r=>{const n=new Set(r.map(o=>o.slug)),d=[...r];for(const o of e)o.slug&&!n.has(o.slug)&&(n.add(o.slug),d.push(o));return d.length===r.length?r:d})},[h,l,c,P.length]);const k=(h?.data||[]).map(e=>({...e,isAdult:!0})),ie=h?.hasMore??!1,ne=h?.total!=null?Math.max(1,Math.ceil(h.total/H)):void 0,R=()=>{Ue(),g(1);let e=p;!c&&!v&&N.trim()&&(e=""),M(e),E&&Te(x),F(N),f(S({query:N,page:1,genre:e,studio:E?x:B}))},De=e=>{be(e),g(1),Z(""),M(""),X([]),e==="mal"?U("SCORE_DESC"):e==="anilist"&&U("POPULARITY_DESC"),F(N),f(S({provider:e,page:1,remoteSort:"",genre:"",query:N}))},Ge=e=>{M(e),g(1),e&&(j(""),F("")),f(S({genre:e,page:1,query:e?"":L}))},oe=e=>{g(e),f(S({page:e})),window.scrollTo({top:0,behavior:"smooth"})},Me=async(e,r)=>{const n=r.id||r._id;if(l!=="mal"&&!/^\d+$/.test(n)&&(e.preventDefault(),e.stopPropagation(),!Re)){ee(n);try{if(l!=="anilist"){let o=!1;try{o=(await q.data.anilistStatus.query())?.available===!0}catch{o=!1}if(o){const de=await q.data.matureResolve.query({title:r.name});m(`/anime/${de.id}`);return}const ce=await q.data.matureAllocate.mutate({provider:l,nativeId:n,title:r.name,thumbnail:r.thumbnail});if(!ce?.id)throw new Error("Allocate failed");m(`/anime/${ce.id}`);return}const d=await q.data.matureResolve.query({title:r.name});m(`/anime/${d.id}`)}catch{Ye.error("Could not match this title on AniList")}finally{ee(null)}}},Q=new Date().getFullYear(),Be=[{value:"ALL",label:"All Years"},...Array.from({length:Q-1980+1},(e,r)=>({value:String(Q-r),label:String(Q-r)}))],we=P.length>0?P.map(e=>({value:e,label:fe(e)})):J.map(e=>({value:e.slug,label:e.name}));return y?t("div",{className:"page-container",children:[t("div",{className:a.header,children:[t("h1",{className:a.pageTitle,children:"Mature"}),t("p",{className:a.pageSubtitle,children:"Browse 18+ titles across AniList and streaming providers"})]}),t("div",{className:a.filterContainer,children:[t("div",{className:a.searchBarWrapper,children:[t("div",{className:a.inputIconWrapper,children:[t(pe,{name:"search",className:a.searchIcon}),t("input",{type:"text",placeholder:`Search ${re.find(e=>e.value===l)?.label}...`,value:N,onChange:e=>j(e.currentTarget.value),onKeyDown:e=>{e.key==="Enter"&&R()},className:a.searchInput})]}),t("div",{className:a.searchActions,children:[t("select",{value:l,onChange:e=>De(e.currentTarget.value),className:a.providerSelect,"aria-label":"Provider",children:re.map(e=>t("option",{value:e.value,children:e.label},e.value))}),t(W,{onClick:R,className:a.searchBtn,children:"Search"}),c&&t("button",{onClick:()=>Pe(!K),className:`${a.filterToggleBtn} ${K?a.active:""}`,children:[t(pe,{name:"filter"})," Filters"]}),le&&t("select",{value:_,onChange:e=>{Z(e.currentTarget.value),g(1),f(S({remoteSort:e.currentTarget.value,page:1}))},className:a.providerSelect,"aria-label":"Sort",children:Xe.map(e=>t("option",{value:e.value,children:e.label},e.value))})]})]}),(l==="anilist"||l==="mal")&&t("div",{className:`${a.advancedFilters} ${K?a.show:""}`,children:[t("div",{className:a.filterDivider}),t("div",{className:a.filterGrid,children:[t("div",{className:a.filterItem,children:[t("label",{children:"Sort By"}),t("select",{value:I,onChange:e=>U(e.currentTarget.value),children:Ze.map(e=>t("option",{value:e.value,children:e.label},e.value))})]}),t("div",{className:a.filterItem,children:[t("label",{children:"Status"}),t("select",{value:C,onChange:e=>ye(e.currentTarget.value),children:Je.map(e=>t("option",{value:e.value,children:e.label},e.value))})]}),l==="anilist"&&t(he,{children:[t("div",{className:a.filterItem,children:[t("label",{children:"Season"}),t("select",{value:D,onChange:e=>Ne(e.currentTarget.value),children:tt.map(e=>t("option",{value:e.value,children:e.label},e.value))})]}),t("div",{className:a.filterItem,children:[t("label",{children:"Year"}),t("select",{value:G,onChange:e=>Ce(e.currentTarget.value),children:Be.map(e=>t("option",{value:e.value,children:e.label},e.value))})]})]})]}),t("div",{className:a.filterActions,children:t(W,{onClick:R,className:a.searchBtn,children:"Apply Filters"})})]}),!c&&!!w&&($||v||E)&&t("div",{className:`${a.advancedFilters} ${a.show}`,children:[t("div",{className:a.filterDivider}),t("div",{className:`${a.filterGrid} ${z.tightGrid}`,children:[v&&t("div",{className:`${a.filterItem} ${z.shrinkSelect}`,children:[t("label",{children:"Order"}),t("select",{value:se,onChange:e=>{Ae(e.currentTarget.value),g(1),f(S({remoteOrder:e.currentTarget.value,page:1}))},children:(A.length>0?A:["recent"]).map(e=>t("option",{value:e,children:et[e]||e},e))})]}),$&&t("div",{className:`${a.filterItem} ${z.shrinkSelect}`,children:[t("label",{children:"Genre"}),t("select",{value:p,onChange:e=>{v?(M(e.currentTarget.value),g(1),f(S({genre:e.currentTarget.value,page:1}))):Ge(e.currentTarget.value)},children:[t("option",{value:"",children:"All Genres"}),we.map(e=>t("option",{value:e.value,children:e.label},e.value))]})]}),E&&t("div",{className:a.filterItem,children:[t("label",{children:"Studio"}),t("input",{type:"text",placeholder:"Studio name...",value:x,onChange:e=>Ee(e.currentTarget.value),onKeyDown:e=>{e.key==="Enter"&&R()},className:a.searchInput})]})]}),p&&$&&!v&&t("p",{className:a.pageSubtitle,children:["Browsing the ",fe(p)," genre - search text is ignored while a genre is selected."]}),(v||E)&&t("div",{className:a.filterActions,children:t(W,{onClick:R,className:a.searchBtn,children:"Apply Filters"})})]})]}),Ie&&t(He,{message:_e?.message||"Search failed"}),Oe?t(Ke,{count:H}):k.length===0?t("div",{className:a.noResults,children:[t("h3",{children:"No results found"}),t("p",{children:"Try a different query, genre or provider"})]}):t(he,{children:[t("div",{className:a.resultsHeader,children:[t("h2",{className:a.resultsTitle,children:[h?.total??k.length," result",(h?.total??k.length)===1?"":"s"]}),t("div",{className:a.pagination,children:t(ve,{page:O,totalPages:ne,canGoNext:ie,onChange:oe,variant:"labeled"})})]}),t("div",{className:a.resultsGrid,children:k.map(e=>t("div",{onClickCapture:r=>Me(r,e),children:t(xe,{anime:e})},`${l}-${e._id}`))}),t("div",{className:a.bottomPagination,children:t("div",{className:a.pagination,children:t(ve,{page:O,totalPages:ne,canGoNext:ie,onChange:oe,variant:"labeled"})})})]})]}):t(Ve,{isOpen:!0,onClose:()=>m("/"),onGrant:Se})}export{Ct as default};
|
package/client/dist/assets/{MatureConsentModal-D34i8744.js → MatureConsentModal-CEoZ_OA0.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as n}from"./vendor-core-DfaOB3Rn.js";import{B as i,
|
|
1
|
+
import{u as n}from"./vendor-core-DfaOB3Rn.js";import{B as i,R as s}from"./index-CPhXtUuw.js";const d="_body_hnb7p_1",h="_hint_hnb7p_10",l="_actions_hnb7p_16",t={body:d,hint:h,actions:l},p=({isOpen:o,onClose:e,onGrant:a,scope:r="title",showResetHint:c=!1})=>n(s,{isOpen:o,title:"Content Warning",onClose:e,children:n("div",{className:t.body,children:[n("p",{children:["This ",r," contains mature content intended for adult audiences."]}),n("p",{children:["By proceeding, you confirm that you are ",n("strong",{children:"18 years of age or older"})," (or the age of majority in your jurisdiction) and wish to view this content."]}),c&&n("p",{className:t.hint,children:["You can reset this preference at any time in the ",n("strong",{children:"Settings"})," page."]}),n("div",{className:t.actions,children:[n(i,{variant:"secondary",onClick:e,children:"Go Back"}),n(i,{onClick:a,children:"I'm 18+, Continue"})]})]})});export{p as M};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as $,A as k,h as U,T as Re,u as e,g as x,S as H,$ as Ie,L as W,q as P,N as ze,a as ke}from"./vendor-core-DfaOB3Rn.js";import{I as N}from"./vendor-icons-C1Pj_eSX.js";import{F as $e,t as Se,d as Le,u as De,e as xe,f as Oe}from"./index-CPhXtUuw.js";import{a as Ae,b as je,f as Fe,s as Ue}from"./vendor-ui-3qrARCPr.js";import{u as ae}from"./useIsMobile-Dvx1uJ82.js";import{M as We}from"./MatureConsentModal-CEoZ_OA0.js";const Ve="_pagination_zelsc_1",Ge="_pageBtn_zelsc_7",Xe="_pageInfo_zelsc_38",Ye="_pagePicker_zelsc_48",He="_dropdown_zelsc_52",Ke="_flipDown_zelsc_68",qe="_jumpRow_zelsc_73",Je="_jumpInput_zelsc_79",Qe="_jumpGo_zelsc_90",Ze="_optionList_zelsc_105",en="_optionBtn_zelsc_113",nn="_current_zelsc_132",w={pagination:Ve,pageBtn:Ge,pageInfo:Xe,pagePicker:Ye,dropdown:He,flipDown:Ke,jumpRow:qe,jumpInput:Je,jumpGo:Qe,optionList:Ze,optionBtn:en,current:nn},Bt=({page:n,totalPages:c,canGoNext:l,onChange:d,isLoading:h=!1,variant:f="compact"})=>{const[s,y]=$(!1),[b,_]=$(""),[v,B]=$(0),[C,R]=$(!1),T=k(null),u=k(null),g=k(null);U(()=>{if(!s)return;const r=m=>{T.current&&!T.current.contains(m.target)&&y(!1)},t=m=>{m.key==="Escape"&&y(!1)};return document.addEventListener("pointerdown",r),document.addEventListener("keydown",t),()=>{document.removeEventListener("pointerdown",r),document.removeEventListener("keydown",t)}},[s]),U(()=>{if(!s)return;B(0),R(!1);const r=requestAnimationFrame(()=>{const t=g.current?.getBoundingClientRect(),m=u.current?.getBoundingClientRect();if(!t)return;let M=0;t.right>window.innerWidth-8?M=window.innerWidth-8-t.right:t.left<8&&(M=8-t.left),B(Math.round(M)),m&&m.top<t.height+24&&R(!0)});return()=>cancelAnimationFrame(r)},[s]);const a=c,S=Re(()=>{if(a!==void 0){if(a<=100)return Array.from({length:a},(m,M)=>M+1);const t=new Set([1,a]);for(let m=n-10;m<=n+10;m++)m>=1&&m<=a&&t.add(m);return[...t].sort((m,M)=>m-M)}const r=l?n+1:n;return Array.from({length:r},(t,m)=>m+1)},[a,n,l]),E=r=>{const t=a!==void 0?Math.min(Math.max(1,r),a):Math.max(1,r);y(!1),_(""),t!==n&&d(t)},L=()=>{const r=parseInt(b,10);Number.isNaN(r)||E(r)},D=h||(a!==void 0?n>=a:!l);return e("div",{className:w.pagination,ref:T,children:[e("button",{className:w.pageBtn,onClick:()=>d(n-1),disabled:n<=1||h,"aria-label":"Previous page",children:[e(N,{name:"chevron-left",size:14}),f==="labeled"&&e("span",{children:"Previous"})]}),e("div",{className:w.pagePicker,ref:u,children:[e("button",{className:w.pageBtn,onClick:()=>{_(""),y(r=>!r)},disabled:h,"aria-label":"Jump to page","aria-expanded":s,children:e("span",{className:w.pageInfo,children:["Page ",e("strong",{children:n}),a!==void 0&&` of ${a}`]})}),s&&e("div",{ref:g,className:`${w.dropdown} ${C?w.flipDown:""}`,style:v!==0?{marginLeft:v}:void 0,children:[e("div",{className:w.jumpRow,children:[e("input",{className:w.jumpInput,type:"number",inputMode:"numeric",min:1,max:a,value:b,placeholder:"Page #",onChange:r=>_(r.currentTarget.value),onKeyDown:r=>{r.key==="Enter"&&L()}}),e("button",{className:w.jumpGo,onClick:L,children:"Go"})]}),e("div",{className:w.optionList,children:S.map(r=>e("button",{className:`${w.optionBtn} ${r===n?w.current:""}`,onClick:()=>E(r),disabled:r===n,children:r},r))})]})]}),e("button",{className:w.pageBtn,onClick:()=>d(n+1),disabled:D,"aria-label":"Next page",children:[f==="labeled"&&e("span",{children:"Next"}),e(N,{name:"chevron-right",size:14})]})]})},tn="_popupPortal_1d6yy_1",on="_popupContent_1d6yy_6",sn="_popupBackdrop_1d6yy_31",rn="_mobile_1d6yy_38",an="_header_1d6yy_62",cn="_title_1d6yy_67",ln="_altTitle_1d6yy_78",dn="_cover_1d6yy_87",un="_body_1d6yy_97",pn="_metaRow_1d6yy_104",_n="_metaItem_1d6yy_111",mn="_scoreIcon_1d6yy_117",fn="_synopsis_1d6yy_121",hn="_genres_1d6yy_143",gn="_genre_1d6yy_143",yn="_footer_1d6yy_158",vn="_primaryAction_1d6yy_167",Bn="_watchBtn_1d6yy_171",bn="_secondaryActions_1d6yy_194",wn="_watchlistBtn_1d6yy_199",Nn="_detailsBtn_1d6yy_200",Cn="_active_1d6yy_226",Pn="_loading_1d6yy_237",Mn="_spinner_1d6yy_247",i={popupPortal:tn,popupContent:on,popupBackdrop:sn,mobile:rn,header:an,title:cn,altTitle:ln,cover:dn,body:un,metaRow:pn,metaItem:_n,scoreIcon:mn,synopsis:fn,genres:hn,genre:gn,footer:yn,primaryAction:vn,watchBtn:Bn,secondaryActions:bn,watchlistBtn:wn,detailsBtn:Nn,active:Cn,loading:Pn,spinner:Mn},Tn=({anchorRect:n,onMouseEnter:c,onMouseLeave:l,onRequestClose:d,children:h})=>{const f=ae(),s=x.useMemo(()=>({getBoundingClientRect:()=>n}),[n]),{refs:y,floatingStyles:b}=Ae({placement:"right-start",middleware:[Fe({fallbackAxisSideDirection:"start"}),Ue({padding:20})],whileElementsMounted:je});x.useEffect(()=>{y.setPositionReference(s)},[y,s]),x.useEffect(()=>{if(!f)return;const v=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.body.style.overflow=v}},[f]);const _=e(H,{children:[f&&e("div",{className:i.popupBackdrop,onClick:()=>d?.()}),e("div",{ref:f?void 0:y.setFloating,className:`${i.popupPortal} ${f?i.mobile:""}`,style:f?void 0:b,onMouseEnter:c,onMouseLeave:l,children:e("div",{className:i.popupContent,children:h})})]});return Ie(_,document.body)},bt=({anchorRect:n,title:c,subtitle:l,cover:d,loading:h,error:f,meta:s=[],genres:y=[],synopsis:b,primaryAction:_,secondaryAction:v,bookmarked:B,bookmarkLabel:C="Watchlist",onToggleBookmark:R,extraActions:T,onMouseEnter:u,onMouseLeave:g,onRequestClose:a})=>{const S=k(!1),E=()=>{S.current=!0,u()},L=()=>{S.current=!1,g()},D=t=>{!t&&!S.current&&g()},r=!!_||!!v||!!T;return e(Tn,{anchorRect:n,onMouseEnter:E,onMouseLeave:L,onRequestClose:a,children:h?e("div",{className:i.loading,children:[e("div",{className:i.spinner}),e("span",{children:"Fetching details..."})]}):f?e("div",{className:i.loading,children:f}):e(H,{children:[c&&e("div",{className:i.header,children:[d&&e($e,{src:d,alt:c,loading:"lazy",decoding:"async",className:i.cover}),e("div",{className:i.title,children:c}),l&&e("div",{className:i.altTitle,children:l})]}),e("div",{className:i.body,children:[s.length>0&&e("div",{className:i.metaRow,children:s.map((t,m)=>e("div",{className:i.metaItem,children:[t.icon&&e(N,{name:t.icon,className:t.accent?i.scoreIcon:void 0,size:14}),e("span",{children:t.label})]},`${t.label}-${m}`))}),y.length>0&&e("div",{className:i.genres,children:y.map(t=>e("span",{className:i.genre,children:t},t))}),b&&e("div",{className:i.synopsis,children:b})]}),r&&e("div",{className:i.footer,children:[_&&e("div",{className:i.primaryAction,children:_.disabled?e("span",{className:i.watchBtn,"aria-disabled":"true",style:{opacity:.5,pointerEvents:"none"},children:[e(N,{name:_.icon??"play",size:14}),_.label]}):e(W,{to:_.to,className:i.watchBtn,onClick:a,children:[e(N,{name:_.icon??"play",size:14}),_.label]})}),e("div",{className:i.secondaryActions,children:[e("button",{className:`${i.watchlistBtn} ${B?i.active:""}`,onClick:t=>{t.preventDefault(),t.stopPropagation(),R()},children:[B?e(N,{name:"check",size:12}):e(N,{name:"plus",size:12}),e("span",{children:B?"Remove":C})]}),T?.(D),v&&e(W,{to:v.to,className:i.detailsBtn,onClick:a,children:[v.icon&&e(N,{name:v.icon,size:12}),e("span",{children:v.label})]})]})]})]})})},En=n=>!n||n.trim()===""?!0:n.includes("placeholder");function Rn(n,c){const[l,d]=$(c);return U(()=>{d(c)},[c]),U(()=>{if(!En(c)||!n)return;let h=!1;return Se.data.showMeta.query({id:n}).then(f=>{const s=f?.thumbnail;!h&&s&&s.trim()!==""&&!s.includes("placeholder")&&d(s)}).catch(()=>{}),()=>{h=!0}},[n,c]),{thumbnail:l}}const In="_cardWrapper_riden_1",zn="_card_riden_1",kn="_cardButton_riden_34",$n="_hoverOverlay_riden_61",Sn="_matureOverlay_riden_96",Ln="_posterContainer_riden_106",Dn="_horizontal_riden_115",xn="_posterImg_riden_119",On="_blurred_riden_131",An="_flat_riden_154",jn="_loaded_riden_158",Fn="_progressSection_riden_167",Un="_titleSection_riden_174",Wn="_title_riden_174",Vn="_titleText_riden_196",Gn="_badge_riden_208",Xn="_typeBadge_riden_219 _badge_riden_208",Yn="_epBadge_riden_228 _badge_riden_208",Hn="_airTime_riden_237",Kn="_adultBadge_riden_244 _badge_riden_208",qn="_gated_riden_257",Jn="_notAiredBadge_riden_263 _badge_riden_208",Qn="_metaRow_riden_278",Zn="_metaItem_riden_289",et="_progressContainer_riden_306",nt="_progressBar_riden_314",tt="_timestamp_riden_322",ot="_removeBtn_riden_327",st="_infoBtn_riden_328",rt="_mobileBadges_riden_379",at="_mobileBadgeBase_riden_386",it="_mobileType_riden_394 _mobileBadgeBase_riden_386",ct="_mobileEp_riden_401 _mobileBadgeBase_riden_386",lt="_lowEnd_riden_471",o={cardWrapper:In,card:zn,cardButton:kn,hoverOverlay:$n,matureOverlay:Sn,posterContainer:Ln,horizontal:Dn,posterImg:xn,blurred:On,flat:An,loaded:jn,progressSection:Fn,titleSection:Un,title:Wn,titleText:Vn,badge:Gn,typeBadge:Xn,epBadge:Yn,airTime:Hn,adultBadge:Kn,gated:qn,notAiredBadge:Jn,metaRow:Qn,metaItem:Zn,progressContainer:et,progressBar:nt,timestamp:tt,removeBtn:ot,infoBtn:st,mobileBadges:rt,mobileBadgeBase:at,mobileType:it,mobileEp:ct,lowEnd:lt},dt=500,re=20,ut=300;function pt(n){const c=k(null),l=k(null),d=k(!1),h=k({x:0,y:0}),f=k(null),s=P(()=>{l.current&&(clearTimeout(l.current),l.current=null)},[]),y=P(()=>{c.current&&(clearTimeout(c.current),c.current=null)},[]),b=P(u=>{c.current&&clearTimeout(c.current),c.current=setTimeout(u,ut)},[]),_=P((u,g=!1)=>{d.current=g,n(u,g)},[n]),v=P((u,g)=>{if(g||u.pointerType==="mouse")return;f.current=u.pointerType,d.current=!1,h.current={x:u.clientX,y:u.clientY};const a=u.currentTarget.getBoundingClientRect();s(),l.current=setTimeout(()=>{l.current=null,_(a,!0)},dt)},[s,_]),B=P(u=>{if(!l.current)return;const g=Math.abs(u.clientX-h.current.x),a=Math.abs(u.clientY-h.current.y);(g>re||a>re)&&s()},[s]),C=P(()=>{s(),f.current=null},[s]),R=P((u,g)=>{u.preventDefault(),u.stopPropagation(),f.current==="touch"?l.current&&(clearTimeout(l.current),l.current=null,_(u.currentTarget.getBoundingClientRect(),!0)):!g&&!d.current&&_(u.currentTarget.getBoundingClientRect())},[_]),T=P(()=>d.current?(d.current=!1,!0):!1,[]);return{longPressFiredRef:d,cancelLongPress:s,clearPopupTimeout:y,schedulePopupClose:b,openViaHold:_,handlePointerDown:v,handlePointerMove:B,handlePointerUpOrCancel:C,handleContextMenu:R,consumeLongPressClick:T}}const Y={elements:{poster:{typeBadge:!0,chapterBadge:!0,adultBadge:!0},info:{title:!0,mobileBadges:!0,progress:!0,meta:!0}}},wt=ze(({item:n,linkTo:c,hoverIcon:l,progress:d,showProgress:h=!1,metaRow:f,display:s,layout:y="vertical",onRemove:b,showRemoveButton:_,showInfoButton:v=!1,onOpenDetails:B,renderPopup:C,onPopupHoverIntent:R,rawThumbnail:T,enrichedId:u})=>{const g=ke(),a=ae(),{titlePreference:S}=Le(),{lowEndMode:E}=De(),[L,D]=$(!1),[r,t]=$(!1),{thumbnail:m}=Rn(u,n.thumbnail),[M,K]=$(!1),[q,J]=$(null),Q=p=>{J(p),K(!0)},V=P(()=>{K(!1),J(null)},[]),I=pt(p=>{if(B){B(p);return}C&&Q(p)}),G=P(()=>{I.schedulePopupClose(V)},[I,V]),Z=I.clearPopupTimeout,ie=p=>{if(a)return;const se=p.currentTarget.getBoundingClientRect();if(B){B(se);return}C&&Q(se)},ce=()=>{C&&G()},le=()=>{Z()},de=()=>{C&&G()},ue=p=>{I.handlePointerDown(p,z)},pe=p=>{I.handlePointerMove(p)},ee=()=>{I.handlePointerUpOrCancel()},_e=p=>{if(B){p.preventDefault(),p.stopPropagation(),B(p.currentTarget.getBoundingClientRect());return}if(C){I.handleContextMenu(p,z);return}I.handleContextMenu(p,z)},ne={...s,elements:{...Y.elements,...s?.elements||{},poster:{...Y.elements?.poster,...s?.elements?.poster||{}},info:{...Y.elements?.info,...s?.elements?.info||{}}}},O=n[S]||n.title,A=ne.elements?.poster,j=ne.elements?.info,me=(A?.typeBadge??!0)&&!!n.typeBadge,fe=(A?.chapterBadge??!0)&&!!n.chapterBadge,he=_??A?.removeButton??!!b,ge=A?.adultBadge??!0,ye=j?.mobileBadges??!0,ve=j?.progress??!0,Be=j?.meta??!0,be=h&&!!d&&d.percent>0,te=!!n.isAdult,{hasConsent:we,grant:Ne}=xe(),[Ce,X]=x.useState(!1),F=x.useRef(null),Pe=()=>{Ne(),X(!1),F.current&&(g(F.current),F.current=null)},z=te&&!we,oe=p=>{if(I.consumeLongPressClick()){p.preventDefault(),p.stopPropagation();return}z&&(p.preventDefault(),p.stopPropagation(),F.current=c,X(!0))},Me=l==="book"?e(N,{name:"book",size:28}):l==="play"?e(N,{name:"play",size:28}):l==="info"?e(N,{name:"info-circle",size:28}):e(N,{name:"info-circle",size:28}),Te=P(p=>{p.preventDefault(),p.stopPropagation(),b&&b(n.id)},[b,n.id]),Ee=T?m??n.thumbnail:Oe(m,E?100:150,E?150:200);return e("div",{className:`${o.cardWrapper} ${E?o.lowEnd:""}`,onMouseEnter:()=>{t(!0),R?.(!0),M&&Z()},onMouseLeave:()=>{t(!1),R?.(!1),M&&G()},children:[e(W,{to:c,className:`${o.card} ${o[y]} ${z?o.cardButton:""}`,onClick:oe,onContextMenu:_e,onPointerDown:ue,onPointerMove:pe,onPointerUp:ee,onPointerCancel:ee,children:e("div",{className:o.posterContainer,children:[z&&e("div",{className:`${o.matureOverlay} ${E?o.flat:""}`}),e("img",{src:Ee,alt:O,className:`${o.posterImg} ${L?o.loaded:""} ${z&&!E?o.blurred:""}`,loading:"lazy",decoding:"async",onLoad:()=>D(!0)}),!a&&e(H,{children:[me&&e("div",{className:o.typeBadge,children:n.typeBadge}),fe&&e("div",{className:o.epBadge,children:[n.chapterBadge,n.airMeta&&e("span",{className:o.airTime,children:n.airMeta})]})]}),ge&&te&&e("div",{className:`${o.adultBadge} ${z?o.gated:""}`,children:"18+"}),n.notAired&&e("div",{className:o.notAiredBadge,children:"NOT AIRED"}),!a&&r&&e("div",{className:o.hoverOverlay,children:Me})]})}),ve&&h&&be&&d&&e("div",{className:o.progressSection,children:[e("div",{className:o.progressContainer,children:e("div",{className:o.progressBar,style:{width:`${d.percent}%`}})}),e("div",{className:o.timestamp,children:d.label})]}),e(W,{to:c,className:o.titleSection,onClick:oe,"aria-label":O,children:[a&&ye&&e("div",{className:o.mobileBadges,children:[!!n.typeBadge&&e("span",{className:o.mobileType,children:n.typeBadge}),n.chapterBadge&&e("span",{className:o.mobileEp,children:n.chapterBadge})]}),j?.title!==!1&&e("div",{className:o.title,title:O,children:e("span",{className:o.titleText,children:O})}),Be&&f&&e("div",{className:o.metaRow,children:f})]}),Ce&&e(We,{isOpen:!0,showResetHint:!0,onClose:()=>X(!1),onGrant:Pe}),he&&e("button",{className:o.removeBtn,onClick:Te,"aria-label":"Remove",children:e(N,{name:"times",size:10})}),v&&!a&&!z&&e("button",{className:o.infoBtn,onMouseEnter:ie,onMouseLeave:ce,"aria-label":"Info",children:e(N,{name:"info",size:11})}),C&&M&&q?C(q,{close:V,onMouseEnter:le,onMouseLeave:de}):null]})});export{wt as M,Bt as P,bt as a,o as m,i as p};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
._pagination_zelsc_1{display:flex;align-items:center;gap:var(--space-2)}._pageBtn_zelsc_7{background:none;border:none;color:var(--text-primary);cursor:pointer;display:flex;align-items:center;justify-content:center;padding:6px;min-width:28px;border-radius:var(--radius-full);transition:all var(--transition-fast);gap:var(--space-2);font-size:var(--font-size-sm)}._pageBtn_zelsc_7:hover:not(:disabled){background:var(--bg-tertiary);color:var(--accent)}._pageBtn_zelsc_7:disabled{opacity:.3;cursor:not-allowed}._pageBtn_zelsc_7 span{font-size:var(--font-size-xs);font-weight:600}._pageInfo_zelsc_38{font-size:var(--font-size-sm);color:var(--text-secondary);white-space:nowrap}._pageInfo_zelsc_38 strong{color:var(--text-primary)}._pagePicker_zelsc_48{position:relative}._dropdown_zelsc_52{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%);z-index:50;background:var(--bg-secondary);border:1px solid var(--border-secondary);border-radius:var(--radius-lg);padding:10px;width:210px;max-width:calc(100vw - 32px);box-shadow:0 12px 32px #00000059;touch-action:manipulation}._dropdown_zelsc_52._flipDown_zelsc_68{bottom:auto;top:calc(100% + 8px)}._jumpRow_zelsc_73{display:flex;gap:8px;margin-bottom:8px}._jumpInput_zelsc_79{flex:1;min-width:0;background:var(--bg-tertiary);border:1px solid var(--border-primary);color:var(--text-primary);border-radius:8px;padding:6px 10px;font-size:.85rem}._jumpGo_zelsc_90{background:var(--bg-tertiary);border:1px solid var(--border-primary);color:var(--text-primary);border-radius:8px;padding:6px 12px;font-size:.8rem;font-weight:700;cursor:pointer}._jumpGo_zelsc_90:hover{border-color:var(--accent)}._optionList_zelsc_105{display:grid;grid-template-columns:repeat(5,1fr);gap:4px;max-height:180px;overflow-y:auto}._optionBtn_zelsc_113{background:none;border:none;color:var(--text-primary);border-radius:6px;padding:6px 0;font-size:.8rem;cursor:pointer}._optionBtn_zelsc_113:hover:not(:disabled){background:var(--bg-tertiary);color:var(--accent)}._optionBtn_zelsc_113:disabled{cursor:default}._optionBtn_zelsc_113._current_zelsc_132{font-weight:800;background:var(--bg-tertiary)}@media(pointer:coarse){._dropdown_zelsc_52{width:240px;padding:12px}._jumpInput_zelsc_79{min-height:44px;font-size:1rem}._jumpGo_zelsc_90{min-height:44px;padding:6px 16px}._optionList_zelsc_105{grid-template-columns:repeat(4,1fr);gap:6px;max-height:220px}._optionBtn_zelsc_113{min-height:44px;font-size:.9rem}._pageBtn_zelsc_7{min-width:36px;min-height:36px}}._popupPortal_1d6yy_1{z-index:var(--z-popover);pointer-events:none}._popupContent_1d6yy_6{pointer-events:auto;width:320px;background-color:var(--bg-secondary);border-radius:var(--radius-lg);box-shadow:0 10px 30px #00000080;border:1px solid var(--border-secondary);overflow:hidden;display:flex;flex-direction:column;animation:_fadeIn_1d6yy_1 .2s ease-out;color:var(--text-primary)}@keyframes _fadeIn_1d6yy_1{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}._popupBackdrop_1d6yy_31{position:fixed;inset:0;z-index:var(--z-popover);background:#0009}._popupPortal_1d6yy_1._mobile_1d6yy_38{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:calc(var(--z-popover) + 1);pointer-events:auto}._popupPortal_1d6yy_1._mobile_1d6yy_38 ._popupContent_1d6yy_6{width:min(340px,calc(100vw - 32px));max-height:85svh;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}@media(orientation:landscape)and (max-height:500px){._popupPortal_1d6yy_1._mobile_1d6yy_38 ._popupContent_1d6yy_6{width:min(460px,calc(100vw - 24px));max-height:calc(100svh - 16px)}}._header_1d6yy_62{padding:var(--space-4);background:linear-gradient(to bottom,rgba(0,0,0,.3),transparent)}._title_1d6yy_67{font-size:var(--font-size-lg);font-weight:var(--font-weight-bold);margin-bottom:var(--space-1);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;color:var(--accent-light)}._altTitle_1d6yy_78{font-size:var(--font-size-xs);color:var(--text-muted);display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}._cover_1d6yy_87{display:block;width:100%;aspect-ratio:16 / 9;object-fit:cover;border-radius:var(--radius-md);margin-bottom:var(--space-3);background:var(--bg-tertiary)}._body_1d6yy_97{padding:0 var(--space-4) var(--space-4) var(--space-4);display:flex;flex-direction:column;gap:var(--space-3)}._metaRow_1d6yy_104{display:flex;align-items:center;gap:var(--space-4);font-size:var(--font-size-sm)}._metaItem_1d6yy_111{display:flex;align-items:center;gap:var(--space-1)}._scoreIcon_1d6yy_117{color:var(--accent-lighter)}._synopsis_1d6yy_121{font-size:var(--font-size-sm);color:var(--text-secondary);line-height:1.5;display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}._details_1d6yy_131{display:flex;flex-direction:column;gap:var(--space-1);font-size:var(--font-size-xs);color:var(--text-muted)}._detailItem_1d6yy_139 strong{color:var(--text-secondary)}._genres_1d6yy_143{display:flex;flex-wrap:wrap;gap:var(--space-1);margin-top:var(--space-1)}._genre_1d6yy_143{background:var(--bg-tertiary);padding:2px 8px;border-radius:var(--radius-sm);font-size:12px;color:var(--text-secondary)}._footer_1d6yy_158{padding:var(--space-4);border-top:1px solid var(--border-secondary);background-color:var(--bg-tertiary);display:flex;flex-direction:column;gap:var(--space-2)}._primaryAction_1d6yy_167{width:100%}._watchBtn_1d6yy_171{width:100%;height:48px;background-color:var(--accent);color:var(--accent-text);border:none;border-radius:var(--radius-md);font-weight:var(--font-weight-bold);display:flex;align-items:center;justify-content:center;gap:var(--space-2);cursor:pointer;transition:all .2s;text-decoration:none;font-size:var(--font-size-base)}._watchBtn_1d6yy_171:hover{background-color:var(--accent-dark);transform:translateY(-1px)}._secondaryActions_1d6yy_194{display:flex;gap:var(--space-2)}._watchlistBtn_1d6yy_199,._detailsBtn_1d6yy_200{flex:1;height:36px;display:flex;align-items:center;justify-content:center;gap:var(--space-2);background-color:var(--bg-elevated);color:var(--text-primary);border:1px solid var(--border-secondary);border-radius:var(--radius-md);cursor:pointer;font-size:11px;font-weight:var(--font-weight-semibold);transition:all .2s;text-decoration:none;white-space:nowrap}._watchlistBtn_1d6yy_199:hover,._detailsBtn_1d6yy_200:hover{background-color:var(--bg-secondary);border-color:var(--accent);color:var(--accent)}._watchlistBtn_1d6yy_199._active_1d6yy_226{background-color:var(--accent);border-color:var(--accent);color:var(--accent-text)}._watchlistBtn_1d6yy_199._active_1d6yy_226:hover{background-color:var(--accent-dark);border-color:var(--accent-dark)}._loading_1d6yy_237{padding:var(--space-8);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-4);color:var(--text-muted)}._spinner_1d6yy_247{width:30px;height:30px;border:3px solid rgba(255,255,255,.1);border-top-color:var(--accent);border-radius:50%;animation:_spin_1d6yy_247 1s linear infinite}@keyframes _spin_1d6yy_247{to{transform:rotate(360deg)}}._cardWrapper_riden_1{position:relative;width:100%;height:100%;min-width:0;z-index:1;transition:z-index var(--transition-fast);border-radius:var(--radius-md)}._cardWrapper_riden_1:hover{z-index:5}._card_riden_1{display:flex;flex-direction:column;background-color:var(--bg-secondary);border-radius:var(--radius-sm);overflow:hidden;height:auto;min-width:0;box-shadow:none;border:1px solid var(--border-secondary);transition:border-color var(--transition-base),background-color var(--transition-base),box-shadow var(--transition-base);-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}._cardButton_riden_34{width:100%;padding:0;text-align:left;font:inherit;border:1px solid var(--border-secondary);cursor:pointer}._cardButton_riden_34:focus-visible{outline:2px solid var(--accent);outline-offset:2px}._cardWrapper_riden_1:hover ._card_riden_1,._cardWrapper_riden_1:focus-within ._card_riden_1{border-color:color-mix(in srgb,var(--accent) 45%,transparent);background-color:var(--bg-tertiary);box-shadow:0 4px 20px #00000080,0 0 0 1px color-mix(in srgb,var(--accent) 20%,transparent)}._cardWrapper_riden_1:focus-within{z-index:5}._hoverOverlay_riden_61{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:#fff;background:#0c0d1285;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);opacity:0;transition:opacity .25s ease,transform .25s var(--ease-smooth);pointer-events:none;z-index:8;border-radius:var(--radius-sm)}._hoverOverlay_riden_61 svg{filter:drop-shadow(0 4px 12px rgba(0,0,0,.6));transform:scale(.9);transition:transform .25s cubic-bezier(.175,.885,.32,1.275)}._cardWrapper_riden_1:hover ._hoverOverlay_riden_61 svg,._cardWrapper_riden_1:focus-within ._hoverOverlay_riden_61 svg{transform:scale(1.1)}._cardWrapper_riden_1:hover ._hoverOverlay_riden_61,._cardWrapper_riden_1:focus-within ._hoverOverlay_riden_61{opacity:1}._cardWrapper_riden_1:has(._matureOverlay_riden_96) ._hoverOverlay_riden_61{display:none}@media(hover:none),(pointer:coarse){._hoverOverlay_riden_61{display:none}}._posterContainer_riden_106{position:relative;width:100%;aspect-ratio:3 / 4;overflow:hidden;background:var(--bg-tertiary);border-radius:var(--radius-sm)}._card_riden_1._horizontal_riden_115 ._posterContainer_riden_106{aspect-ratio:16 / 9}._posterImg_riden_119{width:100%;height:100%;object-fit:cover;opacity:0;transition:opacity .4s ease,transform var(--transition-base),filter var(--transition-base);border-radius:var(--radius-sm)}._posterImg_riden_119._blurred_riden_131{filter:blur(15px)}._matureOverlay_riden_96{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;background-color:#00000073;z-index:10;cursor:pointer;flex-direction:column;gap:var(--space-2);padding:var(--space-2);text-align:center;transition:background-color var(--transition-base)}._matureOverlay_riden_96._flat_riden_154{background-color:#000000f2}._posterImg_riden_119._loaded_riden_158{opacity:1}._cardWrapper_riden_1:hover ._posterImg_riden_119{transform:scale(1.06);filter:brightness(1.05)}._progressSection_riden_167{padding:var(--space-2) var(--space-1) 0;display:flex;flex-direction:column;gap:2px}._titleSection_riden_174{padding:var(--space-2) var(--space-1) 0;display:flex;flex-direction:column;gap:var(--space-1);color:inherit;text-decoration:none;min-width:0}._title_riden_174{font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm);line-height:1.3;color:#e2e8f0;height:1.3em;margin-bottom:0;transition:color var(--transition-base);word-break:break-word;min-width:0}._titleText_riden_196{display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;max-height:1.3em}._cardWrapper_riden_1:hover ._title_riden_174{color:var(--accent-light)}._badge_riden_208{position:absolute;padding:var(--space-1) var(--space-2);border-radius:var(--radius-sm);font-size:var(--font-size-xs);font-weight:var(--font-weight-bold);z-index:2;box-shadow:none;-webkit-backdrop-filter:none;backdrop-filter:none}._typeBadge_riden_219{top:var(--space-2);left:var(--space-2);background-color:#000000b3;color:#fff;border:1px solid rgba(255,255,255,.1)}._epBadge_riden_228{bottom:var(--space-2);left:var(--space-2);background-color:var(--accent);color:var(--accent-text);border-radius:var(--radius-full)}._airTime_riden_237{margin-left:6px;font-size:12px;opacity:.85;font-weight:500}._adultBadge_riden_244{bottom:var(--space-2);right:var(--space-2);background-color:var(--color-danger);color:#fff;border:none;font-size:14px;padding:5px 10px;z-index:5;box-shadow:0 2px 8px #0006}._posterContainer_riden_106 ._adultBadge_riden_244._gated_riden_257{background-color:#000000bf;border:1px solid rgba(220,53,69,.45);color:#ff4a5a}._notAiredBadge_riden_263{top:var(--space-2);right:var(--space-2);background-color:var(--badge-info-bg);color:var(--badge-info-text);border:none;font-size:11px;font-weight:800;letter-spacing:.06em;padding:4px 8px;z-index:5;box-shadow:0 2px 8px #0006}._metaRow_riden_278{display:flex;align-items:center;gap:var(--space-2);font-size:var(--font-size-xs);color:#94a3b8;margin-top:auto;min-width:0;height:24px}._metaItem_riden_289{display:flex;align-items:center;gap:var(--space-1);background-color:var(--bg-tertiary);padding:2px var(--space-2);border-radius:var(--radius-sm);transition:background-color var(--transition-base),color var(--transition-base)}._metaItem_riden_289:hover{background-color:var(--bg-elevated);color:var(--text-primary)}._progressContainer_riden_306{width:100%;height:4px;background-color:var(--bg-tertiary);border-radius:var(--radius-sm);overflow:hidden}._progressBar_riden_314{height:100%;background:linear-gradient(90deg,var(--accent) 0%,var(--accent-light) 100%);border-radius:var(--radius-sm);box-shadow:0 0 8px var(--accent-glow);transition:width .3s ease}._timestamp_riden_322{font-size:var(--font-size-xs);color:var(--text-muted)}._removeBtn_riden_327,._infoBtn_riden_328{position:absolute;top:var(--space-2);right:var(--space-2);width:28px;height:28px;border-radius:50%;background-color:#0009;color:#fff;border:1px solid rgba(255,255,255,.2);display:flex;align-items:center;justify-content:center;cursor:pointer;opacity:0;transition:opacity .15s ease,background-color .15s ease,transform .15s ease;z-index:20;font-size:14px}._cardWrapper_riden_1:hover ._removeBtn_riden_327,._card_riden_1:hover ._removeBtn_riden_327,._cardWrapper_riden_1:hover ._infoBtn_riden_328,._card_riden_1:hover ._infoBtn_riden_328{opacity:1}@media(hover:none),(pointer:coarse){._removeBtn_riden_327,._infoBtn_riden_328{display:none}}._cardWrapper_riden_1 ._removeBtn_riden_327:hover{background-color:color-mix(in srgb,var(--color-danger) 90%,transparent);border-color:color-mix(in srgb,var(--color-danger) 90%,transparent);color:var(--color-danger-text);transform:scale(1.08)}._infoBtn_riden_328:hover{background-color:var(--accent);border-color:var(--accent);color:var(--accent-text);transform:scale(1.08)}._mobileBadges_riden_379{display:flex;flex-wrap:wrap;gap:var(--space-1);margin-bottom:var(--space-1)}._mobileBadgeBase_riden_386{font-size:10px;font-weight:var(--font-weight-bold);padding:1px var(--space-1);border-radius:4px;text-transform:uppercase}._mobileType_riden_394{background-color:#ffffff1a;color:var(--text-secondary);border:1px solid rgba(255,255,255,.1)}._mobileEp_riden_401{background-color:var(--accent);color:var(--accent-text)}@media(max-width:768px){._cardWrapper_riden_1,._card_riden_1{height:auto}._progressSection_riden_167{padding:4px 8px}._titleSection_riden_174{padding:8px 8px 0}._cardWrapper_riden_1 ._title_riden_174{height:1.25em;max-height:1.25em;overflow:hidden;font-size:.82rem;line-height:1.25;color:#e2e8f0}._titleText_riden_196{display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;max-height:1.25em;word-break:break-word;color:#e2e8f0}._removeBtn_riden_327,._infoBtn_riden_328{min-width:36px;min-height:36px;width:36px;height:36px;font-size:14px}._mobileBadges_riden_379{justify-content:center;margin-bottom:4px;gap:4px}._metaRow_riden_278{margin-top:auto;justify-content:center;height:20px}._typeBadge_riden_219{display:none}._cardWrapper_riden_1 ._removeBtn_riden_327{opacity:1;background-color:#00000080}}._cardWrapper_riden_1._lowEnd_riden_471 ._card_riden_1,._cardWrapper_riden_1._lowEnd_riden_471 ._posterImg_riden_119{transition:none}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as e,S as s,d as y,h as S}from"./vendor-core-DfaOB3Rn.js";import{I as p}from"./vendor-icons-C1Pj_eSX.js";import{M as l,S as m,T as g,B as f,D as k,F as x,G as N}from"./useWatchAlongPlayer-
|
|
1
|
+
import{u as e,S as s,d as y,h as S}from"./vendor-core-DfaOB3Rn.js";import{I as p}from"./vendor-icons-C1Pj_eSX.js";import{M as l,S as m,T as g,B as f,D as k,F as x,G as N}from"./useWatchAlongPlayer-B7Yj2s3s.js";const C=({classes:o,title:t,titleTag:i="span",showBack:a=!0,onBack:n,panelRef:b,onPanelClick:r,children:c})=>{const d=i;return e("div",{ref:b,className:o.panel,onClick:r,"data-speed-boost-ignore":"true",children:[e("div",{className:o.header,children:[a&&e("button",{className:o.backBtn,onClick:n,children:e(p,{name:"chevron-left"})}),e(d,{className:o.title||void 0,children:t})]}),e("div",{className:o.content,children:c})]})},$=({classes:o,values:t,onChange:i})=>{const a=()=>{const n=x;i("fontSize",n.fontSize),i("position",n.position),i("bgOpacity",n.bgOpacity),i("bgColor",n.bgColor),i("textColor",n.textColor),i("edge",n.edge),i("bold",n.bold)};return e(s,{children:[e(l,{label:"Font Size",display:t.fontSize.toFixed(1),min:.5,max:10,step:.5,value:t.fontSize,percent:(t.fontSize-.5)/9.5*100,onChange:n=>{Number.isFinite(n)&&i("fontSize",n)}}),e(l,{label:"Vertical Position",display:`${t.position}`,min:0,max:100,step:1,value:t.position,percent:t.position,onChange:n=>{Number.isFinite(n)&&i("position",Math.round(n))}}),e(l,{label:"Background Opacity",display:`${Math.round(t.bgOpacity*100)}%`,min:0,max:1,step:.05,value:t.bgOpacity,percent:t.bgOpacity*100,onChange:n=>{Number.isFinite(n)&&i("bgOpacity",n)}}),e(m,{label:"Text Color",colors:g,value:t.textColor,onChange:n=>i("textColor",n)}),e(m,{label:"Background Color",colors:f,value:t.bgColor,onChange:n=>i("bgColor",n)}),e(k,{label:"Text Edge",options:["shadow","outline","none"],value:t.edge,onChange:n=>i("edge",n)}),e("button",{type:"button",className:`${o.item} ${t.bold?o.active:""}`,onClick:()=>i("bold",!t.bold),children:[e("span",{children:"Bold Text"}),t.bold&&e(p,{name:"check",size:12})]}),e("button",{type:"button",className:o.item,onClick:a,children:e("span",{children:"Reset to Defaults"})})]})},z=({classes:o,enabled:t,delayMs:i,onToggle:a,onDelayChange:n,onCalibrate:b})=>{const[r,c]=y(null),d=r??i;S(()=>{c(null)},[i]);const h=()=>{r!==null&&(n(r),c(null))};return e(s,{children:[e("button",{type:"button",className:`${o.item} ${t?o.active:""}`,onClick:()=>a(!t),children:[e("span",{children:"Video delay"}),t&&e(p,{name:"check",size:12})]}),e(l,{label:"Video delay",display:`${d}ms`,min:0,max:500,step:5,value:d,percent:d/500*100,onChange:u=>c(Math.round(u)),onCommit:h}),e("div",{className:o.note,children:"For Bluetooth headsets where audio arrives late. Video is held back via canvas; audio plays untouched."}),b&&e("button",{type:"button",className:o.item,onClick:b,children:e("span",{children:"Calibrate…"})})]})},B=({classes:o,values:t,onChange:i})=>e(s,{children:[e("button",{type:"button",className:`${o.item} ${t.enabled?o.active:""}`,onClick:()=>i({enabled:!t.enabled}),"aria-pressed":t.enabled,children:[e("span",{children:"Ambient light"}),e("span",{style:{display:"flex",alignItems:"center",gap:6},children:[t.enabled?"On":"Off",t.enabled&&e(p,{name:"check",size:12})]})]}),e(l,{label:"Blur",display:`${t.blur}px`,min:0,max:120,step:2,value:t.blur,percent:t.blur/120*100,onChange:a=>i({blur:Math.round(a)})}),e(l,{label:"Saturation",display:`${t.saturation}%`,min:0,max:200,step:5,value:t.saturation,percent:t.saturation/200*100,onChange:a=>i({saturation:Math.round(a)})}),e(l,{label:"Brightness",display:`${t.brightness}%`,min:20,max:120,step:5,value:t.brightness,percent:(t.brightness-20)/100*100,onChange:a=>i({brightness:Math.round(a)})}),e(l,{label:"Opacity",display:`${t.opacity}%`,min:10,max:100,step:5,value:t.opacity,percent:(t.opacity-10)/90*100,onChange:a=>i({opacity:Math.round(a)})}),e("div",{className:o.note,children:"Mirrors the video onto the backdrop behind the player. Turn off for pure black."}),e("button",{type:"button",className:o.item,onClick:()=>i({...N}),children:e("span",{children:"Reset to defaults"})})]}),E=({classes:o,options:t,onSelect:i})=>e(s,{children:t.map(a=>e("button",{type:"button",className:`${o.item} ${a.selected?o.active:""}`,onClick:()=>i(a.key),children:[e("span",{children:a.label}),a.selected&&e(p,{name:"check",size:12})]},a.key))});export{z as A,E as O,C as S,$ as a,B as b};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/PlayerSettings-
|
|
2
|
-
import{u as t,g as St,h as U,P as Nr,z as _r,d as ne,A as N,q as K,y as Ar,T as Ae,o as xr,a as Lr,c as $r,_ as Br,S as at}from"./vendor-core-DfaOB3Rn.js";import{p as te,a2 as zt,a3 as lt,o as Dr,q as ae,t as ue,J as ke,a4 as Ir,a5 as et,Q as wt,a6 as Fr,e as Or,x as Wr,y as Ur,z as Qr,A as Vr,d as Kr,u as qr,B as Ne,h as Qt,a7 as Gr,a8 as zr,f as Hr}from"./index-B9fL2VIP.js";import{P as jr,a as Yr,b as Xr,F as Jr,s as Zr,c as en}from"./PlayerProvider-BbsS7ai1.js";import{u as Ht,b as Vt,a as bt}from"./vendor-query-BBT5_sHx.js";import{p as _t,s as tn,C as rn,a as nn,P as sn,b as Ye,c as Kt,f as jt,d as on,e as an,g as ln,r as cn,u as un,h as dn,i as mn,j as pn,k as hn,l as fn,m as vn,n as gn,o as _e,A as yn,q as qt,R as bn,E as Sn,t as wn,v as b,w as En,x as kn,y as Tn}from"./useWatchAlongPlayer-CtnbRVOZ.js";import{I as ye}from"./vendor-icons-C1Pj_eSX.js";import{a as Cn,i as ut,b as Yt,l as Rn,c as Mn}from"./playbackCompletion-CKlwK8SG.js";import{M as Pn}from"./MatureConsentModal-D34i8744.js";import{u as Nn}from"./useIsMobile-Dvx1uJ82.js";import{s as Le,Q as _n}from"./QueueRail-Ck96ehEp.js";import{u as An,Q as xn}from"./QueueOptionsButton-JAUAWTzf.js";import{u as Xt}from"./useProviders-twwSG5Ji.js";import{A as Ln}from"./AnimeMetaDetails-B3-A7O5H.js";import{S as $n}from"./SynopsisText-B3Sa5pRv.js";import{W as Bn}from"./WatchAlongPanel-D3FLPJz0.js";import"./vendor-ui-3qrARCPr.js";const Dn="_controlsOverlay_6uapd_1",In="_hidden_6uapd_21",Fn="_topControls_6uapd_27",On="_backBtn_6uapd_47",Wn="_videoTitleInfo_6uapd_67",Un="_animeTitle_6uapd_73",Qn="_episodeNumber_6uapd_83",Vn="_bottomControls_6uapd_91",Kn="_progressBarContainer_6uapd_110",qn="_progressBar_6uapd_110",Gn="_thumb_6uapd_129",zn="_scrubbing_6uapd_144",Hn="_watchedBar_6uapd_148",jn="_bufferedBar_6uapd_149",Yn="_timeBubble_6uapd_191",Xn="_skipSegment_6uapd_225",Jn="_op_6uapd_235",Zn="_mixed_op_6uapd_236",es="_ed_6uapd_240",ts="_mixed_ed_6uapd_241",rs="_recap_6uapd_245",ns="_mixed_recap_6uapd_246",ss="_bottomControlsRow_6uapd_250",os="_leftControls_6uapd_258",is="_rightControls_6uapd_259",as="_controlBtn_6uapd_266",ls="_theaterBtn_6uapd_307",cs="_nextEpisodeBtn_6uapd_311",us="_active_6uapd_332",ds="_timeDisplay_6uapd_336",ms="_skipControls_6uapd_344",B={controlsOverlay:Dn,hidden:In,topControls:Fn,backBtn:On,videoTitleInfo:Wn,animeTitle:Un,episodeNumber:Qn,bottomControls:Vn,progressBarContainer:Kn,progressBar:qn,thumb:Gn,scrubbing:zn,watchedBar:Hn,bufferedBar:jn,timeBubble:Yn,skipSegment:Xn,op:Jn,mixed_op:Zn,ed:es,mixed_ed:ts,recap:rs,mixed_recap:ns,bottomControlsRow:ss,leftControls:os,rightControls:is,controlBtn:as,theaterBtn:ls,nextEpisodeBtn:cs,active:us,timeDisplay:ds,skipControls:ms},ps=({player:r,handlers:o,visible:c,skipIntervals:d,showNextEpisodeButton:C,onNextEpisode:i,isTheaterMode:s,onTheaterModeToggle:n,settingsBtnRef:a,timeDisplayRef:g})=>{const{state:p,actions:v}=r,{showSettings:S}=p;return t("div",{className:`${B.controlsOverlay} ${c?"":B.hidden} `,"data-speed-boost-ignore":"true",style:{pointerEvents:"none",background:"none",justifyContent:"flex-end"},children:t("div",{className:B.bottomControls,"data-speed-boost-ignore":"true",onClick:E=>E.stopPropagation(),children:[t(jr,{classes:{container:B.progressBarContainer,scrubbing:B.scrubbing,timeBubble:B.timeBubble,bar:B.progressBar,buffered:B.bufferedBar,watched:B.watchedBar,thumb:B.thumb},timeLabelRef:g,children:[p.duration>0&&r.state.currentSkipInterval&&t("div",{className:`${B.skipSegment} ${B[r.state.currentSkipInterval.skip_type]} `,style:{left:`${r.state.currentSkipInterval.start_time/p.duration*100}% `,width:`${(r.state.currentSkipInterval.end_time-r.state.currentSkipInterval.start_time)/p.duration*100}% `}}),d.map(E=>{const e=E.start_time/p.duration*100,w=(E.end_time-E.start_time)/p.duration*100;return t("div",{className:`${B.skipSegment} ${B[E.skip_type]} `,style:{left:`${e}% `,width:`${w}% `},title:E.skip_type.toUpperCase()},E.skip_id)})]}),t("div",{className:B.bottomControlsRow,children:[t("div",{className:B.leftControls,children:[t(Yr,{className:B.controlBtn}),t(Xr,{buttonClassName:B.controlBtn,onExpandedChange:v.setShowVolumeSlider}),t("span",{className:B.timeDisplay,ref:g,children:[v.formatTime(0)," / ",v.formatTime(p.duration)]}),p.currentSkipInterval&&!p.isAutoSkipEnabled&&!p.playbackLocked&&t("button",{className:B.controlBtn,onClick:()=>{p.currentSkipInterval&&(r.engine.seek(p.currentSkipInterval.end_time),v.setCurrentSkipInterval(null))},children:["Skip ",p.currentSkipInterval.skip_type==="op"?"Opening":"Ending"]})]}),t("div",{className:B.rightControls,children:[t("div",{className:B.skipControls,children:C&&t("button",{className:B.nextEpisodeBtn,onClick:i,title:"Play next episode",children:"Next EP"})}),t("button",{className:`${B.controlBtn} ${o.isSubtitleActive?B.active:""}`,onClick:o.handleCCToggle,title:o.isSubtitleActive?"Disable Subtitles":"Enable Subtitles","aria-label":"Toggle Subtitles",children:t(ye,{name:"closed-captioning",size:22})}),t("button",{ref:a,className:`${B.controlBtn} ${S?B.active:""} `,onClick:()=>v.setShowSettings(!S),"aria-label":"Settings",children:t(ye,{name:"cog"})}),t("button",{className:`${B.controlBtn} ${B.theaterBtn} ${s?B.active:""} `,onClick:E=>{E.stopPropagation(),n()},title:s?"Exit Theater Mode":"Theater Mode","aria-label":s?"Exit Theater Mode":"Theater Mode",children:t(ye,{name:"tv"})}),t(Jr,{className:B.controlBtn})]})]})]})})};function hs(r){const{state:o,refs:c,actions:d}=r,C=n=>{if(!c.videoRef.current)return;d.setActiveSubtitleTrack(n);try{if(n===null||n==="off")te.setItem("playerSubtitlesEnabled","false");else{te.setItem("playerSubtitlesEnabled","true");const g=o.availableSubtitles.find(p=>p.label===n||p.lang===n);g?te.setItem("playerLastSubtitle",tn(g)):te.setItem("playerLastSubtitle",n)}}catch{}let a=!1;Array.from(c.videoRef.current.textTracks).forEach(g=>{const v=n!==null&&n!=="off"&&(g.language===n||g.label===n)&&!a;g.mode=v?"showing":"hidden",v&&(a=!0)})},i=o.activeSubtitleTrack!==null&&o.activeSubtitleTrack!=="off";return{handleSubtitleSelection:C,isSubtitleActive:i,handleCCToggle:()=>{if(!c.videoRef.current)return;if(i){C("off");return}if(o.availableSubtitles.length===0)return;let n=null;try{n=te.getItem("playerLastSubtitle")}catch{}const a=_t(o.availableSubtitles,{lastKey:n,enabled:!0});if(a<0)return;const g=o.availableSubtitles[a];C(g.label||g.lang)}}}const fs=_r(()=>zt(()=>import("./PlayerSettings-cJWnEwcK.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12]))),vs=({player:r,isAutoplayEnabled:o,onAutoplayChange:c,showNextEpisodeButton:d,onNextEpisode:C,videoSources:i,selectedSource:s,selectedLink:n,onSourceChange:a,loadingVideo:g,skipIntervals:p,animeTitle:v,episodeNumber:S,mode:E,isTheaterMode:e,onTheaterModeToggle:w,anime4kEnabled:T,onAnime4kToggle:_,anime4kSupported:$,anime4kProfile:M,onAnime4kProfileChange:h,anime4kInitializing:P,anime4kError:y,videoDelayEnabled:R,onVideoDelayToggle:W,videoDelayMs:q,onVideoDelayChange:D,onCalibrateAvSync:I,fallbackChoice:G,onFallbackChoiceChange:ee,ambientSettings:m,onAmbientChange:f,children:A,overlays:Y,isInteractingExtra:x=!1,className:z,hideChrome:se=!1})=>{const{state:F,actions:we}=r,{showSettings:V}=F,{setShowSettings:H}=we,u=hs(r),k=St.useRef(null),O=St.useRef(null),j=St.useRef(null);U(()=>{const ve=Oe=>{k.current&&!k.current.contains(Oe.target)&&O.current&&!O.current.contains(Oe.target)&&V&&H(!1)};return V&&document.addEventListener("mousedown",ve),()=>{document.removeEventListener("mousedown",ve)}},[V,H]);const de=F.showControls||V||F.isScrubbing,L=F.activeSubtitleTrack!=="off"?F.availableSubtitles.find(ve=>ve.lang===F.activeSubtitleTrack||ve.label===F.activeSubtitleTrack):void 0,be=t(rn,{visible:de,title:v,episode:S?`Episode ${S}`:void 0,mode:E,server:g?void 0:s?.sourceName,subtitles:g?void 0:L?.label||L?.lang,onBack:()=>window.history.back(),classes:{overlay:B.controlsOverlay,hidden:B.hidden,top:B.topControls,backBtn:B.backBtn,titleInfo:B.videoTitleInfo,title:B.animeTitle,episode:B.episodeNumber}}),Ve=!g&&!F.isBuffering&&F.duration>0?t(nn,{}):null,X=t(ps,{player:r,handlers:u,visible:de,skipIntervals:p,showNextEpisodeButton:d,onNextEpisode:C,isTheaterMode:e,onTheaterModeToggle:w,settingsBtnRef:O,timeDisplayRef:j}),oe=t(Nr,{fallback:null,children:t(fs,{ref:k,isOpen:V,onClose:()=>H(!1),videoSources:i,currentSource:s,currentLink:n,onSourceChange:a,subtitles:F.availableSubtitles,activeSubtitleTrack:F.activeSubtitleTrack,onSubtitleChange:u.handleSubtitleSelection,subtitleSettings:{fontSize:F.subtitleFontSize,position:F.subtitlePosition,bgOpacity:F.subtitleBgOpacity,bgColor:F.subtitleBgColor,textColor:F.subtitleTextColor,edge:F.subtitleEdge,bold:F.subtitleBold},onSubtitleSettingsChange:we.setSubtitleStyle,useNativeControls:!F.playbackLocked&&F.useNativeControls,onNativeControlsToggle:we.setUseNativeControls,anime4kEnabled:T,onAnime4kToggle:_,anime4kSupported:$,anime4kProfile:M,onAnime4kProfileChange:h,anime4kInitializing:P,anime4kError:y,videoDelayEnabled:R,onVideoDelayToggle:W,videoDelayMs:q,onVideoDelayChange:D,onCalibrateAvSync:I,isAutoSkipEnabled:F.isAutoSkipEnabled,onAutoSkipChange:ve=>{we.setIsAutoSkipEnabled(ve);try{te.setItem("autoSkipEnabled",ve.toString())}catch{}},isAutoplayEnabled:o,onAutoplayChange:c,fallbackChoice:G,onFallbackChoiceChange:ee,isTheaterMode:e,ambientSettings:m,onAmbientChange:f})}),$e=V?t("div",{"data-speed-boost-ignore":"true",onClick:ve=>ve.stopPropagation(),children:oe}):null;return t(sn,{engine:r.engine,topBar:be,centerControls:Ve,bottomBar:!g&&F.duration>0?X:null,settingsPanel:$e,overlays:Y,isInteracting:x||F.showSettings||F.showVolumeSlider,nativeControls:!F.playbackLocked&&F.useNativeControls,className:z,chromeDisabled:se,children:A})},gs=({count:r=3})=>t("section",{className:Le.section,children:[t("div",{className:Le.header,children:t("button",{className:Le.headerToggle,disabled:!0,children:[t("span",{className:Le.title,children:t(lt,{width:"60px",height:"1.2rem",variant:"text"})}),t(ye,{name:"chevron-down",style:{opacity:.3}})]})}),t("div",{className:Le.list,children:Array.from({length:r}).map((o,c)=>t("div",{className:Le.item,style:{pointerEvents:"none"},children:[t("div",{className:Le.dragHandle,style:{opacity:.2},children:t(lt,{width:"16px",height:"16px",variant:"rectangular"})}),t("div",{className:Le.thumbnail,style:{overflow:"hidden",background:"transparent"},children:t(lt,{width:"100%",height:"100%",variant:"rectangular"})}),t("div",{className:Le.meta,children:[t(lt,{width:"80%",height:"1.2rem",variant:"text",className:Le.metaGap}),t(lt,{width:"40%",height:"0.8rem",variant:"rectangular",style:{borderRadius:"var(--radius-sm)"}})]})]},c))})]}),ys={soft:"Softsub",hard:"Hardsub",mixed:"Mixed"},bs={direct:"Direct",embed:"Embed",cookie:"Needs cookie"},Ss=["direct","cookie","embed"],ws=({selectedProvider:r,onProviderChange:o,isAdult:c,options:d})=>{const i=(d&&d.length>0?d:[]).filter(s=>s.mature===(c===!0));return t("div",{className:Ye.providerSelectContainer,children:[t("h4",{children:"Provider"}),t("select",{className:Ye.providerSelect,value:r,onChange:s=>o(s.currentTarget.value),children:Ss.map(s=>{const n=i.filter(a=>(a.tier??"direct")===s);return n.length===0?null:t("optgroup",{label:bs[s],children:n.map(a=>t("option",{value:a.id,children:a.sub?`${a.label} (${ys[a.sub]})`:a.label},a.id))},s)})})]})},Es=({videoSources:r,selectedSource:o,selectedLink:c,onSourceChange:d,onLinkChange:C})=>{const i=Array.isArray(r)?r:[];if(i.length===0)return null;const s=o?.type==="iframe"&&(o.links?.length??0)>1;return t("div",{className:Ye.sourceSelectionContainer,children:[t("h4",{children:"Source"}),t("div",{className:Ye.sourceButtons,children:i.map((n,a)=>t("button",{className:`${Ye.sourceButton} ${o?.sourceName===n.sourceName?Ye.active:""} `,onClick:()=>d(n),children:n.sourceName},`${n.sourceName}-${a}`))}),s&&t("select",{className:Ye.sourceSelect,"aria-label":"Fallback embed quality",value:c?.link??o.links[0]?.link??"",onChange:n=>{const a=o.links.find(g=>g.link===n.currentTarget.value);a&&C(a)},children:o.links.map(n=>t("option",{value:n.link,children:n.resolutionStr},n.link))})]})},ks=St.memo(Es,(r,o)=>r.selectedSource?.sourceName===o.selectedSource?.sourceName&&r.selectedLink?.link===o.selectedLink?.link&&r.videoSources===o.videoSources),Ts={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}},Cs={low:"ModeB",balanced:"ModeA",high:"ModeAA",denoise:"ModeC"},Rs=5,Ms=15e3,Ps=`
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/PlayerSettings-DehU56D4.js","assets/vendor-core-DfaOB3Rn.js","assets/index-CPhXtUuw.js","assets/vendor-query-BBT5_sHx.js","assets/vendor-icons-C1Pj_eSX.js","assets/index-YxVpiwVZ.css","assets/OptionListMenu-ArbsAjlv.js","assets/useWatchAlongPlayer-B7Yj2s3s.js","assets/PlayerProvider-CbamWD19.js","assets/PlayerProvider-ZeplRma-.css","assets/playbackCompletion-D1Gm0GbH.js","assets/useWatchAlongPlayer-Dk7zB7P4.css","assets/PlayerSettings-CbGkvNJq.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{u as t,g as St,h as U,P as Nr,z as _r,d as ne,A as N,q as K,y as Ar,T as Ae,o as xr,a as Lr,c as $r,_ as Br,S as at}from"./vendor-core-DfaOB3Rn.js";import{p as te,a3 as zt,a4 as lt,o as Dr,q as ae,t as ue,K as ke,a5 as Ir,a6 as et,R as wt,a7 as Fr,e as Or,x as Wr,y as Ur,z as Qr,A as Vr,d as Kr,u as qr,B as Ne,h as Qt,a8 as Gr,F as zr,f as Hr}from"./index-CPhXtUuw.js";import{P as jr,a as Yr,b as Xr,F as Jr,s as Zr,c as en}from"./PlayerProvider-CbamWD19.js";import{u as Ht,b as Vt,a as bt}from"./vendor-query-BBT5_sHx.js";import{p as _t,s as tn,C as rn,a as nn,P as sn,b as Ye,c as Kt,f as jt,d as on,e as an,g as ln,r as cn,u as un,h as dn,i as mn,j as pn,k as hn,l as fn,m as vn,n as gn,o as _e,A as yn,q as qt,R as bn,E as Sn,t as wn,v as b,w as En,x as kn,y as Tn}from"./useWatchAlongPlayer-B7Yj2s3s.js";import{I as ye}from"./vendor-icons-C1Pj_eSX.js";import{a as Cn,i as ut,b as Yt,l as Rn,c as Mn}from"./playbackCompletion-D1Gm0GbH.js";import{M as Pn}from"./MatureConsentModal-CEoZ_OA0.js";import{u as Nn}from"./useIsMobile-Dvx1uJ82.js";import{s as Le,Q as _n}from"./QueueRail-ClrcV9LL.js";import{u as An,Q as xn}from"./QueueOptionsButton-DqoDQST5.js";import{u as Xt}from"./useProviders-BgAgACS8.js";import{A as Ln}from"./AnimeMetaDetails-B3-A7O5H.js";import{S as $n}from"./SynopsisText-B3Sa5pRv.js";import{W as Bn}from"./WatchAlongPanel-DRsYyjM7.js";import"./vendor-ui-3qrARCPr.js";const Dn="_controlsOverlay_6uapd_1",In="_hidden_6uapd_21",Fn="_topControls_6uapd_27",On="_backBtn_6uapd_47",Wn="_videoTitleInfo_6uapd_67",Un="_animeTitle_6uapd_73",Qn="_episodeNumber_6uapd_83",Vn="_bottomControls_6uapd_91",Kn="_progressBarContainer_6uapd_110",qn="_progressBar_6uapd_110",Gn="_thumb_6uapd_129",zn="_scrubbing_6uapd_144",Hn="_watchedBar_6uapd_148",jn="_bufferedBar_6uapd_149",Yn="_timeBubble_6uapd_191",Xn="_skipSegment_6uapd_225",Jn="_op_6uapd_235",Zn="_mixed_op_6uapd_236",es="_ed_6uapd_240",ts="_mixed_ed_6uapd_241",rs="_recap_6uapd_245",ns="_mixed_recap_6uapd_246",ss="_bottomControlsRow_6uapd_250",os="_leftControls_6uapd_258",is="_rightControls_6uapd_259",as="_controlBtn_6uapd_266",ls="_theaterBtn_6uapd_307",cs="_nextEpisodeBtn_6uapd_311",us="_active_6uapd_332",ds="_timeDisplay_6uapd_336",ms="_skipControls_6uapd_344",B={controlsOverlay:Dn,hidden:In,topControls:Fn,backBtn:On,videoTitleInfo:Wn,animeTitle:Un,episodeNumber:Qn,bottomControls:Vn,progressBarContainer:Kn,progressBar:qn,thumb:Gn,scrubbing:zn,watchedBar:Hn,bufferedBar:jn,timeBubble:Yn,skipSegment:Xn,op:Jn,mixed_op:Zn,ed:es,mixed_ed:ts,recap:rs,mixed_recap:ns,bottomControlsRow:ss,leftControls:os,rightControls:is,controlBtn:as,theaterBtn:ls,nextEpisodeBtn:cs,active:us,timeDisplay:ds,skipControls:ms},ps=({player:r,handlers:o,visible:c,skipIntervals:d,showNextEpisodeButton:C,onNextEpisode:i,isTheaterMode:s,onTheaterModeToggle:n,settingsBtnRef:a,timeDisplayRef:g})=>{const{state:p,actions:v}=r,{showSettings:S}=p;return t("div",{className:`${B.controlsOverlay} ${c?"":B.hidden} `,"data-speed-boost-ignore":"true",style:{pointerEvents:"none",background:"none",justifyContent:"flex-end"},children:t("div",{className:B.bottomControls,"data-speed-boost-ignore":"true",onClick:E=>E.stopPropagation(),children:[t(jr,{classes:{container:B.progressBarContainer,scrubbing:B.scrubbing,timeBubble:B.timeBubble,bar:B.progressBar,buffered:B.bufferedBar,watched:B.watchedBar,thumb:B.thumb},timeLabelRef:g,children:[p.duration>0&&r.state.currentSkipInterval&&t("div",{className:`${B.skipSegment} ${B[r.state.currentSkipInterval.skip_type]} `,style:{left:`${r.state.currentSkipInterval.start_time/p.duration*100}% `,width:`${(r.state.currentSkipInterval.end_time-r.state.currentSkipInterval.start_time)/p.duration*100}% `}}),d.map(E=>{const e=E.start_time/p.duration*100,w=(E.end_time-E.start_time)/p.duration*100;return t("div",{className:`${B.skipSegment} ${B[E.skip_type]} `,style:{left:`${e}% `,width:`${w}% `},title:E.skip_type.toUpperCase()},E.skip_id)})]}),t("div",{className:B.bottomControlsRow,children:[t("div",{className:B.leftControls,children:[t(Yr,{className:B.controlBtn}),t(Xr,{buttonClassName:B.controlBtn,onExpandedChange:v.setShowVolumeSlider}),t("span",{className:B.timeDisplay,ref:g,children:[v.formatTime(0)," / ",v.formatTime(p.duration)]}),p.currentSkipInterval&&!p.isAutoSkipEnabled&&!p.playbackLocked&&t("button",{className:B.controlBtn,onClick:()=>{p.currentSkipInterval&&(r.engine.seek(p.currentSkipInterval.end_time),v.setCurrentSkipInterval(null))},children:["Skip ",p.currentSkipInterval.skip_type==="op"?"Opening":"Ending"]})]}),t("div",{className:B.rightControls,children:[t("div",{className:B.skipControls,children:C&&t("button",{className:B.nextEpisodeBtn,onClick:i,title:"Play next episode",children:"Next EP"})}),t("button",{className:`${B.controlBtn} ${o.isSubtitleActive?B.active:""}`,onClick:o.handleCCToggle,title:o.isSubtitleActive?"Disable Subtitles":"Enable Subtitles","aria-label":"Toggle Subtitles",children:t(ye,{name:"closed-captioning",size:22})}),t("button",{ref:a,className:`${B.controlBtn} ${S?B.active:""} `,onClick:()=>v.setShowSettings(!S),"aria-label":"Settings",children:t(ye,{name:"cog"})}),t("button",{className:`${B.controlBtn} ${B.theaterBtn} ${s?B.active:""} `,onClick:E=>{E.stopPropagation(),n()},title:s?"Exit Theater Mode":"Theater Mode","aria-label":s?"Exit Theater Mode":"Theater Mode",children:t(ye,{name:"tv"})}),t(Jr,{className:B.controlBtn})]})]})]})})};function hs(r){const{state:o,refs:c,actions:d}=r,C=n=>{if(!c.videoRef.current)return;d.setActiveSubtitleTrack(n);try{if(n===null||n==="off")te.setItem("playerSubtitlesEnabled","false");else{te.setItem("playerSubtitlesEnabled","true");const g=o.availableSubtitles.find(p=>p.label===n||p.lang===n);g?te.setItem("playerLastSubtitle",tn(g)):te.setItem("playerLastSubtitle",n)}}catch{}let a=!1;Array.from(c.videoRef.current.textTracks).forEach(g=>{const v=n!==null&&n!=="off"&&(g.language===n||g.label===n)&&!a;g.mode=v?"showing":"hidden",v&&(a=!0)})},i=o.activeSubtitleTrack!==null&&o.activeSubtitleTrack!=="off";return{handleSubtitleSelection:C,isSubtitleActive:i,handleCCToggle:()=>{if(!c.videoRef.current)return;if(i){C("off");return}if(o.availableSubtitles.length===0)return;let n=null;try{n=te.getItem("playerLastSubtitle")}catch{}const a=_t(o.availableSubtitles,{lastKey:n,enabled:!0});if(a<0)return;const g=o.availableSubtitles[a];C(g.label||g.lang)}}}const fs=_r(()=>zt(()=>import("./PlayerSettings-DehU56D4.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12]))),vs=({player:r,isAutoplayEnabled:o,onAutoplayChange:c,showNextEpisodeButton:d,onNextEpisode:C,videoSources:i,selectedSource:s,selectedLink:n,onSourceChange:a,loadingVideo:g,skipIntervals:p,animeTitle:v,episodeNumber:S,mode:E,isTheaterMode:e,onTheaterModeToggle:w,anime4kEnabled:T,onAnime4kToggle:_,anime4kSupported:$,anime4kProfile:M,onAnime4kProfileChange:h,anime4kInitializing:P,anime4kError:y,videoDelayEnabled:R,onVideoDelayToggle:W,videoDelayMs:q,onVideoDelayChange:D,onCalibrateAvSync:I,fallbackChoice:G,onFallbackChoiceChange:ee,ambientSettings:m,onAmbientChange:f,children:A,overlays:Y,isInteractingExtra:x=!1,className:z,hideChrome:se=!1})=>{const{state:F,actions:we}=r,{showSettings:V}=F,{setShowSettings:H}=we,u=hs(r),k=St.useRef(null),O=St.useRef(null),j=St.useRef(null);U(()=>{const ve=Oe=>{k.current&&!k.current.contains(Oe.target)&&O.current&&!O.current.contains(Oe.target)&&V&&H(!1)};return V&&document.addEventListener("mousedown",ve),()=>{document.removeEventListener("mousedown",ve)}},[V,H]);const de=F.showControls||V||F.isScrubbing,L=F.activeSubtitleTrack!=="off"?F.availableSubtitles.find(ve=>ve.lang===F.activeSubtitleTrack||ve.label===F.activeSubtitleTrack):void 0,be=t(rn,{visible:de,title:v,episode:S?`Episode ${S}`:void 0,mode:E,server:g?void 0:s?.sourceName,subtitles:g?void 0:L?.label||L?.lang,onBack:()=>window.history.back(),classes:{overlay:B.controlsOverlay,hidden:B.hidden,top:B.topControls,backBtn:B.backBtn,titleInfo:B.videoTitleInfo,title:B.animeTitle,episode:B.episodeNumber}}),Ve=!g&&!F.isBuffering&&F.duration>0?t(nn,{}):null,X=t(ps,{player:r,handlers:u,visible:de,skipIntervals:p,showNextEpisodeButton:d,onNextEpisode:C,isTheaterMode:e,onTheaterModeToggle:w,settingsBtnRef:O,timeDisplayRef:j}),oe=t(Nr,{fallback:null,children:t(fs,{ref:k,isOpen:V,onClose:()=>H(!1),videoSources:i,currentSource:s,currentLink:n,onSourceChange:a,subtitles:F.availableSubtitles,activeSubtitleTrack:F.activeSubtitleTrack,onSubtitleChange:u.handleSubtitleSelection,subtitleSettings:{fontSize:F.subtitleFontSize,position:F.subtitlePosition,bgOpacity:F.subtitleBgOpacity,bgColor:F.subtitleBgColor,textColor:F.subtitleTextColor,edge:F.subtitleEdge,bold:F.subtitleBold},onSubtitleSettingsChange:we.setSubtitleStyle,useNativeControls:!F.playbackLocked&&F.useNativeControls,onNativeControlsToggle:we.setUseNativeControls,anime4kEnabled:T,onAnime4kToggle:_,anime4kSupported:$,anime4kProfile:M,onAnime4kProfileChange:h,anime4kInitializing:P,anime4kError:y,videoDelayEnabled:R,onVideoDelayToggle:W,videoDelayMs:q,onVideoDelayChange:D,onCalibrateAvSync:I,isAutoSkipEnabled:F.isAutoSkipEnabled,onAutoSkipChange:ve=>{we.setIsAutoSkipEnabled(ve);try{te.setItem("autoSkipEnabled",ve.toString())}catch{}},isAutoplayEnabled:o,onAutoplayChange:c,fallbackChoice:G,onFallbackChoiceChange:ee,isTheaterMode:e,ambientSettings:m,onAmbientChange:f})}),$e=V?t("div",{"data-speed-boost-ignore":"true",onClick:ve=>ve.stopPropagation(),children:oe}):null;return t(sn,{engine:r.engine,topBar:be,centerControls:Ve,bottomBar:!g&&F.duration>0?X:null,settingsPanel:$e,overlays:Y,isInteracting:x||F.showSettings||F.showVolumeSlider,nativeControls:!F.playbackLocked&&F.useNativeControls,className:z,chromeDisabled:se,children:A})},gs=({count:r=3})=>t("section",{className:Le.section,children:[t("div",{className:Le.header,children:t("button",{className:Le.headerToggle,disabled:!0,children:[t("span",{className:Le.title,children:t(lt,{width:"60px",height:"1.2rem",variant:"text"})}),t(ye,{name:"chevron-down",style:{opacity:.3}})]})}),t("div",{className:Le.list,children:Array.from({length:r}).map((o,c)=>t("div",{className:Le.item,style:{pointerEvents:"none"},children:[t("div",{className:Le.dragHandle,style:{opacity:.2},children:t(lt,{width:"16px",height:"16px",variant:"rectangular"})}),t("div",{className:Le.thumbnail,style:{overflow:"hidden",background:"transparent"},children:t(lt,{width:"100%",height:"100%",variant:"rectangular"})}),t("div",{className:Le.meta,children:[t(lt,{width:"80%",height:"1.2rem",variant:"text",className:Le.metaGap}),t(lt,{width:"40%",height:"0.8rem",variant:"rectangular",style:{borderRadius:"var(--radius-sm)"}})]})]},c))})]}),ys={soft:"Softsub",hard:"Hardsub",mixed:"Mixed"},bs={direct:"Direct",embed:"Embed",cookie:"Needs cookie"},Ss=["direct","cookie","embed"],ws=({selectedProvider:r,onProviderChange:o,isAdult:c,options:d})=>{const i=(d&&d.length>0?d:[]).filter(s=>s.mature===(c===!0));return t("div",{className:Ye.providerSelectContainer,children:[t("h4",{children:"Provider"}),t("select",{className:Ye.providerSelect,value:r,onChange:s=>o(s.currentTarget.value),children:Ss.map(s=>{const n=i.filter(a=>(a.tier??"direct")===s);return n.length===0?null:t("optgroup",{label:bs[s],children:n.map(a=>t("option",{value:a.id,children:a.sub?`${a.label} (${ys[a.sub]})`:a.label},a.id))},s)})})]})},Es=({videoSources:r,selectedSource:o,selectedLink:c,onSourceChange:d,onLinkChange:C})=>{const i=Array.isArray(r)?r:[];if(i.length===0)return null;const s=o?.type==="iframe"&&(o.links?.length??0)>1;return t("div",{className:Ye.sourceSelectionContainer,children:[t("h4",{children:"Source"}),t("div",{className:Ye.sourceButtons,children:i.map((n,a)=>t("button",{className:`${Ye.sourceButton} ${o?.sourceName===n.sourceName?Ye.active:""} `,onClick:()=>d(n),children:n.sourceName},`${n.sourceName}-${a}`))}),s&&t("select",{className:Ye.sourceSelect,"aria-label":"Fallback embed quality",value:c?.link??o.links[0]?.link??"",onChange:n=>{const a=o.links.find(g=>g.link===n.currentTarget.value);a&&C(a)},children:o.links.map(n=>t("option",{value:n.link,children:n.resolutionStr},n.link))})]})},ks=St.memo(Es,(r,o)=>r.selectedSource?.sourceName===o.selectedSource?.sourceName&&r.selectedLink?.link===o.selectedLink?.link&&r.videoSources===o.videoSources),Ts={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}},Cs={low:"ModeB",balanced:"ModeA",high:"ModeAA",denoise:"ModeC"},Rs=5,Ms=15e3,Ps=`
|
|
3
3
|
@group(0) @binding(0) var extTex: texture_external;
|
|
4
4
|
@group(0) @binding(1) var extSamp: sampler;
|
|
5
5
|
struct VSOut {
|
|
@@ -53,4 +53,4 @@ import{u as t,g as St,h as U,P as Nr,z as _r,d as ne,A as N,q as K,y as Ar,T as
|
|
|
53
53
|
}
|
|
54
54
|
`}),ze=Q.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),ot=Q.createRenderPipeline({layout:Q.createPipelineLayout({bindGroupLayouts:[ze]}),vertex:{module:st,entryPoint:"vs"},fragment:{module:st,entryPoint:"fs",targets:[{format:Be}]},primitive:{topology:"triangle-list"}}),Tt=Q.createBindGroup({layout:ze,entries:[{binding:0,resource:nt.createView()},{binding:1,resource:Ge}]});try{const J=Q.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,externalTexture:{}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),me=Q.createShaderModule({code:Ps}),Te=Q.createRenderPipeline({layout:Q.createPipelineLayout({bindGroupLayouts:[J]}),vertex:{module:me,entryPoint:"vs"},fragment:{module:me,entryPoint:"fs",targets:[{format:"rgba16float"}]},primitive:{topology:"triangle-list"}});A.current={pipeline:Te,layout:J,inputView:Se.createView()}}catch{A.current=null}_.current=De,$.current=Se,M.current=nt,h.current=ot,P.current=Ge,y.current=ze,m.current=!1,f.current=!1;async function He(){const J=A.current;if(!J||m.current)return!1;const me=r.current;if(!me)return!1;const Te=!f.current;Te&&Q.pushErrorScope("validation");try{const re=Q.importExternalTexture({source:me}),he=Q.createBindGroup({layout:J.layout,entries:[{binding:0,resource:re},{binding:1,resource:Ge}]}),Ee=Q.createCommandEncoder(),ce=Ee.beginRenderPass({colorAttachments:[{view:J.inputView,loadOp:"load",storeOp:"store"}]});ce.setPipeline(J.pipeline),ce.setBindGroup(0,he),ce.draw(6),ce.end(),Q.queue.submit([Ee.finish()])}catch{return m.current=!0,A.current=null,!1}if(Te){const re=await Q.popErrorScope().catch(()=>null);if(re)return console.warn("[anime4k] blit probe failed:",re.message),m.current=!0,A.current=null,!1;f.current=!0}return!0}g(!1);async function Ct(){if(V||e.current!==H||!Ue)return;const J=r.current;if(!J||J.videoWidth===0){le();return}if(J!==L||J.videoWidth!==X||J.videoHeight!==oe){E(he=>he+1);return}if(J.paused||J.ended||document.hidden||J.readyState<HTMLMediaElement.HAVE_CURRENT_DATA){le();return}const me=J.getVideoPlaybackQuality().totalVideoFrames;if(me===x.current){le();return}if(W.current){le();return}const Te=J.currentTime;(J.seeking||Y.current>=0&&Math.abs(Te-Y.current)>.5)&&(k(),z.current=!1,se.current=0,x.current=-1),Y.current=Te;const re=Math.max(0,I.current||0);re>se.current&&(z.current=!1),W.current=!0;try{const he=performance.now();let Ee=null,ce=!1;if(re<=0){G.current.length>0&&k(),z.current=!1,se.current=0;let Ce=!1;if(!ee.current)try{Q.queue.copyExternalImageToTexture({source:J},{texture:Se},[X,oe]),x.current=me,Ce=!0}catch(pe){if(pe instanceof TypeError)ee.current=!0;else throw pe}if(!Ce&&!m.current&&A.current&&await He()&&(x.current=me,Ce=!0),!Ce){const pe=await createImageBitmap(J);x.current=me,Q.queue.copyExternalImageToTexture({source:pe},{texture:Se},[X,oe]),u(pe)}}else{const Ce=await createImageBitmap(J);x.current=me;const pe=G.current;pe.push({bitmap:Ce,capture:he});const Ie=O(re);for(;pe.length>Ie;)u(pe.shift()?.bitmap);let Ze=-1;for(let fe=pe.length-1;fe>=0;fe--)if(he-pe[fe].capture>=re){Ze=fe;break}if(Ze!==-1){for(let it=0;it<Ze;it++)u(pe.shift()?.bitmap);const fe=pe.shift();fe?(Ee=fe.bitmap,z.current=!0,se.current=re):(Ee=Ce,ce=!0)}else if(!z.current)Ee=Ce,ce=!0;else{const fe=pe.shift();Ee=fe?fe.bitmap:Ce,fe||(ce=!0)}if(!Ee){W.current=!1,le();return}Q.queue.copyExternalImageToTexture({source:Ee},{texture:Se},[X,oe]),ce||u(Ee)}const Je=Q.createCommandEncoder();await De.pass(Je);const ge=Je.beginRenderPass({colorAttachments:[{view:Ue.getCurrentTexture().createView(),clearValue:{r:0,g:0,b:0,a:1},loadOp:"clear",storeOp:"store"}]});ge.setPipeline(ot),ge.setBindGroup(0,Tt),ge.draw(6),ge.end(),Q.queue.submit([Je.finish()]),q.current=me,D.current=0,Q.queue.onSubmittedWorkDone().then(()=>{e.current===H&&(W.current=!1)})}catch(he){if(W.current=!1,D.current+=1,D.current>=Rs&&!V&&e.current===H){console.error(he),v(he instanceof Error?he.message:"Render error"),n(!1);return}}le()}le()}catch(le){!V&&e.current===H&&(T.current?.unconfigure(),w.current?.destroy(),w.current=null,T.current=null,v(le instanceof Error?le.message:"Failed to initialize upscaler"),g(!1),n(!1))}}return de(),()=>{V=!0,e.current+=1,j(),k(),T.current?.unconfigure(),$.current&&($.current.destroy(),$.current=null),M.current&&(M.current.destroy(),M.current=null),w.current&&(w.current.destroy(),w.current=null),_.current=null,h.current=null,P.current=null,y.current=null,A.current=null,T.current=null,W.current=!1}},[s,C,r,o,c,S]);const F=K(V=>{n(V);try{te.setItem("anime4kEnabled",String(V))}catch{}},[]),we=K(()=>{n(V=>{const H=!V;try{te.setItem("anime4kEnabled",String(H))}catch{}return H})},[]);return{isWebGPUSupported:C,isEnabled:s,isInitializing:a,error:p,toggle:we,setEnabled:F}}function _s({videoRef:r,episodeKey:o,isEnabled:c,isSupported:d,mediaReady:C,isIframeSource:i,setEnabled:s}){const n=N(null),a=N(!1),g=N(!1),p=N(s);p.current=s,U(()=>{const v=n.current;n.current=o,!(v===null||v===o)&&(!c||!d||(a.current=!0,g.current=!1,p.current(!1)))},[o,c,d]),U(()=>{if(!a.current)return;if(c){g.current&&(a.current=!1);return}if(g.current=!0,!C)return;if(i){a.current=!1,p.current(!0);return}const v=r.current;if(!v)return;let S,E=!1;const e=()=>{E||(E=!0,a.current=!1,p.current(!0))};if(v.readyState>=2)return S=window.setTimeout(e,500),()=>window.clearTimeout(S);const w=()=>{window.setTimeout(e,500)};return v.addEventListener("canplay",w,{once:!0}),v.addEventListener("playing",w,{once:!0}),S=window.setTimeout(e,5e3),()=>{window.clearTimeout(S),v.removeEventListener("canplay",w),v.removeEventListener("playing",w)}},[c,C,i,r])}const As=()=>te.getItem("preferredMode")==="dub"?"dub":"sub",xs=/^[a-z0-9-]+$/i,Jt=r=>r?"preferredProviderMature":"preferredProvider",Zt=r=>{const o=te.getItem(Jt(r));return o&&xs.test(o)?o:null},er=(r,o)=>{te.setItem(Jt(o),r)},Ls=()=>Zt(!1)??"megaplay",$s=()=>({showMeta:{},episodes:[],watchedEpisodes:[],watchlistStatus:null,showCombinedDetails:!1,currentMode:As(),inWatchlist:!1,videoSources:[],selectedSource:null,selectedLink:null,isAutoplayEnabled:Cn(),showResumeModal:!0,resumeProgressPending:!0,resumeTime:0,resumeDuration:0,skipIntervals:[],selectedProvider:Ls(),loadingShowData:!0,loadingVideo:!1,error:null,showCookieModal:!1,cookieProvider:null});function Bs(r,o){switch(o.type){case"SET_STATE":return{...r,...o.payload};case"SET_MODE":return{...r,currentMode:o.payload,videoSources:[],selectedSource:null,selectedLink:null};case"SET_PROVIDER":return{...r,selectedProvider:o.payload};default:return r}}async function Gt(r,o,c,d,C=!1){if(!r||!o)throw new Error("Missing params");try{const[i,s,n,a,g]=await Promise.all([ue.data.video.query({showId:r,episodeNumber:o,mode:c.currentMode,provider:c.selectedProvider}).catch(y=>{const R=y.data?.cause;return y.message==="AUTH_REQUIRED"&&R?.provider==="mkissa"&&d({type:"SET_STATE",payload:{showCookieModal:!0,cookieProvider:"mkissa"}}),null}),ue.progress.getEpisode.query({showId:r,episodeNumber:o}).catch(()=>null),ue.settings.getByKey.query({key:"preferredSource"}).catch(()=>null),ue.settings.getByKey.query({key:"preferredLink"}).catch(()=>null),ue.data.skipTimes.query({showId:r,episodeNumber:o}).catch(()=>[])]),p=n?.value,v=i?.filter(y=>{const R=y.sourceName.toLowerCase();return c.currentMode==="dub"?R.includes("eng")||R.includes("dub"):R.includes("jpn")||R.includes("sub")||!R.includes("eng")&&!R.includes("dub")})??[],S=v.length>0?v:i??[];let E=S.length>0?S[0]:null;if(p){const y=S.find(R=>R.sourceName===p);y&&(E=y)}const e=a?.value,w=y=>{const R=/(\d{3,4})/.exec(y||"");return R?parseInt(R[1],10):0},T=E&&E.links.length>0?(e?E.links.find(y=>y.resolutionStr===e):null)??(()=>{const y=w(e);if(!y)return null;let R=null,W=1/0;for(const q of E.links){const D=w(q.resolutionStr),I=Math.abs(D-y);D>0&&I<W&&(W=I,R=q)}return R})()??[...E.links].sort((y,R)=>(parseInt(R.resolutionStr)||0)-(parseInt(y.resolutionStr)||0))[0]:null,_=s?.currentTime||0,$=s?.duration||0,M=_,P=(Array.isArray(g)?g:g?.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(!i||i.length===0)&&(C||ke.error(`No video sources found for ${c.selectedProvider}`)),{videoSources:i,selectedSource:E,selectedLink:T,resumeTime:M,resumeDuration:$,showResumeModal:M>5&&!ut(M,$)&&E?.type!=="iframe",skipIntervals:P,fetchedEpisodeNumber:o}}catch(i){const s=i;if(s.message==="AUTH_REQUIRED")return d({type:"SET_STATE",payload:{showCookieModal:!0,cookieProvider:s.provider}}),{videoSources:[],selectedSource:null,selectedLink:null,resumeTime:0,resumeDuration:0,showResumeModal:!1,skipIntervals:[],fetchedEpisodeNumber:o};throw i}}const Ds=(r,o,c,d)=>{const[C,i]=Ar(Bs,c,u=>({...$s(),showMeta:u?.name?{name:u.name,thumbnail:u.thumbnail,nativeName:u.nativeName,englishName:u.englishName,names:{romaji:u.name||u.englishName,english:u.englishName||u.name,native:u.nativeName}}:{}})),s=d?.watchSelection,n=Ae(()=>s?{...C,selectedProvider:s.provider,currentMode:s.mode}:C,[C,s]),a=Ht(),g=Dr(),p=N(null),v=N(null),{options:S}=Xt(),E=Ae(()=>S.filter(u=>(u.kind??"anime")==="anime"),[S]),e=o||n.initialEpisode,w=`${r}:${e}`,T=N(w);U(()=>{T.current!==w&&(T.current=w,i({type:"SET_STATE",payload:{selectedSource:null,selectedLink:null}}))},[w,i]),U(()=>{!s&&r&&/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(r)&&n.selectedProvider!=="animepahe"&&p.current!==r&&(p.current=r,i({type:"SET_PROVIDER",payload:"animepahe"}))},[r,n.selectedProvider,s]);const{data:_,isLoading:$,error:M}=An(r),{data:h}=Vt({queryKey:[ae.playerData,r,n.currentMode,n.selectedProvider],queryFn:async()=>{if(!r)throw new Error("No showId");const u=async()=>{try{const L=await ue.data.episodes.query({showId:r,mode:n.currentMode,provider:n.selectedProvider}).catch(()=>null);if(L?.episodes?.length)return L}catch{}return null},[k,O,j]=await Promise.all([u(),ue.watchlist.check.query({showId:r}).catch(()=>({inWatchlist:!1,status:null})),ue.progress.getWatchedEpisodes.query({showId:r}).catch(()=>[])]),de=k?.episodes?k.episodes.sort((L,be)=>parseFloat(L)-parseFloat(be)):[];return{description:k?.description||"",episodes:de,inWatchlist:O.inWatchlist,watchlistStatus:O.status??null,watchedEpisodes:j}},enabled:!!r});U(()=>{!o&&h?.episodes&&h.episodes.length>0&&!o&&i({type:"SET_STATE",payload:{initialEpisode:h.episodes[0]}})},[h,o]),U(()=>{if(s||_?.isAdult===void 0||v.current===r)return;const u=_.isAdult===!0,k=E.filter(j=>j.mature===u);if(k.length===0||E.find(j=>j.id===n.selectedProvider)?.mature===u)return;const O=Zt(u);v.current=r??null,i({type:"SET_PROVIDER",payload:k.find(j=>j.id===O)?.id??k[0].id})},[_?.isAdult,n.selectedProvider,r,E,s]),U(()=>{if(s||!r||!/^dango-mt-\d+$/.test(r)||v.current===`temp:${r}`)return;const u=_?.provider;u&&(v.current=`temp:${r}`,u!==n.selectedProvider&&i({type:"SET_PROVIDER",payload:u}))},[r,_,n.selectedProvider,s]);const{data:P,isLoading:y,isFetching:R,error:W}=Vt({queryKey:[ae.videoSources,r,e,n.selectedProvider,n.currentMode],queryFn:()=>Gt(r,e,n,i),enabled:!!r&&!!e&&!(n.showMeta?.isAdult===!0&&!d?.hasMatureConsent)}),{mutateAsync:q}=bt({mutationFn:async({wasIn:u,showMeta:k})=>{if(!r)throw new Error("Missing showId");if(u)await ue.watchlist.remove.mutate({id:r});else{const O=k.name||k.names?.romaji;if(!O)throw new Error("Missing show name");await ue.watchlist.add.mutate({id:r,name:O,thumbnail:k.thumbnail,nativeName:k.names?.native,englishName:k.names?.english,type:k.type,isAdult:k.isAdult})}return!u},onSuccess:u=>{ke.success(u?"Added to watchlist":"Removed from watchlist"),a.invalidateQueries({queryKey:[ae.playerData,r]}),a.invalidateQueries({queryKey:[ae.showData,r]}),a.invalidateQueries({queryKey:[ae.watchlist]})},onError:u=>ke.error(u instanceof Error?u.message:"Failed to update watchlist")}),D=K(async()=>{!r||!_||await q({wasIn:!!h?.inWatchlist,showMeta:_})},[r,_,h?.inWatchlist,q]),I=K(async u=>{try{await ue.settings.set.mutate({key:"preferredSource",value:u})}catch(k){console.error(k)}},[]),G=K(async u=>{try{await ue.settings.set.mutate({key:"preferredLink",value:u})}catch(k){console.error(k)}},[]),{mutateAsync:ee,isPending:m}=bt({mutationFn:async({status:u})=>{if(!r)throw new Error("Missing showId");if(h?.inWatchlist)return await ue.watchlist.setStatus.mutate({id:r,status:u}),u;const k=_,O=k?.name||k?.names?.romaji;if(!k||!O)throw new Error("Missing show name");return await ue.watchlist.add.mutate({id:r,name:O,thumbnail:k.thumbnail,nativeName:k.names?.native,englishName:k.names?.english,type:k.type,isAdult:k.isAdult,status:u}),u},onSuccess:u=>{i({type:"SET_STATE",payload:{inWatchlist:!0,watchlistStatus:u}}),ke.success(`Moved to ${u}`),a.invalidateQueries({queryKey:[ae.showData,r]}),a.invalidateQueries({queryKey:[ae.watchlist]}),a.invalidateQueries({queryKey:[ae.continueWatching]})},onError:()=>ke.error("Failed to update watchlist status")}),f=K(async()=>{await ee({status:"Completed"})},[ee]),{mutateAsync:A,isPending:Y}=bt({mutationFn:async({episodeNumber:u,duration:k,showMeta:O,episodes:j})=>{await ue.progress.updateProgress.mutate({showId:r??"",episodeNumber:u,currentTime:k,duration:k,showName:O.name,showThumbnail:O.thumbnail,nativeName:O.names?.native,englishName:O.names?.english,genres:O.genres?.map(de=>de.name),popularityScore:Ir(O.score)??void 0,type:O.type,status:O.status,episodeCount:j.length,isAdult:O.isAdult})},onSuccess:(u,k)=>{ke.success(`Episode ${k.episodeNumber} marked as watched`),a.invalidateQueries({queryKey:[ae.playerData,r]}),a.invalidateQueries({queryKey:[ae.showMeta,r]}),a.invalidateQueries({queryKey:[ae.videoSources,r,k.episodeNumber]}),a.invalidateQueries({queryKey:[ae.continueWatching]}),a.invalidateQueries({queryKey:[ae.thisWeekSchedule]}),a.invalidateQueries(g.continueWatching.pathFilter())},onError:()=>ke.error("Failed to mark episode as watched")}),x=K(async(u,k)=>{!r||!_||await A({episodeNumber:u,duration:k,showMeta:_,episodes:h?.episodes||[]})},[r,_,h?.episodes,A]),{mutateAsync:z,isPending:se}=bt({mutationFn:async({episodeNumber:u})=>{await ue.progress.resetProgress.mutate({showId:r??"",episodeNumber:u})},onSuccess:()=>{ke.success("Episode progress reset"),a.invalidateQueries({queryKey:[ae.playerData,r]}),a.invalidateQueries({queryKey:[ae.showMeta,r]}),a.invalidateQueries({queryKey:[ae.continueWatching]})},onError:()=>ke.error("Failed to reset progress")}),F=K(async u=>{r&&await z({episodeNumber:u})},[r,z]),we=K(async()=>{i({type:"SET_STATE",payload:{showCombinedDetails:!n.showCombinedDetails}})},[n.showCombinedDetails]),V=Ae(()=>{const u=M||W,k=u?u.message:null,O=k==="AUTH_REQUIRED"?null:k,j=P&&P.fetchedEpisodeNumber===e?P:null,de=!!P&&!j,L=s?j?.videoSources?.find(X=>X.sourceName===s.source&&X.type!=="iframe"&&X.links.some(oe=>oe.hls))??null:null,Ve=(n.selectedSource?.sourceName===L?.sourceName?L?.links.find(X=>X.hls&&X.link===n.selectedLink?.link):null)??L?.links.filter(X=>X.hls).slice().sort((X,oe)=>(parseInt(oe.resolutionStr)||0)-(parseInt(X.resolutionStr)||0))[0]??null;return{...n,currentEpisode:e,showMeta:{...n.showMeta||{},..._||{}},episodes:h?.episodes||[],watchedEpisodes:h?.watchedEpisodes||[],inWatchlist:!!h?.inWatchlist,watchlistStatus:h?.watchlistStatus??n.watchlistStatus??null,videoSources:j?.videoSources||[],selectedSource:s?L:n.selectedSource||j?.selectedSource||null,selectedLink:s?Ve:n.selectedLink||j?.selectedLink||null,resumeTime:s?0:j?.resumeTime||0,resumeDuration:j?.resumeDuration||0,resumeProgressPending:R,showResumeModal:!s&&n.showResumeModal&&(j?.showResumeModal??!1),skipIntervals:j?.skipIntervals||[],loadingShowData:$,loadingVideo:y||de,error:O,fetchedEpisodeNumber:j?.fetchedEpisodeNumber}},[n,_,h,P,$,y,R,M,W,e,s]),H=K((u,k)=>{const O=k||r;if(!O||!u||O===r&&u===e)return;const de=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(O)&&n.selectedProvider!=="animepahe"?"animepahe":n.selectedProvider,L=["video-sources",O,u,de,n.currentMode];a.getQueryState(L)?.status!=="success"&&a.prefetchQuery({queryKey:L,queryFn:()=>Gt(O,u,{selectedProvider:de,currentMode:n.currentMode},i,!0),staleTime:300*1e3,gcTime:1800*1e3})},[r,e,a,n,i]);return{state:V,dispatch:i,toggleWatchlist:D,moveToCompleted:f,setPreferredSource:I,setPreferredLink:G,handleToggleDetails:we,markEpisodeWatched:x,resetEpisodeProgress:F,prefetchEpisodeSources:H,isMarkingWatched:Y,isResettingProgress:se,isUpdatingWatchlistStatus:m}};function Is({onPrevious:r,onNext:o,onToggleTheater:c,flashControls:d}){U(()=>{const C=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())&&d(),i.key.toLowerCase()==="n"&&o(),i.key.toLowerCase()==="p"&&r(),i.key.toLowerCase()==="t"&&c())};return document.addEventListener("keydown",C),()=>{document.removeEventListener("keydown",C)}},[d,o,r,c])}const ct=(r,o,c)=>r.showId===o||!!c&&r.showId===c;function Fs({testClipActive:r,selectedSourceType:o,onEnded:c,queue:d,removeFromQueue:C,showId:i,showMetaId:s,showStatus:n,currentEpisode:a,isAutoplayEnabled:g,nextEpisode:p,previousEpisode:v,navigate:S,invalidateContinueWatching:E,dispatch:e}){const[w,T]=ne(!1),[_,$]=ne(null),[M,h]=ne(null),P=N(C);P.current=C;const y=N(!1),R=Yt(n);U(()=>{y.current=!1,T(!1)},[i,a]);const W=K(()=>{if(r||y.current)return;y.current=!0,c();const f=d.find(A=>ct(A,i,s)&&A.episodeNumber===a);if(d.length>0){const A=d.findIndex(x=>ct(x,i,s)&&x.episodeNumber===a),Y=A>=0?d[A+1]||null:d[0];h({nextItem:Y,playedItem:f||null}),$(2);return}if(f&&P.current({showId:f.showId,episodeNumber:f.episodeNumber}),g&&p){E(),S(`/watch/${i}/${p}`);return}!p&&R&&T(!0)},[c,S,d,i,s,a,p,g,E,r,R]),q=K(()=>{if(d.length===0)return;c();const f=d.find(x=>ct(x,i,s)&&x.episodeNumber===a),A=d.findIndex(x=>ct(x,i,s)&&x.episodeNumber===a),Y=A>=0?d[A+1]||null:d[0];f&&C({showId:f.showId,episodeNumber:f.episodeNumber}),Y?S(`/watch/${Y.showId}/${Y.episodeNumber}`):!p&&R&&T(!0)},[c,S,d,C,i,s,a,p,R]),D=K(()=>{p&&(E(),S(`/watch/${i}/${p}`)),T(!1),e({type:"SET_STATE",payload:{showResumeModal:!1}})},[p,S,i,e,E]),I=K(()=>{d.length>0?q():p?D():ke.error("No next episode available")},[d.length,q,D,p]),G=K(()=>T(!1),[]),ee=K(()=>{h(null),$(null)},[]),m=K(()=>{v&&S(`/watch/${i}/${v}`)},[v,S,i]);return U(()=>{const f=A=>{A.origin===window.location.origin&&o==="iframe"&&A.data?.type==="ANI_WEB_MEDIA_ENDED"&&W()};return window.addEventListener("message",f),()=>window.removeEventListener("message",f)},[W,o]),U(()=>{if(!M||_===null)return;if(_<=0){const{nextItem:A,playedItem:Y}=M;h(null),$(null),Y&&P.current({showId:Y.showId,episodeNumber:Y.episodeNumber}),A?S(`/watch/${A.showId}/${A.episodeNumber}`):!p&&R&&T(!0);return}const f=window.setTimeout(()=>{$(A=>A===null?null:A-1)},1e3);return()=>window.clearTimeout(f)},[M,_,S,p,R]),{showCompleteModal:w,queueCountdown:_,pendingQueueTransition:M,handleQueueTransition:q,handleNextEpisode:D,handleNShortcut:I,handlePreviousEpisode:m,handlePlaybackFinished:W,closeCompleteModal:G,cancelQueueTransition:ee}}function Os({videoRef:r,queue:o,showId:c,showMetaId:d,currentEpisode:C,selectedSource:i,hasNextEpisode:s,nextEpisode:n,prefetchEpisodeSources:a,matchesQueueItem:g}){const[p,v]=ne(!1),S=N(a);S.current=a;const E=N("");U(()=>{v(!1)},[C]);const e=K(()=>{const w=r.current;if(!w||i?.type==="iframe")return;const T=w.duration,_=w.currentTime;if(!T||Number.isNaN(T)){v(!1);return}if(T-_<=60){const $=o.findIndex(P=>g(P,c,d)&&P.episodeNumber===C),M=o.length>0?$>=0?o[$+1]||null:o[0]:null,h=M?`${M.showId}:${M.episodeNumber}`:s?`${c}:${n}`:"";h&&E.current!==h&&(E.current=h,M?S.current(M.episodeNumber,M.showId):S.current(n??""))}v(s&&ut(_,T))},[r,i,o,c,d,C,s,n,g]);return{showNextEpisodePrompt:p,handleThresholds:e}}const Nt="fallbackChoice";function Ws(){try{const r=te.getItem(Nt);return r==="iframe"||r==="retry"?r:null}catch{return null}}function Us(r){try{r===null?te.removeItem(Nt):te.setItem(Nt,r)}catch{}}function Qs({showId:r,episodeNumber:o,currentMode:c,selectedProvider:d,selectedSourceType:C,videoSources:i,isAdult:s,providerOrder:n,matureProviders:a,setPreferredSource:g,dispatch:p,showControls:v}){const S=N(!1),E=N([]),e=N(!1),[w,T]=ne(null),[_,$]=ne(!1),[M,h]=ne(!1),[P,y]=ne(()=>Ws()??"ask"),R=K(x=>{y(x),Us(x==="ask"?null:x)},[]),W=N(P);U(()=>{W.current=P},[P]);const q=N(i);q.current=i;const D=K(()=>{S.current=!1,E.current=[],e.current=!1,T(null),$(!1)},[]);U(()=>{D()},[D,r,o]);const I=K(x=>{if(S.current)return;S.current=!0;const z=x.links[0];g(x.sourceName),p({type:"SET_STATE",payload:{selectedSource:x,selectedLink:z}}),T(null)},[p,g]),G=K(()=>{const z=q.current.find(se=>se.type==="iframe");return z?.links?.length?z:null},[]),ee=K(async()=>{const x=n.filter(z=>{if(E.current.includes(z))return!1;const se=a.has(z);return s===void 0?!0:se===s});$(!0);try{for(const z of x){E.current.push(z);let se=null;try{se=await ue.data.video.query({showId:r,episodeNumber:o,mode:c,provider:z})}catch{continue}const F=(se??[]).filter(H=>{const u=H.sourceName.toLowerCase();return c==="dub"?u.includes("eng")||u.includes("dub"):u.includes("jpn")||u.includes("sub")||!u.includes("eng")&&!u.includes("dub")});if((F.length>0?F:se??[]).find(H=>H.type!=="iframe"&&H.links?.length)){E.current=[d],e.current=!1,p({type:"SET_STATE",payload:{selectedProvider:z,videoSources:[],selectedSource:null,selectedLink:null,loadingVideo:!0}}),er(z,s===!0),T(null),ke.success(`Switched to ${z} (direct stream)`);return}}T({retryFailed:!0}),ke.error("No working direct stream found on other providers")}finally{$(!1)}},[r,o,c,s,d,p,n,a]),m=K(()=>{if(S.current||e.current||C!=="player")return;const x=G();if(!x)return;E.current.includes(d)||E.current.push(d);const z=W.current;if(z==="iframe"){I(x);return}if(z==="retry"){ee();return}v(!0),T({retryFailed:!1})},[C,d,G,I,ee,v]),f=K(()=>{e.current=!0,T(null),h(!1)},[]),A=K(()=>{M&&R("iframe");const x=G();x?I(x):T(null)},[M,R,G,I]),Y=K(()=>{M&&R("retry"),ee()},[M,R,ee]);return{fallbackPrompt:w,isRetryingProvider:_,rememberFallbackChoice:M,setRememberFallbackChoice:h,fallbackChoice:P,updateFallbackChoice:R,dismissFallbackPrompt:f,chooseIframeFallback:A,chooseProviderRetry:Y,handleVideoSourceError:m,resetFallback:D}}function Vs({engine:r,videoRef:o,selectedSource:c,selectedLink:d,loadingVideo:C,testClipActive:i,resumeTime:s,resumeDuration:n=0,showResumeModal:a,disabled:g=!1,startOver:p=!1,resumeAt:v=null,calibReturnRef:S,setAvailableSubtitles:E,setActiveSubtitleTrack:e,onFatalError:w}){const T=N(null),_=N(s),$=N(n),M=N(a),h=N(w);return h.current=w,U(()=>{_.current=s,$.current=n,M.current=a},[s,n,a]),U(()=>{if(g){r.unload();return}const P=o.current;if(!P)return;for(;P.firstChild;)P.removeChild(P.firstChild);if(i)return r.loadSource({url:"/av-sync-test.mp4"},{autoPlay:!0});if(C||!c||!d||c.type==="iframe"){r.unload();return}p?T.current=0:S.current!=null?(T.current=S.current,S.current=null):T.current===null&&v!=null?T.current=v:T.current===null&&_.current>5&&!M.current&&!ut(_.current,$.current)?T.current=_.current:T.current===null&&M.current&&(T.current=0);let y=d.link;if(y.startsWith("/api/proxy")||(y=`/api/proxy?url=${encodeURIComponent(y)}`,d.headers?.Referer&&(y+=`&referer=${encodeURIComponent(d.headers.Referer)}`)),c.subtitles){const q=te.getItem("playerSubtitlesEnabled")!=="false";let D=null;try{D=te.getItem("playerLastSubtitle")}catch{}const I=c.subtitles.map(m=>({...m,lang:m.lang||m.language||m.label||"en",label:m.label||m.lang||m.language||"en"})),G=_t(I,{lastKey:D,enabled:q}),ee=G>=0?I[G]:null;I.forEach(m=>{const f=document.createElement("track");f.kind="subtitles",f.label=m.label,f.srclang=m.lang||"en";const A=m.src??m.url;if(A){let Y=`/api/subtitle-proxy?url=${encodeURIComponent(A)}`;const x=d.headers?.Referer;x&&(Y+=`&referer=${encodeURIComponent(x)}`),f.src=Y}ee&&m.label===ee.label&&m.lang===ee.lang&&(f.default=!0),P.appendChild(f)}),q||e("off"),E(I)}const R=T.current??0;T.current=null;const W=document.body.classList.contains("low-end");return r.loadSource({url:y,hls:d.hls,dash:d.dash},{initialTime:R,autoPlay:p||v!=null||!(M.current&&_.current>5)&&!ut(_.current,$.current),hlsConfig:{maxBufferLength:W?15:30,maxMaxBufferLength:W?30:60,maxBufferSize:(W?25:60)*1e3*1e3,startLevel:-1},onHls:(q,D)=>{if(!c.subtitles?.length)return;const I=()=>{q.subtitleTrack!==-1&&(q.subtitleTrack=-1)};q.on(D.Events.SUBTITLE_TRACK_SWITCH,I),I()},onDash:q=>{const D=d.headers?.Referer;D&&q.addRequestInterceptor(I=>{const G=I?.url??"";if(!G||G.includes("/api/proxy?")||G.includes("/api/subtitle-proxy?")||G.includes("/api/tv/stream-proxy?"))return I;try{const m=new URL(G);if(m.protocol!=="http:"&&m.protocol!=="https:")return I}catch{return I}const ee=`/api/proxy?url=${encodeURIComponent(G)}&referer=${encodeURIComponent(D)}`;return{...I,url:ee}})},onError:()=>h.current()})},[r,c,d,o,S,C,i,g,p,v,e,E]),{seekToTimeRef:T}}function Ks({videoRef:r,availableSubtitles:o,activeSubtitleTrack:c,setAvailableSubtitles:d,setActiveSubtitleTrack:C}){U(()=>{const i=r.current;if(!i)return;const s=()=>{const n=Array.from(i.textTracks).map(a=>({label:a.label,lang:a.language==="undefined"?"":a.language,src:void 0,mode:a.mode}));d(n)};return i.textTracks.addEventListener("addtrack",s),i.textTracks.addEventListener("removetrack",s),s(),()=>{i.textTracks.removeEventListener("addtrack",s),i.textTracks.removeEventListener("removetrack",s)}},[r,d]),U(()=>{if(c===null&&o.length>0&&te.getItem("playerSubtitlesEnabled")!=="false"){let i=null;try{i=te.getItem("playerLastSubtitle")}catch{}const s=_t(o,{lastKey:i,enabled:!0});if(s<0){C("off");return}const n=o[s];C(n.label||n.lang)}},[c,o,C]),U(()=>{const i=r.current;if(!i||o.length===0)return;const s=c;if(!(te.getItem("playerSubtitlesEnabled")!=="false")||s==="off"||s===null){Array.from(i.textTracks).forEach(g=>{g.mode="hidden"});return}let a=!1;if(Array.from(i.textTracks).forEach(g=>{const v=(g.language===s||g.label===s)&&!a;g.mode=v?"showing":"hidden",v&&(a=!0)}),!a&&i.textTracks.length>0){const g=Array.from(i.textTracks).find(p=>p.language==="en"||p.label==="English")||i.textTracks[0];g&&(g.mode="showing")}},[c,o,r])}function qs({videoRef:r,videoBoxH:o,style:c,sourceKey:d,activeSubtitleTrack:C,availableSubtitles:i}){U(()=>{const s="dynamic-subtitle-styles";let n=document.getElementById(s);n||(n=document.createElement("style"),n.id=s,document.head.appendChild(n)),n.textContent=Kt(c);const a=r.current;if(!a)return;const g=jt(c.fontSize,o||a.clientHeight||720);n.textContent=Kt({...c,fontSize:g});const p=()=>{const h=Number(c.position),P=isNaN(h)?0:Math.max(0,Math.min(100,h));return Math.max(0,Math.min(100,100-P))},v=(h,P)=>{try{const y=h;y.snapToLines=!1,y.line=P}catch{}},S=()=>{const h=g*16,P=a.videoHeight||a.clientHeight||720,y=a.videoWidth||a.clientWidth||1280;return{step:h*1.3/P*100,chars:Math.max(20,Math.floor(y/(h*.55)))}},E=h=>{const P=p(),y=Array.from(h.activeCues??[]);if(y.length<=1){y.forEach(D=>v(D,P));return}const{step:R,chars:W}=S();let q=P;for(let D=y.length-1;D>=0;D--){const G=String(y[D].text??"").replace(/<[^>]*>/g,"").split(`
|
|
55
55
|
`).reduce((m,f)=>m+Math.max(1,Math.ceil(f.length/W)),0),ee=q-G*R;v(y[D],Math.max(0,ee)),q=ee-R*.4}},e=h=>{if(!h.cues)return;const P=p();Array.from(h.cues).forEach(y=>v(y,P)),h.mode==="showing"&&E(h)},w=()=>{Array.from(a.textTracks).forEach(e)};w();const T=h=>{const P=h.target;P.mode==="showing"&&E(P)};Array.from(a.textTracks).forEach(h=>{h.addEventListener("cuechange",T)});const _=()=>{Array.from(a.textTracks).forEach(h=>{h.removeEventListener("cuechange",T),h.addEventListener("cuechange",T)}),w()};a.textTracks.addEventListener("addtrack",_),a.textTracks.addEventListener("removetrack",_);const $=Array.from(a.querySelectorAll("track")),M=()=>{w()};return $.forEach(h=>{h.addEventListener("load",M)}),()=>{Array.from(a.textTracks).forEach(h=>{h.removeEventListener("cuechange",T)}),a.textTracks.removeEventListener("addtrack",_),a.textTracks.removeEventListener("removetrack",_),$.forEach(h=>{h.removeEventListener("load",M)})}},[c,o,r,d,C,i])}function Gs({videoRef:r,overlayRef:o,style:c,activeSubtitleTrack:d,delayMs:C,enabled:i}){U(()=>{if(!i)return;const s=r.current,n=o.current;if(!s||!n)return;const a=te.getItem("playerSubtitlesEnabled")!=="false",g=()=>{if(n.innerHTML="",!a||d==="off"||d===null)return;const S=Array.from(s.textTracks).find(M=>M.language===d||M.label===d);if(!S||S.mode!=="showing")return;const E=C/1e3;let e;if(E>0&&S.cues){const M=s.currentTime-E;e=Array.from(S.cues).filter(h=>h.startTime<=M&&M<=h.endTime)}else e=Array.from(S.activeCues??[]);if(e.length===0)return;const w={...c,fontSize:jt(c.fontSize,s.clientHeight||0)},T=on(w),_=an(s,w.position),$=Array.from(e);$.forEach((M,h)=>{const P=String(M.text??"");if(!ln(P).trim())return;const y=document.createElement("div"),R=($.length-1-h)*1.7;y.style.cssText=`${T}
|
|
56
|
-
bottom: calc(${_}px + ${R}em);`,y.innerHTML=cn(P),n.appendChild(y)})},p=()=>g(),v=()=>g();return Array.from(s.textTracks).forEach(S=>{S.addEventListener("cuechange",p)}),s.addEventListener("timeupdate",v),g(),()=>{Array.from(s.textTracks).forEach(S=>{S.removeEventListener("cuechange",p)}),s.removeEventListener("timeupdate",v),n.innerHTML=""}},[d,C,i,o,c,r])}const zs=({isOpen:r,onClose:o,onSuccess:c})=>{const d=()=>{c?.(),o()};return t(wt,{isOpen:r,onClose:o,title:"MKissa Browser Verification",children:t("div",{className:et.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:et.actions,children:t("a",{className:et.link,href:"https://mkissa.to/anime",target:"_blank",rel:"noreferrer",children:"Open MKissa anime"})}),t("div",{className:et.actions,children:[t("button",{className:et.secondaryButton,onClick:o,children:"Cancel"}),t("button",{className:et.button,onClick:d,children:"Refresh Dango"})]})]})})},mo=()=>{const{id:r,episodeNumber:o}=xr(),c=Lr(),d=Ht(),C=$r(),i=Fr(),s=!!i.session,n=s&&!i.session?.host,{hasConsent:a,grant:g}=Or(),{options:p}=Xt(),v=Ae(()=>p.filter(l=>(l.kind??"anime")==="anime"),[p]),S=Ae(()=>v.map(l=>l.id),[v]),E=Ae(()=>new Set(v.filter(l=>l.mature).map(l=>l.id)),[v]),{state:e,dispatch:w,toggleWatchlist:T,moveToCompleted:_,setPreferredSource:$,setPreferredLink:M,handleToggleDetails:h,resetEpisodeProgress:P,prefetchEpisodeSources:y,isResettingProgress:R,isUpdatingWatchlistStatus:W}=Ds(r,o,C.state||null,{hasMatureConsent:a,watchSelection:n?i.room?.selection:null}),[q,D]=ne(()=>Date.now()),I=e.showMeta.nextAiring?.airingAt,G=typeof I=="number"?I*1e3:null;U(()=>{if(G==null||G<=Date.now())return;const l=setInterval(()=>D(Date.now()),1e3);return()=>clearInterval(l)},[G]),U(()=>{if(r&&e.showMeta?.id&&e.showMeta.id!==r){const l=o?`/watch/${e.showMeta.id}/${o}${window.location.search}`:`/watch/${e.showMeta.id}${window.location.search}`;c(l,{replace:!0})}},[r,e.showMeta?.id,o,c]);const ee=Ae(()=>{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]),m=un({skipIntervals:e.skipIntervals,showId:r,episodeNumber:e.currentEpisode?.toString(),episodeCount:e.episodes.length||void 0,sourceType:e.selectedSource?.type,showMeta:ee}),{refs:f,actions:A}=m,Y=Ae(()=>!r||r.startsWith("dango-mt-")||!e.currentEpisode||e.selectedSource?.type==="iframe"||!e.selectedLink?.hls||!e.selectedSource?null:{showId:r,episode:e.currentEpisode,provider:e.selectedProvider,mode:e.currentMode,source:e.selectedSource.sourceName,title:e.showMeta.name||r},[r,e.currentEpisode,e.selectedProvider,e.currentMode,e.selectedSource,e.selectedLink,e.showMeta.name]),x=dn(m.engine,Y,e.loadingVideo||e.loadingShowData),z=Nn(),se=N(null),F=N(null),we=N(null),[V,H]=ne(()=>{try{const l=te.getItem("anime4kProfile");return["low","balanced","high","denoise"].includes(l)?l:"balanced"}catch{return"balanced"}}),{videoDelayMs:u,videoDelayEnabled:k,setDelayEnabled:O,handleVideoDelayChange:j,isCalibrating:de,testClipActive:L,stopCalibration:be,openAvSyncCalibrator:Ve,cancelAvSyncCalibrator:X,applyAvSyncCalibrator:oe,toggleTestClip:$e,calibReturnRef:ve,effectiveVideoDelayMs:Oe}=mn(f.videoRef,()=>A.setShowSettings(!1)),tt=N(null),[rt,Ke]=ne(!1),[dt,We]=ne(null);U(()=>{Ke(!1),We(null)},[r,e.currentEpisode]);const le=`${r??""}:${e.currentEpisode??""}`,[mt,Et]=ne(null);U(()=>{e.loadingVideo||e.videoSources.length===0||Et(l=>l?.key===le?l:{key:le,watched:ut(e.resumeTime,e.resumeDuration)})},[le,e.loadingVideo,e.videoSources.length,e.resumeTime,e.resumeDuration]);const kt=mt?.key===le&&mt.watched,[Xe]=ne(Rn),[pt,Q]=ne(!1);U(()=>{Q(!1)},[r,e.currentEpisode]);const Ue=!s&&!L&&kt&&e.videoSources.length>0&&!rt,Be=Ue&&Xe,Se=Ue&&!Xe&&!pt,ht=K(()=>{We(null),Ke(!0)},[]),qe=K(()=>{We(e.resumeTime),Ke(!0)},[e.resumeTime]),ie=Ns({videoRef:f.videoRef,canvasRef:F,profile:V,delayMs:Oe}),De=ie.isEnabled&&ie.isWebGPUSupported;_s({videoRef:f.videoRef,episodeKey:`${r??""}:${e.currentEpisode??""}`,isEnabled:ie.isEnabled,isSupported:ie.isWebGPUSupported,mediaReady:!e.loadingVideo&&!!e.selectedLink,isIframeSource:e.selectedSource?.type==="iframe",setEnabled:ie.setEnabled}),pn({videoRef:f.videoRef,canvasRef:tt,delayMs:Oe,enabled:k&&!De});const nt=k&&!De,Ge=De||nt,[st,ze]=ne(!1),ot=N(o);U(()=>{ot.current!==o&&(ot.current=o,be())},[o,be]);const Tt=K(()=>{d.invalidateQueries({queryKey:[ae.continueWatching]})},[d]),{data:He=[],isLoading:Ct}=Wr(),J=Ur(),me=Qr(),Te=Vr(),{isTheaterMode:re,toggleTheaterMode:he,handleLayoutClick:Ee}=hn();Br(()=>{if(m.state.isFullscreen||re)return;const l=f.playerContainerRef.current,Z=se.current;if(!l||!Z)return;const Me=()=>{const Pe=l.getBoundingClientRect().height;Z.style.height=`${Pe}px`};Me();const xe=new ResizeObserver(Me);return xe.observe(l),()=>xe.disconnect()},[m.state.isFullscreen,re,f.playerContainerRef]);const ce=Ae(()=>e.episodes.findIndex(l=>l===e.currentEpisode),[e.episodes,e.currentEpisode]),Je=ce>0?e.episodes[ce-1]:null,ge=ce>=0&&ce<e.episodes.length-1?e.episodes[ce+1]:null,Ce=ce>-1&&ce<e.episodes.length-1,pe=Yt(e.showMeta?.status),Ie=!ge&&pe,Ze=!ge&&!Ie,{showCompleteModal:fe,queueCountdown:it,pendingQueueTransition:At,handleQueueTransition:tr,handleNextEpisode:ft,handleNShortcut:rr,handlePreviousEpisode:xt,handlePlaybackFinished:nr,closeCompleteModal:vt,cancelQueueTransition:sr}=Fs({testClipActive:L,selectedSourceType:e.selectedSource?.type,onEnded:A.onEnded,queue:He,removeFromQueue:J.mutate,showId:r,showMetaId:e.showMeta?.id,showStatus:e.showMeta?.status,currentEpisode:e.currentEpisode,isAutoplayEnabled:!n&&e.isAutoplayEnabled,nextEpisode:ge,previousEpisode:Je,navigate:c,invalidateContinueWatching:Tt,dispatch:w}),{showNextEpisodePrompt:or,handleThresholds:Rt}=Os({videoRef:f.videoRef,queue:He,showId:r,showMetaId:e.showMeta?.id,currentEpisode:e.currentEpisode,selectedSource:e.selectedSource,hasNextEpisode:Ce,nextEpisode:ge,prefetchEpisodeSources:y,matchesQueueItem:ct}),{checkEnd:gt,logDuration:Lt}=fn({videoRef:f.videoRef,sourceType:e.selectedSource?.type,resetKey:`${r}:${e.currentEpisode}:${rt}`,onEnd:n?A.onEnded:nr}),$t=!s&&e.showResumeModal&&!e.resumeProgressPending,Qe=fe&&Xe,ir=fe&&!Xe,je=$t||fe||Se;vn(m,!!e.selectedLink&&!re&&!je&&!Be&&!Qe&&!Se);const{fallbackPrompt:Bt,isRetryingProvider:Dt,rememberFallbackChoice:ar,setRememberFallbackChoice:lr,fallbackChoice:cr,updateFallbackChoice:ur,dismissFallbackPrompt:dr,chooseIframeFallback:mr,chooseProviderRetry:pr,handleVideoSourceError:It,resetFallback:Ft}=Qs({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:S,matureProviders:E,setPreferredSource:$,showControls:A.setShowControls,dispatch:w}),{seekToTimeRef:Ot}=Vs({engine:m.engine,videoRef:f.videoRef,selectedSource:e.selectedSource,selectedLink:e.selectedLink,loadingVideo:e.loadingVideo,testClipActive:!s&&L,resumeTime:s?0:e.resumeTime,resumeDuration:e.resumeDuration,showResumeModal:!s&&e.showResumeModal,disabled:Be||Qe,startOver:rt&&dt==null,resumeAt:dt,calibReturnRef:ve,setAvailableSubtitles:A.setAvailableSubtitles,setActiveSubtitleTrack:A.setActiveSubtitleTrack,onFatalError:s?()=>{}:It});U(()=>{(je||Be||Qe)&&m.state.isFullscreen&&m.actions.toggleFullscreen()},[je,Be,Qe,m.state.isFullscreen,m.actions]),U(()=>{je&&f.videoRef.current&&f.videoRef.current.pause()},[je,f.videoRef]);const{titlePreference:yt}=Kr(),{lowEndMode:hr}=qr(),{settings:Mt,update:fr}=gn(),vr=re&&Mt.enabled&&!hr&&e.selectedSource?.type!=="iframe"&&!!e.selectedLink,Fe=Ae(()=>{if(!e.showMeta||e.loadingShowData)return"Loading...";const{name:l,names:Z}=e.showMeta;return yt==="name"?l||"Loading...":yt==="nativeName"?Z?.native||l||"Loading...":yt==="englishName"?Z?.english||l||"Loading...":l||"Loading..."},[e.showMeta,yt,e.loadingShowData]);U(()=>{Fe&&Fe!=="Loading..."&&e.currentEpisode&&(document.title=`► ${Fe} Episode ${e.currentEpisode} - dango`)},[Fe,e.currentEpisode]),Is({onPrevious:n?()=>{}:xt,onNext:n?()=>{}:rr,onToggleTheater:he,flashControls:m.actions.flashControls});const{setAvailableSubtitles:gr,setActiveSubtitleTrack:yr}=A,Wt=Ae(()=>({fontSize:m.state.subtitleFontSize,position:m.state.subtitlePosition,bgOpacity:m.state.subtitleBgOpacity,bgColor:m.state.subtitleBgColor,textColor:m.state.subtitleTextColor,edge:m.state.subtitleEdge,bold:m.state.subtitleBold}),[m.state.subtitleFontSize,m.state.subtitlePosition,m.state.subtitleBgOpacity,m.state.subtitleBgColor,m.state.subtitleTextColor,m.state.subtitleEdge,m.state.subtitleBold]);Ks({videoRef:f.videoRef,availableSubtitles:m.state.availableSubtitles,activeSubtitleTrack:m.state.activeSubtitleTrack,setAvailableSubtitles:gr,setActiveSubtitleTrack:yr});const[br,Sr]=ne(0);U(()=>{const l=f.videoRef.current;if(!l)return;const Z=()=>Sr(l.clientHeight||0);Z();const Me=new ResizeObserver(Z);return Me.observe(l),()=>Me.disconnect()},[f.videoRef,e.selectedSource,e.selectedLink]),qs({videoRef:f.videoRef,videoBoxH:br,style:Wt,sourceKey:`${e.selectedSource?.sourceName??""}:${e.selectedLink?.link??""}`,activeSubtitleTrack:m.state.activeSubtitleTrack,availableSubtitles:m.state.availableSubtitles}),Gs({videoRef:f.videoRef,overlayRef:we,style:Wt,activeSubtitleTrack:m.state.activeSubtitleTrack,delayMs:Oe,enabled:Ge}),U(()=>{try{te.setItem("anime4kProfile",V)}catch{}},[V]);const wr=()=>{f.videoRef.current&&(f.videoRef.current.currentTime=e.resumeTime,f.videoRef.current.play()),w({type:"SET_STATE",payload:{showResumeModal:!1}})},Er=()=>{f.videoRef.current&&(f.videoRef.current.currentTime=0,f.videoRef.current.play()),w({type:"SET_STATE",payload:{showResumeModal:!1}})},kr=K(()=>{w({type:"SET_STATE",payload:{showResumeModal:!1}})},[w]),Pt=K(async()=>{try{await _(),vt(),w({type:"SET_STATE",payload:{showResumeModal:!1}}),c("/")}catch{}},[_,vt,w,c]),Ut=(l,Z)=>t("div",{className:l,children:[t("button",{className:`${b.episodeNavBtn} ${b.secondary}`,onClick:xt,disabled:n||!Je,type:"button",children:[t(ye,{name:"chevron-left",size:12}),"Prev EP"]}),t("button",{className:`${b.episodeNavBtn} ${b.primary}`,onClick:ft,disabled:n||!ge,type:"button",children:["Next EP",t(ye,{name:"chevron-right",size:12})]}),Z==="mobile"&&z&&t("button",{className:`${b.episodeNavBtn} ${b.episodePickerBtn}`,onClick:()=>ze(!0),type:"button",children:[t(ye,{name:"list-ul",size:12}),"Episodes"]})]}),Tr=l=>{w({type:"SET_STATE",payload:{isAutoplayEnabled:l}}),Mn(l)};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 Re=e.loadingShowData||e.loadingVideo;return e.showMeta?.isAdult===!0&&!a?t("div",{className:_e.playerPageLayout,children:t(Pn,{isOpen:!0,onClose:()=>c("/home"),onGrant:g})}):t("div",{className:`${_e.playerPageLayout} ${re?_e.theaterMode:""}`,onClick:Ee,children:[re&&t(yn,{videoRef:f.videoRef,active:vr,settings:Mt}),t(qt,{isOpen:ir,onClose:vt,title:"Show Completed!",heading:Fe,message:"Congratulations! You finished all available episodes.",children:t(Ne,{onClick:Pt,disabled:W,children:W?"Saving...":"Move to Completed"})}),t(qt,{isOpen:Se,onClose:()=>Q(!0),title:Ie?"Show Completed!":"Episode Completed",heading:e.currentEpisode?`Episode ${e.currentEpisode}`:Fe,message:Ie?"Congratulations! You finished all available episodes.":"You've already watched this episode. Resume where you left off, replay it, or continue with the next episode.",children:[e.resumeTime>5&&t(Ne,{variant:Ze?void 0:"secondary",onClick:qe,children:`Resume ${Qt(e.resumeTime)}`}),t(Ne,{variant:"secondary",onClick:ht,children:"Replay"}),ge&&t(Ne,{onClick:ft,children:`Watch EP ${ge}`}),Ie&&t(Ne,{onClick:Pt,disabled:W,children:W?"Saving...":"Move to Completed"})]}),t(bn,{isOpen:$t,onClose:kr,title:"Resume Playback?",message:t(at,{children:["You were watching at ",t("strong",{children:m.actions.formatTime(e.resumeTime)}),". Would you like to continue?"]}),onResume:wr,onRestart:Er}),t(wt,{isOpen:!!Bt,onClose:dr,title:"Direct stream failed",width:"sm",children:[t(wt.Body,{children:[t("p",{children:[t("strong",{children:e.selectedProvider}),"'s direct stream failed for this episode."]}),Bt?.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:ar,onChange:l=>lr(l.currentTarget.checked)}),"Remember my choice"]})]}),t(wt.Actions,{children:[t(Ne,{variant:"secondary",onClick:mr,children:"Continue with iframe"}),t(Ne,{onClick:pr,disabled:Dt,children:Dt?"Searching…":"Try another provider"})]})]}),t(Gr,{isOpen:!!e.showCookieModal&&e.cookieProvider!=="mkissa",onClose:()=>w({type:"SET_STATE",payload:{showCookieModal:!1}}),onSuccess:()=>{d.invalidateQueries({queryKey:[ae.videoSources,r,e.currentEpisode,e.selectedProvider,e.currentMode]})}}),t(zs,{isOpen:!!e.showCookieModal&&e.cookieProvider==="mkissa",onClose:()=>w({type:"SET_STATE",payload:{showCookieModal:!1}}),onSuccess:()=>{d.invalidateQueries({queryKey:[ae.videoSources,r,e.currentEpisode,e.selectedProvider,e.currentMode]})}}),!re&&t("aside",{ref:se,className:_e.episodeSidebar,children:e.loadingShowData?t(Sn,{variant:"sidebar"}):t(wn,{episodes:e.episodes,currentEpisode:e.currentEpisode??void 0,watchedEpisodes:e.watchedEpisodes,onEpisodeClick:l=>{n||c(`/watch/${r}/${l}`)}})}),t("div",{className:_e.playerMain,children:[t("div",{className:`${b.videoContainer} ${m.state.isFullscreen?"":_e.videoPlayerWrapper} ${m.state.isFullscreen?b.fullscreenActive:""}`,style:{...je?{visibility:"hidden"}:{}},onContextMenu:l=>l.preventDefault(),children:t(vs,{player:m,isAutoplayEnabled:e.isAutoplayEnabled,onAutoplayChange:Tr,fallbackChoice:cr,onFallbackChoiceChange:ur,ambientSettings:Mt,onAmbientChange:fr,showNextEpisodeButton:!n&&!je&&or&&He.length===0,onNextEpisode:ft,videoSources:n?[]:s?e.videoSources.filter(l=>l.type!=="iframe"&&l.links.some(Z=>Z.hls)):e.videoSources,selectedSource:e.selectedSource,selectedLink:e.selectedLink,onSourceChange:(l,Z)=>{n&&l.sourceName!==i.room?.selection.source||s&&(l.type==="iframe"||!Z.hls)||(f.videoRef.current&&!isNaN(f.videoRef.current.currentTime)&&(Ot.current=f.videoRef.current.currentTime),$(l.sourceName),M(Z.resolutionStr),w({type:"SET_STATE",payload:{selectedSource:l,selectedLink:Z,showResumeModal:e.showResumeModal&&l.type!=="iframe"}}))},loadingVideo:Re,skipIntervals:e.skipIntervals,animeTitle:Fe,episodeNumber:e.currentEpisode??void 0,mode:e.currentMode,isTheaterMode:re,onTheaterModeToggle:he,anime4kEnabled:ie.isEnabled,onAnime4kToggle:ie.toggle,anime4kSupported:ie.isWebGPUSupported,anime4kProfile:V,onAnime4kProfileChange:H,anime4kInitializing:ie.isInitializing,anime4kError:ie.error,videoDelayEnabled:k,onVideoDelayToggle:O,videoDelayMs:u,onVideoDelayChange:j,onCalibrateAvSync:s?()=>{}:Ve,isInteractingExtra:st||de,className:Zr.shellFill,hideChrome:Be||Qe||e.selectedSource?.type==="iframe",overlays:t(at,{children:[m.state.isSpeedBoostActive&&t("div",{className:b.speedBoostBadge,"aria-hidden":"true",children:[t("span",{children:"2x"}),t(ye,{name:"forward",size:12})]}),it!==null&&At?.nextItem&&t("div",{className:b.queueCountdown,children:["Queue next in ",it,"s"]})]}),children:t(at,{children:[Re&&t("div",{className:b.loadingOverlay,children:t("div",{className:b.loadingDots,children:[t("div",{className:b.dot}),t("div",{className:b.dot}),t("div",{className:b.dot})]})}),m.state.isBuffering&&!Re&&e.selectedSource?.type!=="iframe"&&t("div",{className:b.bufferingOverlay,children:t("div",{className:b.bufferingSpinner})}),e.selectedSource?.type==="iframe"&&!s?!Re&&t("iframe",{src:e.selectedLink?.link,className:b.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(at,{children:[!Re&&e.videoSources.length===0&&t("div",{className:b.errorOverlay,children:[t("p",{children:["No sources found for this episode with ",e.selectedProvider,"."]}),t("p",{className:b.errorSubtext,children:"Please try selecting a different provider below."}),t("button",{className:b.retryButton,onClick:()=>window.location.reload(),"data-speed-boost-ignore":"true",style:{marginTop:8},children:"Retry"})]}),!Re&&e.videoSources.length>0&&t(en,{controls:!m.state.playbackLocked&&m.state.useNativeControls,playsInline:!0,"webkit-playsinline":"true",disablePictureInPicture:!0,disableRemotePlayback:!0,onPlay:A.onPlay,onPause:A.onPause,onEnded:()=>{L||gt(!0)},onDurationChange:()=>{Lt()},onSeeked:()=>{L||(Rt(),gt())},onLoadedMetadata:()=>{Rt(),Lt(),L||gt()},onTimeUpdate:()=>{L||(A.onTimeUpdate(),Rt(),gt(),At&&f.videoRef.current&&f.videoRef.current.currentTime<f.videoRef.current.duration-1&&sr())},onError:s?void 0:It,onContextMenu:l=>l.preventDefault(),className:Ge?b.videoElementHidden:""}),ie.isWebGPUSupported&&!Re&&e.videoSources.length>0&&t("canvas",{ref:F,className:`${b.upscalerCanvas} ${De?b.upscalerActive:""}`}),!De&&!Re&&e.videoSources.length>0&&t("canvas",{ref:tt,className:`${b.upscalerCanvas} ${nt?b.upscalerActive:""}`}),ie.isEnabled&&ie.isWebGPUSupported&&ie.isInitializing&&t("div",{className:b.upscalerStatusBadge,children:"Preparing upscaler…"}),Ge&&t("div",{ref:we,className:b.subtitleOverlay}),t(En,{isOpen:de,ms:u,onChange:j,onApply:oe,onClose:X,testClipActive:L,onTestClip:$e})]}),(Be||Qe)&&t("div",{className:b.watchedOverlay,children:[t(ye,{name:"check-circle",size:48,style:{color:"var(--accent-lighter)"}}),t("p",{className:b.watchedTitle,children:Ie?"Show Completed!":e.currentEpisode?`Episode ${e.currentEpisode} watched`:"Watched"}),t("p",{className:b.watchedSubtext,children:Ie?"Congratulations! You finished all available episodes.":"Resume where you left off, replay from the beginning, or continue with the next episode."}),t("div",{className:`${b.watchedActions} ${Qe?b.watchedActionsCentered:""}`,children:[t("div",{children:e.resumeTime>5&&!Qe&&t(Ne,{variant:Ze?void 0:"secondary",onClick:qe,children:`Resume ${Qt(e.resumeTime)}`})}),t("div",{children:[ge&&t(Ne,{onClick:ft,children:`Watch EP ${ge}`}),Ie&&t(Ne,{onClick:Pt,disabled:W,children:W?"Saving...":"Move to Completed"})]}),t("div",{children:t(Ne,{variant:"secondary",onClick:()=>{vt(),ht()},children:"Replay"})})]})]})]})})}),t(Bn,{playback:Y&&!Re?{selection:Y,position:f.videoRef.current?.currentTime||0,playing:!1,rate:m.engine.getState().playbackRate}:null,onCreate:()=>{be(),m.engine.pause()},needsPlayback:x.needsPlayback,onEnablePlayback:x.enablePlayback}),s&&!Re&&!Y&&t("p",{role:"alert",children:"This room requires the host's direct HLS source. It is unavailable here. Retry the episode or leave the room to use another source."}),!re&&t(kn,{}),!re&&t(at,{children:[Ct&&He.length===0?t(gs,{count:3}):t(_n,{title:"Queue",items:He,currentShowId:r,currentEpisode:e.currentEpisode??void 0,onNextQueue:n?()=>{}:tr,onRemove:l=>J.mutate({showId:l.showId,episodeNumber:l.episodeNumber}),onClear:()=>me.mutate(),showClearAll:!0,onReorder:l=>Te.mutate(l.map(Z=>({id:Z.id,showId:Z.showId,episodeNumber:Z.episodeNumber})))}),t("div",{className:b.streamPanel,children:[!n&&t(ws,{selectedProvider:e.selectedProvider,isAdult:e.showMeta?.isAdult,options:v,onProviderChange:l=>{Ft(),w({type:"SET_STATE",payload:{selectedProvider:l,videoSources:[],selectedSource:null,selectedLink:null,loadingVideo:!0}}),er(l,e.showMeta?.isAdult===!0)}}),Ut(`${b.episodeActions} ${b.desktopEpisodeActions}`,"desktop"),Re?t("div",{className:b.sourceLoader,children:t("div",{className:b.spinner})}):n?t("p",{children:["Provider: ",e.selectedProvider," · Source: ",i.room?.selection.source," ·"," ",e.currentMode]}):t(ks,{videoSources:s?e.videoSources.filter(l=>l.type!=="iframe"&&l.links.some(Z=>Z.hls)):e.videoSources,selectedSource:e.selectedSource,selectedLink:e.selectedLink,onSourceChange:l=>{if(s&&(l.type==="iframe"||!l.links.some(xe=>xe.hls)))return;f.videoRef.current&&!isNaN(f.videoRef.current.currentTime)&&(Ot.current=f.videoRef.current.currentTime);const Me=(s?l.links.filter(xe=>xe.hls):l.links||[]).sort((xe,Pe)=>(parseInt(Pe.resolutionStr)||0)-(parseInt(xe.resolutionStr)||0))[0]||null;$(l.sourceName),w({type:"SET_STATE",payload:{selectedSource:l,selectedLink:Me,showResumeModal:e.showResumeModal&&l.type!=="iframe"}})},onLinkChange:l=>{e.selectedSource&&($(e.selectedSource.sourceName),M(l.resolutionStr),w({type:"SET_STATE",payload:{selectedLink:l}}))}})]}),t("div",{className:_e.playerInfoContainer,children:[t("div",{className:_e.playerInfoHeader,children:[t("div",{className:_e.playerAnimeCard,children:t(zr,{src:Hr(e.showMeta.thumbnail||""),alt:Fe,loading:"lazy",decoding:"async",onError:l=>{l.target.src="/placeholder.svg"}})}),t("div",{className:_e.videoTitleSection,children:[t("div",{className:b.titleContainer,children:[t("h1",{children:Fe}),t("div",{className:b.scheduleInfo,children:[e.showMeta.status&&t("span",{className:b.status,children:e.showMeta.status}),e.showMeta.nextEpisodeAirDate&&(()=>{const l=e.showMeta.nextAiring,Z=I!=null?I*1e3:null;let Me="";if(Z!=null){let Pe=Math.floor((Z-q)/1e3);if(Pe<=0)return null;const Cr=Math.floor(Pe/86400);Pe%=86400;const Rr=Math.floor(Pe/3600);Pe%=3600;const Mr=Math.floor(Pe/60),Pr=Pe%60;Me=`in ${Cr}d ${Rr}h ${String(Mr).padStart(2,"0")}m ${String(Pr).padStart(2,"0")}s`}const xe=l?.episode!=null?`E${l.episode} · `:"";return t("span",{className:b.nextEpisode,children:["Next episode: ",xe,e.showMeta.nextEpisodeAirDate,Me?` · ${Me}`:""]})})()]})]}),t("div",{className:b.controls,children:[t("button",{className:`${b.watchlistBtn} ${e.inWatchlist?b.inList:""}`,onClick:T,children:[e.inWatchlist?t(ye,{name:"check",size:14}):t(ye,{name:"plus",size:14}),e.inWatchlist?"In Watchlist":"Add to Watchlist"]}),t(xn,{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:`${b.watchlistBtn} ${b.queueBtn}`,activeClassName:b.queueActive}),t("button",{className:`${b.watchlistBtn} ${b.modeToggleBtn} ${e.currentMode==="dub"?b.modeToggleActive:""}`,disabled:n,onClick:()=>{const l=e.currentMode==="dub"?"sub":"dub";Ft(),w({type:"SET_MODE",payload:l}),te.setItem("preferredMode",l)},type:"button","aria-pressed":e.currentMode==="dub",children:e.currentMode==="dub"?"DUB":"SUB"}),t("button",{className:`${b.watchlistBtn} ${b.modeToggleBtn}`,onClick:()=>e.currentEpisode&&P(e.currentEpisode),disabled:R||!e.currentEpisode,type:"button",children:[t(ye,{name:"undo",size:14}),R?"Resetting...":"Reset Progress"]})]})]})]}),Ut(`${b.episodeActions} ${b.mobileEpisodeActions}`,"mobile"),t("div",{className:_e.infoColumns,children:[t("div",{className:`${b.descriptionSection} ${b.synopsisFlat}`,children:[t("h3",{children:"Synopsis"}),t($n,{text:e.showMeta.description?e.showMeta.description.replace(/<[^>]*>?/gm,""):"",emptyText:"No description available."}),t("button",{className:b.detailsToggleBtn,onClick:h,children:[e.showCombinedDetails?t(ye,{name:"chevron-up"}):t(ye,{name:"chevron-down"}),e.showCombinedDetails?"Hide Details":"Show Details"]})]}),e.showCombinedDetails&&t(Ln,{showMeta:e.showMeta,styles:b})]})]})]})]}),t(Tn,{isOpen:st,onClose:()=>ze(!1),episodes:e.episodes,currentEpisode:e.currentEpisode??void 0,watchedEpisodes:e.watchedEpisodes,onEpisodeClick:l=>{ze(!1),c(`/watch/${r}/${l}`)}})]})};export{mo as default};
|
|
56
|
+
bottom: calc(${_}px + ${R}em);`,y.innerHTML=cn(P),n.appendChild(y)})},p=()=>g(),v=()=>g();return Array.from(s.textTracks).forEach(S=>{S.addEventListener("cuechange",p)}),s.addEventListener("timeupdate",v),g(),()=>{Array.from(s.textTracks).forEach(S=>{S.removeEventListener("cuechange",p)}),s.removeEventListener("timeupdate",v),n.innerHTML=""}},[d,C,i,o,c,r])}const zs=({isOpen:r,onClose:o,onSuccess:c})=>{const d=()=>{c?.(),o()};return t(wt,{isOpen:r,onClose:o,title:"MKissa Browser Verification",children:t("div",{className:et.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:et.actions,children:t("a",{className:et.link,href:"https://mkissa.to/anime",target:"_blank",rel:"noreferrer",children:"Open MKissa anime"})}),t("div",{className:et.actions,children:[t("button",{className:et.secondaryButton,onClick:o,children:"Cancel"}),t("button",{className:et.button,onClick:d,children:"Refresh Dango"})]})]})})},mo=()=>{const{id:r,episodeNumber:o}=xr(),c=Lr(),d=Ht(),C=$r(),i=Fr(),s=!!i.session,n=s&&!i.session?.host,{hasConsent:a,grant:g}=Or(),{options:p}=Xt(),v=Ae(()=>p.filter(l=>(l.kind??"anime")==="anime"),[p]),S=Ae(()=>v.map(l=>l.id),[v]),E=Ae(()=>new Set(v.filter(l=>l.mature).map(l=>l.id)),[v]),{state:e,dispatch:w,toggleWatchlist:T,moveToCompleted:_,setPreferredSource:$,setPreferredLink:M,handleToggleDetails:h,resetEpisodeProgress:P,prefetchEpisodeSources:y,isResettingProgress:R,isUpdatingWatchlistStatus:W}=Ds(r,o,C.state||null,{hasMatureConsent:a,watchSelection:n?i.room?.selection:null}),[q,D]=ne(()=>Date.now()),I=e.showMeta.nextAiring?.airingAt,G=typeof I=="number"?I*1e3:null;U(()=>{if(G==null||G<=Date.now())return;const l=setInterval(()=>D(Date.now()),1e3);return()=>clearInterval(l)},[G]),U(()=>{if(r&&e.showMeta?.id&&e.showMeta.id!==r){const l=o?`/watch/${e.showMeta.id}/${o}${window.location.search}`:`/watch/${e.showMeta.id}${window.location.search}`;c(l,{replace:!0})}},[r,e.showMeta?.id,o,c]);const ee=Ae(()=>{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]),m=un({skipIntervals:e.skipIntervals,showId:r,episodeNumber:e.currentEpisode?.toString(),episodeCount:e.episodes.length||void 0,sourceType:e.selectedSource?.type,showMeta:ee}),{refs:f,actions:A}=m,Y=Ae(()=>!r||r.startsWith("dango-mt-")||!e.currentEpisode||e.selectedSource?.type==="iframe"||!e.selectedLink?.hls||!e.selectedSource?null:{showId:r,episode:e.currentEpisode,provider:e.selectedProvider,mode:e.currentMode,source:e.selectedSource.sourceName,title:e.showMeta.name||r},[r,e.currentEpisode,e.selectedProvider,e.currentMode,e.selectedSource,e.selectedLink,e.showMeta.name]),x=dn(m.engine,Y,e.loadingVideo||e.loadingShowData),z=Nn(),se=N(null),F=N(null),we=N(null),[V,H]=ne(()=>{try{const l=te.getItem("anime4kProfile");return["low","balanced","high","denoise"].includes(l)?l:"balanced"}catch{return"balanced"}}),{videoDelayMs:u,videoDelayEnabled:k,setDelayEnabled:O,handleVideoDelayChange:j,isCalibrating:de,testClipActive:L,stopCalibration:be,openAvSyncCalibrator:Ve,cancelAvSyncCalibrator:X,applyAvSyncCalibrator:oe,toggleTestClip:$e,calibReturnRef:ve,effectiveVideoDelayMs:Oe}=mn(f.videoRef,()=>A.setShowSettings(!1)),tt=N(null),[rt,Ke]=ne(!1),[dt,We]=ne(null);U(()=>{Ke(!1),We(null)},[r,e.currentEpisode]);const le=`${r??""}:${e.currentEpisode??""}`,[mt,Et]=ne(null);U(()=>{e.loadingVideo||e.videoSources.length===0||Et(l=>l?.key===le?l:{key:le,watched:ut(e.resumeTime,e.resumeDuration)})},[le,e.loadingVideo,e.videoSources.length,e.resumeTime,e.resumeDuration]);const kt=mt?.key===le&&mt.watched,[Xe]=ne(Rn),[pt,Q]=ne(!1);U(()=>{Q(!1)},[r,e.currentEpisode]);const Ue=!s&&!L&&kt&&e.videoSources.length>0&&!rt,Be=Ue&&Xe,Se=Ue&&!Xe&&!pt,ht=K(()=>{We(null),Ke(!0)},[]),qe=K(()=>{We(e.resumeTime),Ke(!0)},[e.resumeTime]),ie=Ns({videoRef:f.videoRef,canvasRef:F,profile:V,delayMs:Oe}),De=ie.isEnabled&&ie.isWebGPUSupported;_s({videoRef:f.videoRef,episodeKey:`${r??""}:${e.currentEpisode??""}`,isEnabled:ie.isEnabled,isSupported:ie.isWebGPUSupported,mediaReady:!e.loadingVideo&&!!e.selectedLink,isIframeSource:e.selectedSource?.type==="iframe",setEnabled:ie.setEnabled}),pn({videoRef:f.videoRef,canvasRef:tt,delayMs:Oe,enabled:k&&!De});const nt=k&&!De,Ge=De||nt,[st,ze]=ne(!1),ot=N(o);U(()=>{ot.current!==o&&(ot.current=o,be())},[o,be]);const Tt=K(()=>{d.invalidateQueries({queryKey:[ae.continueWatching]})},[d]),{data:He=[],isLoading:Ct}=Wr(),J=Ur(),me=Qr(),Te=Vr(),{isTheaterMode:re,toggleTheaterMode:he,handleLayoutClick:Ee}=hn();Br(()=>{if(m.state.isFullscreen||re)return;const l=f.playerContainerRef.current,Z=se.current;if(!l||!Z)return;const Me=()=>{const Pe=l.getBoundingClientRect().height;Z.style.height=`${Pe}px`};Me();const xe=new ResizeObserver(Me);return xe.observe(l),()=>xe.disconnect()},[m.state.isFullscreen,re,f.playerContainerRef]);const ce=Ae(()=>e.episodes.findIndex(l=>l===e.currentEpisode),[e.episodes,e.currentEpisode]),Je=ce>0?e.episodes[ce-1]:null,ge=ce>=0&&ce<e.episodes.length-1?e.episodes[ce+1]:null,Ce=ce>-1&&ce<e.episodes.length-1,pe=Yt(e.showMeta?.status),Ie=!ge&&pe,Ze=!ge&&!Ie,{showCompleteModal:fe,queueCountdown:it,pendingQueueTransition:At,handleQueueTransition:tr,handleNextEpisode:ft,handleNShortcut:rr,handlePreviousEpisode:xt,handlePlaybackFinished:nr,closeCompleteModal:vt,cancelQueueTransition:sr}=Fs({testClipActive:L,selectedSourceType:e.selectedSource?.type,onEnded:A.onEnded,queue:He,removeFromQueue:J.mutate,showId:r,showMetaId:e.showMeta?.id,showStatus:e.showMeta?.status,currentEpisode:e.currentEpisode,isAutoplayEnabled:!n&&e.isAutoplayEnabled,nextEpisode:ge,previousEpisode:Je,navigate:c,invalidateContinueWatching:Tt,dispatch:w}),{showNextEpisodePrompt:or,handleThresholds:Rt}=Os({videoRef:f.videoRef,queue:He,showId:r,showMetaId:e.showMeta?.id,currentEpisode:e.currentEpisode,selectedSource:e.selectedSource,hasNextEpisode:Ce,nextEpisode:ge,prefetchEpisodeSources:y,matchesQueueItem:ct}),{checkEnd:gt,logDuration:Lt}=fn({videoRef:f.videoRef,sourceType:e.selectedSource?.type,resetKey:`${r}:${e.currentEpisode}:${rt}`,onEnd:n?A.onEnded:nr}),$t=!s&&e.showResumeModal&&!e.resumeProgressPending,Qe=fe&&Xe,ir=fe&&!Xe,je=$t||fe||Se;vn(m,!!e.selectedLink&&!re&&!je&&!Be&&!Qe&&!Se);const{fallbackPrompt:Bt,isRetryingProvider:Dt,rememberFallbackChoice:ar,setRememberFallbackChoice:lr,fallbackChoice:cr,updateFallbackChoice:ur,dismissFallbackPrompt:dr,chooseIframeFallback:mr,chooseProviderRetry:pr,handleVideoSourceError:It,resetFallback:Ft}=Qs({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:S,matureProviders:E,setPreferredSource:$,showControls:A.setShowControls,dispatch:w}),{seekToTimeRef:Ot}=Vs({engine:m.engine,videoRef:f.videoRef,selectedSource:e.selectedSource,selectedLink:e.selectedLink,loadingVideo:e.loadingVideo,testClipActive:!s&&L,resumeTime:s?0:e.resumeTime,resumeDuration:e.resumeDuration,showResumeModal:!s&&e.showResumeModal,disabled:Be||Qe,startOver:rt&&dt==null,resumeAt:dt,calibReturnRef:ve,setAvailableSubtitles:A.setAvailableSubtitles,setActiveSubtitleTrack:A.setActiveSubtitleTrack,onFatalError:s?()=>{}:It});U(()=>{(je||Be||Qe)&&m.state.isFullscreen&&m.actions.toggleFullscreen()},[je,Be,Qe,m.state.isFullscreen,m.actions]),U(()=>{je&&f.videoRef.current&&f.videoRef.current.pause()},[je,f.videoRef]);const{titlePreference:yt}=Kr(),{lowEndMode:hr}=qr(),{settings:Mt,update:fr}=gn(),vr=re&&Mt.enabled&&!hr&&e.selectedSource?.type!=="iframe"&&!!e.selectedLink,Fe=Ae(()=>{if(!e.showMeta||e.loadingShowData)return"Loading...";const{name:l,names:Z}=e.showMeta;return yt==="name"?l||"Loading...":yt==="nativeName"?Z?.native||l||"Loading...":yt==="englishName"?Z?.english||l||"Loading...":l||"Loading..."},[e.showMeta,yt,e.loadingShowData]);U(()=>{Fe&&Fe!=="Loading..."&&e.currentEpisode&&(document.title=`► ${Fe} Episode ${e.currentEpisode} - dango`)},[Fe,e.currentEpisode]),Is({onPrevious:n?()=>{}:xt,onNext:n?()=>{}:rr,onToggleTheater:he,flashControls:m.actions.flashControls});const{setAvailableSubtitles:gr,setActiveSubtitleTrack:yr}=A,Wt=Ae(()=>({fontSize:m.state.subtitleFontSize,position:m.state.subtitlePosition,bgOpacity:m.state.subtitleBgOpacity,bgColor:m.state.subtitleBgColor,textColor:m.state.subtitleTextColor,edge:m.state.subtitleEdge,bold:m.state.subtitleBold}),[m.state.subtitleFontSize,m.state.subtitlePosition,m.state.subtitleBgOpacity,m.state.subtitleBgColor,m.state.subtitleTextColor,m.state.subtitleEdge,m.state.subtitleBold]);Ks({videoRef:f.videoRef,availableSubtitles:m.state.availableSubtitles,activeSubtitleTrack:m.state.activeSubtitleTrack,setAvailableSubtitles:gr,setActiveSubtitleTrack:yr});const[br,Sr]=ne(0);U(()=>{const l=f.videoRef.current;if(!l)return;const Z=()=>Sr(l.clientHeight||0);Z();const Me=new ResizeObserver(Z);return Me.observe(l),()=>Me.disconnect()},[f.videoRef,e.selectedSource,e.selectedLink]),qs({videoRef:f.videoRef,videoBoxH:br,style:Wt,sourceKey:`${e.selectedSource?.sourceName??""}:${e.selectedLink?.link??""}`,activeSubtitleTrack:m.state.activeSubtitleTrack,availableSubtitles:m.state.availableSubtitles}),Gs({videoRef:f.videoRef,overlayRef:we,style:Wt,activeSubtitleTrack:m.state.activeSubtitleTrack,delayMs:Oe,enabled:Ge}),U(()=>{try{te.setItem("anime4kProfile",V)}catch{}},[V]);const wr=()=>{f.videoRef.current&&(f.videoRef.current.currentTime=e.resumeTime,f.videoRef.current.play()),w({type:"SET_STATE",payload:{showResumeModal:!1}})},Er=()=>{f.videoRef.current&&(f.videoRef.current.currentTime=0,f.videoRef.current.play()),w({type:"SET_STATE",payload:{showResumeModal:!1}})},kr=K(()=>{w({type:"SET_STATE",payload:{showResumeModal:!1}})},[w]),Pt=K(async()=>{try{await _(),vt(),w({type:"SET_STATE",payload:{showResumeModal:!1}}),c("/")}catch{}},[_,vt,w,c]),Ut=(l,Z)=>t("div",{className:l,children:[t("button",{className:`${b.episodeNavBtn} ${b.secondary}`,onClick:xt,disabled:n||!Je,type:"button",children:[t(ye,{name:"chevron-left",size:12}),"Prev EP"]}),t("button",{className:`${b.episodeNavBtn} ${b.primary}`,onClick:ft,disabled:n||!ge,type:"button",children:["Next EP",t(ye,{name:"chevron-right",size:12})]}),Z==="mobile"&&z&&t("button",{className:`${b.episodeNavBtn} ${b.episodePickerBtn}`,onClick:()=>ze(!0),type:"button",children:[t(ye,{name:"list-ul",size:12}),"Episodes"]})]}),Tr=l=>{w({type:"SET_STATE",payload:{isAutoplayEnabled:l}}),Mn(l)};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 Re=e.loadingShowData||e.loadingVideo;return e.showMeta?.isAdult===!0&&!a?t("div",{className:_e.playerPageLayout,children:t(Pn,{isOpen:!0,onClose:()=>c("/home"),onGrant:g})}):t("div",{className:`${_e.playerPageLayout} ${re?_e.theaterMode:""}`,onClick:Ee,children:[re&&t(yn,{videoRef:f.videoRef,active:vr,settings:Mt}),t(qt,{isOpen:ir,onClose:vt,title:"Show Completed!",heading:Fe,message:"Congratulations! You finished all available episodes.",children:t(Ne,{onClick:Pt,disabled:W,children:W?"Saving...":"Move to Completed"})}),t(qt,{isOpen:Se,onClose:()=>Q(!0),title:Ie?"Show Completed!":"Episode Completed",heading:e.currentEpisode?`Episode ${e.currentEpisode}`:Fe,message:Ie?"Congratulations! You finished all available episodes.":"You've already watched this episode. Resume where you left off, replay it, or continue with the next episode.",children:[e.resumeTime>5&&t(Ne,{variant:Ze?void 0:"secondary",onClick:qe,children:`Resume ${Qt(e.resumeTime)}`}),t(Ne,{variant:"secondary",onClick:ht,children:"Replay"}),ge&&t(Ne,{onClick:ft,children:`Watch EP ${ge}`}),Ie&&t(Ne,{onClick:Pt,disabled:W,children:W?"Saving...":"Move to Completed"})]}),t(bn,{isOpen:$t,onClose:kr,title:"Resume Playback?",message:t(at,{children:["You were watching at ",t("strong",{children:m.actions.formatTime(e.resumeTime)}),". Would you like to continue?"]}),onResume:wr,onRestart:Er}),t(wt,{isOpen:!!Bt,onClose:dr,title:"Direct stream failed",width:"sm",children:[t(wt.Body,{children:[t("p",{children:[t("strong",{children:e.selectedProvider}),"'s direct stream failed for this episode."]}),Bt?.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:ar,onChange:l=>lr(l.currentTarget.checked)}),"Remember my choice"]})]}),t(wt.Actions,{children:[t(Ne,{variant:"secondary",onClick:mr,children:"Continue with iframe"}),t(Ne,{onClick:pr,disabled:Dt,children:Dt?"Searching…":"Try another provider"})]})]}),t(Gr,{isOpen:!!e.showCookieModal&&e.cookieProvider!=="mkissa",onClose:()=>w({type:"SET_STATE",payload:{showCookieModal:!1}}),onSuccess:()=>{d.invalidateQueries({queryKey:[ae.videoSources,r,e.currentEpisode,e.selectedProvider,e.currentMode]})}}),t(zs,{isOpen:!!e.showCookieModal&&e.cookieProvider==="mkissa",onClose:()=>w({type:"SET_STATE",payload:{showCookieModal:!1}}),onSuccess:()=>{d.invalidateQueries({queryKey:[ae.videoSources,r,e.currentEpisode,e.selectedProvider,e.currentMode]})}}),!re&&t("aside",{ref:se,className:_e.episodeSidebar,children:e.loadingShowData?t(Sn,{variant:"sidebar"}):t(wn,{episodes:e.episodes,currentEpisode:e.currentEpisode??void 0,watchedEpisodes:e.watchedEpisodes,onEpisodeClick:l=>{n||c(`/watch/${r}/${l}`)}})}),t("div",{className:_e.playerMain,children:[t("div",{className:`${b.videoContainer} ${m.state.isFullscreen?"":_e.videoPlayerWrapper} ${m.state.isFullscreen?b.fullscreenActive:""}`,style:{...je?{visibility:"hidden"}:{}},onContextMenu:l=>l.preventDefault(),children:t(vs,{player:m,isAutoplayEnabled:e.isAutoplayEnabled,onAutoplayChange:Tr,fallbackChoice:cr,onFallbackChoiceChange:ur,ambientSettings:Mt,onAmbientChange:fr,showNextEpisodeButton:!n&&!je&&or&&He.length===0,onNextEpisode:ft,videoSources:n?[]:s?e.videoSources.filter(l=>l.type!=="iframe"&&l.links.some(Z=>Z.hls)):e.videoSources,selectedSource:e.selectedSource,selectedLink:e.selectedLink,onSourceChange:(l,Z)=>{n&&l.sourceName!==i.room?.selection.source||s&&(l.type==="iframe"||!Z.hls)||(f.videoRef.current&&!isNaN(f.videoRef.current.currentTime)&&(Ot.current=f.videoRef.current.currentTime),$(l.sourceName),M(Z.resolutionStr),w({type:"SET_STATE",payload:{selectedSource:l,selectedLink:Z,showResumeModal:e.showResumeModal&&l.type!=="iframe"}}))},loadingVideo:Re,skipIntervals:e.skipIntervals,animeTitle:Fe,episodeNumber:e.currentEpisode??void 0,mode:e.currentMode,isTheaterMode:re,onTheaterModeToggle:he,anime4kEnabled:ie.isEnabled,onAnime4kToggle:ie.toggle,anime4kSupported:ie.isWebGPUSupported,anime4kProfile:V,onAnime4kProfileChange:H,anime4kInitializing:ie.isInitializing,anime4kError:ie.error,videoDelayEnabled:k,onVideoDelayToggle:O,videoDelayMs:u,onVideoDelayChange:j,onCalibrateAvSync:s?()=>{}:Ve,isInteractingExtra:st||de,className:Zr.shellFill,hideChrome:Be||Qe||e.selectedSource?.type==="iframe",overlays:t(at,{children:[m.state.isSpeedBoostActive&&t("div",{className:b.speedBoostBadge,"aria-hidden":"true",children:[t("span",{children:"2x"}),t(ye,{name:"forward",size:12})]}),it!==null&&At?.nextItem&&t("div",{className:b.queueCountdown,children:["Queue next in ",it,"s"]})]}),children:t(at,{children:[Re&&t("div",{className:b.loadingOverlay,children:t("div",{className:b.loadingDots,children:[t("div",{className:b.dot}),t("div",{className:b.dot}),t("div",{className:b.dot})]})}),m.state.isBuffering&&!Re&&e.selectedSource?.type!=="iframe"&&t("div",{className:b.bufferingOverlay,children:t("div",{className:b.bufferingSpinner})}),e.selectedSource?.type==="iframe"&&!s?!Re&&t("iframe",{src:e.selectedLink?.link,className:b.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(at,{children:[!Re&&e.videoSources.length===0&&t("div",{className:b.errorOverlay,children:[t("p",{children:["No sources found for this episode with ",e.selectedProvider,"."]}),t("p",{className:b.errorSubtext,children:"Please try selecting a different provider below."}),t("button",{className:b.retryButton,onClick:()=>window.location.reload(),"data-speed-boost-ignore":"true",style:{marginTop:8},children:"Retry"})]}),!Re&&e.videoSources.length>0&&t(en,{controls:!m.state.playbackLocked&&m.state.useNativeControls,playsInline:!0,"webkit-playsinline":"true",disablePictureInPicture:!0,disableRemotePlayback:!0,onPlay:A.onPlay,onPause:A.onPause,onEnded:()=>{L||gt(!0)},onDurationChange:()=>{Lt()},onSeeked:()=>{L||(Rt(),gt())},onLoadedMetadata:()=>{Rt(),Lt(),L||gt()},onTimeUpdate:()=>{L||(A.onTimeUpdate(),Rt(),gt(),At&&f.videoRef.current&&f.videoRef.current.currentTime<f.videoRef.current.duration-1&&sr())},onError:s?void 0:It,onContextMenu:l=>l.preventDefault(),className:Ge?b.videoElementHidden:""}),ie.isWebGPUSupported&&!Re&&e.videoSources.length>0&&t("canvas",{ref:F,className:`${b.upscalerCanvas} ${De?b.upscalerActive:""}`}),!De&&!Re&&e.videoSources.length>0&&t("canvas",{ref:tt,className:`${b.upscalerCanvas} ${nt?b.upscalerActive:""}`}),ie.isEnabled&&ie.isWebGPUSupported&&ie.isInitializing&&t("div",{className:b.upscalerStatusBadge,children:"Preparing upscaler…"}),Ge&&t("div",{ref:we,className:b.subtitleOverlay}),t(En,{isOpen:de,ms:u,onChange:j,onApply:oe,onClose:X,testClipActive:L,onTestClip:$e})]}),(Be||Qe)&&t("div",{className:b.watchedOverlay,children:[t(ye,{name:"check-circle",size:48,style:{color:"var(--accent-lighter)"}}),t("p",{className:b.watchedTitle,children:Ie?"Show Completed!":e.currentEpisode?`Episode ${e.currentEpisode} watched`:"Watched"}),t("p",{className:b.watchedSubtext,children:Ie?"Congratulations! You finished all available episodes.":"Resume where you left off, replay from the beginning, or continue with the next episode."}),t("div",{className:`${b.watchedActions} ${Qe?b.watchedActionsCentered:""}`,children:[t("div",{children:e.resumeTime>5&&!Qe&&t(Ne,{variant:Ze?void 0:"secondary",onClick:qe,children:`Resume ${Qt(e.resumeTime)}`})}),t("div",{children:[ge&&t(Ne,{onClick:ft,children:`Watch EP ${ge}`}),Ie&&t(Ne,{onClick:Pt,disabled:W,children:W?"Saving...":"Move to Completed"})]}),t("div",{children:t(Ne,{variant:"secondary",onClick:()=>{vt(),ht()},children:"Replay"})})]})]})]})})}),t(Bn,{playback:Y&&!Re?{selection:Y,position:f.videoRef.current?.currentTime||0,playing:!1,rate:m.engine.getState().playbackRate}:null,onCreate:()=>{be(),m.engine.pause()},needsPlayback:x.needsPlayback,onEnablePlayback:x.enablePlayback}),s&&!Re&&!Y&&t("p",{role:"alert",children:"This room requires the host's direct HLS source. It is unavailable here. Retry the episode or leave the room to use another source."}),!re&&t(kn,{}),!re&&t(at,{children:[t("div",{className:b.streamPanel,children:[!n&&t(ws,{selectedProvider:e.selectedProvider,isAdult:e.showMeta?.isAdult,options:v,onProviderChange:l=>{Ft(),w({type:"SET_STATE",payload:{selectedProvider:l,videoSources:[],selectedSource:null,selectedLink:null,loadingVideo:!0}}),er(l,e.showMeta?.isAdult===!0)}}),Ut(`${b.episodeActions} ${b.desktopEpisodeActions}`,"desktop"),Re?t("div",{className:b.sourceLoader,children:t("div",{className:b.spinner})}):n?t("p",{children:["Provider: ",e.selectedProvider," · Source: ",i.room?.selection.source," ·"," ",e.currentMode]}):t(ks,{videoSources:s?e.videoSources.filter(l=>l.type!=="iframe"&&l.links.some(Z=>Z.hls)):e.videoSources,selectedSource:e.selectedSource,selectedLink:e.selectedLink,onSourceChange:l=>{if(s&&(l.type==="iframe"||!l.links.some(xe=>xe.hls)))return;f.videoRef.current&&!isNaN(f.videoRef.current.currentTime)&&(Ot.current=f.videoRef.current.currentTime);const Me=(s?l.links.filter(xe=>xe.hls):l.links||[]).sort((xe,Pe)=>(parseInt(Pe.resolutionStr)||0)-(parseInt(xe.resolutionStr)||0))[0]||null;$(l.sourceName),w({type:"SET_STATE",payload:{selectedSource:l,selectedLink:Me,showResumeModal:e.showResumeModal&&l.type!=="iframe"}})},onLinkChange:l=>{e.selectedSource&&($(e.selectedSource.sourceName),M(l.resolutionStr),w({type:"SET_STATE",payload:{selectedLink:l}}))}})]}),Ct&&He.length===0?t(gs,{count:3}):t(_n,{title:"Queue",items:He,currentShowId:r,currentEpisode:e.currentEpisode??void 0,onNextQueue:n?()=>{}:tr,onRemove:l=>J.mutate({showId:l.showId,episodeNumber:l.episodeNumber}),onClear:()=>me.mutate(),showClearAll:!0,onReorder:l=>Te.mutate(l.map(Z=>({id:Z.id,showId:Z.showId,episodeNumber:Z.episodeNumber})))}),t("div",{className:_e.playerInfoContainer,children:[t("div",{className:_e.playerInfoHeader,children:[t("div",{className:_e.playerAnimeCard,children:t(zr,{src:Hr(e.showMeta.thumbnail||""),alt:Fe,loading:"lazy",decoding:"async",onError:l=>{l.target.src="/placeholder.svg"}})}),t("div",{className:_e.videoTitleSection,children:[t("div",{className:b.titleContainer,children:[t("h1",{children:Fe}),t("div",{className:b.scheduleInfo,children:[e.showMeta.status&&t("span",{className:b.status,children:e.showMeta.status}),e.showMeta.nextEpisodeAirDate&&(()=>{const l=e.showMeta.nextAiring,Z=I!=null?I*1e3:null;let Me="";if(Z!=null){let Pe=Math.floor((Z-q)/1e3);if(Pe<=0)return null;const Cr=Math.floor(Pe/86400);Pe%=86400;const Rr=Math.floor(Pe/3600);Pe%=3600;const Mr=Math.floor(Pe/60),Pr=Pe%60;Me=`in ${Cr}d ${Rr}h ${String(Mr).padStart(2,"0")}m ${String(Pr).padStart(2,"0")}s`}const xe=l?.episode!=null?`E${l.episode} · `:"";return t("span",{className:b.nextEpisode,children:["Next episode: ",xe,e.showMeta.nextEpisodeAirDate,Me?` · ${Me}`:""]})})()]})]}),t("div",{className:b.controls,children:[t("button",{className:`${b.watchlistBtn} ${e.inWatchlist?b.inList:""}`,onClick:T,children:[e.inWatchlist?t(ye,{name:"check",size:14}):t(ye,{name:"plus",size:14}),e.inWatchlist?"In Watchlist":"Add to Watchlist"]}),t(xn,{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:`${b.watchlistBtn} ${b.queueBtn}`,activeClassName:b.queueActive}),t("button",{className:`${b.watchlistBtn} ${b.modeToggleBtn} ${e.currentMode==="dub"?b.modeToggleActive:""}`,disabled:n,onClick:()=>{const l=e.currentMode==="dub"?"sub":"dub";Ft(),w({type:"SET_MODE",payload:l}),te.setItem("preferredMode",l)},type:"button","aria-pressed":e.currentMode==="dub",children:e.currentMode==="dub"?"DUB":"SUB"}),t("button",{className:`${b.watchlistBtn} ${b.modeToggleBtn}`,onClick:()=>e.currentEpisode&&P(e.currentEpisode),disabled:R||!e.currentEpisode,type:"button",children:[t(ye,{name:"undo",size:14}),R?"Resetting...":"Reset Progress"]})]})]})]}),Ut(`${b.episodeActions} ${b.mobileEpisodeActions}`,"mobile"),t("div",{className:_e.infoColumns,children:[t("div",{className:`${b.descriptionSection} ${b.synopsisFlat}`,children:[t("h3",{children:"Synopsis"}),t($n,{text:e.showMeta.description?e.showMeta.description.replace(/<[^>]*>?/gm,""):"",emptyText:"No description available."}),t("button",{className:b.detailsToggleBtn,onClick:h,children:[e.showCombinedDetails?t(ye,{name:"chevron-up"}):t(ye,{name:"chevron-down"}),e.showCombinedDetails?"Hide Details":"Show Details"]})]}),e.showCombinedDetails&&t(Ln,{showMeta:e.showMeta,styles:b})]})]})]})]}),t(Tn,{isOpen:st,onClose:()=>ze(!1),episodes:e.episodes,currentEpisode:e.currentEpisode??void 0,watchedEpisodes:e.watchedEpisodes,onEpisodeClick:l=>{ze(!1),c(`/watch/${r}/${l}`)}})]})};export{mo as default};
|