@serifpersia/dango 3.7.4 → 3.7.6
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 +10 -6
- package/client/dist/assets/{AnimeCard-CBxkRKU-.js → AnimeCard-a7KkMGQv.js} +1 -1
- package/client/dist/assets/{AnimeInfo-D3LmqzJo.js → AnimeInfo-De3gudGy.js} +1 -1
- package/client/dist/assets/{AnimeInfoPage-CeJHVkQ0.js → AnimeInfoPage-adJHjnqz.js} +2 -2
- package/client/dist/assets/{AnimeMetaDetails-D8WIiO4b.js → AnimeMetaDetails-B3-A7O5H.js} +1 -1
- package/client/dist/assets/Asmr-BH3j9n5n.js +2 -0
- package/client/dist/assets/{AsmrResetProgressModal-C13uw5lH.js → AsmrResetProgressModal-CZGzmnlI.js} +1 -1
- package/client/dist/assets/Home-4lO9InFx.js +1 -0
- package/client/dist/assets/Home-DHAkZuDf.css +1 -0
- package/client/dist/assets/{Insights-BZGAhYrz.js → Insights-Co9pEzWb.js} +1 -1
- package/client/dist/assets/{LibraryListPage-DosBFeR_.js → LibraryListPage-CgZiYRmp.js} +1 -1
- package/client/dist/assets/{ListeningList-nq279J8O.js → ListeningList-DX_Imiie.js} +1 -1
- package/client/dist/assets/{Manga-DiCcXa9I.js → Manga-tDOa59vQ.js} +1 -1
- package/client/dist/assets/{MangaInfoPage-sZn0qDxf.js → MangaInfoPage-D_3Rx6rr.js} +1 -1
- package/client/dist/assets/{MangaReadPage-ChgW4VO8.js → MangaReadPage-D0satiXp.js} +1 -1
- package/client/dist/assets/{MangaResetProgressModal-BkNHdClw.js → MangaResetProgressModal-Bd_lIuFo.js} +1 -1
- package/client/dist/assets/{Mature-D7bJH6LQ.js → Mature-DhozU6BP.js} +1 -1
- package/client/dist/assets/{MatureConsentModal-B3u3RgAE.js → MatureConsentModal-RZ_j_2BD.js} +1 -1
- package/client/dist/assets/{MediaCard-B1llLoho.js → MediaCard-BODgA6ir.js} +1 -1
- package/client/dist/assets/{OptionListMenu-1QikgQ8d.js → OptionListMenu-CGazCg0C.js} +1 -1
- package/client/dist/assets/Player-M3yMiFzg.js +56 -0
- package/client/dist/assets/PlayerProvider-N2pT5gty.css +1 -0
- package/client/dist/assets/PlayerProvider-pi0at080.js +1 -0
- package/client/dist/assets/PlayerSettings-k4bqwbns.js +1 -0
- package/client/dist/assets/{QueueOptionsButton-Cpm6Jovo.js → QueueOptionsButton-C-y5QFrT.js} +1 -1
- package/client/dist/assets/{QueueRail-DpUQ2Ba2.js → QueueRail-DGFI6xTM.js} +1 -1
- package/client/dist/assets/{ReadingList-DMxkudSM.js → ReadingList-BB_fA_j0.js} +1 -1
- package/client/dist/assets/{ResetProgressModal-6X8ciSFl.js → ResetProgressModal-DEnbScHS.js} +1 -1
- package/client/dist/assets/{Search-CbXvziWY.js → Search-Dikasx2q.js} +1 -1
- package/client/dist/assets/{Settings-BEZZSWsj.js → Settings-CCoAhBc0.js} +1 -1
- package/client/dist/assets/{SkeletonGrid-BDR-fKs1.js → SkeletonGrid-w6TsxWu7.js} +1 -1
- package/client/dist/assets/Trackers-CoM-8Hz9.js +2 -0
- package/client/dist/assets/Trackers-CvO6aWVx.css +1 -0
- package/client/dist/assets/Tv-BLUeZ2n8.js +4 -0
- package/client/dist/assets/{TvInfo-WNJynk-5.js → TvInfo-BjFZ57fG.js} +1 -1
- package/client/dist/assets/{TvPopup-Q9_MFJdx.js → TvPopup-D6UvGI7M.js} +1 -1
- package/client/dist/assets/{TvSearch-C-RBZ1iq.js → TvSearch-BDNZjbZo.js} +1 -1
- package/client/dist/assets/{TvWatchlist-BXE6yUS0.js → TvWatchlist-er5RKLmv.js} +1 -1
- package/client/dist/assets/{Watchlist-7x__Rf-s.js → Watchlist-BiJ1SCAH.js} +1 -1
- package/client/dist/assets/{index-B7katXv0.css → index-5x1mF1nD.css} +1 -1
- package/client/dist/assets/index-BP1z44Uk.js +178 -0
- package/client/dist/assets/{libraryInvalidation-BFqNv8Cx.js → libraryInvalidation-CVK2SYUR.js} +1 -1
- package/client/dist/assets/{useAnimeInfoData-D_qedrui.js → useAnimeInfoData-8RI9qMzw.js} +1 -1
- package/client/dist/assets/{useAsmr-CrshwDPO.js → useAsmr-ClAcWwjW.js} +1 -1
- package/client/dist/assets/{useAsmrPopup-HwNC-ZRo.js → useAsmrPopup-CDcDqi0C.js} +1 -1
- package/client/dist/assets/useMangaLibrary-D3Foz2m_.js +1 -0
- package/client/dist/assets/{useMangaPopup-DdueqAi5.js → useMangaPopup-kZzwoCN6.js} +1 -1
- package/client/dist/assets/usePlaybackEnd-BMf_H2dw.css +1 -0
- package/client/dist/assets/usePlaybackEnd-DmvZ__Ut.js +10 -0
- package/client/dist/assets/{useProviders-_ilIsyde.js → useProviders-OKWPunZg.js} +1 -1
- package/client/dist/assets/{useTv-C558DPdT.js → useTv-BgO7EV-p.js} +1 -1
- package/client/dist/assets/{useTvLibrary-CNQcDI7O.js → useTvLibrary-C6rSJQi_.js} +1 -1
- package/client/dist/index.html +2 -2
- package/package.json +2 -2
- package/server/dist/server.js +251 -246
- package/server/dist/shipped-defaults.js +1 -1
- package/server/package.json +1 -1
- package/client/dist/assets/Asmr-CrHIKmJ4.js +0 -2
- package/client/dist/assets/Home-C5eTe3jP.css +0 -1
- package/client/dist/assets/Home-CC9XyO9O.js +0 -1
- package/client/dist/assets/Player-hVrgi0J1.js +0 -56
- package/client/dist/assets/PlayerSettings-CWc5Tf-B.js +0 -1
- package/client/dist/assets/Trackers-D5XBOCDp.css +0 -1
- package/client/dist/assets/Trackers-DO0mA01O.js +0 -2
- package/client/dist/assets/Tv-DP4rcV9T.js +0 -4
- package/client/dist/assets/hls-DIyfUbGZ.js +0 -1
- package/client/dist/assets/index-D0DdVatn.js +0 -178
- package/client/dist/assets/useMangaLibrary-BPSi9vcc.js +0 -1
- package/client/dist/assets/usePlaybackEnd-DLFOYx3Q.css +0 -1
- package/client/dist/assets/usePlaybackEnd-DjZq1szR.js +0 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
import{p as le,d as E,T as re,h as O,u as a,m as ne,S as q}from"./vendor-core-DfaOB3Rn.js";import{I as M}from"./vendor-icons-DrybRNxP.js";import{T as se}from"./ToggleSwitch-CN_ppEc9.js";import{M as oe}from"./MatureConsentModal-
|
|
1
|
+
import{p as le,d as E,T as re,h as O,u as a,m as ne,S as q}from"./vendor-core-DfaOB3Rn.js";import{I as M}from"./vendor-icons-DrybRNxP.js";import{T as se}from"./ToggleSwitch-CN_ppEc9.js";import{M as oe}from"./MatureConsentModal-RZ_j_2BD.js";import{E as ie}from"./ErrorMessage-DAxegITP.js";import{M as ce,P as de}from"./MediaCard-BODgA6ir.js";import{u as ue,M as ge}from"./useMangaPopup-kZzwoCN6.js";import{e as pe,U as he}from"./index-BP1z44Uk.js";import{f as me,u as ve,m as D,i as be,b as fe,c as Se}from"./useMangaLibrary-D3Foz2m_.js";import{u as Te}from"./useProviders-OKWPunZg.js";import{s as l}from"./Manga.module-depGEacJ.js";import{p as c}from"./page.module-C1MlZzf3.js";import"./vendor-ui-3qrARCPr.js";import"./useIsMobile-Dvx1uJ82.js";import"./usePopup-DS9jMzp6.js";import"./vendor-query-BBT5_sHx.js";import"./libraryInvalidation-CVK2SYUR.js";const ye=[{value:"popular",label:"Popular"},{value:"latest",label:"Latest"},{value:"rating",label:"Top Rated"},{value:"followed",label:"Most Followed"}],Me=[{value:"",label:"Any Status"},{value:"ongoing",label:"Ongoing"},{value:"completed",label:"Completed"},{value:"hiatus",label:"Hiatus"},{value:"cancelled",label:"Cancelled"}],Ne=[{value:"",label:"Any Status"},{value:"publishing",label:"Publishing"},{value:"finished",label:"Finished"},{value:"on hiatus",label:"On Hiatus"},{value:"discontinued",label:"Discontinued"}],Ce=[{value:"",label:"All Types"},{value:"manga",label:"Manga"},{value:"novel",label:"Novel"},{value:"one-shot",label:"One-Shot"},{value:"doujinshi",label:"Doujinshi"}],Pe=[{value:"safe",label:"Safe"}],Ie=[{value:"safe",label:"Safe"},{value:"suggestive",label:"Suggestive"},{value:"erotica",label:"Erotica"},{value:"pornographic",label:"Pornographic"}];function He(){const[n,N]=le(),{hasConsent:v,grant:_}=pe(),[j,b]=E(!1),[C,P]=E(n.get("q")||""),{options:I,isLoading:R,refetch:G}=Te(),d=re(()=>I.filter(e=>e.kind==="manga").map(e=>({value:e.id,label:e.label})),[I]),f=n.get("provider")||"",S=f&&d.some(e=>e.value===f)?f:"",T=n.get("q")||"",L=parseInt(n.get("page")||"1"),$=n.get("sort")||"popular",k=n.get("status")||"",w=n.get("type")||"",u=n.get("rating")||"safe",A=n.get("id")||"";O(()=>{document.title="Manga - dango"},[]);const o=v,y=o?u:"safe",H=o?Ie:Pe,i=(e,t=!1)=>{const r=new URLSearchParams(n);for(const[m,U]of Object.entries(e))U?r.set(m,U):r.delete(m);t&&r.delete("page"),N(r)},g=me({provider:S,query:T,page:L,sort:$,status:k,type:w,rating:y,mature:o}),h=g.data?.items??[],z=g.data?.hasNext??!1,p=S||h[0]?.provider||"",{toggle:V,bookmarkedIds:X}=ve(),{popup:s,openPopup:K,scheduleClose:x,cancelClose:B,closePopup:Q}=ue();if(O(()=>{P(T)},[T]),A){const e=new URLSearchParams;o&&u!=="safe"&&e.set("rating",u);const t=n.get("chapter")||"";t&&e.set("chapter",t);const r=e.toString()?`?${e.toString()}`:"",m=`/manga/${p||"mangadex"}/${encodeURIComponent(A)}${t?`/read${r}`:r}`;return a(ne,{to:m,replace:!0})}const W=e=>{e.preventDefault(),he(),i({q:C},!0)},Y=e=>{e.currentTarget.checked&&!v&&b(!0)},J=()=>{_(),b(!1),i({},!0)},Z=()=>{b(!1)},F=e=>{const t=new URLSearchParams;o&&u!=="safe"&&t.set("rating",u);const r=t.toString()?`?${t.toString()}`:"";return`/manga/${e.provider}/${encodeURIComponent(e.id)}${r}`},ee=p==="mangapill"?Ne:Me,ae=p==="mangapill",te=p==="mangadex";return a("div",{className:c.page,children:[a("div",{className:c.header,children:[a("h1",{className:c.pageTitle,children:[a(M,{name:"book"})," Manga"]}),a("form",{className:c.searchForm,onSubmit:W,children:[a("input",{className:c.searchInput,value:C,onChange:e=>P(e.currentTarget.value),placeholder:"Search manga titles...","aria-label":"Search manga"}),a("button",{className:c.searchBtn,type:"submit","aria-label":"Search",children:a(M,{name:"search",size:14})})]}),a("select",{className:l.select,value:S,disabled:d.length===0,onChange:e=>{const t=new URLSearchParams(n);t.set("provider",e.currentTarget.value),t.delete("page"),t.delete("id"),t.delete("chapter"),t.delete("status"),t.delete("type"),N(t)},"aria-label":"Manga provider",children:d.length===0?a("option",{value:"",children:R?"Loading providers…":"No providers available"}):a(q,{children:[a("option",{value:"",children:"Auto"}),d.map(e=>a("option",{value:e.value,children:e.label},e.value))]})}),d.length===0&&!R&&a("button",{className:c.searchBtn,type:"button",onClick:()=>G(),"aria-label":"Retry loading providers",children:a(M,{name:"redo",size:14})})]}),a("div",{className:l.filterRow,children:[p==="mangadex"&&a("select",{className:l.select,value:$,onChange:e=>i({sort:e.currentTarget.value},!0),"aria-label":"Sort manga",children:ye.map(e=>a("option",{value:e.value,children:e.label},e.value))}),a("select",{className:l.select,value:k,onChange:e=>i({status:e.currentTarget.value},!0),"aria-label":"Filter by status",children:ee.map(e=>a("option",{value:e.value,children:e.label},e.label))}),ae&&a("select",{className:l.select,value:w,onChange:e=>i({type:e.currentTarget.value},!0),"aria-label":"Filter by type",children:Ce.filter(e=>e.value!=="doujinshi"||o).map(e=>a("option",{value:e.value,children:e.label},e.value))}),te&&a("select",{className:l.select,value:y,onChange:e=>i({rating:e.currentTarget.value},!0),"aria-label":"Content rating",children:H.map(e=>a("option",{value:e.value,children:e.label},e.value))}),!v&&a("div",{className:l.matureToggleWrap,children:[a("label",{className:l.matureLabel,htmlFor:"manga-mature-toggle",children:"Mature"}),a(se,{id:"manga-mature-toggle",isChecked:!1,onChange:Y})]})]}),g.isError?a(ie,{message:"Failed to load manga. Please try again."}):g.isLoading&&h.length===0?a("div",{className:l.grid,"aria-hidden":!0,children:Array.from({length:12}).map((e,t)=>a("div",{className:l.skeletonCard,children:[a("div",{className:`${l.skeletonThumb} ${l.shimmer}`}),a("div",{className:`${l.skeletonLine} ${l.shimmer}`,style:{width:"88%"}}),a("div",{className:`${l.skeletonLine} ${l.shimmer}`,style:{width:"55%"}})]},t))}):h.length===0?a("p",{className:l.statusMsg,children:"No titles found. Try another search or provider."}):a(q,{children:[a("div",{className:`${l.grid} ${g.isFetching?l.fetching:""}`,children:h.map(e=>{const t=D(e.provider,e.id);return a(ce,{item:{id:t,title:e.title,...Se(e),thumbnail:fe(e.provider,e.cover),typeBadge:e.type||void 0,chapterBadge:e.latestChapter?`Ch. ${e.latestChapter}`:null,isAdult:be(e)},linkTo:F(e),hoverIcon:"info",display:{elements:{poster:{typeBadge:!0,chapterBadge:!0,adultBadge:!0},info:{title:!0,mobileBadges:!0,progress:!1,meta:!1}}},onOpenDetails:r=>K(r,{provider:e.provider,mangaId:e.id,title:e.title,altTitle:e.altTitle,cover:e.cover,contentRating:e.contentRating,readTarget:F(e),rating:y,mature:o}),onPopupHoverIntent:r=>r?B():x(),rawThumbnail:!0},`${e.provider}-${e.id}`)})}),a(de,{page:L,canGoNext:z,onChange:e=>i({page:String(e)}),variant:"labeled"})]}),s&&a(ge,{data:s.data,anchorRect:s.rect,bookmarked:X.has(D(s.data.provider,s.data.mangaId)),onToggleBookmark:()=>V({id:s.data.mangaId,provider:s.data.provider,title:s.data.title,cover:s.data.cover,altTitle:s.data.altTitle??void 0,contentRating:s.data.contentRating}),onMouseEnter:B,onMouseLeave:x,onRequestClose:Q}),j&&a(oe,{isOpen:!0,scope:"section",showResetHint:!0,onClose:Z,onGrant:J})]})}export{He as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as e,a as Q,d as z,S as E,o as O,p as G,T as $,h as Y}from"./vendor-core-DfaOB3Rn.js";import{I as x}from"./vendor-icons-DrybRNxP.js";import{B as M,e as H,d as J}from"./index-
|
|
1
|
+
import{u as e,a as Q,d as z,S as E,o as O,p as G,T as $,h as Y}from"./vendor-core-DfaOB3Rn.js";import{I as x}from"./vendor-icons-DrybRNxP.js";import{B as M,e as H,d as J}from"./index-BP1z44Uk.js";import{E as K}from"./ErrorMessage-DAxegITP.js";import{b as D,g as V,f as U,h as j,j as X,m as A,k as Z,l as ee,n as te,r as ae,o as re,p as ne,q as se,s as ie,M as oe}from"./useMangaLibrary-D3Foz2m_.js";import{s as r}from"./Manga.module-depGEacJ.js";import{p as le}from"./page.module-C1MlZzf3.js";import"./vendor-query-BBT5_sHx.js";import"./libraryInvalidation-CVK2SYUR.js";const ce=({detail:a,altTitle:c,onBack:b,onOpenChapter:v,bookmarkButton:n,statusSelect:g,primaryAction:k,progressByChapter:d})=>{const h=[a.type,a.status,a.year?String(a.year):"",a.author?`by ${a.author}`:""].filter(Boolean);return e("div",{children:[e("button",{className:r.backBtn,onClick:b,children:[e(x,{name:"chevron-left",size:12})," Back to browse"]}),e("div",{className:r.detail,children:[a.cover&&e("img",{className:r.detailCover,src:D(a.provider,a.cover),alt:a.title,decoding:"async",draggable:!1}),e("div",{className:r.detailInfo,children:[e("h2",{className:r.detailTitle,children:a.title}),c&&e("p",{className:r.detailAltTitle,children:["Also known as: ",c]}),h.length>0&&e("div",{className:r.detailMeta,children:h.map(t=>e("span",{className:r.badge,children:t},t))}),a.genres&&a.genres.length>0&&e("div",{className:r.detailMeta,children:a.genres.map(t=>e("span",{className:r.badge,children:t},t))}),a.description&&e("p",{className:r.detailDesc,children:a.description}),(n||g||k)&&e("div",{className:r.detailActions,children:[k,n,g]})]})]}),e("h3",{className:r.detailTitle,style:{fontSize:"1rem"},children:["Chapters (",a.chapters.length,")"]}),a.chapters.length===0?e("p",{className:r.statusMsg,children:"No chapters found for this title on this provider."}):e("div",{className:r.chapterList,children:a.chapters.map(t=>{const o=d?.get(t.id),p=!!o&&o.pageCount>0&&o.page>=o.pageCount;return e("button",{className:`${r.chapterRow} ${p?r.chapterDone:""}`,onClick:()=>v(t),title:t.externalUrl?"External only - opens on source site":void 0,children:[e("span",{children:["Ch. ",t.number,t.title?` - ${t.title}`:""]}),e("span",{className:r.chapterMeta,children:[o&&o.pageCount>0?p?"read":`p. ${o.page}/${o.pageCount}`:"",t.group,t.externalUrl?"external":""].filter(Boolean).join(" · ")})]},t.id)})})]})},de=({libId:a,anilistId:c})=>{const b=Q(),v=V(a),n=v.data?.item,[g,k]=z(null),[d,h]=z(null),t=g??n?.title??"",o=U({provider:"mangadex",query:t,page:1,sort:"",status:"",type:"",rating:"safe",mature:!1},!!t),p=U({provider:"mangapill",query:t,page:1,sort:"",status:"",type:"",rating:"safe",mature:!1},!!t),S=j(),y=X(),T=async s=>{const u=A(s.provider,s.id);h(u);try{await S.mutateAsync({provider:s.provider,mangaId:s.id,title:s.title,cover:s.cover,altTitle:s.altTitle,contentRating:s.contentRating,silent:!0}),await y.mutateAsync({id:u,anilistId:c}),b(`/manga/${s.provider}/${encodeURIComponent(s.id)}`)}catch{return}finally{h(null)}},C=(s,u,B)=>e("div",{style:{marginTop:"12px"},children:[e("div",{style:{fontWeight:600,textTransform:"capitalize",marginBottom:"6px"},children:s}),B?e("div",{style:{color:"var(--text-tertiary)",fontSize:"0.85rem"},children:"Searching…"}):!u||u.length===0?e("div",{style:{color:"var(--text-tertiary)",fontSize:"0.85rem"},children:"No matches."}):u.slice(0,6).map(l=>{const I=A(l.provider,l.id),N=d===I;return e("div",{style:{display:"flex",alignItems:"center",gap:"10px",padding:"6px 0",borderTop:"1px solid var(--border, #223)"},children:[l.cover&&e("img",{src:D(l.provider,l.cover),alt:"",loading:"lazy",style:{width:"34px",height:"48px",objectFit:"cover",borderRadius:"4px"}}),e("div",{style:{flex:1,minWidth:0},children:[e("div",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:l.title}),l.latestChapter&&e("div",{style:{color:"var(--text-tertiary)",fontSize:"0.75rem"},children:l.latestChapter})]}),e(M,{onClick:()=>T(l),disabled:N,children:[e(x,{name:"external-link-alt",size:12})," ",N?"Linking…":"Link"]})]},I)})]});return e("div",{children:[e("button",{onClick:()=>b("/manga"),style:{background:"none",border:"none",color:"var(--accent)",cursor:"pointer",marginBottom:"12px"},children:[e(x,{name:"chevron-left",size:12})," Back to browse"]}),v.isLoading?e("div",{style:{color:"var(--text-tertiary)"},children:"Loading library entry…"}):n?e(E,{children:[e("div",{style:{display:"flex",gap:"12px",alignItems:"center"},children:[n.cover&&e("img",{src:n.cover,alt:"",style:{width:"64px",height:"90px",objectFit:"cover",borderRadius:"6px"}}),e("div",{children:[e("h2",{style:{margin:"0 0 4px"},children:n.title}),e("div",{style:{color:"var(--text-tertiary)",fontSize:"0.85rem"},children:["Tracked on AniList",n.lastChapterNumber?` · Ch. ${n.lastChapterNumber}`:"",n.status?` · ${n.status}`:""]})]})]}),e("p",{style:{color:"var(--text-tertiary)",fontSize:"0.85rem",marginTop:"12px"},children:"AniList doesn't host chapters. Search your providers below and link the matching manga - your AniList status and chapter progress will sync to it from now on."}),e("div",{style:{display:"flex",gap:"8px",marginTop:"8px"},children:e("input",{type:"text",value:g??n.title,onChange:s=>k(s.currentTarget.value),placeholder:"Search providers…",style:{flex:1,padding:"8px 10px",borderRadius:"6px",border:"1px solid var(--border, #223)",background:"var(--bg-secondary, transparent)",color:"inherit"}})}),C("mangadex",o.data?.items,o.isLoading),C("mangapill",p.data?.items,p.isLoading)]}):e("div",{style:{color:"var(--text-tertiary)"},children:"This AniList entry is no longer in your library."})]})};function ke(){const{provider:a="",id:c=""}=O(),[b]=G(),v=Q(),{hasConsent:n}=H(),g=b.get("rating")||"safe",k=n?g:"safe",d=a&&c?A(a,c):void 0,h=Z(a||null,c||null,k,n),t=h.data,o=ee(d),p=te(d),{titlePreference:S}=J(),y=$(()=>t&&{...t,title:ae(t,S)},[t,S]),T=j(),C=re(),s=ne();Y(()=>{y&&(document.title=`${y.title} - dango`)},[y]);const u=$(()=>{const i=new Map;for(const m of p.data?.progress??[])i.set(m.chapterId,m);return i},[p.data]),B=a.toLowerCase()==="anilist"&&/^\d+$/.test(c)?parseInt(c,10):null,l=o.data?.inLibrary??!1,I=o.data?.status??"Reading",N=$(()=>(t?.chapters??[]).filter(i=>!i.externalUrl),[t]),f=$(()=>{if(!t)return null;const i=[...p.data?.progress??[]].sort((m,L)=>L.updatedAt-m.updatedAt);for(const m of i){const L=t.chapters.find(w=>w.id===m.chapterId);if(L&&!L.externalUrl)return L;const P=se(m.chapterId);if(P!=null){const w=ie(t.chapters,P);if(w&&!w.externalUrl)return w}}return N[0]??null},[t,p.data,N]),q=f?u.get(f.id):void 0,F=(p.data?.progress?.length??0)>0,W=f&&(q||F)?`Continue Ch. ${f?.number}`:"Start Reading",R=i=>{if(i.externalUrl){window.open(i.externalUrl,"_blank","noopener,noreferrer");return}const m=new URLSearchParams;m.set("chapter",i.id),n&&g!=="safe"&&m.set("rating",g),v(`/manga/${a}/${encodeURIComponent(c)}/read?${m.toString()}`)},_=()=>{!t||!d||(l?C.mutate(d):T.mutate({provider:a,mangaId:c,title:t.title,cover:t.cover,author:t.author,altTitle:t.altTitle,contentRating:t.contentRating}))};return e("div",{className:le.page,children:h.isLoading?e("div",{"aria-hidden":!0,children:[e("div",{className:`${r.skeletonThumb} ${r.shimmer}`,style:{maxWidth:"12rem"}}),e("div",{className:`${r.skeletonLine} ${r.shimmer}`,style:{width:"40%"}}),e("div",{className:`${r.skeletonLine} ${r.shimmer}`,style:{width:"70%"}})]}):h.isError||!t||!y?B!=null&&d?e(de,{libId:d,anilistId:B}):e(E,{children:[e("button",{className:r.backBtn,onClick:()=>v("/manga"),children:[e(x,{name:"chevron-left",size:12})," Back to browse"]}),e(K,{message:"Failed to load this title. Please try again."})]}):e(ce,{detail:y,altTitle:t.altTitle!==y.title?t.altTitle:void 0,onBack:()=>v("/manga"),onOpenChapter:R,progressByChapter:u,primaryAction:f?e(M,{onClick:()=>f&&R(f),children:[e(x,{name:"book",size:13})," ",W]}):void 0,bookmarkButton:e(M,{variant:l?"secondary":"primary",onClick:_,disabled:T.isPending||C.isPending,children:[e(x,{name:"bookmark",size:13})," ",l?"Bookmarked":"Bookmark"]}),statusSelect:l?e("select",{className:r.detailSelect,value:I,onChange:i=>d&&s.mutate({id:d,status:i.currentTarget.value}),"aria-label":"Reading status",children:oe.map(i=>e("option",{value:i,children:i},i))}):void 0})})}export{ke as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as D,A as w,q as Z,h as g,u as e,S as ce,o as ve,p as be,a as we,T as Ne}from"./vendor-core-DfaOB3Rn.js";import{E as ye}from"./ErrorMessage-DAxegITP.js";import{I as $}from"./vendor-icons-DrybRNxP.js";import{u as Ce}from"./vendor-query-BBT5_sHx.js";import{t as ke,v as Se,m as Ie,k as $e,r as Pe,n as Re,w as Me,q as xe,s as Ee}from"./useMangaLibrary-BPSi9vcc.js";import{s as t}from"./Manga.module-depGEacJ.js";import{q as Te,e as Le,d as Be,t as oe}from"./index-D0DdVatn.js";import{p as ze}from"./page.module-C1MlZzf3.js";import"./libraryInvalidation-BFqNv8Cx.js";const le="mangaReadMode",de="mangaFitMode";function Ae(){try{return localStorage.getItem(le)==="page"?"page":"strip"}catch{return"strip"}}function Fe(){try{return localStorage.getItem(de)==="height"?"height":"width"}catch{return"width"}}const Ue=({provider:h,mangaTitle:p,chapter:f,chapters:y,onBack:C,onOpenChapter:v,initialPage:u=0,onProgress:V})=>{const[c,P]=D(Ae),[B,i]=D(Fe),[d,z]=D(0),[A,M]=D(new Set),[b,k]=D(0),N=w(null),x=w([]),X=Ce(),{data:_,isLoading:Y,isError:R}=ke(h,f.id),s=_?.pages??[],m=s.map(n=>Se(h,n)),I=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,S=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,I.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 G=w(V);G.current=V;const J=w(""),j=w(null),ee=w(null),[W,ue]=D(0),L=Z(()=>{const n=c==="strip"?x.current[I.current]:ee.current,r=n?.querySelector("img");if(!n||!r)return;const l=Math.max(0,(n.clientWidth-r.clientWidth)/2)+8;ue(H=>Math.abs(H-l)<1?H:l)},[c]);g(()=>{I.current=d,s.length!==0&&G.current?.(Math.min(d+1,s.length),s.length)},[d,s.length]),g(()=>{u<=0||E.current||I.current===0&&(E.current=!1,I.current=u,z(u))},[u]),g(()=>{if(c!=="strip"||s.length===0||u<=0)return;const n=`${f.id}:${u}`;if(J.current===n)return;J.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{localStorage.setItem(le,c)}catch{}},[c]),g(()=>{try{localStorage.setItem(de,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(),S(1)):r.key==="ArrowLeft"&&(r.preventDefault(),S(-1))};return window.addEventListener("keydown",n),()=>window.removeEventListener("keydown",n)},[c,s.length,S]),g(()=>{if(c!=="strip"||s.length===0)return;let n=0;const r=()=>{n=0;const H=window.innerHeight*.3,O=x.current;let q=-1,re=0;for(let Q=0;Q<O.length;Q++){const se=O[Q];if(!se)continue;const ie=se.getBoundingClientRect();if(ie.height>4&&re++,ie.top<=H)q=Q;else break}q<0||re<Math.min(3,O.length)||(q!==I.current&&(E.current=!0,I.current=q,z(q)),L())},l=()=>{n||(n=requestAnimationFrame(r))};return j.current=l,l(),window.addEventListener("scroll",l,{passive:!0}),window.addEventListener("resize",l),()=>{window.removeEventListener("scroll",l),window.removeEventListener("resize",l),n&&cancelAnimationFrame(n),j.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 ge=n=>{N.current=n.touches[0].clientX},he=n=>{if(N.current===null)return;const r=n.changedTouches[0].clientX-N.current;N.current=null,!(Math.abs(r)<50)&&S(r<0?1:-1)},K=n=>{n&&v(n)},te=n=>M(r=>{if(r.has(n))return r;const l=new Set(r);return l.add(n),l}),me=n=>{M(r=>{const l=new Set(r);return l.delete(n),l}),k(r=>r+1)},pe=()=>{M(new Set),k(n=>n+1),X.invalidateQueries({queryKey:[Te.mangaPages,h,f.id]})},fe=s.length>0&&A.size>=s.length,ne=n=>b>0?`${n}&n=${b}`:n,ae=n=>e("div",{className:t.deadPage,role:"alert",children:[e("span",{children:["Page ",n+1," failed to load"]}),e("button",{className:t.pageBtn,onClick:()=>me(n),children:[e($,{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($,{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($,{name:"chevron-left",size:14})}),e("button",{className:t.readerIconBtn,disabled:!o,onClick:()=>K(o),"aria-label":"Next chapter",children:e($,{name:"chevron-right",size:14})})]}),R?e("p",{className:t.statusMsg,children:"Failed to load pages. Please try again."}):Y?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."}):fe?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:pe,children:[e($,{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($,{name:"bookmark",size:12})},d),A.has(r)?ae(r):e("img",{className:t.readerPage,src:ne(n),alt:`Page ${r+1}`,loading:r<3?"eager":"lazy",decoding:"async",draggable:!1,onLoad:()=>j.current?.(),onError:()=>te(r)})]},`${r}-${s[r].slice(-32)}`))}):e(ce,{children:[e("div",{ref:ee,className:`${t.pageView} ${U?t.pageViewTall:""}`,onTouchStart:ge,onTouchEnd:he,children:[e("div",{className:t.ribbon,style:W>0?{right:W}:void 0,"aria-hidden":"true",children:e($,{name:"bookmark",size:12})},d),e("button",{className:`${t.tapZone} ${t.tapZoneLeft}`,onClick:()=>S(-1),"aria-label":"Previous page",children:e("span",{className:t.tapChevron,children:e($,{name:"chevron-left",size:16})})}),A.has(d)?ae(d):e("img",{className:t.pageImage,src:ne(m[d]),alt:`Page ${d+1} of ${s.length}`,decoding:"async",draggable:!1,onLoad:()=>L(),onError:()=>te(d)},`${d}-${s[d].slice(-32)}`),e("button",{className:`${t.tapZone} ${t.tapZoneRight}`,onClick:()=>S(1),"aria-label":"Next page",children:e("span",{className:t.tapChevron,children:e($,{name:"chevron-right",size:16})})})]}),e("nav",{className:t.pagination,"aria-label":"Page navigation",children:[e("button",{className:t.pageBtn,disabled:d<=0,onClick:()=>S(-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:()=>S(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"})]})]})},De=800,_e=5e3;function je(){const{provider:h="",id:p=""}=ve(),[f]=be(),y=we(),C=f.get("chapter")||"",v=f.get("rating")||"safe",{hasConsent:u}=Le(),V=u?v:"safe",c=h&&p?Ie(h,p):"",P=h.toLowerCase()==="anilist";g(()=>{P&&p&&y(`/manga/anilist/${encodeURIComponent(p)}`,{replace:!0})},[P,p,y]);const B=$e(!P&&h?h:null,!P&&p?p:null,V,u),i=B.data,{titlePreference:d}=Be(),z=i?Pe(i,d):"Manga",A=Re(c||void 0),M=Me(),b=i&&C?i.chapters.find(a=>a.id===C)??null:null,k=xe(C),N=k!=null&&i?Ee(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,X=k!=null&&!!i&&!N,_=Ne(()=>{const a=(A.data?.progress??[]).find(o=>o.chapterId===C);return a&&a.page>0?a.page:0},[A.data,C]),Y=_>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]),I=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,De))},[b,m]);g(()=>{m()},[C,m]),g(()=>()=>m(),[m]),g(()=>{const a=window.setInterval(()=>{s.current&&m()},_e);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=()=>{oe.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(()=>{}),oe.discord.heartbeat.mutate({sessionId:F.current}).catch(()=>{})};o();const S=window.setInterval(o,6e4);return()=>window.clearInterval(S)},[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:ze.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(ce,{children:[e("button",{className:t.backBtn,onClick:T,children:"Back to title"}),e(ye,{message:X?`Chapter ${k} isn't available from ${h} for this title.`:"Failed to load this chapter. Please try again."})]}):e(Ue,{provider:h,mangaTitle:z,chapter:b,chapters:i.chapters,onBack:T,onOpenChapter:E,initialPage:Y,onProgress:I},b.id)})}export{je as default};
|
|
1
|
+
import{d as D,A as w,q as Z,h as g,u as e,S as ce,o as ve,p as be,a as we,T as Ne}from"./vendor-core-DfaOB3Rn.js";import{E as ye}from"./ErrorMessage-DAxegITP.js";import{I as $}from"./vendor-icons-DrybRNxP.js";import{u as Ce}from"./vendor-query-BBT5_sHx.js";import{t as ke,v as Se,m as Ie,k as $e,r as Pe,n as Re,w as Me,q as xe,s as Ee}from"./useMangaLibrary-D3Foz2m_.js";import{s as t}from"./Manga.module-depGEacJ.js";import{q as Te,e as Le,d as Be,t as oe}from"./index-BP1z44Uk.js";import{p as ze}from"./page.module-C1MlZzf3.js";import"./libraryInvalidation-CVK2SYUR.js";const le="mangaReadMode",de="mangaFitMode";function Ae(){try{return localStorage.getItem(le)==="page"?"page":"strip"}catch{return"strip"}}function Fe(){try{return localStorage.getItem(de)==="height"?"height":"width"}catch{return"width"}}const Ue=({provider:h,mangaTitle:p,chapter:f,chapters:y,onBack:C,onOpenChapter:v,initialPage:u=0,onProgress:V})=>{const[c,P]=D(Ae),[B,i]=D(Fe),[d,z]=D(0),[A,M]=D(new Set),[b,k]=D(0),N=w(null),x=w([]),X=Ce(),{data:_,isLoading:Y,isError:R}=ke(h,f.id),s=_?.pages??[],m=s.map(n=>Se(h,n)),I=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,S=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,I.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 G=w(V);G.current=V;const J=w(""),j=w(null),ee=w(null),[W,ue]=D(0),L=Z(()=>{const n=c==="strip"?x.current[I.current]:ee.current,r=n?.querySelector("img");if(!n||!r)return;const l=Math.max(0,(n.clientWidth-r.clientWidth)/2)+8;ue(H=>Math.abs(H-l)<1?H:l)},[c]);g(()=>{I.current=d,s.length!==0&&G.current?.(Math.min(d+1,s.length),s.length)},[d,s.length]),g(()=>{u<=0||E.current||I.current===0&&(E.current=!1,I.current=u,z(u))},[u]),g(()=>{if(c!=="strip"||s.length===0||u<=0)return;const n=`${f.id}:${u}`;if(J.current===n)return;J.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{localStorage.setItem(le,c)}catch{}},[c]),g(()=>{try{localStorage.setItem(de,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(),S(1)):r.key==="ArrowLeft"&&(r.preventDefault(),S(-1))};return window.addEventListener("keydown",n),()=>window.removeEventListener("keydown",n)},[c,s.length,S]),g(()=>{if(c!=="strip"||s.length===0)return;let n=0;const r=()=>{n=0;const H=window.innerHeight*.3,O=x.current;let q=-1,re=0;for(let Q=0;Q<O.length;Q++){const se=O[Q];if(!se)continue;const ie=se.getBoundingClientRect();if(ie.height>4&&re++,ie.top<=H)q=Q;else break}q<0||re<Math.min(3,O.length)||(q!==I.current&&(E.current=!0,I.current=q,z(q)),L())},l=()=>{n||(n=requestAnimationFrame(r))};return j.current=l,l(),window.addEventListener("scroll",l,{passive:!0}),window.addEventListener("resize",l),()=>{window.removeEventListener("scroll",l),window.removeEventListener("resize",l),n&&cancelAnimationFrame(n),j.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 ge=n=>{N.current=n.touches[0].clientX},he=n=>{if(N.current===null)return;const r=n.changedTouches[0].clientX-N.current;N.current=null,!(Math.abs(r)<50)&&S(r<0?1:-1)},K=n=>{n&&v(n)},te=n=>M(r=>{if(r.has(n))return r;const l=new Set(r);return l.add(n),l}),me=n=>{M(r=>{const l=new Set(r);return l.delete(n),l}),k(r=>r+1)},pe=()=>{M(new Set),k(n=>n+1),X.invalidateQueries({queryKey:[Te.mangaPages,h,f.id]})},fe=s.length>0&&A.size>=s.length,ne=n=>b>0?`${n}&n=${b}`:n,ae=n=>e("div",{className:t.deadPage,role:"alert",children:[e("span",{children:["Page ",n+1," failed to load"]}),e("button",{className:t.pageBtn,onClick:()=>me(n),children:[e($,{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($,{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($,{name:"chevron-left",size:14})}),e("button",{className:t.readerIconBtn,disabled:!o,onClick:()=>K(o),"aria-label":"Next chapter",children:e($,{name:"chevron-right",size:14})})]}),R?e("p",{className:t.statusMsg,children:"Failed to load pages. Please try again."}):Y?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."}):fe?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:pe,children:[e($,{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($,{name:"bookmark",size:12})},d),A.has(r)?ae(r):e("img",{className:t.readerPage,src:ne(n),alt:`Page ${r+1}`,loading:r<3?"eager":"lazy",decoding:"async",draggable:!1,onLoad:()=>j.current?.(),onError:()=>te(r)})]},`${r}-${s[r].slice(-32)}`))}):e(ce,{children:[e("div",{ref:ee,className:`${t.pageView} ${U?t.pageViewTall:""}`,onTouchStart:ge,onTouchEnd:he,children:[e("div",{className:t.ribbon,style:W>0?{right:W}:void 0,"aria-hidden":"true",children:e($,{name:"bookmark",size:12})},d),e("button",{className:`${t.tapZone} ${t.tapZoneLeft}`,onClick:()=>S(-1),"aria-label":"Previous page",children:e("span",{className:t.tapChevron,children:e($,{name:"chevron-left",size:16})})}),A.has(d)?ae(d):e("img",{className:t.pageImage,src:ne(m[d]),alt:`Page ${d+1} of ${s.length}`,decoding:"async",draggable:!1,onLoad:()=>L(),onError:()=>te(d)},`${d}-${s[d].slice(-32)}`),e("button",{className:`${t.tapZone} ${t.tapZoneRight}`,onClick:()=>S(1),"aria-label":"Next page",children:e("span",{className:t.tapChevron,children:e($,{name:"chevron-right",size:16})})})]}),e("nav",{className:t.pagination,"aria-label":"Page navigation",children:[e("button",{className:t.pageBtn,disabled:d<=0,onClick:()=>S(-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:()=>S(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"})]})]})},De=800,_e=5e3;function je(){const{provider:h="",id:p=""}=ve(),[f]=be(),y=we(),C=f.get("chapter")||"",v=f.get("rating")||"safe",{hasConsent:u}=Le(),V=u?v:"safe",c=h&&p?Ie(h,p):"",P=h.toLowerCase()==="anilist";g(()=>{P&&p&&y(`/manga/anilist/${encodeURIComponent(p)}`,{replace:!0})},[P,p,y]);const B=$e(!P&&h?h:null,!P&&p?p:null,V,u),i=B.data,{titlePreference:d}=Be(),z=i?Pe(i,d):"Manga",A=Re(c||void 0),M=Me(),b=i&&C?i.chapters.find(a=>a.id===C)??null:null,k=xe(C),N=k!=null&&i?Ee(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,X=k!=null&&!!i&&!N,_=Ne(()=>{const a=(A.data?.progress??[]).find(o=>o.chapterId===C);return a&&a.page>0?a.page:0},[A.data,C]),Y=_>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]),I=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,De))},[b,m]);g(()=>{m()},[C,m]),g(()=>()=>m(),[m]),g(()=>{const a=window.setInterval(()=>{s.current&&m()},_e);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=()=>{oe.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(()=>{}),oe.discord.heartbeat.mutate({sessionId:F.current}).catch(()=>{})};o();const S=window.setInterval(o,6e4);return()=>window.clearInterval(S)},[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:ze.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(ce,{children:[e("button",{className:t.backBtn,onClick:T,children:"Back to title"}),e(ye,{message:X?`Chapter ${k} isn't available from ${h} for this title.`:"Failed to load this chapter. Please try again."})]}):e(Ue,{provider:h,mangaTitle:z,chapter:b,chapters:i.chapters,onBack:T,onOpenChapter:E,initialPage:Y,onProgress:I},b.id)})}export{je 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-DEnbScHS.js";import{B as n,o as g}from"./useMangaLibrary-D3Foz2m_.js";const M=({mangaId:e,title:o,onClose:r})=>{const s=n(),t=g();return a(i,{isOpen:!!e,itemName:o,progressKind:"reading",listLabel:"my reading list",onClose:r,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{i as qe,e as Fe,B as W,U as Ue,t as q,A as Ye}from"./index-D0DdVatn.js";import{I as pe}from"./vendor-icons-DrybRNxP.js";import{P as ve}from"./MediaCard-B1llLoho.js";import{A as xe}from"./AnimeCard-CBxkRKU-.js";import{S as Ve}from"./SkeletonGrid-BDR-fKs1.js";import{M as He}from"./MatureConsentModal-B3u3RgAE.js";import{E as Ke}from"./ErrorMessage-DAxegITP.js";import{u as Qe}from"./useProviders-_ilIsyde.js";import{s as a}from"./Search.module-C_qwCdHS.js";import"./vendor-ui-3qrARCPr.js";import"./useIsMobile-Dvx1uJ82.js";import"./useAnimeInfoData-D_qedrui.js";import"./QueueOptionsButton-Cpm6Jovo.js";import"./playbackCompletion-IPHm9fp5.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([]),[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||J.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),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(!V),className:`${a.filterToggleBtn} ${V?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} ${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: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(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{i as qe,e as Fe,B as W,U as Ue,t as q,A as Ye}from"./index-BP1z44Uk.js";import{I as pe}from"./vendor-icons-DrybRNxP.js";import{P as ve}from"./MediaCard-BODgA6ir.js";import{A as xe}from"./AnimeCard-a7KkMGQv.js";import{S as Ve}from"./SkeletonGrid-w6TsxWu7.js";import{M as He}from"./MatureConsentModal-RZ_j_2BD.js";import{E as Ke}from"./ErrorMessage-DAxegITP.js";import{u as Qe}from"./useProviders-OKWPunZg.js";import{s as a}from"./Search.module-C_qwCdHS.js";import"./vendor-ui-3qrARCPr.js";import"./useIsMobile-Dvx1uJ82.js";import"./useAnimeInfoData-8RI9qMzw.js";import"./QueueOptionsButton-C-y5QFrT.js";import"./playbackCompletion-IPHm9fp5.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([]),[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||J.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),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(!V),className:`${a.filterToggleBtn} ${V?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} ${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: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(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};
|
package/client/dist/assets/{MatureConsentModal-B3u3RgAE.js → MatureConsentModal-RZ_j_2BD.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as n}from"./vendor-core-DfaOB3Rn.js";import{B as i,M as s}from"./index-
|
|
1
|
+
import{u as n}from"./vendor-core-DfaOB3Rn.js";import{B as i,M as s}from"./index-BP1z44Uk.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};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as $,A as k,h as F,T as Re,u as e,g as x,S as H,$ as Ie,L as Y,q as P,N as ze,a as ke}from"./vendor-core-DfaOB3Rn.js";import{I as N}from"./vendor-icons-DrybRNxP.js";import{a as $e,b as Se,f as Le,s as De}from"./vendor-ui-3qrARCPr.js";import{u as re}from"./useIsMobile-Dvx1uJ82.js";import{M as xe}from"./MatureConsentModal-B3u3RgAE.js";import{t as Oe,d as Ae,u as je,e as Fe,f as Ue}from"./index-D0DdVatn.js";const We="_pagination_zelsc_1",Ve="_pageBtn_zelsc_7",Ge="_pageInfo_zelsc_38",Xe="_pagePicker_zelsc_48",Ye="_dropdown_zelsc_52",He="_flipDown_zelsc_68",Ke="_jumpRow_zelsc_73",qe="_jumpInput_zelsc_79",Je="_jumpGo_zelsc_90",Qe="_optionList_zelsc_105",Ze="_optionBtn_zelsc_113",et="_current_zelsc_132",w={pagination:We,pageBtn:Ve,pageInfo:Ge,pagePicker:Xe,dropdown:Ye,flipDown:He,jumpRow:Ke,jumpInput:qe,jumpGo:Je,optionList:Qe,optionBtn:Ze,current:et},vn=({page:t,totalPages:p,canGoNext:c,onChange:l,isLoading:f=!1,variant:g="compact"})=>{const[s,y]=$(!1),[b,_]=$(""),[v,B]=$(0),[C,R]=$(!1),T=k(null),d=k(null),h=k(null);F(()=>{if(!s)return;const r=m=>{T.current&&!T.current.contains(m.target)&&y(!1)},n=m=>{m.key==="Escape"&&y(!1)};return document.addEventListener("pointerdown",r),document.addEventListener("keydown",n),()=>{document.removeEventListener("pointerdown",r),document.removeEventListener("keydown",n)}},[s]),F(()=>{if(!s)return;B(0),R(!1);const r=requestAnimationFrame(()=>{const n=h.current?.getBoundingClientRect(),m=d.current?.getBoundingClientRect();if(!n)return;let M=0;n.right>window.innerWidth-8?M=window.innerWidth-8-n.right:n.left<8&&(M=8-n.left),B(Math.round(M)),m&&m.top<n.height+24&&R(!0)});return()=>cancelAnimationFrame(r)},[s]);const a=p,S=Re(()=>{if(a!==void 0){if(a<=100)return Array.from({length:a},(m,M)=>M+1);const n=new Set([1,a]);for(let m=t-10;m<=t+10;m++)m>=1&&m<=a&&n.add(m);return[...n].sort((m,M)=>m-M)}const r=c?t+1:t;return Array.from({length:r},(n,m)=>m+1)},[a,t,c]),E=r=>{const n=a!==void 0?Math.min(Math.max(1,r),a):Math.max(1,r);y(!1),_(""),n!==t&&l(n)},L=()=>{const r=parseInt(b,10);Number.isNaN(r)||E(r)},D=f||(a!==void 0?t>=a:!c);return e("div",{className:w.pagination,ref:T,children:[e("button",{className:w.pageBtn,onClick:()=>l(t-1),disabled:t<=1||f,"aria-label":"Previous page",children:[e(N,{name:"chevron-left",size:14}),g==="labeled"&&e("span",{children:"Previous"})]}),e("div",{className:w.pagePicker,ref:d,children:[e("button",{className:w.pageBtn,onClick:()=>{_(""),y(r=>!r)},disabled:f,"aria-label":"Jump to page","aria-expanded":s,children:e("span",{className:w.pageInfo,children:["Page ",e("strong",{children:t}),a!==void 0&&` of ${a}`]})}),s&&e("div",{ref:h,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===t?w.current:""}`,onClick:()=>E(r),disabled:r===t,children:r},r))})]})]}),e("button",{className:w.pageBtn,onClick:()=>l(t+1),disabled:D,"aria-label":"Next page",children:[g==="labeled"&&e("span",{children:"Next"}),e(N,{name:"chevron-right",size:14})]})]})},tt="_popupPortal_1d6yy_1",nt="_popupContent_1d6yy_6",ot="_popupBackdrop_1d6yy_31",st="_mobile_1d6yy_38",rt="_header_1d6yy_62",at="_title_1d6yy_67",it="_altTitle_1d6yy_78",ct="_cover_1d6yy_87",lt="_body_1d6yy_97",dt="_metaRow_1d6yy_104",ut="_metaItem_1d6yy_111",pt="_scoreIcon_1d6yy_117",_t="_synopsis_1d6yy_121",mt="_genres_1d6yy_143",gt="_genre_1d6yy_143",ft="_footer_1d6yy_158",ht="_primaryAction_1d6yy_167",yt="_watchBtn_1d6yy_171",vt="_secondaryActions_1d6yy_194",Bt="_watchlistBtn_1d6yy_199",bt="_detailsBtn_1d6yy_200",wt="_active_1d6yy_226",Nt="_loading_1d6yy_237",Ct="_spinner_1d6yy_247",i={popupPortal:tt,popupContent:nt,popupBackdrop:ot,mobile:st,header:rt,title:at,altTitle:it,cover:ct,body:lt,metaRow:dt,metaItem:ut,scoreIcon:pt,synopsis:_t,genres:mt,genre:gt,footer:ft,primaryAction:ht,watchBtn:yt,secondaryActions:vt,watchlistBtn:Bt,detailsBtn:bt,active:wt,loading:Nt,spinner:Ct},Pt=({anchorRect:t,onMouseEnter:p,onMouseLeave:c,onRequestClose:l,children:f})=>{const g=re(),s=x.useMemo(()=>({getBoundingClientRect:()=>t}),[t]),{refs:y,floatingStyles:b}=$e({placement:"right-start",middleware:[Le({fallbackAxisSideDirection:"start"}),De({padding:20})],whileElementsMounted:Se});x.useEffect(()=>{y.setPositionReference(s)},[y,s]),x.useEffect(()=>{if(!g)return;const v=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.body.style.overflow=v}},[g]);const _=e(H,{children:[g&&e("div",{className:i.popupBackdrop,onClick:()=>l?.()}),e("div",{ref:g?void 0:y.setFloating,className:`${i.popupPortal} ${g?i.mobile:""}`,style:g?void 0:b,onMouseEnter:p,onMouseLeave:c,children:e("div",{className:i.popupContent,children:f})})]});return Ie(_,document.body)},Bn=({anchorRect:t,title:p,subtitle:c,cover:l,loading:f,error:g,meta:s=[],genres:y=[],synopsis:b,primaryAction:_,secondaryAction:v,bookmarked:B,bookmarkLabel:C="Watchlist",onToggleBookmark:R,extraActions:T,onMouseEnter:d,onMouseLeave:h,onRequestClose:a})=>{const S=k(!1),E=()=>{S.current=!0,d()},L=()=>{S.current=!1,h()},D=n=>{!n&&!S.current&&h()},r=!!_||!!v||!!T;return e(Pt,{anchorRect:t,onMouseEnter:E,onMouseLeave:L,onRequestClose:a,children:f?e("div",{className:i.loading,children:[e("div",{className:i.spinner}),e("span",{children:"Fetching details..."})]}):g?e("div",{className:i.loading,children:g}):e(H,{children:[p&&e("div",{className:i.header,children:[l&&e("img",{src:l,alt:p,loading:"lazy",decoding:"async",className:i.cover}),e("div",{className:i.title,children:p}),c&&e("div",{className:i.altTitle,children:c})]}),e("div",{className:i.body,children:[s.length>0&&e("div",{className:i.metaRow,children:s.map((n,m)=>e("div",{className:i.metaItem,children:[n.icon&&e(N,{name:n.icon,className:n.accent?i.scoreIcon:void 0,size:14}),e("span",{children:n.label})]},`${n.label}-${m}`))}),y.length>0&&e("div",{className:i.genres,children:y.map(n=>e("span",{className:i.genre,children:n},n))}),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(Y,{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:n=>{n.preventDefault(),n.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(Y,{to:v.to,className:i.detailsBtn,onClick:a,children:[v.icon&&e(N,{name:v.icon,size:12}),e("span",{children:v.label})]})]})]})]})})},Mt=t=>!t||t.trim()===""?!0:t.includes("placeholder");function Tt(t,p){const[c,l]=$(p);return F(()=>{l(p)},[p]),F(()=>{if(!Mt(p)||!t)return;let f=!1;return Oe.data.showMeta.query({id:t}).then(g=>{const s=g?.thumbnail;!f&&s&&s.trim()!==""&&!s.includes("placeholder")&&l(s)}).catch(()=>{}),()=>{f=!0}},[t,p]),{thumbnail:c}}const Et="_cardWrapper_gi35r_1",Rt="_card_gi35r_1",It="_cardButton_gi35r_35",zt="_hoverOverlay_gi35r_60",kt="_matureOverlay_gi35r_81",$t="_posterContainer_gi35r_91",St="_horizontal_gi35r_100",Lt="_posterImg_gi35r_104",Dt="_blurred_gi35r_116",xt="_flat_gi35r_139",Ot="_loaded_gi35r_143",At="_progressSection_gi35r_151",jt="_titleSection_gi35r_158",Ft="_title_gi35r_158",Ut="_titleText_gi35r_177",Wt="_badge_gi35r_189",Vt="_typeBadge_gi35r_200 _badge_gi35r_189",Gt="_epBadge_gi35r_209 _badge_gi35r_189",Xt="_airTime_gi35r_218",Yt="_adultBadge_gi35r_225 _badge_gi35r_189",Ht="_gated_gi35r_238",Kt="_notAiredBadge_gi35r_244 _badge_gi35r_189",qt="_metaRow_gi35r_259",Jt="_metaItem_gi35r_270",Qt="_progressContainer_gi35r_287",Zt="_progressBar_gi35r_295",en="_timestamp_gi35r_302",tn="_removeBtn_gi35r_307",nn="_infoBtn_gi35r_308",on="_mobileBadges_gi35r_359",sn="_mobileBadgeBase_gi35r_366",rn="_mobileType_gi35r_374 _mobileBadgeBase_gi35r_366",an="_mobileEp_gi35r_381 _mobileBadgeBase_gi35r_366",cn="_lowEnd_gi35r_451",o={cardWrapper:Et,card:Rt,cardButton:It,hoverOverlay:zt,matureOverlay:kt,posterContainer:$t,horizontal:St,posterImg:Lt,blurred:Dt,flat:xt,loaded:Ot,progressSection:At,titleSection:jt,title:Ft,titleText:Ut,badge:Wt,typeBadge:Vt,epBadge:Gt,airTime:Xt,adultBadge:Yt,gated:Ht,notAiredBadge:Kt,metaRow:qt,metaItem:Jt,progressContainer:Qt,progressBar:Zt,timestamp:en,removeBtn:tn,infoBtn:nn,mobileBadges:on,mobileBadgeBase:sn,mobileType:rn,mobileEp:an,lowEnd:cn},ln=500,se=20,dn=300;function un(t){const p=k(null),c=k(null),l=k(!1),f=k({x:0,y:0}),g=k(null),s=P(()=>{c.current&&(clearTimeout(c.current),c.current=null)},[]),y=P(()=>{p.current&&(clearTimeout(p.current),p.current=null)},[]),b=P(d=>{p.current&&clearTimeout(p.current),p.current=setTimeout(d,dn)},[]),_=P((d,h=!1)=>{l.current=h,t(d,h)},[t]),v=P((d,h)=>{if(h||d.pointerType==="mouse")return;g.current=d.pointerType,l.current=!1,f.current={x:d.clientX,y:d.clientY};const a=d.currentTarget.getBoundingClientRect();s(),c.current=setTimeout(()=>{c.current=null,_(a,!0)},ln)},[s,_]),B=P(d=>{if(!c.current)return;const h=Math.abs(d.clientX-f.current.x),a=Math.abs(d.clientY-f.current.y);(h>se||a>se)&&s()},[s]),C=P(()=>{s(),g.current=null},[s]),R=P((d,h)=>{d.preventDefault(),d.stopPropagation(),g.current==="touch"?c.current&&(clearTimeout(c.current),c.current=null,_(d.currentTarget.getBoundingClientRect(),!0)):!h&&!l.current&&_(d.currentTarget.getBoundingClientRect())},[_]),T=P(()=>l.current?(l.current=!1,!0):!1,[]);return{longPressFiredRef:l,cancelLongPress:s,clearPopupTimeout:y,schedulePopupClose:b,openViaHold:_,handlePointerDown:v,handlePointerMove:B,handlePointerUpOrCancel:C,handleContextMenu:R,consumeLongPressClick:T}}const X={elements:{poster:{typeBadge:!0,chapterBadge:!0,adultBadge:!0},info:{title:!0,mobileBadges:!0,progress:!0,meta:!0}}},bn=ze(({item:t,linkTo:p,hoverIcon:c,progress:l,showProgress:f=!1,metaRow:g,display:s,layout:y="vertical",onRemove:b,showRemoveButton:_,showInfoButton:v=!1,onOpenDetails:B,renderPopup:C,onPopupHoverIntent:R,rawThumbnail:T,enrichedId:d})=>{const h=ke(),a=re(),{titlePreference:S}=Ae(),{lowEndMode:E}=je(),[L,D]=$(!1),[r,n]=$(!1),{thumbnail:m}=Tt(d,t.thumbnail),[M,K]=$(!1),[q,J]=$(null),Q=u=>{J(u),K(!0)},U=P(()=>{K(!1),J(null)},[]),I=un(u=>{if(B){B(u);return}C&&Q(u)}),W=P(()=>{I.schedulePopupClose(U)},[I,U]),Z=I.clearPopupTimeout,ae=u=>{if(a)return;const oe=u.currentTarget.getBoundingClientRect();if(B){B(oe);return}C&&Q(oe)},ie=()=>{C&&W()},ce=()=>{Z()},le=()=>{C&&W()},de=u=>{I.handlePointerDown(u,z)},ue=u=>{I.handlePointerMove(u)},ee=()=>{I.handlePointerUpOrCancel()},pe=u=>{if(B){u.preventDefault(),u.stopPropagation(),B(u.currentTarget.getBoundingClientRect());return}if(C){I.handleContextMenu(u,z);return}I.handleContextMenu(u,z)},te={...s,elements:{...X.elements,...s?.elements||{},poster:{...X.elements?.poster,...s?.elements?.poster||{}},info:{...X.elements?.info,...s?.elements?.info||{}}}},V=t[S]||t.title,O=te.elements?.poster,A=te.elements?.info,_e=(O?.typeBadge??!0)&&!!t.typeBadge,me=(O?.chapterBadge??!0)&&!!t.chapterBadge,ge=_??O?.removeButton??!!b,fe=O?.adultBadge??!0,he=A?.mobileBadges??!0,ye=A?.progress??!0,ve=A?.meta??!0,Be=f&&!!l&&l.percent>0,ne=!!t.isAdult,{hasConsent:be,grant:we}=Fe(),[Ne,G]=x.useState(!1),j=x.useRef(null),Ce=()=>{we(),G(!1),j.current&&(h(j.current),j.current=null)},z=ne&&!be,Pe=u=>{if(I.consumeLongPressClick()){u.preventDefault(),u.stopPropagation();return}z&&(u.preventDefault(),u.stopPropagation(),j.current=p,G(!0))},Me=c==="book"?e(N,{name:"book",size:28}):c==="play"?e(N,{name:"play",size:28}):c==="info"?e(N,{name:"info-circle",size:28}):e(N,{name:"info-circle",size:28}),Te=P(u=>{u.preventDefault(),u.stopPropagation(),b&&b(t.id)},[b,t.id]),Ee=T?m??t.thumbnail:Ue(m,E?100:150,E?150:200);return e("div",{className:`${o.cardWrapper} ${E?o.lowEnd:""}`,onMouseEnter:()=>{n(!0),R?.(!0),M&&Z()},onMouseLeave:()=>{n(!1),R?.(!1),M&&W()},children:[e(Y,{to:p,className:`${o.card} ${o[y]} ${z?o.cardButton:""}`,onClick:Pe,onContextMenu:pe,onPointerDown:de,onPointerMove:ue,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:V,className:`${o.posterImg} ${L?o.loaded:""} ${z&&!E?o.blurred:""}`,loading:"lazy",decoding:"async",onLoad:()=>D(!0)}),!a&&e(H,{children:[_e&&e("div",{className:o.typeBadge,children:t.typeBadge}),me&&e("div",{className:o.epBadge,children:[t.chapterBadge,t.airMeta&&e("span",{className:o.airTime,children:t.airMeta})]})]}),fe&&ne&&e("div",{className:`${o.adultBadge} ${z?o.gated:""}`,children:"18+"}),t.notAired&&e("div",{className:o.notAiredBadge,children:"NOT AIRED"}),!a&&r&&e("div",{className:o.hoverOverlay,children:Me})]}),ye&&f&&Be&&l&&e("div",{className:o.progressSection,children:[e("div",{className:o.progressContainer,children:e("div",{className:o.progressBar,style:{width:`${l.percent}%`}})}),e("div",{className:o.timestamp,children:l.label})]}),e("div",{className:o.titleSection,children:[a&&he&&e("div",{className:o.mobileBadges,children:[!!t.typeBadge&&e("span",{className:o.mobileType,children:t.typeBadge}),t.chapterBadge&&e("span",{className:o.mobileEp,children:t.chapterBadge})]}),A?.title!==!1&&e("div",{className:o.title,title:V,children:e("span",{className:o.titleText,children:V})}),ve&&g&&e("div",{className:o.metaRow,children:g})]})]}),Ne&&e(xe,{isOpen:!0,showResetHint:!0,onClose:()=>G(!1),onGrant:Ce}),ge&&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:ae,onMouseLeave:ie,"aria-label":"Info",children:e(N,{name:"info",size:11})}),C&&M&&q?C(q,{close:U,onMouseEnter:ce,onMouseLeave:le}):null]})});export{bn as M,vn as P,Bn as a,o as m,i as p};
|
|
1
|
+
import{d as $,A as k,h as F,T as Re,u as e,g as x,S as H,$ as Ie,L as Y,q as P,N as ze,a as ke}from"./vendor-core-DfaOB3Rn.js";import{I as N}from"./vendor-icons-DrybRNxP.js";import{a as $e,b as Se,f as Le,s as De}from"./vendor-ui-3qrARCPr.js";import{u as re}from"./useIsMobile-Dvx1uJ82.js";import{M as xe}from"./MatureConsentModal-RZ_j_2BD.js";import{t as Oe,d as Ae,u as je,e as Fe,f as Ue}from"./index-BP1z44Uk.js";const We="_pagination_zelsc_1",Ve="_pageBtn_zelsc_7",Ge="_pageInfo_zelsc_38",Xe="_pagePicker_zelsc_48",Ye="_dropdown_zelsc_52",He="_flipDown_zelsc_68",Ke="_jumpRow_zelsc_73",qe="_jumpInput_zelsc_79",Je="_jumpGo_zelsc_90",Qe="_optionList_zelsc_105",Ze="_optionBtn_zelsc_113",et="_current_zelsc_132",w={pagination:We,pageBtn:Ve,pageInfo:Ge,pagePicker:Xe,dropdown:Ye,flipDown:He,jumpRow:Ke,jumpInput:qe,jumpGo:Je,optionList:Qe,optionBtn:Ze,current:et},vn=({page:t,totalPages:p,canGoNext:c,onChange:l,isLoading:f=!1,variant:g="compact"})=>{const[s,y]=$(!1),[b,_]=$(""),[v,B]=$(0),[C,R]=$(!1),T=k(null),d=k(null),h=k(null);F(()=>{if(!s)return;const r=m=>{T.current&&!T.current.contains(m.target)&&y(!1)},n=m=>{m.key==="Escape"&&y(!1)};return document.addEventListener("pointerdown",r),document.addEventListener("keydown",n),()=>{document.removeEventListener("pointerdown",r),document.removeEventListener("keydown",n)}},[s]),F(()=>{if(!s)return;B(0),R(!1);const r=requestAnimationFrame(()=>{const n=h.current?.getBoundingClientRect(),m=d.current?.getBoundingClientRect();if(!n)return;let M=0;n.right>window.innerWidth-8?M=window.innerWidth-8-n.right:n.left<8&&(M=8-n.left),B(Math.round(M)),m&&m.top<n.height+24&&R(!0)});return()=>cancelAnimationFrame(r)},[s]);const a=p,S=Re(()=>{if(a!==void 0){if(a<=100)return Array.from({length:a},(m,M)=>M+1);const n=new Set([1,a]);for(let m=t-10;m<=t+10;m++)m>=1&&m<=a&&n.add(m);return[...n].sort((m,M)=>m-M)}const r=c?t+1:t;return Array.from({length:r},(n,m)=>m+1)},[a,t,c]),E=r=>{const n=a!==void 0?Math.min(Math.max(1,r),a):Math.max(1,r);y(!1),_(""),n!==t&&l(n)},L=()=>{const r=parseInt(b,10);Number.isNaN(r)||E(r)},D=f||(a!==void 0?t>=a:!c);return e("div",{className:w.pagination,ref:T,children:[e("button",{className:w.pageBtn,onClick:()=>l(t-1),disabled:t<=1||f,"aria-label":"Previous page",children:[e(N,{name:"chevron-left",size:14}),g==="labeled"&&e("span",{children:"Previous"})]}),e("div",{className:w.pagePicker,ref:d,children:[e("button",{className:w.pageBtn,onClick:()=>{_(""),y(r=>!r)},disabled:f,"aria-label":"Jump to page","aria-expanded":s,children:e("span",{className:w.pageInfo,children:["Page ",e("strong",{children:t}),a!==void 0&&` of ${a}`]})}),s&&e("div",{ref:h,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===t?w.current:""}`,onClick:()=>E(r),disabled:r===t,children:r},r))})]})]}),e("button",{className:w.pageBtn,onClick:()=>l(t+1),disabled:D,"aria-label":"Next page",children:[g==="labeled"&&e("span",{children:"Next"}),e(N,{name:"chevron-right",size:14})]})]})},tt="_popupPortal_1d6yy_1",nt="_popupContent_1d6yy_6",ot="_popupBackdrop_1d6yy_31",st="_mobile_1d6yy_38",rt="_header_1d6yy_62",at="_title_1d6yy_67",it="_altTitle_1d6yy_78",ct="_cover_1d6yy_87",lt="_body_1d6yy_97",dt="_metaRow_1d6yy_104",ut="_metaItem_1d6yy_111",pt="_scoreIcon_1d6yy_117",_t="_synopsis_1d6yy_121",mt="_genres_1d6yy_143",gt="_genre_1d6yy_143",ft="_footer_1d6yy_158",ht="_primaryAction_1d6yy_167",yt="_watchBtn_1d6yy_171",vt="_secondaryActions_1d6yy_194",Bt="_watchlistBtn_1d6yy_199",bt="_detailsBtn_1d6yy_200",wt="_active_1d6yy_226",Nt="_loading_1d6yy_237",Ct="_spinner_1d6yy_247",i={popupPortal:tt,popupContent:nt,popupBackdrop:ot,mobile:st,header:rt,title:at,altTitle:it,cover:ct,body:lt,metaRow:dt,metaItem:ut,scoreIcon:pt,synopsis:_t,genres:mt,genre:gt,footer:ft,primaryAction:ht,watchBtn:yt,secondaryActions:vt,watchlistBtn:Bt,detailsBtn:bt,active:wt,loading:Nt,spinner:Ct},Pt=({anchorRect:t,onMouseEnter:p,onMouseLeave:c,onRequestClose:l,children:f})=>{const g=re(),s=x.useMemo(()=>({getBoundingClientRect:()=>t}),[t]),{refs:y,floatingStyles:b}=$e({placement:"right-start",middleware:[Le({fallbackAxisSideDirection:"start"}),De({padding:20})],whileElementsMounted:Se});x.useEffect(()=>{y.setPositionReference(s)},[y,s]),x.useEffect(()=>{if(!g)return;const v=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.body.style.overflow=v}},[g]);const _=e(H,{children:[g&&e("div",{className:i.popupBackdrop,onClick:()=>l?.()}),e("div",{ref:g?void 0:y.setFloating,className:`${i.popupPortal} ${g?i.mobile:""}`,style:g?void 0:b,onMouseEnter:p,onMouseLeave:c,children:e("div",{className:i.popupContent,children:f})})]});return Ie(_,document.body)},Bn=({anchorRect:t,title:p,subtitle:c,cover:l,loading:f,error:g,meta:s=[],genres:y=[],synopsis:b,primaryAction:_,secondaryAction:v,bookmarked:B,bookmarkLabel:C="Watchlist",onToggleBookmark:R,extraActions:T,onMouseEnter:d,onMouseLeave:h,onRequestClose:a})=>{const S=k(!1),E=()=>{S.current=!0,d()},L=()=>{S.current=!1,h()},D=n=>{!n&&!S.current&&h()},r=!!_||!!v||!!T;return e(Pt,{anchorRect:t,onMouseEnter:E,onMouseLeave:L,onRequestClose:a,children:f?e("div",{className:i.loading,children:[e("div",{className:i.spinner}),e("span",{children:"Fetching details..."})]}):g?e("div",{className:i.loading,children:g}):e(H,{children:[p&&e("div",{className:i.header,children:[l&&e("img",{src:l,alt:p,loading:"lazy",decoding:"async",className:i.cover}),e("div",{className:i.title,children:p}),c&&e("div",{className:i.altTitle,children:c})]}),e("div",{className:i.body,children:[s.length>0&&e("div",{className:i.metaRow,children:s.map((n,m)=>e("div",{className:i.metaItem,children:[n.icon&&e(N,{name:n.icon,className:n.accent?i.scoreIcon:void 0,size:14}),e("span",{children:n.label})]},`${n.label}-${m}`))}),y.length>0&&e("div",{className:i.genres,children:y.map(n=>e("span",{className:i.genre,children:n},n))}),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(Y,{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:n=>{n.preventDefault(),n.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(Y,{to:v.to,className:i.detailsBtn,onClick:a,children:[v.icon&&e(N,{name:v.icon,size:12}),e("span",{children:v.label})]})]})]})]})})},Mt=t=>!t||t.trim()===""?!0:t.includes("placeholder");function Tt(t,p){const[c,l]=$(p);return F(()=>{l(p)},[p]),F(()=>{if(!Mt(p)||!t)return;let f=!1;return Oe.data.showMeta.query({id:t}).then(g=>{const s=g?.thumbnail;!f&&s&&s.trim()!==""&&!s.includes("placeholder")&&l(s)}).catch(()=>{}),()=>{f=!0}},[t,p]),{thumbnail:c}}const Et="_cardWrapper_gi35r_1",Rt="_card_gi35r_1",It="_cardButton_gi35r_35",zt="_hoverOverlay_gi35r_60",kt="_matureOverlay_gi35r_81",$t="_posterContainer_gi35r_91",St="_horizontal_gi35r_100",Lt="_posterImg_gi35r_104",Dt="_blurred_gi35r_116",xt="_flat_gi35r_139",Ot="_loaded_gi35r_143",At="_progressSection_gi35r_151",jt="_titleSection_gi35r_158",Ft="_title_gi35r_158",Ut="_titleText_gi35r_177",Wt="_badge_gi35r_189",Vt="_typeBadge_gi35r_200 _badge_gi35r_189",Gt="_epBadge_gi35r_209 _badge_gi35r_189",Xt="_airTime_gi35r_218",Yt="_adultBadge_gi35r_225 _badge_gi35r_189",Ht="_gated_gi35r_238",Kt="_notAiredBadge_gi35r_244 _badge_gi35r_189",qt="_metaRow_gi35r_259",Jt="_metaItem_gi35r_270",Qt="_progressContainer_gi35r_287",Zt="_progressBar_gi35r_295",en="_timestamp_gi35r_302",tn="_removeBtn_gi35r_307",nn="_infoBtn_gi35r_308",on="_mobileBadges_gi35r_359",sn="_mobileBadgeBase_gi35r_366",rn="_mobileType_gi35r_374 _mobileBadgeBase_gi35r_366",an="_mobileEp_gi35r_381 _mobileBadgeBase_gi35r_366",cn="_lowEnd_gi35r_451",o={cardWrapper:Et,card:Rt,cardButton:It,hoverOverlay:zt,matureOverlay:kt,posterContainer:$t,horizontal:St,posterImg:Lt,blurred:Dt,flat:xt,loaded:Ot,progressSection:At,titleSection:jt,title:Ft,titleText:Ut,badge:Wt,typeBadge:Vt,epBadge:Gt,airTime:Xt,adultBadge:Yt,gated:Ht,notAiredBadge:Kt,metaRow:qt,metaItem:Jt,progressContainer:Qt,progressBar:Zt,timestamp:en,removeBtn:tn,infoBtn:nn,mobileBadges:on,mobileBadgeBase:sn,mobileType:rn,mobileEp:an,lowEnd:cn},ln=500,se=20,dn=300;function un(t){const p=k(null),c=k(null),l=k(!1),f=k({x:0,y:0}),g=k(null),s=P(()=>{c.current&&(clearTimeout(c.current),c.current=null)},[]),y=P(()=>{p.current&&(clearTimeout(p.current),p.current=null)},[]),b=P(d=>{p.current&&clearTimeout(p.current),p.current=setTimeout(d,dn)},[]),_=P((d,h=!1)=>{l.current=h,t(d,h)},[t]),v=P((d,h)=>{if(h||d.pointerType==="mouse")return;g.current=d.pointerType,l.current=!1,f.current={x:d.clientX,y:d.clientY};const a=d.currentTarget.getBoundingClientRect();s(),c.current=setTimeout(()=>{c.current=null,_(a,!0)},ln)},[s,_]),B=P(d=>{if(!c.current)return;const h=Math.abs(d.clientX-f.current.x),a=Math.abs(d.clientY-f.current.y);(h>se||a>se)&&s()},[s]),C=P(()=>{s(),g.current=null},[s]),R=P((d,h)=>{d.preventDefault(),d.stopPropagation(),g.current==="touch"?c.current&&(clearTimeout(c.current),c.current=null,_(d.currentTarget.getBoundingClientRect(),!0)):!h&&!l.current&&_(d.currentTarget.getBoundingClientRect())},[_]),T=P(()=>l.current?(l.current=!1,!0):!1,[]);return{longPressFiredRef:l,cancelLongPress:s,clearPopupTimeout:y,schedulePopupClose:b,openViaHold:_,handlePointerDown:v,handlePointerMove:B,handlePointerUpOrCancel:C,handleContextMenu:R,consumeLongPressClick:T}}const X={elements:{poster:{typeBadge:!0,chapterBadge:!0,adultBadge:!0},info:{title:!0,mobileBadges:!0,progress:!0,meta:!0}}},bn=ze(({item:t,linkTo:p,hoverIcon:c,progress:l,showProgress:f=!1,metaRow:g,display:s,layout:y="vertical",onRemove:b,showRemoveButton:_,showInfoButton:v=!1,onOpenDetails:B,renderPopup:C,onPopupHoverIntent:R,rawThumbnail:T,enrichedId:d})=>{const h=ke(),a=re(),{titlePreference:S}=Ae(),{lowEndMode:E}=je(),[L,D]=$(!1),[r,n]=$(!1),{thumbnail:m}=Tt(d,t.thumbnail),[M,K]=$(!1),[q,J]=$(null),Q=u=>{J(u),K(!0)},U=P(()=>{K(!1),J(null)},[]),I=un(u=>{if(B){B(u);return}C&&Q(u)}),W=P(()=>{I.schedulePopupClose(U)},[I,U]),Z=I.clearPopupTimeout,ae=u=>{if(a)return;const oe=u.currentTarget.getBoundingClientRect();if(B){B(oe);return}C&&Q(oe)},ie=()=>{C&&W()},ce=()=>{Z()},le=()=>{C&&W()},de=u=>{I.handlePointerDown(u,z)},ue=u=>{I.handlePointerMove(u)},ee=()=>{I.handlePointerUpOrCancel()},pe=u=>{if(B){u.preventDefault(),u.stopPropagation(),B(u.currentTarget.getBoundingClientRect());return}if(C){I.handleContextMenu(u,z);return}I.handleContextMenu(u,z)},te={...s,elements:{...X.elements,...s?.elements||{},poster:{...X.elements?.poster,...s?.elements?.poster||{}},info:{...X.elements?.info,...s?.elements?.info||{}}}},V=t[S]||t.title,O=te.elements?.poster,A=te.elements?.info,_e=(O?.typeBadge??!0)&&!!t.typeBadge,me=(O?.chapterBadge??!0)&&!!t.chapterBadge,ge=_??O?.removeButton??!!b,fe=O?.adultBadge??!0,he=A?.mobileBadges??!0,ye=A?.progress??!0,ve=A?.meta??!0,Be=f&&!!l&&l.percent>0,ne=!!t.isAdult,{hasConsent:be,grant:we}=Fe(),[Ne,G]=x.useState(!1),j=x.useRef(null),Ce=()=>{we(),G(!1),j.current&&(h(j.current),j.current=null)},z=ne&&!be,Pe=u=>{if(I.consumeLongPressClick()){u.preventDefault(),u.stopPropagation();return}z&&(u.preventDefault(),u.stopPropagation(),j.current=p,G(!0))},Me=c==="book"?e(N,{name:"book",size:28}):c==="play"?e(N,{name:"play",size:28}):c==="info"?e(N,{name:"info-circle",size:28}):e(N,{name:"info-circle",size:28}),Te=P(u=>{u.preventDefault(),u.stopPropagation(),b&&b(t.id)},[b,t.id]),Ee=T?m??t.thumbnail:Ue(m,E?100:150,E?150:200);return e("div",{className:`${o.cardWrapper} ${E?o.lowEnd:""}`,onMouseEnter:()=>{n(!0),R?.(!0),M&&Z()},onMouseLeave:()=>{n(!1),R?.(!1),M&&W()},children:[e(Y,{to:p,className:`${o.card} ${o[y]} ${z?o.cardButton:""}`,onClick:Pe,onContextMenu:pe,onPointerDown:de,onPointerMove:ue,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:V,className:`${o.posterImg} ${L?o.loaded:""} ${z&&!E?o.blurred:""}`,loading:"lazy",decoding:"async",onLoad:()=>D(!0)}),!a&&e(H,{children:[_e&&e("div",{className:o.typeBadge,children:t.typeBadge}),me&&e("div",{className:o.epBadge,children:[t.chapterBadge,t.airMeta&&e("span",{className:o.airTime,children:t.airMeta})]})]}),fe&&ne&&e("div",{className:`${o.adultBadge} ${z?o.gated:""}`,children:"18+"}),t.notAired&&e("div",{className:o.notAiredBadge,children:"NOT AIRED"}),!a&&r&&e("div",{className:o.hoverOverlay,children:Me})]}),ye&&f&&Be&&l&&e("div",{className:o.progressSection,children:[e("div",{className:o.progressContainer,children:e("div",{className:o.progressBar,style:{width:`${l.percent}%`}})}),e("div",{className:o.timestamp,children:l.label})]}),e("div",{className:o.titleSection,children:[a&&he&&e("div",{className:o.mobileBadges,children:[!!t.typeBadge&&e("span",{className:o.mobileType,children:t.typeBadge}),t.chapterBadge&&e("span",{className:o.mobileEp,children:t.chapterBadge})]}),A?.title!==!1&&e("div",{className:o.title,title:V,children:e("span",{className:o.titleText,children:V})}),ve&&g&&e("div",{className:o.metaRow,children:g})]})]}),Ne&&e(xe,{isOpen:!0,showResetHint:!0,onClose:()=>G(!1),onGrant:Ce}),ge&&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:ae,onMouseLeave:ie,"aria-label":"Info",children:e(N,{name:"info",size:11})}),C&&M&&q?C(q,{close:U,onMouseEnter:ce,onMouseLeave:le}):null]})});export{bn as M,vn as P,Bn as a,o as m,i as p};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as e,S as s,d as y,h as
|
|
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-DrybRNxP.js";import{M as l,S as m,T as g,B as f,z as k,D as x,F as N}from"./usePlaybackEnd-DmvZ__Ut.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};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/PlayerSettings-k4bqwbns.js","assets/vendor-core-DfaOB3Rn.js","assets/vendor-icons-DrybRNxP.js","assets/OptionListMenu-CGazCg0C.js","assets/usePlaybackEnd-DmvZ__Ut.js","assets/index-BP1z44Uk.js","assets/vendor-query-BBT5_sHx.js","assets/index-5x1mF1nD.css","assets/PlayerProvider-pi0at080.js","assets/PlayerProvider-N2pT5gty.css","assets/playbackCompletion-IPHm9fp5.js","assets/usePlaybackEnd-BMf_H2dw.css","assets/PlayerSettings-BXGe3F5k.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{u as t,g as dt,h as F,P as zt,z as jt,d as ae,A as R,q as O,y as Ht,T as Me,o as Yt,a as Xt,c as Jt,_ as Zt,S as ct}from"./vendor-core-DfaOB3Rn.js";import{P as er,a as tr,b as rr,F as nr,s as sr,c as or}from"./PlayerProvider-pi0at080.js";import{u as Rt,b as Tt,a as yt}from"./vendor-query-BBT5_sHx.js";import{p as St,s as ar,C as ir,P as lr,a as cr,b as Ie,c as Ct,f as Nt,d as ur,e as dr,g as mr,r as fr,u as pr,h as hr,i as vr,j as gr,k as yr,l as br,m as Sr,n as be,A as Er,o as wr,R as kr,E as Tr,q as Cr,t as w,v as Mr,w as Rr,x as Nr}from"./usePlaybackEnd-DmvZ__Ut.js";import{I as me}from"./vendor-icons-DrybRNxP.js";import{_ as Pt,S as Ye,i as Pr,q as oe,t as de,A as we,O as Ar,P as Ve,M as mt,e as _r,m as xr,n as Br,o as Lr,p as Dr,d as $r,u as Ir,B as ut,Q as Fr,f as Or}from"./index-BP1z44Uk.js";import{l as Wr,i as Ur,s as Vr}from"./playbackCompletion-IPHm9fp5.js";import{M as Qr}from"./MatureConsentModal-RZ_j_2BD.js";import{u as Kr}from"./useIsMobile-Dvx1uJ82.js";import{s as Ee,Q as Gr}from"./QueueRail-DGFI6xTM.js";import{u as qr,Q as zr}from"./QueueOptionsButton-C-y5QFrT.js";import{u as At}from"./useProviders-OKWPunZg.js";import{A as jr}from"./AnimeMetaDetails-B3-A7O5H.js";import{S as Hr}from"./SynopsisText-B3Sa5pRv.js";import"./vendor-ui-3qrARCPr.js";const Yr="_controlsOverlay_cejny_1",Xr="_hidden_cejny_21",Jr="_topControls_cejny_27",Zr="_backBtn_cejny_47",en="_videoTitleInfo_cejny_67",tn="_animeTitle_cejny_73",rn="_episodeNumber_cejny_83",nn="_bottomControls_cejny_91",sn="_progressBarContainer_cejny_110",on="_progressBar_cejny_110",an="_thumb_cejny_129",ln="_scrubbing_cejny_144",cn="_watchedBar_cejny_148",un="_bufferedBar_cejny_149",dn="_timeBubble_cejny_187",mn="_skipSegment_cejny_221",fn="_bottomControlsRow_cejny_231",pn="_leftControls_cejny_239",hn="_rightControls_cejny_240",vn="_controlBtn_cejny_247",gn="_theaterBtn_cejny_288",yn="_nextEpisodeBtn_cejny_292",bn="_active_cejny_313",Sn="_timeDisplay_cejny_317",En="_skipControls_cejny_325",x={controlsOverlay:Yr,hidden:Xr,topControls:Jr,backBtn:Zr,videoTitleInfo:en,animeTitle:tn,episodeNumber:rn,bottomControls:nn,progressBarContainer:sn,progressBar:on,thumb:an,scrubbing:ln,watchedBar:cn,bufferedBar:un,timeBubble:dn,skipSegment:mn,bottomControlsRow:fn,leftControls:pn,rightControls:hn,controlBtn:vn,theaterBtn:gn,nextEpisodeBtn:yn,active:bn,timeDisplay:Sn,skipControls:En},wn=({player:r,handlers:n,visible:l,skipIntervals:m,showNextEpisodeButton:i,onNextEpisode:o,isTheaterMode:s,onTheaterModeToggle:c,settingsBtnRef:u,timeDisplayRef:f})=>{const{state:k,refs:e,actions:a}=r,{showSettings:A}=k;return t("div",{className:`${x.controlsOverlay} ${l?"":x.hidden} `,"data-speed-boost-ignore":"true",style:{pointerEvents:"none",background:"none",justifyContent:"flex-end"},children:t("div",{className:x.bottomControls,"data-speed-boost-ignore":"true",onClick:h=>h.stopPropagation(),children:[t(er,{classes:{container:x.progressBarContainer,scrubbing:x.scrubbing,timeBubble:x.timeBubble,bar:x.progressBar,buffered:x.bufferedBar,watched:x.watchedBar,thumb:x.thumb},timeLabelRef:f,children:[k.duration>0&&r.state.currentSkipInterval&&t("div",{className:`${x.skipSegment} ${x[r.state.currentSkipInterval.skip_type]} `,style:{left:`${r.state.currentSkipInterval.start_time/k.duration*100}% `,width:`${(r.state.currentSkipInterval.end_time-r.state.currentSkipInterval.start_time)/k.duration*100}% `}}),m.map(h=>{const C=h.start_time/k.duration*100,M=(h.end_time-h.start_time)/k.duration*100;return t("div",{className:`${x.skipSegment} ${x[h.skip_type]} `,style:{left:`${C}% `,width:`${M}% `},title:h.skip_type.toUpperCase()},h.skip_id)})]}),t("div",{className:x.bottomControlsRow,children:[t("div",{className:x.leftControls,children:[t(tr,{className:x.controlBtn}),t(rr,{buttonClassName:x.controlBtn,onExpandedChange:a.setShowVolumeSlider}),t("span",{className:x.timeDisplay,ref:f,children:[a.formatTime(0)," / ",a.formatTime(k.duration)]}),k.currentSkipInterval&&!k.isAutoSkipEnabled&&t("button",{className:x.controlBtn,onClick:()=>{e.videoRef.current&&k.currentSkipInterval&&(e.videoRef.current.currentTime=k.currentSkipInterval.end_time,a.setCurrentSkipInterval(null))},children:["Skip ",k.currentSkipInterval.skip_type==="op"?"Opening":"Ending"]})]}),t("div",{className:x.rightControls,children:[t("div",{className:x.skipControls,children:i&&t("button",{className:x.nextEpisodeBtn,onClick:o,title:"Play next episode",children:"Next EP"})}),t("button",{className:`${x.controlBtn} ${n.isSubtitleActive?x.active:""}`,onClick:n.handleCCToggle,title:n.isSubtitleActive?"Disable Subtitles":"Enable Subtitles","aria-label":"Toggle Subtitles",children:t(me,{name:"closed-captioning",size:22})}),t("button",{ref:u,className:`${x.controlBtn} ${A?x.active:""} `,onClick:()=>a.setShowSettings(!A),"aria-label":"Settings",children:t(me,{name:"cog"})}),t("button",{className:`${x.controlBtn} ${x.theaterBtn} ${s?x.active:""} `,onClick:h=>{h.stopPropagation(),c()},title:s?"Exit Theater Mode":"Theater Mode","aria-label":s?"Exit Theater Mode":"Theater Mode",children:t(me,{name:"tv"})}),t(nr,{className:x.controlBtn})]})]})]})})};function kn(r){const{state:n,refs:l,actions:m}=r,i=c=>{if(!l.videoRef.current)return;m.setActiveSubtitleTrack(c);try{if(c===null||c==="off")localStorage.setItem("playerSubtitlesEnabled","false");else{localStorage.setItem("playerSubtitlesEnabled","true");const f=n.availableSubtitles.find(k=>k.label===c||k.lang===c);f?localStorage.setItem("playerLastSubtitle",ar(f)):localStorage.setItem("playerLastSubtitle",c)}}catch{}let u=!1;Array.from(l.videoRef.current.textTracks).forEach(f=>{const e=c!==null&&c!=="off"&&(f.language===c||f.label===c)&&!u;f.mode=e?"showing":"hidden",e&&(u=!0)})},o=n.activeSubtitleTrack!==null&&n.activeSubtitleTrack!=="off";return{handleSubtitleSelection:i,isSubtitleActive:o,handleCCToggle:()=>{if(!l.videoRef.current)return;if(o){i("off");return}if(n.availableSubtitles.length===0)return;let c=null;try{c=localStorage.getItem("playerLastSubtitle")}catch{}const u=St(n.availableSubtitles,{lastKey:c,enabled:!0});if(u<0)return;const f=n.availableSubtitles[u];i(f.label||f.lang)}}}const Tn=jt(()=>Pt(()=>import("./PlayerSettings-k4bqwbns.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12]))),Cn=({player:r,isAutoplayEnabled:n,onAutoplayChange:l,showNextEpisodeButton:m,onNextEpisode:i,videoSources:o,selectedSource:s,selectedLink:c,onSourceChange:u,loadingVideo:f,skipIntervals:k,animeTitle:e,episodeNumber:a,isTheaterMode:A,onTheaterModeToggle:h,anime4kEnabled:C,onAnime4kToggle:M,anime4kSupported:N,anime4kProfile:B,onAnime4kProfileChange:y,anime4kInitializing:p,anime4kError:P,videoDelayEnabled:d,onVideoDelayToggle:S,videoDelayMs:_,onVideoDelayChange:z,onCalibrateAvSync:W,fallbackChoice:H,onFallbackChoiceChange:j,ambientSettings:D,onAmbientChange:L,children:K,overlays:U,isInteractingExtra:b=!1,className:g,hideChrome:T=!1})=>{const{state:E,actions:Y}=r,{showSettings:X}=E,{setShowSettings:V}=Y,Q=kn(r),Z=dt.useRef(null),Se=dt.useRef(null),Ae=dt.useRef(null);F(()=>{const q=he=>{Z.current&&!Z.current.contains(he.target)&&Se.current&&!Se.current.contains(he.target)&&X&&V(!1)};return X&&document.addEventListener("mousedown",q),()=>{document.removeEventListener("mousedown",q)}},[X,V]);const Re=E.showControls||X||E.isScrubbing,ee=t(cr,{visible:Re,title:e,episode:a?`Episode ${a}`:void 0,onBack:()=>window.history.back(),classes:{overlay:x.controlsOverlay,hidden:x.hidden,top:x.topControls,backBtn:x.backBtn,titleInfo:x.videoTitleInfo,title:x.animeTitle,episode:x.episodeNumber}}),G=!f&&!E.isBuffering&&E.duration>0?t(ir,{}):null,ke=t(wn,{player:r,handlers:Q,visible:Re,skipIntervals:k,showNextEpisodeButton:m,onNextEpisode:i,isTheaterMode:A,onTheaterModeToggle:h,settingsBtnRef:Se,timeDisplayRef:Ae}),_e=t(zt,{fallback:null,children:t(Tn,{ref:Z,isOpen:X,onClose:()=>V(!1),videoSources:o,currentSource:s,currentLink:c,onSourceChange:u,subtitles:E.availableSubtitles,activeSubtitleTrack:E.activeSubtitleTrack,onSubtitleChange:Q.handleSubtitleSelection,subtitleSettings:{fontSize:E.subtitleFontSize,position:E.subtitlePosition,bgOpacity:E.subtitleBgOpacity,bgColor:E.subtitleBgColor,textColor:E.subtitleTextColor,edge:E.subtitleEdge,bold:E.subtitleBold},onSubtitleSettingsChange:Y.setSubtitleStyle,useNativeControls:E.useNativeControls,onNativeControlsToggle:Y.setUseNativeControls,anime4kEnabled:C,onAnime4kToggle:M,anime4kSupported:N,anime4kProfile:B,onAnime4kProfileChange:y,anime4kInitializing:p,anime4kError:P,videoDelayEnabled:d,onVideoDelayToggle:S,videoDelayMs:_,onVideoDelayChange:z,onCalibrateAvSync:W,isAutoSkipEnabled:E.isAutoSkipEnabled,onAutoSkipChange:q=>{Y.setIsAutoSkipEnabled(q);try{localStorage.setItem("autoSkipEnabled",q.toString())}catch{}},isAutoplayEnabled:n,onAutoplayChange:l,fallbackChoice:H,onFallbackChoiceChange:j,isTheaterMode:A,ambientSettings:D,onAmbientChange:L})}),te=X?t("div",{"data-speed-boost-ignore":"true",onClick:q=>q.stopPropagation(),children:_e}):null;return t(lr,{engine:r.engine,topBar:ee,centerControls:G,bottomBar:!f&&E.duration>0?ke:null,settingsPanel:te,overlays:U,isInteracting:b||E.showSettings||E.showVolumeSlider,nativeControls:E.useNativeControls,className:g,chromeDisabled:T,children:K})},Mn=({count:r=3})=>t("section",{className:Ee.section,children:[t("div",{className:Ee.header,children:t("button",{className:Ee.headerToggle,disabled:!0,children:[t("span",{className:Ee.title,children:t(Ye,{width:"60px",height:"1.2rem",variant:"text"})}),t(me,{name:"chevron-down",style:{opacity:.3}})]})}),t("div",{className:Ee.list,children:Array.from({length:r}).map((n,l)=>t("div",{className:Ee.item,style:{pointerEvents:"none"},children:[t("div",{className:Ee.dragHandle,style:{opacity:.2},children:t(Ye,{width:"16px",height:"16px",variant:"rectangular"})}),t("div",{className:Ee.thumbnail,style:{overflow:"hidden",background:"transparent"},children:t(Ye,{width:"100%",height:"100%",variant:"rectangular"})}),t("div",{className:Ee.meta,children:[t(Ye,{width:"80%",height:"1.2rem",variant:"text",className:Ee.metaGap}),t(Ye,{width:"40%",height:"0.8rem",variant:"rectangular",style:{borderRadius:"var(--radius-sm)"}})]})]},l))})]}),Rn={soft:"Softsub",hard:"Hardsub",mixed:"Mixed"},Nn={direct:"Direct",embed:"Embed",cookie:"Needs cookie"},Pn=["direct","cookie","embed"],An=({selectedProvider:r,onProviderChange:n,isAdult:l,options:m})=>{const o=(m&&m.length>0?m:[]).filter(s=>s.mature===(l===!0));return t("div",{className:Ie.providerSelectContainer,children:[t("h4",{children:"Provider"}),t("select",{className:Ie.providerSelect,value:r,onChange:s=>n(s.currentTarget.value),children:Pn.map(s=>{const c=o.filter(u=>(u.tier??"direct")===s);return c.length===0?null:t("optgroup",{label:Nn[s],children:c.map(u=>t("option",{value:u.id,children:u.sub?`${u.label} (${Rn[u.sub]})`:u.label},u.id))},s)})})]})},_n=({videoSources:r,selectedSource:n,selectedLink:l,onSourceChange:m,onLinkChange:i})=>{const o=Array.isArray(r)?r:[];if(o.length===0)return null;const s=n?.type==="iframe"&&(n.links?.length??0)>1;return t("div",{className:Ie.sourceSelectionContainer,children:[t("h4",{children:"Source"}),t("div",{className:Ie.sourceButtons,children:o.map((c,u)=>t("button",{className:`${Ie.sourceButton} ${n?.sourceName===c.sourceName?Ie.active:""} `,onClick:()=>m(c),children:c.sourceName},`${c.sourceName}-${u}`))}),s&&t("select",{className:Ie.sourceSelect,"aria-label":"Fallback embed quality",value:l?.link??n.links[0]?.link??"",onChange:c=>{const u=n.links.find(f=>f.link===c.currentTarget.value);u&&i(u)},children:n.links.map(c=>t("option",{value:c.link,children:c.resolutionStr},c.link))})]})},xn=dt.memo(_n,(r,n)=>r.selectedSource?.sourceName===n.selectedSource?.sourceName&&r.selectedLink?.link===n.selectedLink?.link&&r.videoSources===n.videoSources),Bn={low:{sd:1.5,hd:1.3,fhd:1.25},balanced:{sd:2,hd:1.5,fhd:1.25},high:{sd:2.5,hd:2,fhd:1.5},denoise:{sd:1.5,hd:1.5,fhd:1.5}},Ln={low:"ModeB",balanced:"ModeA",high:"ModeAA",denoise:"ModeC"},Dn=5,$n=15e3,In=`
|
|
3
|
+
@group(0) @binding(0) var extTex: texture_external;
|
|
4
|
+
@group(0) @binding(1) var extSamp: sampler;
|
|
5
|
+
struct VSOut {
|
|
6
|
+
@builtin(position) pos: vec4f,
|
|
7
|
+
@location(0) uv: vec2f,
|
|
8
|
+
};
|
|
9
|
+
@vertex
|
|
10
|
+
fn vs(@builtin(vertex_index) idx: u32) -> VSOut {
|
|
11
|
+
var positions = array<vec2f, 6>(
|
|
12
|
+
vec2f(-1.0, -1.0), vec2f(1.0, -1.0), vec2f(-1.0, 1.0),
|
|
13
|
+
vec2f(-1.0, 1.0), vec2f(1.0, -1.0), vec2f(1.0, 1.0)
|
|
14
|
+
);
|
|
15
|
+
var uvs = array<vec2f, 6>(
|
|
16
|
+
vec2f(0.0, 1.0), vec2f(1.0, 1.0), vec2f(0.0, 0.0),
|
|
17
|
+
vec2f(0.0, 0.0), vec2f(1.0, 1.0), vec2f(1.0, 0.0)
|
|
18
|
+
);
|
|
19
|
+
var out: VSOut;
|
|
20
|
+
out.pos = vec4f(positions[idx], 0.0, 1.0);
|
|
21
|
+
out.uv = uvs[idx];
|
|
22
|
+
return out;
|
|
23
|
+
}
|
|
24
|
+
@fragment
|
|
25
|
+
fn fs(@location(0) uv: vec2f) -> @location(0) vec4f {
|
|
26
|
+
return textureSampleBaseClampToEdge(extTex, extSamp, uv);
|
|
27
|
+
}
|
|
28
|
+
`;function Fn({videoRef:r,canvasRef:n,profile:l="balanced",delayMs:m=0}){const[i,o]=ae(!1),[s,c]=ae(()=>{try{return localStorage.getItem("anime4kEnabled")==="true"}catch{return!1}}),[u,f]=ae(!1),[k,e]=ae(null),[a,A]=ae(0),h=R(0),C=R(null),M=R(null),N=R(null),B=R(null),y=R(null),p=R(null),P=R(null),d=R(null),S=R(null),_=R(!1),z=R(-1),W=R(0),H=R(m);H.current=m;const j=R([]),D=R(!1),L=R(!1),K=R(!1),U=R(null),b=R(-1),g=R(-1),T=R(!1),E=R(0);F(()=>{async function V(){if(typeof navigator>"u"||!navigator.gpu){o(!1);return}try{const Q=await navigator.gpu.requestAdapter();o(!!Q)}catch{o(!1)}}V()},[]),F(()=>{if(!s||!i)return;let V=!1;const Q=++h.current,Z=G=>{if(G)try{G.close()}catch{}},Se=()=>{for(const G of j.current)Z(G.bitmap);j.current=[]},Ae=G=>Math.max(8,Math.min(40,Math.ceil(G/16.7)+4));function Re(){S.current!==null&&(cancelAnimationFrame(S.current),S.current=null)}async function ee(){let G=r.current;const ke=n.current;if(!G||!ke||h.current!==Q)return;const _e=performance.now()+$n;for(;(!G||G.videoWidth===0)&&performance.now()<_e;){if(await new Promise(le=>requestAnimationFrame(le)),V||h.current!==Q)return;G=r.current}if(!G||G.videoWidth===0){!V&&h.current===Q&&(e("Timed out waiting for video metadata"),f(!1),c(!1));return}const te=G.videoWidth,q=G.videoHeight,he=Math.max(te,q),ft=window.innerWidth,xe=window.innerHeight,Je=Math.max(ft,xe),Ze=he<Je?Je/he:1,Qe=Bn[l],pt=he<=480?Qe.sd:he<=720?Qe.hd:he<=1080?Qe.fhd:1,ie=Math.min(pt,Ze);ke.width=Math.round(te*ie),ke.height=Math.round(q*ie),f(!0),e(null),W.current=0,z.current=-1,b.current=-1,g.current=-1,T.current=!1,E.current=0,Se(),_.current=!1;try{let le=function(){V||h.current!==Q||(Re(),S.current=requestAnimationFrame(()=>{at()}))};const{ModeA:ht,ModeB:Te,ModeC:et,ModeAA:Ke}=await Pt(async()=>{const{ModeA:I,ModeB:re,ModeC:fe,ModeAA:ce}=await import("./index-BOKlZEHq.js").then(ue=>ue.i);return{ModeA:I,ModeB:re,ModeC:fe,ModeAA:ce}},[]);if(V||h.current!==Q)return;if(!navigator.gpu)throw new Error("WebGPU not available");const tt=await navigator.gpu.requestAdapter();if(V||h.current!==Q)return;if(!tt)throw new Error("No GPU adapter found");const $=await tt.requestDevice();if(!$)throw new Error("Failed to get GPU device");if(V||h.current!==Q){$.destroy();return}C.current=$;const Ne=ke.getContext("webgpu");if(!Ne)throw new Error("Failed to get WebGPU context");M.current=Ne;const Ge=navigator.gpu.getPreferredCanvasFormat();Ne.configure({device:$,format:Ge,alphaMode:"premultiplied"});const ve=$.createTexture({size:[te,q],format:"rgba16float",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),rt=Ln[l],Fe=Math.round(te*ie),Oe=Math.round(q*ie),qe=(()=>{switch(rt){case"ModeB":return new Te({device:$,inputTexture:ve,nativeDimensions:{width:te,height:q},targetDimensions:{width:Fe,height:Oe}});case"ModeC":return new et({device:$,inputTexture:ve,nativeDimensions:{width:te,height:q},targetDimensions:{width:Fe,height:Oe}});case"ModeAA":return new Ke({device:$,inputTexture:ve,nativeDimensions:{width:te,height:q},targetDimensions:{width:Fe,height:Oe}});default:return new ht({device:$,inputTexture:ve,nativeDimensions:{width:te,height:q},targetDimensions:{width:Fe,height:Oe}})}})(),Be=qe.getOutputTexture(),ze=$.createSampler({magFilter:"linear",minFilter:"linear"}),nt=$.createShaderModule({code:`
|
|
29
|
+
@group(0) @binding(0) var tex: texture_2d<f32>;
|
|
30
|
+
@group(0) @binding(1) var samp: sampler;
|
|
31
|
+
struct VertexOutput {
|
|
32
|
+
@builtin(position) pos: vec4f,
|
|
33
|
+
@location(0) uv: vec2f,
|
|
34
|
+
}
|
|
35
|
+
@vertex
|
|
36
|
+
fn vs(@builtin(vertex_index) idx: u32) -> VertexOutput {
|
|
37
|
+
var positions = array<vec2f, 6>(
|
|
38
|
+
vec2f(-1.0, -1.0), vec2f(1.0, -1.0), vec2f(-1.0, 1.0),
|
|
39
|
+
vec2f(-1.0, 1.0), vec2f(1.0, -1.0), vec2f(1.0, 1.0)
|
|
40
|
+
);
|
|
41
|
+
var uvs = array<vec2f, 6>(
|
|
42
|
+
vec2f(0.0, 1.0), vec2f(1.0, 1.0), vec2f(0.0, 0.0),
|
|
43
|
+
vec2f(0.0, 0.0), vec2f(1.0, 1.0), vec2f(1.0, 0.0)
|
|
44
|
+
);
|
|
45
|
+
var out: VertexOutput;
|
|
46
|
+
out.pos = vec4f(positions[idx], 0.0, 1.0);
|
|
47
|
+
out.uv = uvs[idx];
|
|
48
|
+
return out;
|
|
49
|
+
}
|
|
50
|
+
@fragment
|
|
51
|
+
fn fs(@location(0) uv: vec2f) -> @location(0) vec4f {
|
|
52
|
+
return textureSample(tex, samp, uv);
|
|
53
|
+
}
|
|
54
|
+
`}),Le=$.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),De=$.createRenderPipeline({layout:$.createPipelineLayout({bindGroupLayouts:[Le]}),vertex:{module:nt,entryPoint:"vs"},fragment:{module:nt,entryPoint:"fs",targets:[{format:Ge}]},primitive:{topology:"triangle-list"}}),st=$.createBindGroup({layout:Le,entries:[{binding:0,resource:Be.createView()},{binding:1,resource:ze}]});try{const I=$.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,externalTexture:{}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),re=$.createShaderModule({code:In}),fe=$.createRenderPipeline({layout:$.createPipelineLayout({bindGroupLayouts:[I]}),vertex:{module:re,entryPoint:"vs"},fragment:{module:re,entryPoint:"fs",targets:[{format:"rgba16float"}]},primitive:{topology:"triangle-list"}});U.current={pipeline:fe,layout:I,inputView:ve.createView()}}catch{U.current=null}N.current=qe,B.current=ve,y.current=Be,p.current=De,P.current=ze,d.current=Le,L.current=!1,K.current=!1;async function ot(){const I=U.current;if(!I||L.current)return!1;const re=r.current;if(!re)return!1;const fe=!K.current;fe&&$.pushErrorScope("validation");try{const ce=$.importExternalTexture({source:re}),ue=$.createBindGroup({layout:I.layout,entries:[{binding:0,resource:ce},{binding:1,resource:ze}]}),pe=$.createCommandEncoder(),ge=pe.beginRenderPass({colorAttachments:[{view:I.inputView,loadOp:"load",storeOp:"store"}]});ge.setPipeline(I.pipeline),ge.setBindGroup(0,ue),ge.draw(6),ge.end(),$.queue.submit([pe.finish()])}catch{return L.current=!0,U.current=null,!1}if(fe){const ce=await $.popErrorScope().catch(()=>null);if(ce)return console.warn("[anime4k] blit probe failed:",ce.message),L.current=!0,U.current=null,!1;K.current=!0}return!0}f(!1);async function at(){if(V||h.current!==Q||!Ne)return;const I=r.current;if(!I||I.videoWidth===0){le();return}if(I!==G||I.videoWidth!==te||I.videoHeight!==q){A(ue=>ue+1);return}if(I.paused||I.ended||document.hidden||I.readyState<HTMLMediaElement.HAVE_CURRENT_DATA){le();return}const re=I.getVideoPlaybackQuality().totalVideoFrames;if(re===g.current){le();return}if(_.current){le();return}const fe=I.currentTime;(I.seeking||b.current>=0&&Math.abs(fe-b.current)>.5)&&(Se(),T.current=!1,E.current=0,g.current=-1),b.current=fe;const ce=Math.max(0,H.current||0);ce>E.current&&(T.current=!1),_.current=!0;try{const ue=performance.now();let pe=null,ge=!1;if(ce<=0){j.current.length>0&&Se(),T.current=!1,E.current=0;let ye=!1;if(!D.current)try{$.queue.copyExternalImageToTexture({source:I},{texture:ve},[te,q]),g.current=re,ye=!0}catch(ne){if(ne instanceof TypeError)D.current=!0;else throw ne}if(!ye&&!L.current&&U.current&&await ot()&&(g.current=re,ye=!0),!ye){const ne=await createImageBitmap(I);g.current=re,$.queue.copyExternalImageToTexture({source:ne},{texture:ve},[te,q]),Z(ne)}}else{const ye=await createImageBitmap(I);g.current=re;const ne=j.current;ne.push({bitmap:ye,capture:ue});const it=Ae(ce);for(;ne.length>it;)Z(ne.shift()?.bitmap);let Ue=-1;for(let se=ne.length-1;se>=0;se--)if(ue-ne[se].capture>=ce){Ue=se;break}if(Ue!==-1){for(let He=0;He<Ue;He++)Z(ne.shift()?.bitmap);const se=ne.shift();se?(pe=se.bitmap,T.current=!0,E.current=ce):(pe=ye,ge=!0)}else if(!T.current)pe=ye,ge=!0;else{const se=ne.shift();pe=se?se.bitmap:ye,se||(ge=!0)}if(!pe){_.current=!1,le();return}$.queue.copyExternalImageToTexture({source:pe},{texture:ve},[te,q]),ge||Z(pe)}const je=$.createCommandEncoder();await qe.pass(je);const We=je.beginRenderPass({colorAttachments:[{view:Ne.getCurrentTexture().createView(),clearValue:{r:0,g:0,b:0,a:1},loadOp:"clear",storeOp:"store"}]});We.setPipeline(De),We.setBindGroup(0,st),We.draw(6),We.end(),$.queue.submit([je.finish()]),z.current=re,W.current=0,$.queue.onSubmittedWorkDone().then(()=>{h.current===Q&&(_.current=!1)})}catch(ue){if(_.current=!1,W.current+=1,W.current>=Dn&&!V&&h.current===Q){console.error(ue),e(ue instanceof Error?ue.message:"Render error"),c(!1);return}}le()}le()}catch(le){!V&&h.current===Q&&(M.current?.unconfigure(),C.current?.destroy(),C.current=null,M.current=null,e(le instanceof Error?le.message:"Failed to initialize upscaler"),f(!1),c(!1))}}return ee(),()=>{V=!0,h.current+=1,Re(),Se(),M.current?.unconfigure(),B.current&&(B.current.destroy(),B.current=null),y.current&&(y.current.destroy(),y.current=null),C.current&&(C.current.destroy(),C.current=null),N.current=null,p.current=null,P.current=null,d.current=null,U.current=null,M.current=null,_.current=!1}},[s,i,r,n,l,a]);const Y=O(V=>{c(V);try{localStorage.setItem("anime4kEnabled",String(V))}catch{}},[]),X=O(()=>{c(V=>{const Q=!V;try{localStorage.setItem("anime4kEnabled",String(Q))}catch{}return Q})},[]);return{isWebGPUSupported:i,isEnabled:s,isInitializing:u,error:k,toggle:X,setEnabled:Y}}function On({videoRef:r,episodeKey:n,isEnabled:l,isSupported:m,mediaReady:i,isIframeSource:o,setEnabled:s}){const c=R(null),u=R(!1),f=R(!1),k=R(s);k.current=s,F(()=>{const e=c.current;c.current=n,!(e===null||e===n)&&(!l||!m||(u.current=!0,f.current=!1,k.current(!1)))},[n,l,m]),F(()=>{if(!u.current)return;if(l){f.current&&(u.current=!1);return}if(f.current=!0,!i)return;if(o){u.current=!1,k.current(!0);return}const e=r.current;if(!e)return;let a,A=!1;const h=()=>{A||(A=!0,u.current=!1,k.current(!0))};if(e.readyState>=2)return a=window.setTimeout(h,500),()=>window.clearTimeout(a);const C=()=>{window.setTimeout(h,500)};return e.addEventListener("canplay",C,{once:!0}),e.addEventListener("playing",C,{once:!0}),a=window.setTimeout(h,5e3),()=>{window.clearTimeout(a),e.removeEventListener("canplay",C),e.removeEventListener("playing",C)}},[l,i,o,r])}const Wn=()=>localStorage.getItem("preferredMode")==="dub"?"dub":"sub",Un=/^[a-z0-9-]+$/i,_t=r=>r?"preferredProviderMature":"preferredProvider",xt=r=>{const n=localStorage.getItem(_t(r));return n&&Un.test(n)?n:null},Bt=(r,n)=>{localStorage.setItem(_t(n),r)},Vn=()=>xt(!1)??"megaplay",Qn=()=>({showMeta:{},episodes:[],watchedEpisodes:[],watchlistStatus:null,showCombinedDetails:!1,currentMode:Wn(),inWatchlist:!1,videoSources:[],selectedSource:null,selectedLink:null,isAutoplayEnabled:Wr(),showResumeModal:!0,resumeTime:0,resumeDuration:0,skipIntervals:[],selectedProvider:Vn(),loadingShowData:!0,loadingVideo:!1,error:null,showCookieModal:!1,cookieProvider:null});function Kn(r,n){switch(n.type){case"SET_STATE":return{...r,...n.payload};case"SET_MODE":return{...r,currentMode:n.payload,videoSources:[],selectedSource:null,selectedLink:null};case"SET_PROVIDER":return{...r,selectedProvider:n.payload};default:return r}}async function Mt(r,n,l,m,i=!1){if(!r||!n)throw new Error("Missing params");try{const[o,s,c,u]=await Promise.all([de.data.video.query({showId:r,episodeNumber:n,mode:l.currentMode,provider:l.selectedProvider}).catch(y=>{const p=y.data?.cause;return y.message==="AUTH_REQUIRED"&&p?.provider==="mkissa"&&m({type:"SET_STATE",payload:{showCookieModal:!0,cookieProvider:"mkissa"}}),null}),de.progress.getEpisode.query({showId:r,episodeNumber:n}).catch(()=>null),de.settings.getByKey.query({key:"preferredSource"}).catch(()=>null),de.data.skipTimes.query({showId:r,episodeNumber:n}).catch(()=>[])]),f=c?.value,k=o?.filter(y=>{const p=y.sourceName.toLowerCase();return l.currentMode==="dub"?p.includes("eng")||p.includes("dub"):p.includes("jpn")||p.includes("sub")||!p.includes("eng")&&!p.includes("dub")})??[],e=k.length>0?k:o??[];let a=e.length>0?e[0]:null;if(f){const y=e.find(p=>p.sourceName===f);y&&(a=y)}const A=a&&a.links.length>0?a.links.sort((y,p)=>(parseInt(p.resolutionStr)||0)-(parseInt(y.resolutionStr)||0))[0]:null,h=s?.currentTime||0,C=s?.duration||0,M=h,B=(Array.isArray(u)?u:u?.results||[]).map(y=>({skip_id:y.skip_id||"",skip_type:y.skip_type||"",start_time:y.interval?.start_time??y.start_time??0,end_time:y.interval?.end_time??y.end_time??0})).filter(y=>y.end_time>0);return(!o||o.length===0)&&(i||we.error(`No video sources found for ${l.selectedProvider}`)),{videoSources:o,selectedSource:a,selectedLink:A,resumeTime:M,resumeDuration:C,showResumeModal:M>5&&a?.type!=="iframe",skipIntervals:B,fetchedEpisodeNumber:n}}catch(o){const s=o;if(s.message==="AUTH_REQUIRED")return m({type:"SET_STATE",payload:{showCookieModal:!0,cookieProvider:s.provider}}),{videoSources:[],selectedSource:null,selectedLink:null,resumeTime:0,resumeDuration:0,showResumeModal:!1,skipIntervals:[],fetchedEpisodeNumber:n};throw o}}const Gn=(r,n,l,m)=>{const[i,o]=Ht(Kn,l,b=>({...Qn(),showMeta:b?.name?{name:b.name,thumbnail:b.thumbnail,nativeName:b.nativeName,englishName:b.englishName,names:{romaji:b.name||b.englishName,english:b.englishName||b.name,native:b.nativeName}}:{}})),s=Rt(),c=Pr(),u=R(null),f=R(null),{options:k}=At(),e=Me(()=>k.filter(b=>(b.kind??"anime")==="anime"),[k]),a=n||i.initialEpisode,A=R(a);F(()=>{A.current!==a&&(A.current=a,o({type:"SET_STATE",payload:{selectedSource:null,selectedLink:null}}))},[a,o]),F(()=>{r&&/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(r)&&i.selectedProvider!=="animepahe"&&u.current!==r&&(u.current=r,o({type:"SET_PROVIDER",payload:"animepahe"}))},[r,i.selectedProvider]);const{data:h,isLoading:C,error:M}=qr(r),{data:N}=Tt({queryKey:[oe.playerData,r,i.currentMode,i.selectedProvider],queryFn:async()=>{if(!r)throw new Error("No showId");const b=async()=>{try{const X=await de.data.episodes.query({showId:r,mode:i.currentMode,provider:i.selectedProvider}).catch(()=>null);if(X?.episodes?.length)return X}catch{}return null},[g,T,E]=await Promise.all([b(),de.watchlist.check.query({showId:r}).catch(()=>({inWatchlist:!1,status:null})),de.progress.getWatchedEpisodes.query({showId:r}).catch(()=>[])]),Y=g?.episodes?g.episodes.sort((X,V)=>parseFloat(X)-parseFloat(V)):[];return{description:g?.description||"",episodes:Y,inWatchlist:T.inWatchlist,watchlistStatus:T.status??null,watchedEpisodes:E}},enabled:!!r});F(()=>{!n&&N?.episodes&&N.episodes.length>0&&!n&&o({type:"SET_STATE",payload:{initialEpisode:N.episodes[0]}})},[N,n]),F(()=>{if(h?.isAdult===void 0||f.current===r)return;const b=h.isAdult===!0,g=e.filter(E=>E.mature===b);if(g.length===0||e.find(E=>E.id===i.selectedProvider)?.mature===b)return;const T=xt(b);f.current=r??null,o({type:"SET_PROVIDER",payload:g.find(E=>E.id===T)?.id??g[0].id})},[h?.isAdult,i.selectedProvider,r,e]),F(()=>{if(!r||!/^dango-mt-\d+$/.test(r)||f.current===`temp:${r}`)return;const b=h?.provider;b&&(f.current=`temp:${r}`,b!==i.selectedProvider&&o({type:"SET_PROVIDER",payload:b}))},[r,h,i.selectedProvider]);const{data:B,isLoading:y,error:p}=Tt({queryKey:[oe.videoSources,r,a,i.selectedProvider,i.currentMode],queryFn:()=>Mt(r,a,i,o),enabled:!!r&&!!a&&!(i.showMeta?.isAdult===!0&&!m?.hasMatureConsent)}),{mutateAsync:P}=yt({mutationFn:async({wasIn:b,showMeta:g})=>{if(!r)throw new Error("Missing showId");if(b)await de.watchlist.remove.mutate({id:r});else{const T=g.name||g.names?.romaji;if(!T)throw new Error("Missing show name");await de.watchlist.add.mutate({id:r,name:T,thumbnail:g.thumbnail,nativeName:g.names?.native,englishName:g.names?.english,type:g.type,isAdult:g.isAdult})}return!b},onSuccess:b=>{we.success(b?"Added to watchlist":"Removed from watchlist"),s.invalidateQueries({queryKey:[oe.playerData,r]}),s.invalidateQueries({queryKey:[oe.showData,r]}),s.invalidateQueries({queryKey:[oe.watchlist]})},onError:b=>we.error(b instanceof Error?b.message:"Failed to update watchlist")}),d=O(async()=>{!r||!h||await P({wasIn:!!N?.inWatchlist,showMeta:h})},[r,h,N?.inWatchlist,P]),S=O(async b=>{try{await de.settings.set.mutate({key:"preferredSource",value:b})}catch(g){console.error(g)}},[]),{mutateAsync:_,isPending:z}=yt({mutationFn:async({status:b})=>{if(!r)throw new Error("Missing showId");if(N?.inWatchlist)return await de.watchlist.setStatus.mutate({id:r,status:b}),b;const g=h,T=g?.name||g?.names?.romaji;if(!g||!T)throw new Error("Missing show name");return await de.watchlist.add.mutate({id:r,name:T,thumbnail:g.thumbnail,nativeName:g.names?.native,englishName:g.names?.english,type:g.type,isAdult:g.isAdult,status:b}),b},onSuccess:b=>{o({type:"SET_STATE",payload:{inWatchlist:!0,watchlistStatus:b}}),we.success(`Moved to ${b}`),s.invalidateQueries({queryKey:[oe.showData,r]}),s.invalidateQueries({queryKey:[oe.watchlist]}),s.invalidateQueries({queryKey:[oe.continueWatching]})},onError:()=>we.error("Failed to update watchlist status")}),W=O(async()=>{await _({status:"Completed"})},[_]),{mutateAsync:H,isPending:j}=yt({mutationFn:async({episodeNumber:b,duration:g,showMeta:T,episodes:E})=>{await de.progress.updateProgress.mutate({showId:r??"",episodeNumber:b,currentTime:g,duration:g,showName:T.name,showThumbnail:T.thumbnail,nativeName:T.names?.native,englishName:T.names?.english,genres:T.genres?.map(Y=>Y.name),popularityScore:Ar(T.score)??void 0,type:T.type,status:T.status,episodeCount:E.length,isAdult:T.isAdult})},onSuccess:(b,g)=>{we.success(`Episode ${g.episodeNumber} marked as watched`),s.invalidateQueries({queryKey:[oe.playerData,r]}),s.invalidateQueries({queryKey:[oe.showMeta,r]}),s.invalidateQueries({queryKey:[oe.videoSources,r,g.episodeNumber]}),s.invalidateQueries({queryKey:[oe.continueWatching]}),s.invalidateQueries({queryKey:[oe.thisWeekSchedule]}),s.invalidateQueries(c.continueWatching.pathFilter())},onError:()=>we.error("Failed to mark episode as watched")}),D=O(async(b,g)=>{!r||!h||await H({episodeNumber:b,duration:g,showMeta:h,episodes:N?.episodes||[]})},[r,h,N?.episodes,H]),L=O(async()=>{o({type:"SET_STATE",payload:{showCombinedDetails:!i.showCombinedDetails}})},[i.showCombinedDetails]),K=Me(()=>{const b=M||p,g=b?b.message:null,T=g==="AUTH_REQUIRED"?null:g,E=B&&B.fetchedEpisodeNumber===a?B:null,Y=!!B&&!E;return{...i,currentEpisode:a,showMeta:{...i.showMeta||{},...h||{}},episodes:N?.episodes||[],watchedEpisodes:N?.watchedEpisodes||[],inWatchlist:!!N?.inWatchlist,watchlistStatus:N?.watchlistStatus??i.watchlistStatus??null,videoSources:E?.videoSources||[],selectedSource:i.selectedSource||E?.selectedSource||null,selectedLink:i.selectedLink||E?.selectedLink||null,resumeTime:E?.resumeTime||0,resumeDuration:E?.resumeDuration||0,showResumeModal:i.showResumeModal&&(E?.showResumeModal??!1),skipIntervals:E?.skipIntervals||[],loadingShowData:C,loadingVideo:y||Y,error:T,fetchedEpisodeNumber:E?.fetchedEpisodeNumber}},[i,h,N,B,C,y,M,p,a]),U=O((b,g)=>{const T=g||r;if(!T||!b||T===r&&b===a)return;const Y=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(T)&&i.selectedProvider!=="animepahe"?"animepahe":i.selectedProvider,X=["video-sources",T,b,Y,i.currentMode];s.getQueryState(X)?.status!=="success"&&s.prefetchQuery({queryKey:X,queryFn:()=>Mt(T,b,{selectedProvider:Y,currentMode:i.currentMode},o,!0),staleTime:300*1e3,gcTime:1800*1e3})},[r,a,s,i,o]);return{state:K,dispatch:o,toggleWatchlist:d,moveToCompleted:W,setPreferredSource:S,handleToggleDetails:L,markEpisodeWatched:D,prefetchEpisodeSources:U,isMarkingWatched:j,isUpdatingWatchlistStatus:z}};function qn({onNext:r,onToggleTheater:n,flashControls:l}){F(()=>{const m=i=>{i.defaultPrevented||i.ctrlKey||i.metaKey||i.altKey||i.repeat||i.target.closest('input, textarea, button, select, a, [role="button"], [role="slider"], [contenteditable="true"]')||(["arrowup","arrowdown","arrowleft","arrowright"].includes(i.key.toLowerCase())&&l(),i.key.toLowerCase()==="n"&&r(),i.key.toLowerCase()==="t"&&n())};return document.addEventListener("keydown",m),()=>{document.removeEventListener("keydown",m)}},[l,r,n])}const Xe=(r,n,l)=>r.showId===n||!!l&&r.showId===l;function zn({testClipActive:r,selectedSourceType:n,onEnded:l,queue:m,removeFromQueue:i,showId:o,showMetaId:s,currentEpisode:c,isAutoplayEnabled:u,nextEpisode:f,previousEpisode:k,navigate:e,invalidateContinueWatching:a,dispatch:A}){const[h,C]=ae(!1),[M,N]=ae(null),[B,y]=ae(null),p=R(i);p.current=i;const P=R(!1);F(()=>{P.current=!1,C(!1)},[o,c]);const d=O(()=>{if(r||P.current)return;P.current=!0,l();const D=m.find(L=>Xe(L,o,s)&&L.episodeNumber===c);if(m.length>0){const L=m.findIndex(U=>Xe(U,o,s)&&U.episodeNumber===c),K=L>=0?m[L+1]||null:m[0];y({nextItem:K,playedItem:D||null}),N(2);return}if(D&&p.current({showId:D.showId,episodeNumber:D.episodeNumber}),u&&f){a(),e(`/watch/${o}/${f}`);return}f||C(!0)},[l,e,m,o,s,c,f,u,a,r]),S=O(()=>{if(m.length===0)return;l();const D=m.find(U=>Xe(U,o,s)&&U.episodeNumber===c),L=m.findIndex(U=>Xe(U,o,s)&&U.episodeNumber===c),K=L>=0?m[L+1]||null:m[0];D&&i({showId:D.showId,episodeNumber:D.episodeNumber}),K?e(`/watch/${K.showId}/${K.episodeNumber}`):f||C(!0)},[l,e,m,i,o,s,c,f]),_=O(()=>{f&&(a(),e(`/watch/${o}/${f}`)),C(!1),A({type:"SET_STATE",payload:{showResumeModal:!1}})},[f,e,o,A,a]),z=O(()=>{m.length>0?S():f?_():we.error("No next episode available")},[m.length,S,_,f]),W=O(()=>C(!1),[]),H=O(()=>{y(null),N(null)},[]),j=O(()=>{k&&e(`/watch/${o}/${k}`)},[k,e,o]);return F(()=>{const D=L=>{L.origin===window.location.origin&&n==="iframe"&&L.data?.type==="ANI_WEB_MEDIA_ENDED"&&d()};return window.addEventListener("message",D),()=>window.removeEventListener("message",D)},[d,n]),F(()=>{if(!B||M===null)return;if(M<=0){const{nextItem:L,playedItem:K}=B;y(null),N(null),K&&p.current({showId:K.showId,episodeNumber:K.episodeNumber}),L?e(`/watch/${L.showId}/${L.episodeNumber}`):f||C(!0);return}const D=window.setTimeout(()=>{N(L=>L===null?null:L-1)},1e3);return()=>window.clearTimeout(D)},[B,M,e,f]),{showCompleteModal:h,queueCountdown:M,pendingQueueTransition:B,handleQueueTransition:S,handleNextEpisode:_,handleNShortcut:z,handlePreviousEpisode:j,handlePlaybackFinished:d,closeCompleteModal:W,cancelQueueTransition:H}}function jn({videoRef:r,queue:n,showId:l,showMetaId:m,currentEpisode:i,selectedSource:o,hasNextEpisode:s,nextEpisode:c,prefetchEpisodeSources:u,matchesQueueItem:f}){const[k,e]=ae(!1),a=R(u);a.current=u;const A=R("");F(()=>{e(!1)},[i]);const h=O(()=>{const C=r.current;if(!C||o?.type==="iframe")return;const M=C.duration,N=C.currentTime;if(!M||Number.isNaN(M)){e(!1);return}if(M-N<=60){const B=n.findIndex(P=>f(P,l,m)&&P.episodeNumber===i),y=n.length>0?B>=0?n[B+1]||null:n[0]:null,p=y?`${y.showId}:${y.episodeNumber}`:s?`${l}:${c}`:"";p&&A.current!==p&&(A.current=p,y?a.current(y.episodeNumber,y.showId):a.current(c??""))}e(s&&Ur(N,M))},[r,o,n,l,m,i,s,c,f]);return{showNextEpisodePrompt:k,handleThresholds:h}}const bt="fallbackChoice";function Hn(){try{const r=localStorage.getItem(bt);return r==="iframe"||r==="retry"?r:null}catch{return null}}function Yn(r){try{r===null?localStorage.removeItem(bt):localStorage.setItem(bt,r)}catch{}}function Xn({showId:r,episodeNumber:n,currentMode:l,selectedProvider:m,selectedSourceType:i,videoSources:o,isAdult:s,providerOrder:c,matureProviders:u,setPreferredSource:f,dispatch:k,showControls:e}){const a=R(!1),A=R([]),h=R(!1),[C,M]=ae(null),[N,B]=ae(!1),[y,p]=ae(!1),[P,d]=ae(()=>Hn()??"ask"),S=O(g=>{d(g),Yn(g==="ask"?null:g)},[]),_=R(P);F(()=>{_.current=P},[P]);const z=R(o);z.current=o;const W=O(()=>{a.current=!1,A.current=[],h.current=!1,M(null),B(!1)},[]);F(()=>{W()},[W,r,n]);const H=O(g=>{if(a.current)return;a.current=!0;const T=g.links[0];f(g.sourceName),k({type:"SET_STATE",payload:{selectedSource:g,selectedLink:T}}),M(null)},[k,f]),j=O(()=>{const T=z.current.find(E=>E.type==="iframe");return T?.links?.length?T:null},[]),D=O(async()=>{const g=c.filter(T=>{if(A.current.includes(T))return!1;const E=u.has(T);return s===void 0?!0:E===s});B(!0);try{for(const T of g){A.current.push(T);let E=null;try{E=await de.data.video.query({showId:r,episodeNumber:n,mode:l,provider:T})}catch{continue}const Y=(E??[]).filter(Q=>{const Z=Q.sourceName.toLowerCase();return l==="dub"?Z.includes("eng")||Z.includes("dub"):Z.includes("jpn")||Z.includes("sub")||!Z.includes("eng")&&!Z.includes("dub")});if((Y.length>0?Y:E??[]).find(Q=>Q.type!=="iframe"&&Q.links?.length)){A.current=[m],h.current=!1,k({type:"SET_STATE",payload:{selectedProvider:T,videoSources:[],selectedSource:null,selectedLink:null,loadingVideo:!0}}),Bt(T,s===!0),M(null),we.success(`Switched to ${T} (direct stream)`);return}}M({retryFailed:!0}),we.error("No working direct stream found on other providers")}finally{B(!1)}},[r,n,l,s,m,k,c,u]),L=O(()=>{if(a.current||h.current||i!=="player")return;const g=j();if(!g)return;A.current.includes(m)||A.current.push(m);const T=_.current;if(T==="iframe"){H(g);return}if(T==="retry"){D();return}e(!0),M({retryFailed:!1})},[i,m,j,H,D,e]),K=O(()=>{h.current=!0,M(null),p(!1)},[]),U=O(()=>{y&&S("iframe");const g=j();g?H(g):M(null)},[y,S,j,H]),b=O(()=>{y&&S("retry"),D()},[y,S,D]);return{fallbackPrompt:C,isRetryingProvider:N,rememberFallbackChoice:y,setRememberFallbackChoice:p,fallbackChoice:P,updateFallbackChoice:S,dismissFallbackPrompt:K,chooseIframeFallback:U,chooseProviderRetry:b,handleVideoSourceError:L,resetFallback:W}}function Jn({engine:r,videoRef:n,selectedSource:l,selectedLink:m,loadingVideo:i,testClipActive:o,resumeTime:s,showResumeModal:c,calibReturnRef:u,setAvailableSubtitles:f,setActiveSubtitleTrack:k,onFatalError:e}){const a=R(null),A=R(s),h=R(c),C=R(e);return C.current=e,F(()=>{A.current=s,h.current=c},[s,c]),F(()=>{const M=n.current;if(!M)return;for(;M.firstChild;)M.removeChild(M.firstChild);if(o)return r.loadSource({url:"/av-sync-test.mp4"},{autoPlay:!0});if(i||!l||!m||l.type==="iframe"){r.unload();return}u.current!=null?(a.current=u.current,u.current=null):a.current===null&&A.current>5&&!h.current?a.current=A.current:a.current===null&&h.current&&(a.current=0);let N=m.link;if(N.startsWith("/api/proxy")||(N=`/api/proxy?url=${encodeURIComponent(N)}`,m.headers?.Referer&&(N+=`&referer=${encodeURIComponent(m.headers.Referer)}`)),l.subtitles){const p=localStorage.getItem("playerSubtitlesEnabled")!=="false";let P=null;try{P=localStorage.getItem("playerLastSubtitle")}catch{}const d=St(l.subtitles,{lastKey:P,enabled:p}),S=d>=0?l.subtitles[d]:null;l.subtitles.forEach(_=>{const z=document.createElement("track");z.kind="subtitles",z.label=_.label,z.srclang=_.lang;const W=_.src??_.url;if(W){let H=`/api/subtitle-proxy?url=${encodeURIComponent(W)}`;const j=m.headers?.Referer;j&&(H+=`&referer=${encodeURIComponent(j)}`),z.src=H}S&&_.label===S.label&&_.lang===S.lang&&(z.default=!0),M.appendChild(z)}),p||k("off"),f(l.subtitles)}const B=a.current??0;a.current=null;const y=document.body.classList.contains("low-end");return r.loadSource({url:N,hls:m.hls},{initialTime:B,autoPlay:!(h.current&&A.current>5),hlsConfig:{maxBufferLength:y?15:30,maxMaxBufferLength:y?30:60,maxBufferSize:(y?25:60)*1e3*1e3,startLevel:-1},onHls:(p,P)=>{if(!l.subtitles?.length)return;const d=()=>{p.subtitleTrack!==-1&&(p.subtitleTrack=-1)};p.on(P.Events.SUBTITLE_TRACK_SWITCH,d),d()},onError:()=>C.current()})},[r,l,m,n,u,i,o,k,f]),{seekToTimeRef:a}}function Zn({videoRef:r,availableSubtitles:n,activeSubtitleTrack:l,setAvailableSubtitles:m,setActiveSubtitleTrack:i}){F(()=>{const o=r.current;if(!o)return;const s=()=>{const c=Array.from(o.textTracks).map(u=>({label:u.label,lang:u.language,src:void 0,mode:u.mode}));m(c)};return o.textTracks.addEventListener("addtrack",s),o.textTracks.addEventListener("removetrack",s),s(),()=>{o.textTracks.removeEventListener("addtrack",s),o.textTracks.removeEventListener("removetrack",s)}},[r,m]),F(()=>{if(l===null&&n.length>0&&localStorage.getItem("playerSubtitlesEnabled")!=="false"){let o=null;try{o=localStorage.getItem("playerLastSubtitle")}catch{}const s=St(n,{lastKey:o,enabled:!0});if(s<0){i("off");return}const c=n[s];i(c.lang||c.label)}},[l,n,i]),F(()=>{const o=r.current;if(!o||n.length===0)return;const s=l;if(!(localStorage.getItem("playerSubtitlesEnabled")!=="false")||s==="off"||s===null){Array.from(o.textTracks).forEach(f=>{f.mode="hidden"});return}let u=!1;if(Array.from(o.textTracks).forEach(f=>{const e=(f.language===s||f.label===s)&&!u;f.mode=e?"showing":"hidden",e&&(u=!0)}),!u&&o.textTracks.length>0){const f=Array.from(o.textTracks).find(k=>k.language==="en"||k.label==="English")||o.textTracks[0];f&&(f.mode="showing")}},[l,n,r])}function es({videoRef:r,videoBoxH:n,style:l,sourceKey:m,activeSubtitleTrack:i,availableSubtitles:o}){F(()=>{const s="dynamic-subtitle-styles";let c=document.getElementById(s);c||(c=document.createElement("style"),c.id=s,document.head.appendChild(c)),c.textContent=Ct(l);const u=r.current;if(!u)return;const f=Nt(l.fontSize,n||u.clientHeight||720);c.textContent=Ct({...l,fontSize:f});const k=()=>{const p=Number(l.position),P=isNaN(p)?0:Math.max(0,Math.min(100,p));return Math.max(0,Math.min(100,100-P))},e=(p,P)=>{try{const d=p;d.snapToLines=!1,d.line=P}catch{}},a=()=>{const p=f*16,P=u.videoHeight||u.clientHeight||720,d=u.videoWidth||u.clientWidth||1280;return{step:p*1.3/P*100,chars:Math.max(20,Math.floor(d/(p*.55)))}},A=p=>{const P=k(),d=Array.from(p.activeCues??[]);if(d.length<=1){d.forEach(W=>e(W,P));return}const{step:S,chars:_}=a();let z=P;for(let W=d.length-1;W>=0;W--){const j=String(d[W].text??"").replace(/<[^>]*>/g,"").split(`
|
|
55
|
+
`).reduce((L,K)=>L+Math.max(1,Math.ceil(K.length/_)),0),D=z-j*S;e(d[W],Math.max(0,D)),z=D-S*.4}},h=p=>{if(!p.cues)return;const P=k();Array.from(p.cues).forEach(d=>e(d,P)),p.mode==="showing"&&A(p)},C=()=>{Array.from(u.textTracks).forEach(h)};C();const M=p=>{const P=p.target;P.mode==="showing"&&A(P)};Array.from(u.textTracks).forEach(p=>{p.addEventListener("cuechange",M)});const N=()=>{Array.from(u.textTracks).forEach(p=>{p.removeEventListener("cuechange",M),p.addEventListener("cuechange",M)}),C()};u.textTracks.addEventListener("addtrack",N),u.textTracks.addEventListener("removetrack",N);const B=Array.from(u.querySelectorAll("track")),y=()=>{C()};return B.forEach(p=>{p.addEventListener("load",y)}),()=>{Array.from(u.textTracks).forEach(p=>{p.removeEventListener("cuechange",M)}),u.textTracks.removeEventListener("addtrack",N),u.textTracks.removeEventListener("removetrack",N),B.forEach(p=>{p.removeEventListener("load",y)})}},[l,n,r,m,i,o])}function ts({videoRef:r,overlayRef:n,style:l,activeSubtitleTrack:m,delayMs:i,enabled:o}){F(()=>{if(!o)return;const s=r.current,c=n.current;if(!s||!c)return;const u=localStorage.getItem("playerSubtitlesEnabled")!=="false",f=()=>{if(c.innerHTML="",!u||m==="off"||m===null)return;const a=Array.from(s.textTracks).find(y=>y.language===m||y.label===m);if(!a||a.mode!=="showing")return;const A=i/1e3;let h;if(A>0&&a.cues){const y=s.currentTime-A;h=Array.from(a.cues).filter(p=>p.startTime<=y&&y<=p.endTime)}else h=Array.from(a.activeCues??[]);if(h.length===0)return;const C={...l,fontSize:Nt(l.fontSize,s.clientHeight||0)},M=ur(C),N=dr(s,C.position),B=Array.from(h);B.forEach((y,p)=>{const P=String(y.text??"");if(!mr(P).trim())return;const d=document.createElement("div"),S=(B.length-1-p)*1.7;d.style.cssText=`${M}
|
|
56
|
+
bottom: calc(${N}px + ${S}em);`,d.innerHTML=fr(P),c.appendChild(d)})},k=()=>f(),e=()=>f();return Array.from(s.textTracks).forEach(a=>{a.addEventListener("cuechange",k)}),s.addEventListener("timeupdate",e),f(),()=>{Array.from(s.textTracks).forEach(a=>{a.removeEventListener("cuechange",k)}),s.removeEventListener("timeupdate",e),c.innerHTML=""}},[m,i,o,n,l,r])}const rs=({isOpen:r,onClose:n,onSuccess:l})=>{const m=()=>{l?.(),n()};return t(mt,{isOpen:r,onClose:n,title:"MKissa Browser Verification",children:t("div",{className:Ve.container,children:[t("p",{children:"Open MKissa in this browser, play an anime episode, and complete any Cloudflare verification it shows. Once playback works there, return to Dango and click Refresh."}),t("div",{className:Ve.actions,children:t("a",{className:Ve.link,href:"https://mkissa.to/anime",target:"_blank",rel:"noreferrer",children:"Open MKissa anime"})}),t("div",{className:Ve.actions,children:[t("button",{className:Ve.secondaryButton,onClick:n,children:"Cancel"}),t("button",{className:Ve.button,onClick:m,children:"Refresh Dango"})]})]})})},bs=()=>{const{id:r,episodeNumber:n}=Yt(),l=Xt(),m=Rt(),i=Jt(),{hasConsent:o,grant:s}=_r(),{options:c}=At(),u=Me(()=>c.filter(v=>(v.kind??"anime")==="anime"),[c]),f=Me(()=>u.map(v=>v.id),[u]),k=Me(()=>new Set(u.filter(v=>v.mature).map(v=>v.id)),[u]),{state:e,dispatch:a,toggleWatchlist:A,moveToCompleted:h,setPreferredSource:C,handleToggleDetails:M,markEpisodeWatched:N,prefetchEpisodeSources:B,isMarkingWatched:y,isUpdatingWatchlistStatus:p}=Gn(r,n,i.state||null,{hasMatureConsent:o});F(()=>{if(r&&e.showMeta?.id&&e.showMeta.id!==r){const v=n?`/watch/${e.showMeta.id}/${n}${window.location.search}`:`/watch/${e.showMeta.id}${window.location.search}`;l(v,{replace:!0})}},[r,e.showMeta?.id,n,l]);const P=Me(()=>{if(e.showMeta.name)return{name:e.showMeta.name,thumbnail:e.showMeta.thumbnail,names:e.showMeta.names,genres:e.showMeta.genres,score:e.showMeta.score,isAdult:e.showMeta.isAdult}},[e.showMeta.name,e.showMeta.thumbnail,e.showMeta.names,e.showMeta.genres,e.showMeta.score,e.showMeta.isAdult]),d=pr({skipIntervals:e.skipIntervals,showId:r,episodeNumber:e.currentEpisode?.toString(),episodeCount:e.episodes.length||void 0,sourceType:e.selectedSource?.type,showMeta:P}),{refs:S,actions:_}=d,z=Kr(),W=R(null),H=R(null),j=R(null),[D,L]=ae(()=>{try{const v=localStorage.getItem("anime4kProfile");return["low","balanced","high","denoise"].includes(v)?v:"balanced"}catch{return"balanced"}}),{videoDelayMs:K,videoDelayEnabled:U,setDelayEnabled:b,handleVideoDelayChange:g,isCalibrating:T,testClipActive:E,stopCalibration:Y,openAvSyncCalibrator:X,cancelAvSyncCalibrator:V,applyAvSyncCalibrator:Q,toggleTestClip:Z,calibReturnRef:Se,effectiveVideoDelayMs:Ae}=hr(S.videoRef,()=>_.setShowSettings(!1)),Re=R(null),ee=Fn({videoRef:S.videoRef,canvasRef:H,profile:D,delayMs:Ae}),G=ee.isEnabled&&ee.isWebGPUSupported;On({videoRef:S.videoRef,episodeKey:`${r??""}:${e.currentEpisode??""}`,isEnabled:ee.isEnabled,isSupported:ee.isWebGPUSupported,mediaReady:!e.loadingVideo&&!!e.selectedLink,isIframeSource:e.selectedSource?.type==="iframe",setEnabled:ee.setEnabled}),vr({videoRef:S.videoRef,canvasRef:Re,delayMs:Ae,enabled:U&&!G});const ke=U&&!G,_e=G||ke,[te,q]=ae(!1),he=R(n);F(()=>{he.current!==n&&(he.current=n,Y())},[n,Y]);const ft=O(()=>{m.invalidateQueries({queryKey:[oe.continueWatching]})},[m]),{data:xe=[],isLoading:Je}=xr(),Ze=Br(),Qe=Lr(),pt=Dr(),{isTheaterMode:ie,toggleTheaterMode:le,handleLayoutClick:ht}=gr();Zt(()=>{if(d.state.isFullscreen||ie)return;const v=S.playerContainerRef.current,J=W.current;if(!v||!J)return;const $e=()=>{const gt=v.getBoundingClientRect().height;J.style.height=`${gt}px`};$e();const lt=new ResizeObserver($e);return lt.observe(v),()=>lt.disconnect()},[d.state.isFullscreen,ie,S.playerContainerRef]);const Te=Me(()=>e.episodes.findIndex(v=>v===e.currentEpisode),[e.episodes,e.currentEpisode]),et=Te>0?e.episodes[Te-1]:null,Ke=Te>=0&&Te<e.episodes.length-1?e.episodes[Te+1]:null,tt=Te>-1&&Te<e.episodes.length-1,{showCompleteModal:$,queueCountdown:Ne,pendingQueueTransition:Ge,handleQueueTransition:ve,handleNextEpisode:rt,handleNShortcut:Fe,handlePreviousEpisode:Oe,handlePlaybackFinished:qe,closeCompleteModal:Be,cancelQueueTransition:ze}=zn({testClipActive:E,selectedSourceType:e.selectedSource?.type,onEnded:_.onEnded,queue:xe,removeFromQueue:Ze.mutate,showId:r,showMetaId:e.showMeta?.id,currentEpisode:e.currentEpisode,isAutoplayEnabled:e.isAutoplayEnabled,nextEpisode:Ke,previousEpisode:et,navigate:l,invalidateContinueWatching:ft,dispatch:a}),{showNextEpisodePrompt:nt,handleThresholds:Le}=jn({videoRef:S.videoRef,queue:xe,showId:r,showMetaId:e.showMeta?.id,currentEpisode:e.currentEpisode,selectedSource:e.selectedSource,hasNextEpisode:tt,nextEpisode:Ke,prefetchEpisodeSources:B,matchesQueueItem:Xe}),{checkEnd:De,logDuration:st}=yr({videoRef:S.videoRef,sourceType:e.selectedSource?.type,resetKey:`${r}:${e.currentEpisode}`,onEnd:qe}),ot=e.showResumeModal,at=$,I=ot||at;br(d,!!e.selectedLink&&!ie&&!I);const{fallbackPrompt:re,isRetryingProvider:fe,rememberFallbackChoice:ce,setRememberFallbackChoice:ue,fallbackChoice:pe,updateFallbackChoice:ge,dismissFallbackPrompt:je,chooseIframeFallback:We,chooseProviderRetry:ye,handleVideoSourceError:ne,resetFallback:it}=Xn({showId:r,episodeNumber:e.currentEpisode??void 0,currentMode:e.currentMode,selectedProvider:e.selectedProvider,selectedSourceType:e.selectedSource?.type,videoSources:e.videoSources,isAdult:e.showMeta?.isAdult,providerOrder:f,matureProviders:k,setPreferredSource:C,showControls:_.setShowControls,dispatch:a}),{seekToTimeRef:Ue}=Jn({engine:d.engine,videoRef:S.videoRef,selectedSource:e.selectedSource,selectedLink:e.selectedLink,loadingVideo:e.loadingVideo,testClipActive:E,resumeTime:e.resumeTime,showResumeModal:e.showResumeModal,calibReturnRef:Se,setAvailableSubtitles:_.setAvailableSubtitles,setActiveSubtitleTrack:_.setActiveSubtitleTrack,onFatalError:ne});F(()=>{I&&d.state.isFullscreen&&d.actions.toggleFullscreen()},[I,d.state.isFullscreen,d.actions]),F(()=>{I&&S.videoRef.current&&S.videoRef.current.pause()},[I,S.videoRef]);const{titlePreference:se}=$r(),{lowEndMode:He}=Ir(),{settings:vt,update:Lt}=Sr(),Dt=ie&&vt.enabled&&!He&&e.selectedSource?.type!=="iframe"&&!!e.selectedLink,Pe=Me(()=>{if(!e.showMeta||e.loadingShowData)return"Loading...";const{name:v,names:J}=e.showMeta;return se==="name"?v||"Loading...":se==="nativeName"?J?.native||v||"Loading...":se==="englishName"?J?.english||v||"Loading...":v||"Loading..."},[e.showMeta,se,e.loadingShowData]);F(()=>{Pe&&Pe!=="Loading..."&&e.currentEpisode&&(document.title=`► ${Pe} Episode ${e.currentEpisode} - dango`)},[Pe,e.currentEpisode]),qn({onNext:Fe,onToggleTheater:le,flashControls:d.actions.flashControls});const{setAvailableSubtitles:$t,setActiveSubtitleTrack:It}=_,Et=Me(()=>({fontSize:d.state.subtitleFontSize,position:d.state.subtitlePosition,bgOpacity:d.state.subtitleBgOpacity,bgColor:d.state.subtitleBgColor,textColor:d.state.subtitleTextColor,edge:d.state.subtitleEdge,bold:d.state.subtitleBold}),[d.state.subtitleFontSize,d.state.subtitlePosition,d.state.subtitleBgOpacity,d.state.subtitleBgColor,d.state.subtitleTextColor,d.state.subtitleEdge,d.state.subtitleBold]);Zn({videoRef:S.videoRef,availableSubtitles:d.state.availableSubtitles,activeSubtitleTrack:d.state.activeSubtitleTrack,setAvailableSubtitles:$t,setActiveSubtitleTrack:It});const[Ft,Ot]=ae(0);F(()=>{const v=S.videoRef.current;if(!v)return;const J=()=>Ot(v.clientHeight||0);J();const $e=new ResizeObserver(J);return $e.observe(v),()=>$e.disconnect()},[S.videoRef,e.selectedSource,e.selectedLink]),es({videoRef:S.videoRef,videoBoxH:Ft,style:Et,sourceKey:`${e.selectedSource?.sourceName??""}:${e.selectedLink?.link??""}`,activeSubtitleTrack:d.state.activeSubtitleTrack,availableSubtitles:d.state.availableSubtitles}),ts({videoRef:S.videoRef,overlayRef:j,style:Et,activeSubtitleTrack:d.state.activeSubtitleTrack,delayMs:Ae,enabled:_e}),F(()=>{try{localStorage.setItem("anime4kProfile",D)}catch{}},[D]);const Wt=()=>{S.videoRef.current&&(S.videoRef.current.currentTime=e.resumeTime,S.videoRef.current.play()),a({type:"SET_STATE",payload:{showResumeModal:!1}})},Ut=()=>{S.videoRef.current&&(S.videoRef.current.currentTime=0,S.videoRef.current.play()),a({type:"SET_STATE",payload:{showResumeModal:!1}})},Vt=O(()=>{a({type:"SET_STATE",payload:{showResumeModal:!1}})},[a]),Qt=O(async()=>{try{await h(),Be(),a({type:"SET_STATE",payload:{showResumeModal:!1}}),l("/")}catch{}},[h,Be,a,l]),wt=(v,J)=>t("div",{className:v,children:[t("button",{className:`${w.episodeNavBtn} ${w.secondary}`,onClick:Oe,disabled:!et,type:"button",children:[t(me,{name:"chevron-left",size:12}),"Prev EP"]}),t("button",{className:`${w.episodeNavBtn} ${w.primary}`,onClick:rt,disabled:!Ke,type:"button",children:["Next EP",t(me,{name:"chevron-right",size:12})]}),J==="mobile"&&z&&t("button",{className:`${w.episodeNavBtn} ${w.episodePickerBtn}`,onClick:()=>q(!0),type:"button",children:[t(me,{name:"list-ul",size:12}),"Episodes"]})]}),Kt=v=>{a({type:"SET_STATE",payload:{isAutoplayEnabled:v}}),Vr(v)},kt=!!(e.currentEpisode&&e.watchedEpisodes.includes(e.currentEpisode)),Gt=e.selectedProvider!=="megaplay"||e.selectedSource?.type==="iframe",qt=O(async()=>{if(!r||!e.currentEpisode||!e.showMeta.name||y)return;const v=S.videoRef.current?.duration,J=Math.max(v||0,e.resumeDuration||0,Number(e.showMeta.episodeDuration||0)*60,1);await N(e.currentEpisode,J)},[r,e.currentEpisode,e.showMeta,e.resumeDuration,N,y,S.videoRef]);if(e.error&&!e.showMeta.name&&e.videoSources.length===0&&e.episodes.length===0)return t("p",{className:"error-message",children:["Error: ",e.error]});const Ce=e.loadingShowData||e.loadingVideo;return e.showMeta?.isAdult===!0&&!o?t("div",{className:be.playerPageLayout,children:t(Qr,{isOpen:!0,onClose:()=>l("/home"),onGrant:s})}):t("div",{className:`${be.playerPageLayout} ${ie?be.theaterMode:""}`,onClick:ht,children:[ie&&t(Er,{videoRef:S.videoRef,active:Dt,settings:vt}),t(wr,{isOpen:at,onClose:Be,title:"Show Completed!",heading:Pe,message:"Congratulations! You finished all available episodes.",children:[t(ut,{variant:"secondary",onClick:Be,children:"Close"}),t(ut,{onClick:Qt,disabled:p,children:p?"Saving...":"Move to Completed"})]}),t(kr,{isOpen:ot,onClose:Vt,title:"Resume Playback?",message:t(ct,{children:["You were watching at ",t("strong",{children:d.actions.formatTime(e.resumeTime)}),". Would you like to continue?"]}),onResume:Wt,onRestart:Ut}),t(mt,{isOpen:!!re,onClose:je,title:"Direct stream failed",width:"sm",children:[t(mt.Body,{children:[t("p",{children:[t("strong",{children:e.selectedProvider}),"'s direct stream failed for this episode."]}),re?.retryFailed&&t("p",{children:"No working direct stream was found on the other providers either."}),t("p",{children:["You can continue with the embedded (iframe) player, but embedded players may show"," ",t("strong",{children:"ads and pop-ups"}),"."]}),t("label",{style:{display:"flex",alignItems:"center",gap:"8px",marginTop:"0.75rem",cursor:"pointer"},children:[t("input",{type:"checkbox",checked:ce,onChange:v=>ue(v.currentTarget.checked)}),"Remember my choice"]})]}),t(mt.Actions,{children:[t(ut,{variant:"secondary",onClick:We,children:"Continue with iframe"}),t(ut,{onClick:ye,disabled:fe,children:fe?"Searching…":"Try another provider"})]})]}),t(Fr,{isOpen:!!e.showCookieModal&&e.cookieProvider!=="mkissa",onClose:()=>a({type:"SET_STATE",payload:{showCookieModal:!1}}),onSuccess:()=>{m.invalidateQueries({queryKey:[oe.videoSources,r,e.currentEpisode,e.selectedProvider,e.currentMode]})}}),t(rs,{isOpen:!!e.showCookieModal&&e.cookieProvider==="mkissa",onClose:()=>a({type:"SET_STATE",payload:{showCookieModal:!1}}),onSuccess:()=>{m.invalidateQueries({queryKey:[oe.videoSources,r,e.currentEpisode,e.selectedProvider,e.currentMode]})}}),!ie&&t("aside",{ref:W,className:be.episodeSidebar,children:e.loadingShowData?t(Tr,{variant:"sidebar"}):t(Cr,{episodes:e.episodes,currentEpisode:e.currentEpisode??void 0,watchedEpisodes:e.watchedEpisodes,onEpisodeClick:v=>l(`/watch/${r}/${v}`)})}),t("div",{className:be.playerMain,children:[t("div",{className:`${w.videoContainer} ${d.state.isFullscreen?"":be.videoPlayerWrapper} ${d.state.isFullscreen?w.fullscreenActive:""}`,style:{...I?{visibility:"hidden"}:{}},onContextMenu:v=>v.preventDefault(),children:t(Cn,{player:d,isAutoplayEnabled:e.isAutoplayEnabled,onAutoplayChange:Kt,fallbackChoice:pe,onFallbackChoiceChange:ge,ambientSettings:vt,onAmbientChange:Lt,showNextEpisodeButton:!I&&nt&&xe.length===0,onNextEpisode:rt,videoSources:e.videoSources,selectedSource:e.selectedSource,selectedLink:e.selectedLink,onSourceChange:(v,J)=>{S.videoRef.current&&!isNaN(S.videoRef.current.currentTime)&&(Ue.current=S.videoRef.current.currentTime),C(v.sourceName),a({type:"SET_STATE",payload:{selectedSource:v,selectedLink:J,showResumeModal:e.showResumeModal&&v.type!=="iframe"}})},loadingVideo:Ce,skipIntervals:e.skipIntervals,animeTitle:Pe,episodeNumber:e.currentEpisode??void 0,isTheaterMode:ie,onTheaterModeToggle:le,anime4kEnabled:ee.isEnabled,onAnime4kToggle:ee.toggle,anime4kSupported:ee.isWebGPUSupported,anime4kProfile:D,onAnime4kProfileChange:L,anime4kInitializing:ee.isInitializing,anime4kError:ee.error,videoDelayEnabled:U,onVideoDelayToggle:b,videoDelayMs:K,onVideoDelayChange:g,onCalibrateAvSync:X,isInteractingExtra:te||T,className:sr.shellFill,hideChrome:e.selectedSource?.type==="iframe",overlays:t(ct,{children:[d.state.isSpeedBoostActive&&t("div",{className:w.speedBoostBadge,"aria-hidden":"true",children:[t("span",{children:"2x"}),t(me,{name:"forward",size:12})]}),Ne!==null&&Ge?.nextItem&&t("div",{className:w.queueCountdown,children:["Queue next in ",Ne,"s"]})]}),children:[Ce&&t("div",{className:w.loadingOverlay,children:t("div",{className:w.loadingDots,children:[t("div",{className:w.dot}),t("div",{className:w.dot}),t("div",{className:w.dot})]})}),d.state.isBuffering&&!Ce&&e.selectedSource?.type!=="iframe"&&t("div",{className:w.bufferingOverlay,children:t("div",{className:w.bufferingSpinner})}),e.selectedSource?.type==="iframe"?!Ce&&t("iframe",{src:e.selectedLink?.link,className:w.videoIframe,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0,sandbox:e.selectedSource.sandbox?`${e.selectedSource.sandbox} allow-fullscreen allow-popups allow-popups-to-escape-sandbox`:void 0}):t(ct,{children:[!Ce&&e.videoSources.length===0&&t("div",{className:w.errorOverlay,children:[t("p",{children:["No sources found for this episode with ",e.selectedProvider,"."]}),t("p",{className:w.errorSubtext,children:"Please try selecting a different provider below."}),t("button",{className:w.retryButton,onClick:()=>window.location.reload(),"data-speed-boost-ignore":"true",style:{marginTop:8},children:"Retry"})]}),!Ce&&e.videoSources.length>0&&t(or,{controls:d.state.useNativeControls,playsInline:!0,"webkit-playsinline":"true",disablePictureInPicture:!0,disableRemotePlayback:!0,onPlay:_.onPlay,onPause:_.onPause,onEnded:()=>{E||De(!0)},onDurationChange:()=>{st()},onSeeked:()=>{E||(Le(),De())},onLoadedMetadata:()=>{Le(),st(),E||De()},onTimeUpdate:()=>{E||(_.onTimeUpdate(),Le(),De(),Ge&&S.videoRef.current&&S.videoRef.current.currentTime<S.videoRef.current.duration-1&&ze())},onError:ne,onContextMenu:v=>v.preventDefault(),className:_e?w.videoElementHidden:""}),ee.isWebGPUSupported&&!Ce&&e.videoSources.length>0&&t("canvas",{ref:H,className:`${w.upscalerCanvas} ${G?w.upscalerActive:""}`}),!G&&!Ce&&e.videoSources.length>0&&t("canvas",{ref:Re,className:`${w.upscalerCanvas} ${ke?w.upscalerActive:""}`}),ee.isEnabled&&ee.isWebGPUSupported&&ee.isInitializing&&t("div",{className:w.upscalerStatusBadge,children:"Preparing upscaler…"}),_e&&t("div",{ref:j,className:w.subtitleOverlay}),t(Mr,{isOpen:T,ms:K,onChange:g,onApply:Q,onClose:V,testClipActive:E,onTestClip:Z})]})]})}),!ie&&t(Rr,{}),!ie&&t(ct,{children:[Je&&xe.length===0?t(Mn,{count:3}):t(Gr,{title:"Queue",items:xe,currentShowId:r,currentEpisode:e.currentEpisode??void 0,onNextQueue:ve,onRemove:v=>Ze.mutate({showId:v.showId,episodeNumber:v.episodeNumber}),onClear:()=>Qe.mutate(),showClearAll:!0,onReorder:v=>pt.mutate(v.map(J=>({id:J.id,showId:J.showId,episodeNumber:J.episodeNumber})))}),t("div",{className:w.streamPanel,children:[t(An,{selectedProvider:e.selectedProvider,isAdult:e.showMeta?.isAdult,options:u,onProviderChange:v=>{it(),a({type:"SET_STATE",payload:{selectedProvider:v,videoSources:[],selectedSource:null,selectedLink:null,loadingVideo:!0}}),Bt(v,e.showMeta?.isAdult===!0)}}),wt(`${w.episodeActions} ${w.desktopEpisodeActions}`,"desktop"),Ce?t("div",{className:w.sourceLoader,children:t("div",{className:w.spinner})}):t(xn,{videoSources:e.videoSources,selectedSource:e.selectedSource,selectedLink:e.selectedLink,onSourceChange:v=>{S.videoRef.current&&!isNaN(S.videoRef.current.currentTime)&&(Ue.current=S.videoRef.current.currentTime);const $e=(v.links||[]).sort((lt,gt)=>(parseInt(gt.resolutionStr)||0)-(parseInt(lt.resolutionStr)||0))[0]||null;C(v.sourceName),a({type:"SET_STATE",payload:{selectedSource:v,selectedLink:$e,showResumeModal:e.showResumeModal&&v.type!=="iframe"}})},onLinkChange:v=>{e.selectedSource&&(C(e.selectedSource.sourceName),a({type:"SET_STATE",payload:{selectedLink:v}}))}})]}),t("div",{className:be.playerInfoContainer,children:[t("div",{className:be.playerInfoHeader,children:[t("div",{className:be.playerAnimeCard,children:t("img",{src:Or(e.showMeta.thumbnail||""),alt:Pe,loading:"lazy",decoding:"async",onError:v=>{v.target.src="/placeholder.svg"}})}),t("div",{className:be.videoTitleSection,children:[t("div",{className:w.titleContainer,children:[t("h1",{children:Pe}),t("div",{className:w.scheduleInfo,children:[e.showMeta.status&&t("span",{className:w.status,children:e.showMeta.status}),e.showMeta.nextEpisodeAirDate&&t("span",{className:w.nextEpisode,children:["Next episode: ",e.showMeta.nextEpisodeAirDate]})]})]}),t("div",{className:w.controls,children:[t("button",{className:`${w.watchlistBtn} ${e.inWatchlist?w.inList:""}`,onClick:A,children:[e.inWatchlist?t(me,{name:"check",size:14}):t(me,{name:"plus",size:14}),e.inWatchlist?"In Watchlist":"Add to Watchlist"]}),t(zr,{showId:r,showName:e.showMeta.name||e.showMeta.names?.romaji,showThumbnail:e.showMeta.thumbnail,nativeName:e.showMeta.names?.native,englishName:e.showMeta.names?.english,showType:e.showMeta.type,className:`${w.watchlistBtn} ${w.queueBtn}`,activeClassName:w.queueActive}),Gt&&t("button",{className:`${w.watchlistBtn} ${w.markWatchedBtn} ${kt?w.markWatchedDone:""}`,onClick:qt,disabled:y||!e.currentEpisode,children:[t(me,{name:"check",size:14}),y?"Saving...":kt?"Watched":"Mark Watched"]}),t("button",{className:`${w.watchlistBtn} ${w.modeToggleBtn} ${e.currentMode==="dub"?w.modeToggleActive:""}`,onClick:()=>{const v=e.currentMode==="dub"?"sub":"dub";it(),a({type:"SET_MODE",payload:v}),localStorage.setItem("preferredMode",v)},type:"button","aria-pressed":e.currentMode==="dub",children:e.currentMode==="dub"?"DUB":"SUB"}),He&&t("button",{className:`${w.watchlistBtn} ${w.modeToggleBtn} ${d.state.useNativeControls?w.modeToggleActive:""}`,onClick:()=>{const v=!d.state.useNativeControls;d.actions.setUseNativeControls(v),localStorage.setItem("playerUseNativeControls",v.toString())},type:"button",children:d.state.useNativeControls?"NATIVE: ON":"NATIVE: OFF"})]})]})]}),wt(`${w.episodeActions} ${w.mobileEpisodeActions}`,"mobile"),t("div",{className:be.infoColumns,children:[t("div",{className:`${w.descriptionSection} ${w.synopsisFlat}`,children:[t("h3",{children:"Synopsis"}),t(Hr,{text:e.showMeta.description?e.showMeta.description.replace(/<[^>]*>?/gm,""):"",emptyText:"No description available."}),t("button",{className:w.detailsToggleBtn,onClick:M,children:[e.showCombinedDetails?t(me,{name:"chevron-up"}):t(me,{name:"chevron-down"}),e.showCombinedDetails?"Hide Details":"Show Details"]})]}),e.showCombinedDetails&&t(jr,{showMeta:e.showMeta,styles:w})]})]})]})]}),t(Nr,{isOpen:te,onClose:()=>q(!1),episodes:e.episodes,currentEpisode:e.currentEpisode??void 0,watchedEpisodes:e.watchedEpisodes,onEpisodeClick:v=>{q(!1),l(`/watch/${r}/${v}`)}})]})};export{bs as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
._shell_u5gii_1{position:relative;width:100%;aspect-ratio:16 / 9;background:#000;overflow:clip;isolation:isolate;border-radius:0;container-type:inline-size;touch-action:manipulation;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}@media(max-width:480px)and (orientation:portrait){._shell_u5gii_1{aspect-ratio:1 / 1}}@media(min-width:481px)and (max-width:768px)and (orientation:portrait){._shell_u5gii_1{aspect-ratio:4 / 3}}._shell_u5gii_1:fullscreen,._shell_u5gii_1:-webkit-full-screen{width:100vw;height:100vh;height:100dvh;aspect-ratio:auto;border-radius:0}._shell_u5gii_1:fullscreen,._shell_u5gii_1:fullscreen ._stage_u5gii_38,._shell_u5gii_1:fullscreen ._stage_u5gii_38>video,._shell_u5gii_1:fullscreen ._stage_u5gii_38>canvas,._shell_u5gii_1:fullscreen ._stage_u5gii_38>iframe,._shell_u5gii_1:-webkit-full-screen,._shell_u5gii_1:-webkit-full-screen ._stage_u5gii_38,._shell_u5gii_1:-webkit-full-screen ._stage_u5gii_38>video,._shell_u5gii_1:-webkit-full-screen ._stage_u5gii_38>canvas,._shell_u5gii_1:-webkit-full-screen ._stage_u5gii_38>iframe{border-radius:0!important}@media(max-width:900px)and (orientation:landscape){._shell_u5gii_1{aspect-ratio:auto;height:100vh;height:100dvh;border-radius:0}}._stage_u5gii_38{position:absolute;inset:0;z-index:1;touch-action:manipulation;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}._stage_u5gii_38>video,._stage_u5gii_38>canvas,._stage_u5gii_38>iframe{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:contain;display:block;background:#000;border:none;border-radius:inherit;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}._shellFill_u5gii_87{position:absolute;inset:0;width:100%;height:100%;aspect-ratio:auto}._shellFullscreen_u5gii_95,._shellFullscreen_u5gii_95 ._stage_u5gii_38,._shellFullscreen_u5gii_95 ._stage_u5gii_38>video,._shellFullscreen_u5gii_95 ._stage_u5gii_38>canvas,._shellFullscreen_u5gii_95 ._stage_u5gii_38>iframe{border-radius:0!important}._shellFullscreen_u5gii_95{width:100vw;height:100vh;height:100dvh;aspect-ratio:auto}._uiLayer_u5gii_110{position:absolute;inset:0;z-index:50;pointer-events:none}._uiLayer_u5gii_110>*{pointer-events:auto}._engineStatus_u5gii_121{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:60;max-width:90%;padding:var(--space-3);background:var(--bg-scrim-strong);color:var(--text-primary);text-align:center}._volumeWrap_u5gii_134{display:flex;align-items:center;position:relative}._volumeSlider_u5gii_140{width:0;opacity:0;transform:scaleX(0);transform-origin:left center;transition:width .25s ease,opacity .25s ease,transform .25s ease;cursor:pointer;margin-left:8px;-webkit-appearance:none;appearance:none;background:transparent;height:24px;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}._volumeWrap_u5gii_134[data-expanded=true] ._volumeSlider_u5gii_140{width:84px;opacity:1;transform:scaleX(1)}@media(hover:hover)and (pointer:fine){._volumeWrap_u5gii_134:hover ._volumeSlider_u5gii_140,._volumeSlider_u5gii_140:focus-visible{width:84px;opacity:1;transform:scaleX(1)}}._volumeSlider_u5gii_140::-webkit-slider-runnable-track{width:100%;height:4px;background:linear-gradient(to right,var(--accent) 0%,var(--accent) var(--volume-percent, 0%),rgba(255,255,255,.2) var(--volume-percent, 0%),rgba(255,255,255,.2) 100%);border-radius:4px}._volumeSlider_u5gii_140::-moz-range-track{width:100%;height:4px;background:#fff3;border-radius:4px}._volumeSlider_u5gii_140::-moz-range-progress{height:4px;background:var(--accent);border-radius:4px}._volumeSlider_u5gii_140::-webkit-slider-thumb{-webkit-appearance:none;height:12px;width:12px;border-radius:50%;background:#fff;margin-top:-4px;box-shadow:0 0 5px #00000080}@media(pointer:coarse){._volumeWrap_u5gii_134[data-expanded=true] ._volumeSlider_u5gii_140{width:96px;height:32px}}
|