@serifpersia/dango 3.3.6 → 3.3.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/client/dist/assets/{AnimeCard-OKU7LaSN.js → AnimeCard-D4qo4289.js} +1 -1
- package/client/dist/assets/{AnimeInfo-BCyLw0yz.js → AnimeInfo-BdRRm4So.js} +1 -1
- package/client/dist/assets/{AnimeInfoPage-BZWl-TJY.js → AnimeInfoPage-DeJNAKMR.js} +2 -2
- package/client/dist/assets/{Asmr-4S6uoevp.js → Asmr-D0EGRYsv.js} +1 -1
- package/client/dist/assets/{AsmrResetProgressModal-C8i6weqW.js → AsmrResetProgressModal-Gs0GmVaT.js} +1 -1
- package/client/dist/assets/{AvSyncCalibrator-oK6LlG61.js → AvSyncCalibrator-D8hqarVB.js} +1 -1
- package/client/dist/assets/Home-BnBzjFkW.js +1 -0
- package/client/dist/assets/Insights-Dc8xLmsr.css +1 -0
- package/client/dist/assets/Insights-i9QgY3nE.js +1 -0
- package/client/dist/assets/LibraryListPage-D3hTqTRU.js +1 -0
- package/client/dist/assets/{ListeningList-Dxkhy6E2.js → ListeningList-BgWsfu40.js} +1 -1
- package/client/dist/assets/{Manga-pJEpcUpo.js → Manga-Dn-CYins.js} +1 -1
- package/client/dist/assets/MangaInfoPage-EmQoK7Bv.js +1 -0
- package/client/dist/assets/MangaReadPage-xJB8K2YU.js +1 -0
- package/client/dist/assets/{MangaResetProgressModal-WjKH_G_f.js → MangaResetProgressModal-Dian37PQ.js} +1 -1
- package/client/dist/assets/Mature-DQtXKOXc.js +1 -0
- package/client/dist/assets/{MediaCard-DszKDA4s.js → MediaCard-DpKoY-1j.js} +1 -1
- package/client/dist/assets/{Music-CU6TBHF5.js → Music-BP43Zqmq.js} +1 -1
- package/client/dist/assets/{OptionListMenu-CkK2BvEz.js → OptionListMenu-Bj9ebsW3.js} +1 -1
- package/client/dist/assets/Player-O2Cy2GF1.js +56 -0
- package/client/dist/assets/PlayerSettings-DYZ272Yp.js +1 -0
- package/client/dist/assets/{QueueOptionsButton-DKWi-9kd.js → QueueOptionsButton-lv26-6jp.js} +1 -1
- package/client/dist/assets/{QueueRail-DAcIex5B.js → QueueRail-B7DeSFoA.js} +1 -1
- package/client/dist/assets/{Radio-BhTsgGGd.js → Radio-qQBYnVfY.js} +1 -1
- package/client/dist/assets/{ReadingList-BLnkwB--.js → ReadingList-BT8kUjCB.js} +1 -1
- package/client/dist/assets/{ResetProgressModal-8mcLXaAb.js → ResetProgressModal-DWeiO-hs.js} +1 -1
- package/client/dist/assets/Search-BkvPYN33.js +1 -0
- package/client/dist/assets/{Settings-bSA7BG7h.js → Settings-CyZEBF6S.js} +1 -1
- package/client/dist/assets/SkeletonGrid-B5loz7ii.js +1 -0
- package/client/dist/assets/SkeletonGrid-Bge3aRl2.css +1 -0
- package/client/dist/assets/Trackers-JK-aXBYC.js +2 -0
- package/client/dist/assets/{Tv-DJTbg4VW.js → Tv-BwXWJxMy.js} +1 -1
- package/client/dist/assets/{TvInfo-Z0c1Wh3i.js → TvInfo-Dzyq6ucH.js} +1 -1
- package/client/dist/assets/{TvPopup-CP41CncZ.js → TvPopup-PlCU30FO.js} +1 -1
- package/client/dist/assets/TvSearch-BYwCf5kO.js +1 -0
- package/client/dist/assets/{TvWatchlist-COCWPkgh.js → TvWatchlist-BiJU6pKT.js} +1 -1
- package/client/dist/assets/Watchlist-BOEeGXH9.js +1 -0
- package/client/dist/assets/{hls-B_yo8-yR.js → hls-C11FOWHj.js} +1 -1
- package/client/dist/assets/index-CtoKRNLc.js +178 -0
- package/client/dist/assets/{useAnimeInfoData-CbNnHRj8.js → useAnimeInfoData-kr3WOIWH.js} +1 -1
- package/client/dist/assets/{useAsmr-BEcgHwxg.js → useAsmr-CB9THf0m.js} +1 -1
- package/client/dist/assets/{useAsmrPopup-BXD3y2m1.js → useAsmrPopup-cT_Uu41e.js} +1 -1
- package/client/dist/assets/useMangaLibrary-rM6z3_0E.js +1 -0
- package/client/dist/assets/{useMangaPopup-BvgtZ53s.js → useMangaPopup-PnmSctHu.js} +1 -1
- package/client/dist/assets/{useProviders-xlftutIo.js → useProviders-B3VB7A9M.js} +1 -1
- package/client/dist/assets/{useTv-DTqrJEWp.js → useTv-BTUKMH7Q.js} +1 -1
- package/client/dist/assets/{useTvLibrary-BHeWSd1F.js → useTvLibrary-C0sX-ilZ.js} +1 -1
- package/client/dist/index.html +1 -1
- package/package.json +2 -2
- package/server/dist/controllers/data.controller.js +1 -0
- package/server/dist/controllers/insights.controller.js +8 -3
- package/server/dist/controllers/manga-library.controller.js +54 -0
- package/server/dist/controllers/proxy.controller.js +94 -23
- package/server/dist/controllers/watchlist.controller.js +55 -1
- package/server/dist/lib/anilist.js +36 -3
- package/server/dist/lib/discord-roles-sync.service.js +237 -2
- package/server/dist/lib/mal.js +69 -0
- package/server/dist/lib/tracker/anilist-tracker.js +66 -0
- package/server/dist/lib/tracker/manga-sync.service.js +792 -0
- package/server/dist/repositories/insights.repository.js +10 -0
- package/server/dist/repositories/manga.repository.js +17 -2
- package/server/dist/repositories/shows-meta.repository.js +4 -1
- package/server/dist/repositories/watchlist.repository.js +1 -0
- package/server/dist/routes/insights.routes.js +1 -0
- package/server/dist/routes/manga-library.routes.js +2 -0
- package/server/dist/routes/tracker.routes.js +123 -0
- package/server/dist/sync.js +8 -1
- package/server/package.json +1 -1
- package/client/dist/assets/Home-CQ4Ikeja.js +0 -1
- package/client/dist/assets/Insights-DKtoVe6L.css +0 -1
- package/client/dist/assets/Insights-DiAo0UAc.js +0 -1
- package/client/dist/assets/LibraryListPage-B0MDTnEc.js +0 -1
- package/client/dist/assets/MangaInfoPage-BEQsjTHH.js +0 -1
- package/client/dist/assets/MangaReadPage-C0WAtK-1.js +0 -1
- package/client/dist/assets/Mature-Ckx99wFj.js +0 -1
- package/client/dist/assets/Player-C3yWQkXb.js +0 -56
- package/client/dist/assets/PlayerSettings-CBdTzo0E.js +0 -1
- package/client/dist/assets/Search-DxX021dj.js +0 -1
- package/client/dist/assets/SkeletonGrid-DhPYefXr.css +0 -1
- package/client/dist/assets/SkeletonGrid-Du10CNfq.js +0 -1
- package/client/dist/assets/Trackers-BXSONaRD.js +0 -2
- package/client/dist/assets/TvSearch-BlqTQYJa.js +0 -1
- package/client/dist/assets/Watchlist-BHLshSPX.js +0 -1
- package/client/dist/assets/index-lo-bz7f2.js +0 -178
- package/client/dist/assets/useMangaLibrary-BXhgN-dl.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{d as v,A as T,h as y,u as t,S as Ve,n as Fr,o as qr,a as zr,T as Se,q as S}from"./vendor-core-8R2fFbyN.js";import{u as Wr}from"./vendor-query-BXRECSI6.js";import{e as An,z as Ur,M as cn,B as _e}from"./index-
|
|
1
|
+
import{d as v,A as T,h as y,u as t,S as Ve,n as Fr,o as qr,a as zr,T as Se,q as S}from"./vendor-core-8R2fFbyN.js";import{u as Wr}from"./vendor-query-BXRECSI6.js";import{e as An,z as Ur,M as cn,B as _e}from"./index-CtoKRNLc.js";import{I as $}from"./vendor-icons-CDMuNDeL.js";import{M as Hr,t as ur,f as Rn,d as jr,C as Kr,S as Yr,U as Qr,a as Gr,p as Dn,u as Jr,b as Xr,c as Zr,l as es,q as ts,i as Pn,v as ns,w as rs,x as cr,s as Ln,e as ss,g as as,h as os,r as is,j as nt,k as ls,E as cs,A as ds,P as us,m as be,o as ms}from"./AvSyncCalibrator-D8hqarVB.js";import{O as un,S as hs,a as ps,A as fs}from"./OptionListMenu-Bj9ebsW3.js";import{u as gs}from"./useMatureConsent-CT7-KfzG.js";import{u as vs}from"./useProviders-B3VB7A9M.js";import{d as bs,g as ys,h as Ss,f as _s,e as Cs,j as Ts,k as ks}from"./useTvLibrary-C0sX-ilZ.js";import{l as Es,c as Ns}from"./hls-C11FOWHj.js";import{u as ws}from"./useIsMobile-Dm_b6Ob3.js";import{S as xs}from"./SynopsisText-BcpwT5iw.js";const Is="_fullscreenFlat_1deq4_1",Bs="_timeDisplay_1deq4_15",Ms="_bottomControls_1deq4_19",As="_leftControls_1deq4_23",Ps="_rightControls_1deq4_24",Ls="_controlBtn_1deq4_28",$s="_controlsOverlay_1deq4_47",Rs="_hidden_1deq4_67",Ds="_topControls_1deq4_73",Os="_backBtn_1deq4_93",Vs="_videoTitleInfo_1deq4_113",Fs="_animeTitle_1deq4_119",qs="_episodeLabel_1deq4_127",zs="_speedBoostBadge_1deq4_134",Ws="_progressBarContainer_1deq4_180",Us="_progressBar_1deq4_180",Hs="_thumb_1deq4_199",js="_bufferedBar_1deq4_217",Ks="_watchedBar_1deq4_227",Ys="_scrubbing_1deq4_252",Qs="_timeBubble_1deq4_256",Gs="_bottomControlsRow_1deq4_270",Js="_nextEpisodeBtn_1deq4_293",Xs="_active_1deq4_346",Zs="_settingsPanel_1deq4_421",ea="_settingsHeader_1deq4_440",ta="_settingsBackBtn_1deq4_448",na="_settingsTitle_1deq4_466",ra="_settingsContent_1deq4_477",sa="_currentValue_1deq4_486",aa="_menuItem_1deq4_501",oa="_menuNote_1deq4_534",a={fullscreenFlat:Is,timeDisplay:Bs,bottomControls:Ms,leftControls:As,rightControls:Ps,controlBtn:Ls,controlsOverlay:$s,hidden:Rs,topControls:Ds,backBtn:Os,videoTitleInfo:Vs,animeTitle:Fs,episodeLabel:qs,speedBoostBadge:zs,progressBarContainer:Ws,progressBar:Us,thumb:Hs,bufferedBar:js,watchedBar:Ks,scrubbing:Ys,timeBubble:Qs,bottomControlsRow:Gs,nextEpisodeBtn:Js,active:Xs,settingsPanel:Zs,settingsHeader:ea,settingsBackBtn:ta,settingsTitle:na,settingsContent:ra,currentValue:sa,menuItem:aa,menuNote:oa},dn=-1e4,$n=1e4,dr=500,ia=({classes:u,delayMs:w,onDelayChange:Z})=>{const[U,q]=v(null),V=U??w,r=T(Z);r.current=Z;const B=T(w);B.current=w;const se=T(null);se.current=U,y(()=>{q(null)},[w]),y(()=>()=>{const H=se.current;H!==null&&H!==B.current&&r.current(H)},[]);const me=H=>{B.current=H,se.current=null,r.current(H),q(null)},l=H=>{const ne=se.current??B.current,Fe=Math.max(dn,Math.min($n,ne+H));me(Fe)};return t(Ve,{children:[t("div",{style:{display:"flex",gap:6,padding:"0.5rem 0.75rem 0.25rem"},children:[t("button",{type:"button",className:u.item,onClick:()=>l(-dr),"aria-label":"Show subtitles 0.5 seconds earlier",style:{flex:1,justifyContent:"center"},children:t("span",{children:"-0.5s"})}),t("button",{type:"button",className:u.item,onClick:()=>l(dr),"aria-label":"Show subtitles 0.5 seconds later",style:{flex:1,justifyContent:"center"},children:t("span",{children:"+0.5s"})}),t("button",{type:"button",className:u.item,onClick:()=>me(0),disabled:V===0,"aria-label":"Reset subtitle timing",style:{flex:1,justifyContent:"center"},children:t("span",{children:"Reset"})})]}),t(Hr,{label:"Subtitle timing",display:ur(V),min:dn,max:$n,step:100,value:V,percent:(V-dn)/($n-dn)*100,onChange:H=>{const ne=Math.round(H);se.current=ne,q(ne)},onCommit:()=>{const H=se.current;H!==null&&me(H)}}),t("div",{className:u.note,children:"Positive delays subtitles (show later). Negative shows them earlier. 0.0s is default."})]})},la=({classes:u,tracks:w,selected:Z,onChange:U})=>t(un,{classes:u,options:w.map((q,V)=>({key:String(V),label:q.label||q.language,selected:V===Z})),onSelect:q=>U(Number(q))}),ca=({player:u,title:w,episodeLabel:Z,audioTracks:U,selectedAudioTrack:q,onAudioTrackChange:V,subtitles:r,selectedSubtitle:B,onSubtitleChange:se,streams:me,qualityIdx:l,onQualityChange:H,onBack:ne,children:Fe,movyServers:g=[],selectedMovyServer:ye="atlanta",onMovyServerSelect:R,isMovySource:$t=!1,videoDelayEnabled:ae=!1,onVideoDelayToggle:qe,videoDelayMs:yt=0,onVideoDelayChange:St,onCalibrateAvSync:Rt,subtitleDelayMs:Dt=0,onSubtitleDelayChange:mn,showNextEpisodeButton:Ot=!1,onNextEpisode:oe})=>{const{state:M,refs:Vt,actions:P}=u,j=Vt.videoRef,{subtitleFontSize:he,subtitlePosition:K,subtitleBgOpacity:rt,subtitleBgColor:st,subtitleTextColor:Ce,subtitleEdge:ze,subtitleBold:pe}=M,[x,D]=v(null),Ie=T(null),[Ae,hn]=v(0);y(()=>{const o=j.current;if(!o)return;const c=()=>hn(o.clientHeight||0);c();const Be=new ResizeObserver(c);return Be.observe(o),()=>Be.disconnect()},[j,me]);const fe=(o,c)=>{try{localStorage.setItem(o,String(c))}catch{}},at=(o,c)=>{switch(o){case"fontSize":typeof c=="number"&&(P.setSubtitleFontSize(c),fe("subtitleFontSize",c));break;case"position":typeof c=="number"&&(P.setSubtitlePosition(c),fe("subtitlePosition",c));break;case"bgOpacity":typeof c=="number"&&(P.setSubtitleBgOpacity(c),fe("subtitleBgOpacity",c));break;case"bgColor":typeof c=="string"&&(P.setSubtitleBgColor(c),fe("subtitleBgColor",c));break;case"textColor":typeof c=="string"&&(P.setSubtitleTextColor(c),fe("subtitleTextColor",c));break;case"edge":(c==="shadow"||c==="outline"||c==="none")&&(P.setSubtitleEdge(c),fe("subtitleEdge",c));break;case"bold":typeof c=="boolean"&&(P.setSubtitleBold(c),fe("subtitleBold",c));break}};y(()=>{const o="tv-player-subtitle-style";let c=document.getElementById(o);c||(c=document.createElement("style"),c.id=o,document.head.appendChild(c));const Be={fontSize:he,position:K,bgOpacity:rt,bgColor:st,textColor:Ce,edge:ze,bold:pe},L=j.current,kt=Rn(he,Ae||L?.clientHeight||720);if(c.textContent=jr({...Be,fontSize:kt}),L){const Et=()=>{const E=Number(K);return isNaN(E)?0:Math.max(0,Math.min(100,E))},Te=(E,Q)=>{try{const A=E;A.snapToLines=!1,A.line=Q}catch{}},vn=()=>{const E=kt*16,Q=L.videoHeight||L.clientHeight||720,A=L.videoWidth||L.clientWidth||1280;return{step:E*1.3/Q*100,chars:Math.max(20,Math.floor(A/(E*.55)))}},ct=E=>{const Q=Math.max(0,Math.min(100,100-Et())),A=Array.from(E.activeCues??[]);if(A.length<=1){A.forEach(Le=>Te(Le,Q));return}const{step:ut,chars:wt}=vn();let je=Q;for(let Le=A.length-1;Le>=0;Le--){const m=String(A[Le].text??"").replace(/<[^>]*>/g,"").split(`
|
|
2
2
|
`).reduce((O,Yt)=>O+Math.max(1,Math.ceil(Yt.length/wt)),0),Ke=je-m*ut;Te(A[Le],Math.max(0,Ke)),je=Ke-ut*.4}},Nt=()=>{const E=Math.max(0,Math.min(100,100-Et()));Array.from(L.textTracks).forEach(Q=>{Q.cues&&(Array.from(Q.cues).forEach(A=>Te(A,E)),Q.mode==="showing"&&ct(Q))})};Nt();const dt=E=>{const Q=E.target;Q.mode==="showing"&&ct(Q)},Ht=()=>{Array.from(L.textTracks).forEach(E=>{E.removeEventListener("cuechange",dt),E.addEventListener("cuechange",dt)}),Nt()};Array.from(L.textTracks).forEach(E=>{E.addEventListener("cuechange",dt)}),L.textTracks.addEventListener("addtrack",Ht);const jt=Array.from(L.querySelectorAll("track")),Kt=()=>Nt();return jt.forEach(E=>E.addEventListener("load",Kt)),()=>{Array.from(L.textTracks).forEach(E=>{E.removeEventListener("cuechange",dt)}),L.textTracks.removeEventListener("addtrack",Ht),jt.forEach(E=>E.removeEventListener("load",Kt))}}},[he,K,rt,st,Ce,ze,pe,B,r,j,Ae]);const ot=o=>{const c=j.current;!c||isNaN(M.duration)||M.duration===0||(c.currentTime=o*M.duration)},pn=()=>{j.current&&(P.setIsScrubbing(!0),P.wasPlayingBeforeScrub.current=!j.current.paused,j.current.pause())},_t=o=>{const c=j.current;c&&M.duration&&(c.currentTime=o*M.duration)},We=()=>{P.setIsScrubbing(!1),P.wasPlayingBeforeScrub.current&&j.current?.play().catch(()=>{})},ee=o=>{const c=j.current;c&&(c.volume=o,c.muted=o===0,localStorage.setItem("playerVolume",o.toString()))},Ft=()=>{P.toggleMute()},Pe=r.length>0,k=B>=0,X=()=>{D("main"),P.setShowControls(!0)},qt=()=>{if(k){se(-1);return}let o=null;try{o=localStorage.getItem("tvLastSubtitle")}catch{}se(Dn(r,{lastKey:o,enabled:!0}))},Ct=()=>{D(null)},Tt=()=>t(Ve,{children:[me.length>1&&t("button",{className:a.menuItem,onClick:()=>D("quality"),children:[t("span",{children:"Quality"}),t("span",{className:a.currentValue,children:me[l]?.quality||"Auto"})]}),$t&&g.length>0&&t("button",{className:a.menuItem,onClick:()=>D("server"),children:[t("span",{style:{display:"flex",alignItems:"center",gap:6},children:[t($,{name:"server",size:12})," Movy Server"]}),t("span",{className:a.currentValue,style:{textTransform:"capitalize"},children:ye})]}),Pe&&t("button",{className:a.menuItem,onClick:()=>D("subtitles"),children:[t("span",{children:"Subtitles"}),t("span",{className:a.currentValue,children:k?r[B]?.label||r[B]?.language:"Off"})]}),Pe&&t("button",{className:a.menuItem,onClick:()=>D("subtitle-style"),children:[t("span",{children:"Subtitle Style"}),t("span",{className:a.currentValue,children:[he.toFixed(1),"x · ",K]})]}),Pe&&t("button",{className:a.menuItem,onClick:()=>D("subtitle-timing"),children:[t("span",{children:"Subtitle Timing"}),t("span",{className:a.currentValue,children:ur(Dt)})]}),U.length>0&&t("button",{className:a.menuItem,onClick:()=>D("audio"),children:[t("span",{children:"Audio Track"}),t("span",{className:a.currentValue,children:U[q]?.label||U[q]?.language})]}),t("button",{className:a.menuItem,onClick:()=>D("av-sync"),children:[t("span",{children:"A/V Sync"}),t("span",{className:a.currentValue,children:ae?`${yt}ms`:"Off"})]})]}),fn=()=>t(un,{classes:{item:a.menuItem,active:a.active},options:me.map((o,c)=>({key:String(c),label:o.quality,selected:c===l})),onSelect:o=>H(Number(o))}),_=()=>t(un,{classes:{item:a.menuItem,active:a.active},options:[{key:"off",label:"Off",selected:!k},...r.map((o,c)=>({key:String(c),label:o.label||o.language,selected:c===B}))],onSelect:o=>se(o==="off"?-1:Number(o))}),d=()=>t(ps,{classes:{item:a.menuItem,active:a.active},values:{fontSize:he,position:K,bgOpacity:rt,bgColor:st,textColor:Ce,edge:ze,bold:pe},onChange:at}),ie=()=>t(ia,{classes:{item:a.menuItem,active:a.active,note:a.menuNote},delayMs:Dt,onDelayChange:o=>mn?.(o)}),le=()=>t(la,{classes:{item:a.menuItem,active:a.active},tracks:U,selected:q,onChange:V}),zt=()=>t(un,{classes:{item:a.menuItem,active:a.active},options:g.map(o=>({key:o,label:t("span",{style:{textTransform:"capitalize"},children:o}),selected:ye===o})),onSelect:o=>R?.(o)}),Wt=()=>t(fs,{classes:{item:a.menuItem,active:a.active,note:a.menuNote},enabled:ae,delayMs:yt,onToggle:o=>qe?.(o),onDelayChange:o=>St?.(o),onCalibrate:()=>{D(null),Rt?.()}}),Ue=M.isMuted?t($,{name:"volume-mute"}):M.volume<.5?t($,{name:"volume-down"}):t($,{name:"volume-up"}),Ut=t("div",{className:`${a.controlsOverlay} ${!M.showControls&&!x?a.hidden:""}`,"data-speed-boost-ignore":"true",style:{pointerEvents:"none",background:"none"},children:t("div",{className:a.topControls,onClick:o=>o.stopPropagation(),children:[t("button",{className:a.backBtn,onClick:ne,title:"Back","aria-label":"Back",children:t($,{name:"chevron-left"})}),t("div",{className:a.videoTitleInfo,children:[t("span",{className:a.animeTitle,children:w}),Z&&t("span",{className:a.episodeLabel,children:Z})]})]})}),He=t(Kr,{isPlaying:M.isPlaying,onTogglePlay:P.togglePlay,onSkipBack:()=>P.seek(-10),onSkipForward:()=>P.seek(10)}),it=t("div",{className:`${a.controlsOverlay} ${!M.showControls&&!x?a.hidden:""}`,"data-speed-boost-ignore":"true",style:{pointerEvents:"none",background:"none",justifyContent:"flex-end"},children:t("div",{className:a.bottomControls,onClick:o=>o.stopPropagation(),children:[t(Yr,{classes:{container:a.progressBarContainer,scrubbing:a.scrubbing,timeBubble:a.timeBubble,bar:a.progressBar,buffered:a.bufferedBar,watched:a.watchedBar,thumb:a.thumb},videoRef:j,duration:M.duration,formatTime:An,isScrubbing:M.isScrubbing,buffered:"full",onSeek:ot,onScrubStart:pn,onScrubMove:_t,onScrubEnd:We,timeLabelRef:Ie}),t("div",{className:a.bottomControlsRow,children:[t("div",{className:a.leftControls,children:[t("button",{className:a.controlBtn,onClick:P.togglePlay,"aria-label":M.isPlaying?"Pause":"Play",children:M.isPlaying?t($,{name:"pause"}):t($,{name:"play"})}),t(Qr,{muted:M.isMuted,volume:M.volume,volumeIcon:Ue,buttonClassName:a.controlBtn,onToggleMute:Ft,onVolumeChange:ee,onExpandedChange:o=>P.setShowVolumeSlider(o)}),t("span",{className:a.timeDisplay,ref:Ie,children:[An(0)," / ",An(M.duration)]})]}),t("div",{className:a.rightControls,children:[Ot&&t("button",{className:a.nextEpisodeBtn,onClick:oe,title:"Play next episode",children:"Next EP"}),Pe&&t("button",{className:`${a.controlBtn} ${k?a.active:""}`,onClick:qt,"aria-label":k?"Turn subtitles off":"Turn subtitles on",children:t($,{name:"closed-captioning"})}),t("button",{className:`${a.controlBtn} ${x?a.active:""}`,onClick:()=>x?Ct():X(),"aria-label":"Settings",children:t($,{name:"cog"})}),t("button",{className:a.controlBtn,onClick:P.toggleFullscreen,"aria-label":M.isFullscreen?"Exit Fullscreen":"Fullscreen",children:M.isFullscreen?t($,{name:"compress"}):t($,{name:"expand"})})]})]})]})}),gn=x?t("div",{"data-speed-boost-ignore":"true",onClick:o=>o.stopPropagation(),children:t(hs,{classes:{panel:a.settingsPanel,header:a.settingsHeader,backBtn:a.settingsBackBtn,title:a.settingsTitle,content:a.settingsContent},title:x==="main"?"Settings":x==="subtitle-style"?"Subtitle Style":x==="subtitle-timing"?"Subtitle Timing":x==="audio"?"Audio Track":x==="server"?"Movy Server":x==="av-sync"?"A/V Sync":x.charAt(0).toUpperCase()+x.slice(1),onBack:()=>x==="main"?Ct():D("main"),children:[x==="main"&&Tt(),x==="quality"&&fn(),x==="subtitles"&&_(),x==="subtitle-style"&&d(),x==="subtitle-timing"&&ie(),x==="audio"&&le(),x==="server"&&zt(),x==="av-sync"&&Wt()]})}):null,lt=M.isSpeedBoostActive?t("div",{className:a.speedBoostBadge,"aria-hidden":"true",children:[t("span",{children:"2x"}),t($,{name:"forward",size:12})]}):null;return t(Gr,{player:u,topBar:Ut,centerControls:He,bottomBar:it,settingsPanel:gn,overlays:lt,isInteracting:!!x,className:M.isFullscreen?a.fullscreenFlat:"",children:Fe})};function da(u,w,Z){const U=()=>{const V=Array.isArray(u.audioTracks)?u.audioTracks.length:0,r=Z.getWant(),B=V>0?Math.min(Math.max(0,r),V-1):r;u.audioTrack=B,B!==r&&Z.onResolve(B)},q=(V,r)=>{const B=Z.getWant(),se=Array.isArray(u.audioTracks)?u.audioTracks.length:0;if(r.id!==B&&B>=0&&B<se){u.audioTrack!==B&&(u.audioTrack=B);return}Z.onResolve(r.id)};return u.on(w.MANIFEST_PARSED,U),u.on(w.AUDIO_TRACK_SWITCHED,q),()=>{u.off(w.MANIFEST_PARSED,U),u.off(w.AUDIO_TRACK_SWITCHED,q)}}const ua="_page_263ma_1",ma="_header_263ma_7",ha="_pageTitle_263ma_11",pa="_searchForm_263ma_21",fa="_searchInput_263ma_27",ga="_searchBtn_263ma_42",va="_suggestions_263ma_58",ba="_suggestionPill_263ma_65",ya="_statusMsg_263ma_81",Sa="_error_263ma_87",_a="_textOnly_263ma_91",Ca="_spinner_263ma_96",Ta="_spin_263ma_96",ka="_grid_263ma_110",Ea="_skeletonCard_263ma_116",Na="_skeletonThumb_263ma_121",wa="_skeletonLine_263ma_127",xa="_shimmer_263ma_134",Ia="_backBtn_263ma_154",Ba="_meta_263ma_172",Ma="_headerActions_263ma_180",Aa="_watchlistBtn_263ma_187",Pa="_active_263ma_205",La="_year_263ma_215",$a="_rating_263ma_220",Ra="_typeBadge_263ma_229",Da="_tv_263ma_237",Oa="_movie_263ma_242",Va="_tvSeries_263ma_247",Fa="_tvMiniSeries_263ma_252",qa="_overview_263ma_257",za="_controls_263ma_264",Wa="_controlLabel_263ma_272",Ua="_select_263ma_282",Ha="_playerSection_263ma_293",ja="_video_263ma_297",Ka="_videoHidden_263ma_319",Ya="_delayCanvas_263ma_324",Qa="_delayCanvasActive_263ma_337",Ga="_subtitleOverlay_263ma_341",Ja="_videoIframe_263ma_360",Xa="_retryButton_263ma_368",Za="_sidebarSeason_263ma_383",eo="_mobileSeasonRow_263ma_399",to="_sidebarPosterCard_263ma_413",no="_sidebarPosterMeta_263ma_428",ro="_providerSelectWrap_263ma_445",so="_genreRow_263ma_457",ao="_genreChip_263ma_464",oo="_metaRow_263ma_474",io="_detailGrid_263ma_483",lo="_detailItem_263ma_490",co="_imdbLink_263ma_512",h={page:ua,header:ma,pageTitle:ha,searchForm:pa,searchInput:fa,searchBtn:ga,suggestions:va,suggestionPill:ba,statusMsg:ya,error:Sa,textOnly:_a,spinner:Ca,spin:Ta,grid:ka,skeletonCard:Ea,skeletonThumb:Na,skeletonLine:wa,shimmer:xa,backBtn:Ia,meta:Ba,headerActions:Ma,watchlistBtn:Aa,active:Pa,year:La,rating:$a,typeBadge:Ra,tv:Da,movie:Oa,tvSeries:Va,tvMiniSeries:Fa,overview:qa,controls:za,controlLabel:Wa,select:Ua,playerSection:Ha,video:ja,videoHidden:Ka,delayCanvas:Ya,delayCanvasActive:Qa,subtitleOverlay:Ga,videoIframe:Ja,retryButton:Xa,sidebarSeason:Za,mobileSeasonRow:eo,sidebarPosterCard:to,sidebarPosterMeta:no,providerSelectWrap:ro,genreRow:so,genreChip:ao,metaRow:oo,detailGrid:io,detailItem:lo,imdbLink:co},uo=[],Eo=()=>{const{id:u}=Fr(),[w]=qr(),Z=T(w);Z.current=w;const U=zr(),q=Wr(),V=w.get("type"),[r,B]=v(null),[se,me]=v(!1),[l,H]=v(()=>parseInt(w.get("s")||"1",10)||1),[ne,Fe]=v([]),[g,ye]=v(()=>parseInt(w.get("e")||"1",10)||1),[R,$t]=v(()=>{try{return localStorage.getItem("tvProvider")||""}catch{return""}}),[ae,qe]=v([]),[yt,St]=v(""),{options:Rt,isFallback:Dt,isLoading:mn}=vs(),Ot=Se(()=>Rt.filter(e=>(e.kind??"tv")==="tv").map(e=>({id:e.value,label:e.label,tier:e.tier==="embed"?"embed":"direct",servers:e.servers})),[Rt]),oe=Dt||Ot.length===0?uo:Ot,M=oe.filter(e=>e.tier==="direct"),Vt=oe.filter(e=>e.tier==="embed"),[P,j]=v(!1),[he,K]=v(""),[rt,st]=v([]),[Ce,ze]=v(0),[pe,x]=v([]),[D,Ie]=v(-1),[Ae,hn]=v("all"),[fe,at]=v(0),[ot,pn]=v(""),[_t,We]=v(""),[ee,Ft]=v(()=>{try{return localStorage.getItem("movyServer")||""}catch{return""}}),Pe=Se(()=>oe.find(e=>e.id===R),[oe,R]),k=Pe?.tier==="embed",X=Se(()=>Pe?.servers??[],[Pe]),qt=T([]);y(()=>{qt.current=ae},[ae]);const Ct=T(Ce);y(()=>{Ct.current=Ce},[Ce]);const Tt=T(D);y(()=>{Tt.current=D},[D]);const fn=Se(()=>[],[]),_=Jr({skipIntervals:fn}),d=_.refs.videoRef,ie=T(null),le=T([]),zt=T(null),Wt=T(null),[Ue,Ut]=v(()=>{try{const e=Number(localStorage.getItem("playerVideoDelayMs"));if(Number.isFinite(e)&&e>=0&&e<=500)return Math.round(e)}catch{}return 180}),[He,it]=v(()=>{try{return localStorage.getItem("playerVideoDelayEnabled")==="true"}catch{return!1}}),[gn,lt]=v(!1),[o,c]=v(!1),Be=T(null),L=T(null),kt=(e,n)=>{try{localStorage.setItem("playerVideoDelayMs",String(e)),localStorage.setItem("playerVideoDelayEnabled",String(n))}catch{}},Et=e=>{const n=Math.max(0,Math.min(500,Math.round(e)));Ut(n);try{localStorage.setItem("playerVideoDelayMs",String(n))}catch{}},[Te,vn]=v(()=>{try{const e=Number(localStorage.getItem("tvSubtitleDelayMs"));if(Number.isFinite(e)&&e>=-1e4&&e<=1e4)return Math.round(e)}catch{}return 0}),ct=T(Te);ct.current=Te;const Nt=S(e=>{const n=Math.max(-1e4,Math.min(1e4,Math.round(e)));if(ct.current!==n){ct.current=n,vn(n);try{localStorage.setItem("tvSubtitleDelayMs",String(n))}catch{}}},[]),dt=()=>{Be.current={enabled:He,ms:Ue},it(!0);try{localStorage.setItem("playerVideoDelayEnabled","true")}catch{}lt(!0)},Ht=()=>{const e=Be.current;Be.current=null,e&&(Ut(e.ms),it(e.enabled),kt(e.ms,e.enabled)),c(!1),lt(!1)},jt=()=>{Be.current=null,it(!0),kt(Ue,!0),c(!1),lt(!1)},Kt=()=>{if(o){c(!1);return}const e=d.current;e&&!isNaN(e.currentTime)&&(L.current=e.currentTime),c(!0)},E=He?Ue:0;Xr({videoRef:d,canvasRef:zt,delayMs:E,enabled:He});const Q=He,A=Q||Te!==0,ut=T(A);ut.current=A;const wt=S(()=>{if(!ut.current)return;const e=d.current;e&&Array.from(e.textTracks).forEach(n=>{n.mode!=="hidden"&&(n.mode="hidden")})},[d]),{hasConsent:je,grant:Le}=gs(),mt=T("");mt.current||(mt.current=`tv-${Date.now()}-${Math.random().toString(36).slice(2)}`);const m=V==="movie",Ke=u?bs(V||"tv",u):"",O=Ke,Yt=ys(),Qt=Ss(),{toggle:On,bookmarkedIds:mr,pending:hr}=_s(),{data:Vn}=Cs(r?Ke:void 0),Gt=Vn?!!Vn.inLibrary:Ke?mr.has(Ke):!1,pr=S(()=>{!r||!u||On({tmdbId:Number(u),mediaType:V||"tv",title:r.title,poster:r.poster,year:r.year,adult:r.adult})},[r,u,V,On]),{data:Ye,isFetched:Fn,isPending:qn}=Ts(O||void 0,l,g),Jt=Se(()=>ne.map(e=>e.episode_number).sort((e,n)=>e-n),[ne]),Qe=Jt.indexOf(g),bn=Qe>0?Jt[Qe-1]:null,N=Qe>=0&&Qe<Jt.length-1?Jt[Qe+1]:null,Xt=Se(()=>(r?.seasons??[]).map(e=>e.season_number).filter(e=>Number.isFinite(e)).sort((e,n)=>e-n),[r]),ge=Se(()=>{if(m||N!=null)return null;const e=Xt.indexOf(l);return e>=0&&e<Xt.length-1?Xt[e+1]:(r?.number_of_seasons??0)>l?l+1:null},[m,N,Xt,l,r?.number_of_seasons]),zn=Ye?.currentTime??0,Wn=Ye?.duration??0,yn=Ye?.completed===!0||Ye?.completed===1||Pn(zn,Wn),[ke,Me]=v(!1),Ee=T(!1),Sn=T(null),xt=T(null);y(()=>{Ee.current=!1,xt.current=null,Me(!1)},[O,l,g]);const[Ne,Zt]=v(!1),[ht,Un]=v(0),[Ge,Hn]=v(!1),[$e,Je]=v(!1),[fr,_n]=v(!1),[gr,jn]=v(""),[en,vr]=v(!1),[br,Cn]=v(!1);Zr(_,(ae.length>0||_t!=="")&&!Ne&&!ke&&!$e);const yr=ws(),[pt,Sr]=v(es),_r=S(e=>{Sr(e),ts(e)},[]),ce=T(!1),Xe=T(null),Tn=T(0),Kn=T(!1),Yn=T(0),te=T(null),It=T(""),Cr=cr(zn,Wn),Bt=!ce.current&&!Ee.current&&(Ne||ke||$e||yn||Cr),ft=T(Bt);ft.current=Bt;const gt=T(!1);y(()=>{gt.current=Ge},[Ge]);const Tr=e=>{const n=Math.floor(e/3600),s=Math.floor(e%3600/60),i=Math.floor(e%60);return n>0?`${n}:${String(s).padStart(2,"0")}:${String(i).padStart(2,"0")}`:`${s}:${String(i).padStart(2,"0")}`},Re=S((e,n)=>{if(!O||!n||n<30)return;const s=Pn(e,n),i=s?n:e;Math.abs(i-Tn.current)<10&&!s||(Tn.current=i,Yt.mutate({mediaId:O,season:l,episode:g,currentTime:Math.floor(i),duration:Math.floor(n),completed:s,title:r?.title??null,poster:r?.poster??null,backdrop:r?.backdrop??null,year:r?.year??null,overview:r?.overview??null,tmdbId:r?.id??null,mediaType:V||"tv",adult:r?.adult?1:0}))},[O,l,g,Yt,r,V]),we=S((e,n)=>{c(!1),lt(!1);const s=new URLSearchParams(w);s.set("type",w.get("type")||"tv"),s.set("s",String(e)),s.set("e",String(n)),U(`${window.location.pathname}?${s.toString()}`)},[w,U]),Mt=S(()=>{const e=d.current;if(!e||m||N==null){_n(!1);return}const n=e.duration||0,s=e.currentTime||0;_n(n>0&&s/n>=.8)},[m,N,d]),tn=S((e,n)=>["tv-sources",R,m?"movie":"tv",u,e,n,ee],[R,m,u,ee]),nn=S(async(e,n)=>{if(!r||!u||!R)return{valid:!1,sources:[]};const s=m?"movie":"tv",i=new URLSearchParams({title:r.title||"",year:r.year||"",season:String(e),episode:String(n),totalSeasons:String(r.number_of_seasons||1),imdbId:r.imdb_id||""});return X.length>0&&ee&&i.set("server",ee),await(await fetch(`/api/tv/sources/${R}/${s}/${u}?${i.toString()}`)).json()},[r,u,R,m,X,ee]),Qn=S(()=>{if(m||!r||!u||!R||k||N==null)return;const e=tn(l,N);q.getQueryState(e)?.status!=="success"&&q.prefetchQuery({queryKey:e,queryFn:()=>nn(l,N),staleTime:300*1e3,gcTime:1800*1e3})},[m,r,u,R,k,N,l,q,tn,nn]),kr=S(()=>{if(o)return;Mt();const e=d.current;!e||e.paused||e.ended||(e.duration>0&&e.duration-e.currentTime<=60&&Qn(),Xe.current&&clearTimeout(Xe.current),Xe.current=setTimeout(()=>{Re(e.currentTime,e.duration||0)},5e3))},[Re,d,o,Mt,Qn]),Er=S(()=>{const e=d.current;if(!e||!r)return;Xe.current&&clearTimeout(Xe.current),Re(e.currentTime,e.duration||0),Kn.current=!0;const n=ns({seekInduced:Date.now()-Yn.current<rs,autoplayEnabled:pt,hasNext:!m&&N!=null,isFinal:m||N==null});n==="advance"&&N!=null?(ye(N),we(l,N)):n==="prompt-next"?(Ee.current=!1,ce.current=!0,Me(!0)):n==="prompt-complete"&&(jn(m?r.title:`${r.title} — Season ${l}`),Je(!0),Ee.current=!0,ce.current=!0)},[m,r,l,N,pt,Re,we,d]),Nr=S(()=>{Kn.current=!1,_.actions.onPlay()},[_.actions]),wr=S(()=>{_.actions.onPause();const e=d.current;e&&!e.ended&&Re(e.currentTime,e.duration||0)},[_.actions,Re,d]),xr=S(()=>{_.actions.onLoadedMetadata();const e=d.current;if(e){try{const n=parseFloat(localStorage.getItem("playerVolume")||"");isNaN(n)||(e.volume=Math.max(0,Math.min(1,n))),e.muted=localStorage.getItem("playerMuted")==="true"}catch{}if(te.current!=null&&te.current>0){try{e.currentTime=te.current}catch{}te.current=null}Mt()}},[_.actions,d,Mt]),vt=S(()=>{const e=d.current;if(e&&te.current!=null&&te.current>0){try{e.currentTime=te.current}catch{}te.current=null}},[d]),Ir=S(()=>{ht>0&&(te.current=ht);const e=d.current;if(e&&ht>0){try{e.currentTime=ht,te.current=null}catch{}e.play().catch(()=>{})}Zt(!1),ce.current=!0},[ht,d]),Gn=S(()=>{te.current=null;const e=d.current;e&&(e.currentTime=0,e.play().catch(()=>{})),Zt(!1),ce.current=!0},[d]),Br=S(()=>{Ee.current=!0,Me(!1),ce.current=!0},[]),Mr=S(()=>{Ee.current=!0,Me(!1),ce.current=!0,te.current=null;const e=d.current;if(e){try{e.currentTime=0}catch{}e.play().catch(()=>{})}},[d]),Jn=S(()=>{N!=null&&(Ee.current=!0,Me(!1),ce.current=!0,ye(N),we(l,N))},[N,l,we]),Xn=S(()=>{ge!=null&&(Ee.current=!0,Me(!1),Je(!1),ce.current=!0,H(ge),ye(1),we(ge,1))},[ge,we]),Ar=S(async()=>{if(O)try{await Qt.mutateAsync({id:O,status:"Completed"}),Je(!1),Me(!1),U("/")}catch{}},[O,Qt,U]);y(()=>{ce.current=!1,Sn.current=null,Zt(!1),_n(!1),Un(0),Hn(!1),gt.current=!1,te.current=null,It.current=`${O}:${l}:${g}`,Tn.current=0},[O,l,g]),y(()=>{Fn&&(Hn(!0),gt.current=!0)},[Fn,O,l,g]),y(()=>{if(!Ye||ce.current)return;const e=`${O}:${l}:${g}`;if(Sn.current===e)return;Sn.current=e;const n=Ye,s=n.currentTime??0,i=n.duration??0;cr(s,i)&&(Un(s),Zt(!0))},[Ye,O,l,g]),y(()=>{if(!Ge||ce.current||Ee.current||Ne||$e||ke)return;const e=`${O}:${l}:${g}`;if(xt.current!==e){if(!yn){qn||(xt.current=e);return}if(m){xt.current=e,Me(!0);return}if(!(!r||Qe<0||ne.length===0)){if(xt.current=e,N==null&&ge==null){r&&ne.length>0&&(jn(`${r.title} — Season ${l}`),Je(!0),Ee.current=!0,ce.current=!0);return}Me(!0)}}},[Ge,yn,qn,Ne,$e,ke,m,N,ge,r,Qe,ne.length,O,l,g]),y(()=>{(Ne||ke)&&d.current&&d.current.pause()},[Ne,ke,d]),y(()=>{const e=d.current;return()=>{Xe.current&&clearTimeout(Xe.current),e&&!e.ended&&Re(e.currentTime,e.duration||0)}},[Re,d]);const kn=S(e=>{let n=null,s=!0;try{n=localStorage.getItem("tvLastSubtitle"),s=localStorage.getItem("tvSubtitlesEnabled")!=="false"}catch{}return Dn(e,{lastKey:n,enabled:s})},[]),En=S(e=>{if(!(e<0))try{localStorage.setItem("tvSubtitlesEnabled","true"),localStorage.setItem("tvSelectedSubtitle",String(e))}catch{}},[]),Zn=S(e=>{if(e.length===0)return 0;let n=null;try{n=localStorage.getItem("tvLastAudio")}catch{}if(n){const s=e.findIndex(p=>Ln(p)===n);if(s>=0)return s;const i=n.indexOf("|||"),f=i>=0?n.slice(0,i):n,G=i>=0?n.slice(i+3):n,b=e.findIndex(p=>p.language===f||p.label===G);if(b>=0)return b}return Dn(e,{lastKey:null,enabled:!0})},[]),{data:er}=ks(O||void 0),tr=Se(()=>(er?.progress??[]).filter(n=>n.season===l&&(n.completed===!0||n.completed===1||Pn(n.currentTime,n.duration))).map(n=>String(n.episode)),[er,l]),nr=Se(()=>ne.map(e=>({id:String(e.episode_number),label:`Episode ${e.episode_number}`,sublabel:e.name||void 0,thumbnail:e.still_path?`https://image.tmdb.org/t/p/w185${e.still_path}`:void 0})),[ne]),rr=Se(()=>(r?.genres??[]).map(e=>e.name).slice(0,5),[r]),Nn=Se(()=>[r?.year,r?.status,r?.number_of_seasons?`${r.number_of_seasons} Season${r.number_of_seasons>1?"s":""}`:null,r?.number_of_episodes?`${r.number_of_episodes} Episodes`:null].filter(Boolean),[r]);y(()=>{if(oe.length!==0&&!oe.some(e=>e.id===R)){const e=oe.find(n=>n.tier==="direct")?.id??oe[0].id;$t(e);try{localStorage.setItem("tvProvider",e)}catch{}}},[oe,R]),y(()=>{if(X.length!==0&&!X.includes(ee)){Ft(X[0]);try{localStorage.setItem("movyServer",X[0])}catch{}}},[X,ee]),y(()=>{if(!u){B(null),qe([]),St(""),K(""),We("");return}const e=Number(u),n=V||"tv";me(!0),B(null),qe([]),St(""),K(""),We("");const s=parseInt(Z.current.get("s")||"",10),i=parseInt(Z.current.get("e")||"",10);H(isNaN(s)?1:s),ye(isNaN(i)?1:i),at(0),fetch(`/api/tv/details/${n}/${e}`).then(f=>f.json()).then(f=>{B(f),me(!1),f.seasons&&f.seasons.length>0&&isNaN(s)&&H(f.seasons[0].season_number)}).catch(()=>{me(!1)})},[u,V]),y(()=>{if(!r||!u)return;if(!(r.seasons!==void 0||r.number_of_seasons!==void 0)){Fe([]);return}const n=parseInt(w.get("e")||"",10);fetch(`/api/tv/episodes/${u}/${l}`).then(s=>s.json()).then(s=>{if(Fe(s.episodes||[]),s.episodes?.length>0){const i=!isNaN(n)&&s.episodes.find(f=>f.episode_number===n)?n:s.episodes[0].episode_number;ye(i)}}).catch(()=>{})},[r,u,l,w]),y(()=>{!r||!u||m||fetch(`/api/tv/episodes/${u}/${l}`).then(e=>e.json()).then(e=>{const n=e.episodes||[];Fe(n),n.length>0&&!n.find(s=>s.episode_number===g)&&ye(n[0].episode_number)}).catch(()=>{})},[l,r,u,m,g]),y(()=>{if(!k||!r||!u)return;fetch(`/api/tv/embed/${R}/${m?"movie":"tv"}/${u}?season=${l}&episode=${g}`).then(n=>n.json()).then(n=>{if(n.url)return We(n.url),fetch(`/api/resolve?url=${encodeURIComponent(n.url)}`).then(s=>s.json()).then(s=>{s.finalUrl&&We(s.finalUrl)})}).catch(()=>{})},[R,r,u,l,g,m,k]);const rn=S(async()=>{if(!r||!u||!R||k||r.adult&&!je)return;const e=`${O}:${l}:${g}`;qt.current.length>0?K(""):(j(!0),K(""),qe([]),at(0),st([]),x([]));try{const s=await q.fetchQuery({queryKey:tn(l,g),queryFn:()=>nn(l,g),staleTime:3e5,gcTime:18e5});if(It.current!==e)return;if(j(!1),!s.valid||!s.sources?.length){K(s.error?`${s.error}`:X.length>0?`No streams from ${ee}. Try another server.`:"No streams available.");return}qe(s.sources),St(e),hn("all"),at(0),s.referer&&pn(s.referer);const i=s.audioTracks||[];st(i),ze(i.length>0?Zn(i):0);const f=s.subtitles||[];if(x(f),f.length>0){const p=kn(f);Ie(p),En(p)}else Ie(-1);fetch(`/api/tv/subtitles/${m?"movie":"tv"}/${u}?season=${l}&episode=${g}`).then(p=>p.json()).then(p=>{if(It.current!==e)return;const re=Array.isArray(p.subtitles)?p.subtitles:[];re.length!==0&&x(ve=>{const F=[...ve,...re.filter(I=>!ve.some(C=>C.url===I.url))];if(ve.length===0){const I=kn(F);Ie(I),En(I)}return F})}).catch(()=>{}),K("")}catch{if(It.current!==e)return;j(!1),K("Failed to load streams.")}},[r,u,R,l,g,m,k,je,X,ee,kn,En,Zn,O,q,tn,nn]),wn=S(e=>{const n=e.toLowerCase();Ft(n);try{localStorage.setItem("movyServer",n)}catch{}K("")},[]),Pr=S(e=>{$t(e);try{localStorage.setItem("tvProvider",e)}catch{}},[]);y(()=>{R&&r&&!k&&rn()},[R,r,rn,k]),y(()=>{if(!d.current||(ie.current&&(ie.current.destroy(),ie.current=null),k))return;let e=!1;if(o){const b=d.current;return b&&(b.pause(),b.removeAttribute("src"),b.load(),b.src="/av-sync-test.mp4",ft.current||b.play().catch(()=>{})),()=>{e=!0}}const n=Ae==="all"?ae:ae.filter(b=>b.type===Ae),s=yt===`${O}:${l}:${g}`&&n[fe]?.url||"";if(!s){try{d.current?.pause()}catch{}return}const i=d.current;if(It.current===`${O}:${l}:${g}`&&te.current==null&&!ft.current)try{!i.ended&&i.currentTime>1&&(te.current=i.currentTime)}catch{}i.pause(),i.removeAttribute("src"),i.load();const f=`/api/tv/stream-proxy?url=${encodeURIComponent(s)}&referer=${encodeURIComponent(ot)}`;n[fe]?.type==="hls"?(async()=>{const b=await Es();if(!e)if(b&&b.isSupported()){const p=new b({enableWorker:!0});ie.current=p,p.on(b.Events.ERROR,(F,I)=>{I.fatal&&(K(`Stream failed (${I.details}). Try another source or reload.`),j(!1),p.destroy(),ie.current=null)}),p.loadSource(f),p.attachMedia(i);const re=()=>{let F=!1,I=0;try{F=localStorage.getItem("tvSubtitlesEnabled")==="true";const C=parseInt(localStorage.getItem("tvSelectedSubtitle")||"0",10);!isNaN(C)&&C>=0&&(I=C)}catch{}return{enabled:F,index:I}},ve=()=>{if(typeof p.subtitleTrack!="number")return;if(le.current.length>0){p.subtitleTrack=-1;return}const F=Array.isArray(p.subtitleTracks)?p.subtitleTracks:[];if(F.length===0){p.subtitleTrack=-1;return}const I=re();if(I.enabled){const C=I.index<F.length?I.index:0;p.subtitleTrack=C,Ie(C),wt()}else p.subtitleTrack=-1};da(p,b.Events,{getWant:()=>Ct.current,onResolve:F=>ze(F)}),p.on(b.Events.MANIFEST_PARSED,()=>{ve(),L.current!=null&&(i.currentTime=L.current,L.current=null),vt(),!ft.current&>.current&&i.play().catch(()=>{})}),p.on(b.Events.SUBTITLE_TRACKS_UPDATED,()=>{ve()}),p.on(b.Events.SUBTITLE_TRACK_SWITCH,(F,I)=>{if(le.current.length>0){if(I.id!==-1)try{p.subtitleTrack=-1}catch{}return}const C=Array.isArray(p.subtitleTracks)?p.subtitleTracks:[];if(C.length!==0){if(I.id===-1){const Y=re();if(Y.enabled){const J=Y.index<C.length?Y.index:0;p.subtitleTrack=J;return}}Ie(I.id),wt()}})}else Ns(i)&&(i.src=f,L.current!=null&&(i.currentTime=L.current,L.current=null),vt(),!ft.current&>.current&&i.play().catch(()=>{K("Failed to play stream. Try another source.")}))})():(i.src=f,L.current!=null&&(i.currentTime=L.current,L.current=null),vt(),!ft.current&>.current&&i.play().catch(()=>{K("Failed to play stream. Try another source.")}));const G=()=>{const re=i.error?.code===4?"Video source not supported or not found":"Failed to load video stream";K(`${re}. The source may be invalid or expired. Try switching source or reloading.`),j(!1)};return i.addEventListener("error",G),()=>{e=!0,i.removeEventListener("error",G)}},[ae,yt,fe,Ae,R,ot,k,d,o,O,l,g,vt,wt]),y(()=>{if(!Ge||Ne||ke||$e||Bt||k||o)return;const e=d.current;!e||!e.paused||e.ended||e.readyState<1||(vt(),e.play().catch(()=>{}))},[Ge,Ne,ke,$e,Bt,k,o,vt,d]),y(()=>{const e=ie.current;!e||typeof e.audioTrack!="number"||(e.audioTrack=Ce)},[Ce]),y(()=>{const e=ie.current;!e||typeof e.subtitleTrack!="number"||!Array.isArray(e.subtitleTracks)||e.subtitleTracks.length===0||le.current.length>0||(D>=0?e.subtitleTrack=D:e.subtitleTrack=-1)},[D]),y(()=>{const e=d.current;if(!(!e||k)&&(e.querySelectorAll("track").forEach(n=>n.remove()),le.current=[],pe.length!==0&&(pe.forEach(n=>{const s=document.createElement("track");s.kind="subtitles",s.label=n.label||n.language||"Unknown",s.srclang=n.language||n.label||"en";const i=`/api/subtitle-proxy?url=${encodeURIComponent(n.url)}&referer=${encodeURIComponent(ot)}`;s.src=i,s.addEventListener("load",()=>{const f=le.current.indexOf(s),G=s.track;if(G&&f>=0){const b=f===Tt.current;G.mode=b&&!ut.current?"showing":"hidden"}}),e.appendChild(s),le.current.push(s)}),pe.length>0)))try{const n=ie.current;n&&typeof n.subtitleTrack=="number"&&n.subtitleTrack!==-1&&(n.subtitleTrack=-1)}catch{}},[pe,ot,k,R,d]),y(()=>{const e=d.current;if(!e||k)return;const n=ie.current;le.current.length>0&&n&&typeof n.subtitleTrack=="number"&&Array.isArray(n.subtitleTracks)&&n.subtitleTracks.length>0&&(n.subtitleTrack=-1);const s=()=>{const G=Rn(_.state.subtitleFontSize,e.clientHeight||720),b=Math.max(0,Math.min(100,100-_.state.subtitlePosition)),p=()=>{const C=G*16,Y=e.videoHeight||e.clientHeight||720,J=e.videoWidth||e.clientWidth||1280;return{step:C*1.3/Y*100,chars:Math.max(20,Math.floor(J/(C*.55)))}},re=(C,Y)=>{const J=C;J.snapToLines=!1,J.line=Y},ve=C=>{if(!C.cues)return;Array.from(C.cues).forEach(de=>re(de,b));const Y=Array.from(C.activeCues??[]);if(Y.length<=1){Y.forEach(de=>re(de,b));return}const{step:J,chars:z}=p();let Ze=b;for(let de=Y.length-1;de>=0;de--){const De=String(Y[de].text??"").replace(/<[^>]*>/g,"").split(`
|
|
3
3
|
`).reduce((on,Pt)=>on+Math.max(1,Math.ceil(Pt.length/z)),0);Ze=Math.max(0,Ze-De*J),re(Y[de],Ze),Ze-=J*.4}},F=le.current;if(F.length>0){F.forEach((C,Y)=>{const J=C.track;if(!J)return;const z=Y===D;J.mode=z&&!A?"showing":"hidden",z&&!A&&ve(J)});return}const I=Array.from(e.textTracks);I.length!==0&&I.forEach((C,Y)=>{const J=Y===D;C.mode=J&&!A?"showing":"hidden",J&&!A&&ve(C)})};s();const i=()=>s();e.textTracks.addEventListener("addtrack",i),e.addEventListener("loadedmetadata",s,{once:!0});const f=window.setTimeout(s,600);return()=>{e.textTracks.removeEventListener("addtrack",i),e.removeEventListener("loadedmetadata",s),window.clearTimeout(f)}},[D,pe,k,R,d,A,_.state.subtitleFontSize,_.state.subtitlePosition]),y(()=>{if(!A)return;const e=d.current,n=Wt.current;if(!e||!n)return;const s=Te/1e3,i=E/1e3,f=new Set;let G=[],b=-1,p=-1,re=-1,ve=-1,F=0,I=0,C=!1;const Y=()=>{const W=Tt.current;if(W<0)return null;const Oe=le.current;return Oe.length>0?Oe[W]?.track??null:Array.from(e.textTracks)[W]??null},J=(W,Oe)=>{const ue=W.cues;if(!ue||ue.length===0)return Array.from(W.activeCues??[]);let et=0,tt=ue.length;for(;et<tt;){const xe=et+tt>>>1;ue[xe].endTime+s<Oe?et=xe+1:tt=xe}const Lt=[];for(let xe=et;xe<ue.length;xe++){const ln=ue[xe];if(ln.startTime+s>Oe)break;ln.endTime+s>=Oe&&Lt.push(ln)}return Lt},z=()=>{const W=Y(),Oe=e.currentTime-i,ue=W?J(W,Oe):[],et=e.clientWidth,tt=e.clientHeight,Lt=e.videoWidth,xe=e.videoHeight;if(ue.length===G.length&&ue.every((In,Bn)=>In===G[Bn])&&et===b&&tt===p&&Lt===re&&xe===ve||(G=ue,b=et,p=tt,re=Lt,ve=xe,n.textContent="",ue.length===0))return;const ir={fontSize:Rn(_.state.subtitleFontSize,tt),position:_.state.subtitlePosition,bgOpacity:_.state.subtitleBgOpacity,bgColor:_.state.subtitleBgColor,textColor:_.state.subtitleTextColor,edge:_.state.subtitleEdge,bold:_.state.subtitleBold},Dr=ss(ir),Or=as(e,ir.position);ue.forEach((In,Bn)=>{const lr=String(In.text??"");if(!os(lr).trim())return;const Mn=document.createElement("div"),Vr=(ue.length-1-Bn)*1.7;Mn.style.cssText=`${Dr}
|
|
4
4
|
bottom: calc(${Or}px + ${Vr}em);`,Mn.innerHTML=is(lr),n.appendChild(Mn)})},Ze=()=>{Array.from(e.textTracks).forEach(W=>{f.has(W)||(f.add(W),W.addEventListener("cuechange",z))})},de=()=>{Ze(),z()},xn=()=>{if(C||I)return;const W=()=>{I=0,!(C||e.paused||e.ended)&&(z(),xn())};I=window.requestAnimationFrame(W)},De=e,on=()=>{F=0,z(),!C&&De.requestVideoFrameCallback&&(F=De.requestVideoFrameCallback(on))},Pt=()=>{z(),De.requestVideoFrameCallback?F||(F=De.requestVideoFrameCallback(on)):xn()};Ze(),e.textTracks.addEventListener("addtrack",de),e.textTracks.addEventListener("removetrack",de),e.addEventListener("timeupdate",z),e.addEventListener("seeked",z),e.addEventListener("loadedmetadata",z),e.addEventListener("play",Pt);const ar=Array.from(e.querySelectorAll("track"));ar.forEach(W=>W.addEventListener("load",z));const or=typeof ResizeObserver>"u"?null:new ResizeObserver(()=>z());return or?.observe(e),z(),Pt(),()=>{C=!0,f.forEach(W=>W.removeEventListener("cuechange",z)),e.textTracks.removeEventListener("addtrack",de),e.textTracks.removeEventListener("removetrack",de),e.removeEventListener("timeupdate",z),e.removeEventListener("seeked",z),e.removeEventListener("loadedmetadata",z),e.removeEventListener("play",Pt),ar.forEach(W=>W.removeEventListener("load",z)),or?.disconnect(),I&&window.cancelAnimationFrame(I),F&&De.cancelVideoFrameCallback&&De.cancelVideoFrameCallback(F),n.textContent=""}},[A,Te,D,pe,E,d,_.state.subtitleFontSize,_.state.subtitlePosition,_.state.subtitleBgOpacity,_.state.subtitleBgColor,_.state.subtitleTextColor,_.state.subtitleEdge,_.state.subtitleBold]);const sn=()=>{B(null),qe([]),We(""),U(-1)},Lr=S(e=>{H(e),ye(1),we(e,1)},[we]),an=!m&&r?.seasons&&r.seasons.length>1?t("label",{className:h.sidebarSeason,children:[t("span",{children:"Season"}),t("select",{value:l,onChange:e=>Lr(parseInt(e.target.value,10)||1),className:h.select,children:r.seasons.map(e=>t("option",{value:e.season_number,children:["Season ",e.season_number," (",e.episode_count," ep)"]},e.season_number))})]}):null,bt=S(e=>{const n=parseInt(e,10);if(!isNaN(n)){try{d.current?.pause()}catch{}ye(n),we(l,n)}Cn(!1)},[l,we,d]);y(()=>{if(m)return;const e=n=>{n.target.closest('input, textarea, button, select, a, [role="button"], [contenteditable="true"]')||n.key.toLowerCase()==="n"&&(N!=null?bt(String(N)):Ur.error("No next episode available"))};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[m,N,bt]);const $r=e=>{ze(e);try{const s=rt[e];s&&localStorage.setItem("tvLastAudio",Ln(s))}catch{}const n=ie.current;n&&n.audioTrack!==void 0&&(n.audioTrack=e)},Rr=e=>{Ie(e);try{if(e===-1)localStorage.setItem("tvSubtitlesEnabled","false");else{localStorage.setItem("tvSubtitlesEnabled","true"),localStorage.setItem("tvSelectedSubtitle",String(e));const f=pe[e];f&&localStorage.setItem("tvLastSubtitle",Ln(f))}}catch{}const n=d.current,s=ie.current;if(s&&typeof s.subtitleTrack=="number"&&Array.isArray(s.subtitleTracks)&&s.subtitleTracks.length>0&&(s.subtitleTrack=le.current.length>0||e<0?-1:e),!n)return;const i=le.current;if(i.length>0){i.forEach((f,G)=>{const b=f.track;if(!b)return;const p=G===e;b.mode=p&&!A?"showing":"hidden"});return}Array.from(n.textTracks).forEach((f,G)=>{const b=G===e;f.mode=b&&!A?"showing":"hidden"})},At=S(()=>{if(!r)return;const e=d.current,n=m?"":`S${String(l).padStart(2,"0")}E${String(g).padStart(2,"0")}`;fetch("/api/discord/tv",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({title:r.title,episodeLabel:n,isPlaying:e?!e.paused&&!e.ended:!0,thumbnail:r.poster,currentTime:e?e.currentTime:0,duration:e&&e.duration||0,isAdult:r.adult===!0,sessionId:mt.current})}).catch(()=>{}),fetch("/api/discord/heartbeat",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:mt.current})}).catch(()=>{})},[r,m,l,g,d]);y(()=>{if(!r)return;At();const e=window.setInterval(()=>{const n=d.current;(!n||!n.paused)&&At()},15e3);return()=>window.clearInterval(e)},[At,r,d]),y(()=>{if(!r||k||P||he||ae.length===0)return;const e=d.current;if(!e)return;const n=()=>At();return e.addEventListener("play",n),e.addEventListener("pause",n),e.addEventListener("seeked",n),()=>{e.removeEventListener("play",n),e.removeEventListener("pause",n),e.removeEventListener("seeked",n)}},[r,k,P,he,ae,At,d]),y(()=>{const e=mt.current,n=()=>{const i=JSON.stringify({sessionId:e});navigator.sendBeacon?(navigator.sendBeacon("/api/discord/clear",new Blob([i],{type:"application/json"})),navigator.sendBeacon("/api/discord/heartbeat",new Blob([JSON.stringify({sessionId:e,bye:!0})],{type:"application/json"}))):fetch("/api/discord/clear",{method:"POST",headers:{"Content-Type":"application/json"},body:i,keepalive:!0}).catch(()=>{})},s=()=>n();return window.addEventListener("pagehide",s),window.addEventListener("beforeunload",s),()=>{window.removeEventListener("pagehide",s),window.removeEventListener("beforeunload",s),n()}},[]);const sr=Ae==="all"?ae:ae.filter(e=>e.type===Ae);return y(()=>{if(!r){document.title="TV & Movies - dango";return}document.title=m?`${r.title} - dango`:`${r.title} - Season ${l} Episode ${g} - dango`},[r,m,l,g]),y(()=>{if(!r||m)return;const e=new URLSearchParams(w),n=e.get("s"),s=e.get("e"),i=String(l),f=String(g);n===i&&s===f||(e.set("type",w.get("type")||"tv"),e.set("s",i),e.set("e",f),U(`${window.location.pathname}?${e.toString()}`,{replace:!0}))},[r,m,l,g,w,U]),t("div",{className:nt.playerPageLayout,children:[t("aside",{className:nt.episodeSidebar,children:r?m?t("div",{className:h.sidebarPosterCard,children:[r.poster&&t("img",{src:`https://image.tmdb.org/t/p/w342${r.poster}`,alt:r.title,loading:"lazy",decoding:"async"}),t("div",{className:h.sidebarPosterMeta,children:[t("strong",{children:r.title}),t("span",{children:r.year})]})]}):t(ls,{episodes:nr,currentEpisode:String(g),watchedEpisodes:tr,onEpisodeClick:bt,header:an}):m?t("div",{className:h.statusMsg,children:[t($,{name:"spinner",className:h.spinner})," Loading..."]}):t(cs,{variant:"sidebar"})}),t("div",{className:nt.playerMain,children:[r&&t("div",{className:h.playerSection,onContextMenu:e=>e.preventDefault(),style:r.adult&&!je?{filter:"blur(14px)",pointerEvents:"none",userSelect:"none"}:void 0,children:[P&&!k&&t("div",{className:h.statusMsg,children:[t($,{name:"spinner",className:h.spinner})," Loading stream..."]}),k&&_t?t("iframe",{src:_t,className:h.videoIframe,allow:"autoplay; fullscreen",allowFullScreen:!0}):!k&&(sr.length>0||P)?t(Ve,{children:[he&&t("div",{className:`${h.statusMsg} ${h.error}`,style:{flexDirection:"column",alignItems:"stretch",gap:8},children:[t("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[t("span",{style:{flex:1},children:he}),t("button",{className:h.retryButton,onClick:rn,children:"Retry"})]}),X.length>0&&t("div",{style:{display:"flex",flexWrap:"wrap",gap:6,alignItems:"center",marginTop:4},children:[t("span",{style:{fontSize:"0.8rem",opacity:.9,fontWeight:600},children:"Servers:"}),X.map(e=>t("button",{onClick:()=>wn(e),className:h.retryButton,style:{padding:"4px 8px",fontSize:"0.75rem",textTransform:"capitalize",background:ee===e?"var(--accent)":void 0,color:ee===e?"white":void 0},children:e},e))]})]}),t(ca,{player:_,title:r.title,episodeLabel:m?void 0:`S${l} E${g}`,audioTracks:rt,selectedAudioTrack:Ce,onAudioTrackChange:$r,subtitles:pe,selectedSubtitle:D,onSubtitleChange:Rr,streams:sr,qualityIdx:fe,onQualityChange:at,onBack:sn,movyServers:X,selectedMovyServer:ee,onMovyServerSelect:wn,isMovySource:X.length>0,videoDelayEnabled:He,onVideoDelayToggle:e=>{it(e);try{localStorage.setItem("playerVideoDelayEnabled",String(e))}catch{}},videoDelayMs:Ue,onVideoDelayChange:Et,onCalibrateAvSync:dt,subtitleDelayMs:Te,onSubtitleDelayChange:Nt,showNextEpisodeButton:fr&&!Ne&&!ke&&!$e,onNextEpisode:Jn,children:[t("video",{ref:d,autoPlay:Ge&&!Bt,playsInline:!0,disablePictureInPicture:!0,className:`${h.video} ${Q?h.videoHidden:""}`,onTimeUpdate:kr,onEnded:()=>{o||Er()},onPlay:Nr,onPause:wr,onSeeked:()=>{Yn.current=Date.now(),Mt()},onLoadedMetadata:xr,onVolumeChange:_.actions.onVolumeChange,onContextMenu:e=>e.preventDefault(),onError:()=>{K("Video failed to load. Try another server or reload."),j(!1)}}),t("canvas",{ref:zt,className:`${h.delayCanvas} ${Q?h.delayCanvasActive:""}`}),A&&t("div",{ref:Wt,className:h.subtitleOverlay}),t(ds,{isOpen:gn,ms:Ue,onChange:Et,onApply:jt,onClose:Ht,testClipActive:o,onTestClip:Kt})]})]}):he&&!k?t("div",{className:`${h.statusMsg} ${h.error}`,style:{flexDirection:"column",alignItems:"stretch",gap:8},children:[t("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[t("span",{style:{flex:1},children:he}),t("button",{className:h.retryButton,onClick:rn,children:"Retry"})]}),X.length>0&&t("div",{style:{display:"flex",flexWrap:"wrap",gap:6,alignItems:"center",marginTop:4},children:[t("span",{style:{fontSize:"0.8rem",opacity:.9,fontWeight:600},children:"Servers:"}),X.map(e=>t("button",{onClick:()=>wn(e),className:h.retryButton,style:{padding:"4px 8px",fontSize:"0.75rem",textTransform:"capitalize",background:ee===e?"var(--accent)":void 0,color:ee===e?"white":void 0},children:e},e))]})]}):null]}),r&&t(us,{showTheater:!1}),an&&t("div",{className:h.mobileSeasonRow,children:an}),r&&t("div",{className:h.providerSelectWrap,children:t("label",{className:h.controlLabel,children:["Source",t("select",{value:R,onChange:e=>Pr(e.target.value),className:h.select,disabled:oe.length===0,children:mn?t("option",{value:"",children:"Loading…"}):oe.length===0?t("option",{value:"",children:"No providers available"}):t(Ve,{children:[M.length>0&&t("optgroup",{label:"Direct HLS",children:M.map(e=>t("option",{value:e.id,children:e.label},e.id))}),Vt.length>0&&t("optgroup",{label:"Embeds",children:Vt.map(e=>t("option",{value:e.id,children:e.label},e.id))})]})})]})}),r&&t("div",{className:nt.playerInfoContainer,children:[t("div",{className:nt.playerInfoHeader,children:[t("div",{className:nt.playerAnimeCard,children:r.poster&&t("img",{src:`https://image.tmdb.org/t/p/w342${r.poster}`,alt:r.title,loading:"lazy",decoding:"async"})}),t("div",{className:nt.videoTitleSection,children:[t("div",{className:be.titleContainer,children:[t("h1",{children:r.title}),t("div",{className:h.meta,children:[t("span",{className:h.year,children:r.year}),r.vote_average!=null&&r.vote_average>0&&t("span",{className:h.rating,children:[t($,{name:"star",size:12}),Number(r.vote_average).toFixed(1)]}),t("span",{className:`${h.typeBadge} ${h[m?"movie":"tv"]}`,children:m?"Movie":"TV Show"})]}),rr.length>0&&t("div",{className:h.genreRow,children:rr.map(e=>t("span",{className:h.genreChip,children:e},e))}),Nn.length>0&&t("div",{className:h.metaRow,children:Nn.map((e,n)=>t("span",{children:[e,n<Nn.length-1?" · ":""]},`${e}-${n}`))})]}),t("div",{className:be.controls,children:[t("button",{className:`${be.watchlistBtn} ${Gt?be.inList:""}`,onClick:pr,disabled:hr,type:"button",children:[Gt?t($,{name:"check",size:14}):t($,{name:"plus",size:14}),Gt?"In Watchlist":"Add to Watchlist"]}),!m&&t(Ve,{children:[t("button",{className:`${be.watchlistBtn}`,onClick:()=>bn!=null&&bt(String(bn)),disabled:bn==null,type:"button",children:[t($,{name:"chevron-left",size:14}),"Prev EP"]}),t("button",{className:`${be.watchlistBtn}`,onClick:()=>N!=null&&bt(String(N)),disabled:N==null,type:"button",children:["Next EP",t($,{name:"chevron-right",size:14})]}),!m&&t("button",{className:`${be.watchlistBtn} ${be.modeToggleBtn} ${pt?be.modeToggleActive:""}`,onClick:()=>_r(!pt),type:"button","aria-pressed":pt,children:pt?"AUTOPLAY: ON":"AUTOPLAY: OFF"}),yr&&t("button",{className:`${be.watchlistBtn}`,onClick:()=>Cn(!0),type:"button",children:[t($,{name:"list-ul",size:14}),"Episodes"]})]})]})]})]}),t("div",{className:be.descriptionSection,children:[t("h3",{children:"Synopsis"}),t(xs,{text:r.overview,emptyText:"No description available."})]}),t("button",{className:be.detailsToggleBtn,onClick:()=>vr(!en),type:"button",children:[en?t($,{name:"chevron-up"}):t($,{name:"chevron-down"}),en?"Hide Details":"Show Details"]}),en&&t("div",{className:h.detailGrid,children:[r.first_air_date&&t("div",{className:h.detailItem,children:[t("strong",{children:m?"Release Date":"First Air Date"}),t("span",{children:r.first_air_date})]}),r.last_air_date&&t("div",{className:h.detailItem,children:[t("strong",{children:"Last Air Date"}),t("span",{children:r.last_air_date})]}),r.networks&&r.networks.length>0&&t("div",{className:h.detailItem,children:[t("strong",{children:"Networks"}),t("span",{children:r.networks.map(e=>e.name).join(", ")})]}),r.created_by&&r.created_by.length>0&&t("div",{className:h.detailItem,children:[t("strong",{children:"Created By"}),t("span",{children:r.created_by.map(e=>e.name).join(", ")})]}),r.episode_run_time&&r.episode_run_time.length>0&&t("div",{className:h.detailItem,children:[t("strong",{children:"Episode Runtime"}),t("span",{children:[r.episode_run_time[0]," min"]})]}),r.imdb_id&&t("div",{className:h.detailItem,children:[t("strong",{children:"IMDb"}),t("a",{href:`https://www.imdb.com/title/${r.imdb_id}`,target:"_blank",rel:"noopener noreferrer",className:h.imdbLink,children:"View on IMDb"})]})]})]}),!m&&t(ms,{isOpen:br,onClose:()=>Cn(!1),episodes:nr,currentEpisode:String(g),watchedEpisodes:tr,onEpisodeClick:bt,header:an}),r?.adult&&!je&&t(cn,{isOpen:!0,title:"Content Warning",onClose:sn,children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t("p",{children:"This title contains mature content intended for adult audiences."}),t("p",{children:["By proceeding, you confirm that you are ",t("strong",{children:"18 years of age or older"})," ","(or the age of majority in your jurisdiction) and wish to view this content."]}),t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center"},children:[t(_e,{variant:"secondary",onClick:sn,children:"Go Back"}),t(_e,{onClick:Le,children:"I'm 18+, Continue"})]})]})}),t(cn,{isOpen:Ne,onClose:Gn,title:"Resume Watching",children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t("p",{children:["You were at ",t("strong",{children:Tr(ht)})]}),t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center"},children:[t(_e,{variant:"secondary",onClick:Gn,children:"Start from Beginning"}),t(_e,{onClick:Ir,children:"Resume"})]})]})}),t(cn,{isOpen:ke,onClose:Br,title:m?"Movie Completed":"Episode Completed",children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t("p",{children:m?t(Ve,{children:"You've already watched this movie."}):t(Ve,{children:["You've already watched"," ",t("strong",{children:["Season ",l," Episode ",g]}),". Would you like to continue?"]})}),t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center",flexWrap:"wrap"},children:[t(_e,{variant:"secondary",onClick:Mr,children:"Replay"}),N!=null?t(_e,{onClick:Jn,children:["Watch EP ",N]}):ge!=null?t(_e,{onClick:Xn,children:["Start Season ",ge]}):null]})]})}),t(cn,{isOpen:$e,onClose:()=>Je(!1),title:m?"Movie Completed!":ge!=null?"Season Complete!":"Show Completed!",children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t($,{name:"check-circle",size:48,style:{color:"var(--accent-lighter)",marginBottom:"0.5rem"}}),t("p",{style:{fontSize:"1.1rem",fontWeight:600},children:gr}),t("p",{style:{color:"var(--text-secondary)"},children:m?"You finished this movie!":ge!=null?`You finished Season ${l}.`:"Congratulations! You finished all available episodes."}),t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center",flexWrap:"wrap"},children:[t(_e,{variant:"secondary",onClick:()=>Je(!1),children:"Close"}),ge!=null?t(_e,{onClick:Xn,children:["Start Season ",ge]}):t(Ve,{children:[t(_e,{onClick:()=>{Je(!1),sn()},children:"Back to Details"}),Gt&&t(_e,{onClick:Ar,disabled:Qt.isPending,children:Qt.isPending?"Saving...":"Move to Completed"})]})]})]})}),!r&&t("div",{className:h.statusMsg,children:[t($,{name:"spinner",className:h.spinner})," Loading..."]})]})]})};export{Eo as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as z,a as E,o as R,d as l,h as C,T,u as e,g as F}from"./vendor-core-8R2fFbyN.js";import{I as a}from"./vendor-icons-CDMuNDeL.js";import{B as w}from"./index-
|
|
1
|
+
import{n as z,a as E,o as R,d as l,h as C,T,u as e,g as F}from"./vendor-core-8R2fFbyN.js";import{I as a}from"./vendor-icons-CDMuNDeL.js";import{B as w}from"./index-CtoKRNLc.js";import{u as q}from"./useMatureConsent-CT7-KfzG.js";import{n as j,d as U,e as H,f as J,t as I}from"./useTvLibrary-C0sX-ilZ.js";import"./vendor-query-BXRECSI6.js";const K="_container_198yg_1",Q="_heroSection_198yg_11",X="_bannerContainer_198yg_17",Y="_banner_198yg_17",Z="_bannerOverlay_198yg_37",ee="_heroContent_198yg_49",ne="_posterContainer_198yg_62",te="_poster_198yg_62",se="_infoGlass_198yg_86",ae="_title_198yg_100",oe="_quickMeta_198yg_110",ie="_metaItem_198yg_118",re="_iconStar_198yg_126",le="_iconTv_198yg_130",ce="_iconType_198yg_134",de="_genres_198yg_139",me="_genre_198yg_139",_e="_metaRow_198yg_156",he="_metaValue_198yg_164",ge="_metaDivider_198yg_168",ve="_synopsisSection_198yg_173",pe="_sectionTitleSmall_198yg_179",ye="_synopsis_198yg_173",ue="_actions_198yg_196",ke="_watchBtn_198yg_202",Ne="_watchlistBtn_198yg_226",be="_active_198yg_250",Se="_seasonPickerLabel_198yg_256",fe="_seasonSelect_198yg_267",Ce="_detailsToggleBtn_198yg_286",Te="_expandedContent_198yg_304",we="_detailGrid_198yg_309",Ie="_detailItem_198yg_315",Be="_imdbLink_198yg_333",De="_heroSkeleton_198yg_343",Me="_skeletonBanner_198yg_347",Le="_skeletonContent_198yg_354",$e="_skeletonPoster_198yg_365",Pe="_skeletonInfo_198yg_373",Ge="_skeletonTitle_198yg_380",xe="_skeletonMeta_198yg_388",Oe="_skeletonDesc_198yg_396",Ae="_skeletonActions_198yg_404",Ve="_errorState_198yg_413",We="_matureOverlay_198yg_434",ze="_matureContent_198yg_444",n={container:K,heroSection:Q,bannerContainer:X,banner:Y,bannerOverlay:Z,heroContent:ee,posterContainer:ne,poster:te,infoGlass:se,title:ae,quickMeta:oe,metaItem:ie,iconStar:re,iconTv:le,iconType:ce,genres:de,genre:me,metaRow:_e,metaValue:he,metaDivider:ge,synopsisSection:ve,sectionTitleSmall:pe,synopsis:ye,actions:ue,watchBtn:ke,watchlistBtn:Ne,active:be,seasonPickerLabel:Se,seasonSelect:fe,detailsToggleBtn:Ce,expandedContent:Te,detailGrid:we,detailItem:Ie,imdbLink:Be,heroSkeleton:De,skeletonBanner:Me,skeletonContent:Le,skeletonPoster:$e,skeletonInfo:Pe,skeletonTitle:Ge,skeletonMeta:xe,skeletonDesc:Oe,skeletonActions:Ae,errorState:Ve,matureOverlay:We,matureContent:ze};function He(){const{id:o}=z(),c=E(),[B]=R(),i=j(B.get("type")),{hasConsent:D}=q(),[t,M]=l(null),[L,m]=l(!0),[p,y]=l(""),[d,$]=l(!1),[_,P]=l(1),G=U(i,o),x=Number(o),{data:O}=H(t?G:void 0),h=!!O?.inLibrary,{toggle:A}=J();C(()=>{o&&(m(!0),y(""),fetch(`/api/tv/details/${i}/${o}`).then(s=>{if(!s.ok)throw new Error("Failed to load details");return s.json()}).then(s=>{M(s),m(!1)}).catch(s=>{y(s.message),m(!1)}))},[o,i]),C(()=>{document.title=t?.title?`${t.title} - dango`:"TV & Movies - dango"},[t?.title]);const V=()=>{!o||!t||c(r?I(i,o):I(i,o,_,1))},W=()=>{t&&A({tmdbId:x,mediaType:i,title:t.title,poster:t.poster,year:t.year,adult:t.adult})},r=i==="movie",g=!r,u=t?.backdrop?`https://image.tmdb.org/t/p/w1280${t.backdrop}`:"",k=t?.poster?`https://image.tmdb.org/t/p/w500${t.poster}`:"",N=T(()=>t?.genres?t.genres.map(s=>s.name).slice(0,5):[],[t?.genres]),b=T(()=>t?.seasons?t.seasons.filter(s=>s.season_number>0):[],[t?.seasons]),v=[t?.year,t?.status,g&&t?.number_of_seasons?`${t.number_of_seasons} Season${t.number_of_seasons>1?"s":""}`:null,g&&t?.number_of_episodes?`${t.number_of_episodes} Episodes`:null].filter(Boolean);if(L)return e("div",{className:n.container,children:e("div",{className:n.heroSkeleton,children:[e("div",{className:n.skeletonBanner}),e("div",{className:n.skeletonContent,children:[e("div",{className:n.skeletonPoster}),e("div",{className:n.skeletonInfo,children:[e("div",{className:n.skeletonTitle}),e("div",{className:n.skeletonMeta}),e("div",{className:n.skeletonDesc}),e("div",{className:n.skeletonActions})]})]})]})});if(p||!t)return e("div",{className:n.container,children:e("div",{className:n.errorState,children:[e(a,{name:"exclamation-triangle",size:48}),e("h2",{children:"Failed to load details"}),e("p",{children:p||"Something went wrong"}),e(w,{onClick:()=>c(-1),children:"Go Back"})]})});const S=t.adult&&!D;return e("div",{className:n.container,style:S?{filter:"blur(14px)",pointerEvents:"none",userSelect:"none"}:void 0,children:[e("div",{className:n.heroSection,children:[e("div",{className:n.bannerContainer,children:[u&&e("div",{className:n.banner,style:{backgroundImage:`url(${u})`}}),e("div",{className:n.bannerOverlay})]}),e("div",{className:n.heroContent,children:[e("div",{className:n.posterContainer,children:k&&e("img",{src:k,alt:t.title,className:n.poster,decoding:"async"})}),e("div",{className:n.infoGlass,children:[e("div",{className:n.topInfo,children:[e("h1",{className:n.title,children:t.title}),e("div",{className:n.quickMeta,children:[t.vote_average!=null&&t.vote_average>0&&e("div",{className:n.metaItem,children:[e(a,{name:"star",className:n.iconStar}),e("span",{children:Number(t.vote_average).toFixed(1)})]}),e("div",{className:n.metaItem,children:[e(a,{name:"tv",className:n.iconTv}),e("span",{children:r?"Movie":"TV Show"})]}),t.vote_count!=null&&e("div",{className:n.metaItem,children:[e(a,{name:"users",className:n.iconType}),e("span",{children:[t.vote_count.toLocaleString()," votes"]})]})]}),N.length>0&&e("div",{className:n.genres,children:N.map(s=>e("span",{className:n.genre,children:s},s))})]}),v.length>0&&e("div",{className:n.metaRow,children:v.map((s,f)=>e(F.Fragment,{children:[e("span",{className:n.metaValue,children:s}),f<v.length-1&&e("span",{className:n.metaDivider,children:"·"})]},f))}),t.overview&&e("div",{className:n.synopsisSection,children:[e("h2",{className:n.sectionTitleSmall,children:"Synopsis"}),e("p",{className:n.synopsis,children:t.overview})]}),e("div",{className:n.actions,children:[e("button",{className:n.watchBtn,onClick:V,children:[e(a,{name:"play",size:14}),r?"Watch Now":`Start S${_}`]}),e("button",{className:`${n.watchlistBtn} ${h?n.active:""}`,onClick:W,children:[h?e(a,{name:"check",size:14}):e(a,{name:"plus",size:14}),h?"In Watchlist":"Add to Watchlist"]})]}),g&&b.length>1&&e("label",{className:n.seasonPickerLabel,children:[e("span",{children:"Season"}),e("select",{value:_,onChange:s=>P(parseInt(s.target.value,10)||1),className:n.seasonSelect,children:b.map(s=>e("option",{value:s.season_number,children:["Season ",s.season_number," (",s.episode_count," Episodes)"]},s.season_number))})]}),e("button",{className:n.detailsToggleBtn,onClick:()=>$(!d),children:[d?e(a,{name:"chevron-up"}):e(a,{name:"chevron-down"}),d?"Hide Details":"Show Details"]}),d&&e("div",{className:n.expandedContent,children:e("div",{className:n.detailGrid,children:[t.first_air_date&&e("div",{className:n.detailItem,children:[e("strong",{children:r?"Release Date":"First Air Date"}),e("span",{children:t.first_air_date})]}),t.last_air_date&&e("div",{className:n.detailItem,children:[e("strong",{children:"Last Air Date"}),e("span",{children:t.last_air_date})]}),t.networks&&t.networks.length>0&&e("div",{className:n.detailItem,children:[e("strong",{children:"Networks"}),e("span",{children:t.networks.map(s=>s.name).join(", ")})]}),t.created_by&&t.created_by.length>0&&e("div",{className:n.detailItem,children:[e("strong",{children:"Created By"}),e("span",{children:t.created_by.map(s=>s.name).join(", ")})]}),t.episode_run_time&&t.episode_run_time.length>0&&e("div",{className:n.detailItem,children:[e("strong",{children:"Episode Runtime"}),e("span",{children:[t.episode_run_time[0]," min"]})]}),t.imdb_id&&e("div",{className:n.detailItem,children:[e("strong",{children:"IMDb"}),e("a",{href:`https://www.imdb.com/title/${t.imdb_id}`,target:"_blank",rel:"noopener noreferrer",className:n.imdbLink,children:"View on IMDb"})]})]})})]})]})]}),S&&e("div",{className:n.matureOverlay,children:e("div",{className:n.matureContent,children:[e(a,{name:"exclamation-triangle",size:48}),e("h2",{children:"Content Warning"}),e("p",{children:"This content may contain mature themes."}),e(w,{onClick:()=>c("/"),children:"Go Back"})]})})]})}export{He as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{A as T,d as v,h as P,T as z,u as e,S as W,L as p}from"./vendor-core-8R2fFbyN.js";import{I as i}from"./vendor-icons-CDMuNDeL.js";import{f as B,d as D,c as L,t as M}from"./useTvLibrary-
|
|
1
|
+
import{A as T,d as v,h as P,T as z,u as e,S as W,L as p}from"./vendor-core-8R2fFbyN.js";import{I as i}from"./vendor-icons-CDMuNDeL.js";import{f as B,d as D,c as L,t as M}from"./useTvLibrary-C0sX-ilZ.js";import{p as s,a as S}from"./MediaCard-DpKoY-1j.js";const E=({item:a,anchorRect:m,onMouseEnter:u,onMouseLeave:g,onRequestClose:l})=>{const d=T(!1),[n,f]=v(null),[N,c]=v(!0),{toggle:y,bookmarkedIds:_}=B(),w=D(a.type,a.id),o=_.has(w);P(()=>{let t=!1;return c(!0),fetch(`/api/tv/details/${a.type}/${a.id}`).then(r=>{if(!r.ok)throw new Error("Failed");return r.json()}).then(r=>{t||(f({overview:r.overview,genres:r.genres,vote_average:r.vote_average,vote_count:r.vote_count,status:r.status,number_of_seasons:r.number_of_seasons,number_of_episodes:r.number_of_episodes}),c(!1))}).catch(()=>{t||c(!1)}),()=>{t=!0}},[a.id,a.type]);const h=z(()=>n?.genres?n.genres.slice(0,4).map(t=>t.name):[],[n?.genres]),I=L(a.type,a.id),b=M(a.type,a.id),k=t=>{t.preventDefault(),t.stopPropagation(),y({tmdbId:a.id,mediaType:a.type,title:a.title,poster:a.image,year:a.year})};return e(S,{anchorRect:m,onMouseEnter:()=>{d.current=!0,u()},onMouseLeave:()=>{d.current=!1,g()},onRequestClose:l,children:[e("div",{className:s.header,children:e("div",{className:s.title,children:a.title})}),e("div",{className:s.body,children:N?e("div",{className:s.loading,children:[e("div",{className:s.spinner}),e("span",{children:"Fetching details..."})]}):e(W,{children:[e("div",{className:s.metaRow,children:[n?.vote_average!=null&&n.vote_average>0&&e("div",{className:s.metaItem,children:[e(i,{name:"star",className:s.scoreIcon,size:14}),e("span",{children:Number(n.vote_average).toFixed(1)})]}),e("div",{className:s.metaItem,children:[e(i,{name:"tv",size:14}),e("span",{children:a.type==="tv"?"TV Show":"Movie"})]}),a.year&&e("div",{className:s.metaItem,children:e("span",{children:a.year})}),n?.status&&e("div",{className:s.metaItem,children:e("span",{children:n.status})})]}),h.length>0&&e("div",{className:s.genres,children:h.map(t=>e("span",{className:s.genre,children:t},t))}),n?.overview&&e("div",{className:s.synopsis,children:n.overview.length>200?n.overview.slice(0,200)+"...":n.overview})]})}),e("div",{className:s.footer,children:[e("div",{className:s.primaryAction,children:e(p,{to:b,className:s.watchBtn,onClick:l,children:[e(i,{name:"play",size:14}),"Watch now"]})}),e("div",{className:s.secondaryActions,children:[e("button",{className:`${s.watchlistBtn} ${o?s.active:""}`,onClick:k,children:[o?e(i,{name:"check",size:12}):e(i,{name:"plus",size:12}),e("span",{children:o?"Remove":"Watchlist"})]}),e(p,{to:I,className:s.detailsBtn,onClick:l,children:[e(i,{name:"info-circle",size:12}),e("span",{children:"Details"})]})]})]})]})};export{E as T};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{h as W,o as ae,A as re,d as o,T as z,q as A,u as t}from"./vendor-core-8R2fFbyN.js";import{I as p}from"./vendor-icons-CDMuNDeL.js";import{P as I,S as ne}from"./SkeletonGrid-B5loz7ii.js";import{a as se,T as le}from"./useTv-BTUKMH7Q.js";import{u as ie,Q as oe,B as x}from"./index-CtoKRNLc.js";import{E as ce}from"./ErrorMessage-z4f4WGgP.js";import{s as r}from"./Search.module-CMEai-B-.js";import"./MediaCard-DpKoY-1j.js";import"./vendor-ui-CUDCvRS_.js";import"./useIsMobile-Dm_b6Ob3.js";import"./TvPopup-PlCU30FO.js";import"./useTvLibrary-C0sX-ilZ.js";import"./vendor-query-BXRECSI6.js";const de=[{value:"multi",label:"All"},{value:"tv",label:"TV Shows"},{value:"movie",label:"Movies"}],me=[{value:"popularity.desc",label:"Popularity"},{value:"vote_average.desc",label:"Top Rated"},{value:"primary_release_date.desc",label:"Newest"},{value:"primary_release_date.asc",label:"Oldest"},{value:"vote_count.desc",label:"Most Voted"}],Y={10759:"Action & Adventure",16:"Animation",35:"Comedy",80:"Crime",99:"Documentary",18:"Drama",10751:"Family",10762:"Kids",9648:"Mystery",10765:"Sci-Fi & Fantasy",37:"Western"},Q={28:"Action",12:"Adventure",16:"Animation",35:"Comedy",80:"Crime",99:"Documentary",18:"Drama",10751:"Family",14:"Fantasy",36:"History",27:"Horror",9648:"Mystery",10749:"Romance",878:"Sci-Fi",53:"Thriller",10752:"War",37:"Western"},O=new Date().getFullYear(),ue=[{value:"ALL",label:"All Years"},...Array.from({length:O-1980+1},(l,u)=>({value:String(O-u),label:String(O-u)}))];function Me(){W(()=>{document.title="Search TV & Movies - dango"},[]);const[l,u]=ae(),{lowEndMode:H}=ie(),C=re(null),[g,K]=o(l.get("q")||""),[h,U]=o(l.get("q")||""),[m,v]=o(parseInt(l.get("page")||"1",10)||1),[i,J]=o(l.get("type")||"multi"),[$,k]=o(l.get("genre")||""),[y,F]=o(l.get("year")||"ALL"),[f,B]=o(l.get("sort_by")||"popularity.desc"),[b,X]=o(!1),[c,N]=o(()=>{const e={},a=l.get("genre")||"";return a&&(e[a]="include"),e}),M=z(()=>{if(i==="tv")return Object.entries(Y).map(([a,n])=>({id:a,name:n}));if(i==="movie")return Object.entries(Q).map(([a,n])=>({id:a,name:n}));const e=new Map;for(const[a,n]of Object.entries(Y))e.set(a,n);for(const[a,n]of Object.entries(Q))e.set(a,n);return Array.from(e.entries()).map(([a,n])=>({id:a,name:n}))},[i]),S=z(()=>Object.entries(c).filter(([,a])=>a==="include").map(([a])=>a).join(","),[c]),{data:P,isLoading:w,isError:Z,error:ee}=se({query:h,type:i,genre:S,year:y,sort_by:f,page:m}),T=P?.results||[],L=P?.total_pages||0,E=P?.total_results||0,R=m<Math.min(L,500),d=A((e={})=>{const a=new URLSearchParams,n=e.q!==void 0?e.q:h,s=e.type!==void 0?e.type:i,q=e.year!==void 0?e.year:y,G=e.sort!==void 0?e.sort:f,D=e.page!==void 0?e.page:String(m),V=e.genre!==void 0?e.genre:S;n.trim()&&a.set("q",n.trim()),s!=="multi"&&a.set("type",s),V&&a.set("genre",V),q!=="ALL"&&a.set("year",q),G!=="popularity.desc"&&a.set("sort_by",G),D!=="1"&&a.set("page",D),u(a,{replace:!0})},[h,i,y,f,m,S,u]),_=A(()=>{oe(),v(1),U(g),d({q:g,page:"1"}),window.scrollTo({top:0,behavior:"smooth"})},[g,d]),j=A(e=>{if(v(e),d({page:String(e)}),C.current){const a=C.current.getBoundingClientRect().top+window.scrollY-100;window.scrollTo({top:a,behavior:"smooth"})}},[d]),te=A(e=>{N(a=>{const n=a[e],s={...a};return n==="include"?s[e]="exclude":n==="exclude"?delete s[e]:s[e]="include",s}),v(1)},[]);return W(()=>{const a=Object.entries(c).filter(([,n])=>n==="include").map(([n])=>n).join(",");a!==$&&(k(a),d({genre:a,page:"1"}))},[c,$,k,d]),t("div",{className:"page-container",children:[t("div",{className:r.header,children:[t("h1",{className:r.pageTitle,children:"Search TV & Movies"}),t("p",{className:r.pageSubtitle,children:"Discover trending shows, movies, and more powered by TMDB"})]}),t("div",{className:r.filterContainer,children:[t("div",{className:r.searchBarWrapper,children:[t("div",{className:r.inputIconWrapper,children:[t(p,{name:"search",className:r.searchIcon}),t("input",{type:"text","data-virtual-keyboard":"true",className:r.searchInput,placeholder:"Search titles...",value:g,onInput:e=>K(e.currentTarget.value),onKeyDown:e=>e.key==="Enter"&&_()})]}),t("div",{className:r.searchActions,children:[t("select",{value:i,onChange:e=>{J(e.target.value),N({})},className:r.providerSelect,"aria-label":"Media type",children:de.map(e=>t("option",{value:e.value,children:e.label},e.value))}),t(x,{onClick:_,className:r.searchBtn,children:"Search"}),t("button",{className:`${r.filterToggleBtn} ${b?r.active:""}`,onClick:()=>X(!b),children:[t(p,{name:"filter",size:14}),t("span",{children:"Filters"}),b?t(p,{name:"chevron-up",size:12}):t(p,{name:"chevron-down",size:12})]})]})]}),t("div",{className:`${r.advancedFilters} ${b?r.show:""}`,children:[t("div",{className:r.filterDivider}),t("div",{className:r.filterGrid,children:[t("div",{className:r.filterItem,children:[t("label",{children:"Sort By"}),t("select",{value:f,onChange:e=>B(e.currentTarget.value),children:me.map(e=>t("option",{value:e.value,children:e.label},e.value))})]}),t("div",{className:r.filterItem,children:[t("label",{children:"Year"}),t("select",{value:y,onChange:e=>F(e.currentTarget.value),children:ue.map(e=>t("option",{value:e.value,children:e.label},e.value))})]})]}),M.length>0&&t("div",{className:r.genreSection,children:[t("label",{className:r.genreLabel,children:"Genres"}),t("div",{className:r.genreContainer,children:M.map(e=>t("button",{className:`${r.genreButton} ${r[c[e.id]||""]}`,onClick:()=>te(e.id),children:e.name},e.id))})]}),t("div",{className:r.filterActions,children:[t(x,{variant:"secondary",onClick:()=>{N({}),F("ALL"),B("popularity.desc"),v(1),d({genre:"",year:"ALL",sort:"popularity.desc",page:"1"})},children:"Reset All"}),t(x,{onClick:_,className:r.searchBtn,children:"Apply Filters"})]})]})]}),Z&&t(ce,{message:ee?.message||"Search failed"}),Object.keys(c).length>0&&t("div",{style:{display:"flex",flexWrap:"wrap",gap:"8px",marginBottom:"1.5rem"},children:[t("span",{style:{fontSize:"0.8rem",color:"var(--text-muted)",fontWeight:600},children:"Active Filters:"}),Object.entries(c).map(([e,a])=>{const n=M.find(s=>s.id===e)?.name||e;return t("span",{className:`badge ${a==="include"?"badge-primary":"badge-danger"}`,style:{display:"inline-flex",alignItems:"center",gap:"6px"},children:[a==="include"?`+ ${n}`:`- ${n}`,t("button",{onClick:()=>{const s={...c};delete s[e],N(s)},style:{background:"none",border:"none",color:"inherit",cursor:"pointer"},children:"✕"})]},e)})]}),t("div",{className:r.resultsHeader,ref:C,children:[t("h2",{className:r.resultsTitle,children:[h?`Results for "${h}"`:S?"Browsing genres":i==="tv"?"Popular TV Shows":i==="movie"?"Popular Movies":"Trending",E>0&&t("span",{style:{fontWeight:400,color:"var(--text-tertiary)",fontSize:"0.85em",marginLeft:"0.5em"},children:["(",E.toLocaleString(),")"]})]}),T.length>0&&t(I,{page:m,totalPages:Math.max(1,Math.min(L,500)),canGoNext:R,onChange:j,isLoading:w})]}),t("div",{className:`${r.resultsGrid} ${H?r.lowEnd:""}`,children:w?t(ne,{}):T.map(e=>t(le,{item:{id:e.id,title:e.title,year:e.year,type:e.type,image:e.image,vote_average:e.vote_average,adult:e.adult}},`${e.type}-${e.id}`))}),!w&&T.length===0&&t("div",{className:r.noResults,children:[t(p,{name:"search",size:48,className:r.noResultsIcon}),t("h3",{children:"No results found"}),t("p",{children:"Try adjusting your search or filters to find what you're looking for."})]}),T.length>0&&t("div",{className:r.bottomPagination,children:t(I,{page:m,totalPages:Math.max(1,Math.min(L,500)),canGoNext:R,onChange:j,isLoading:w,variant:"labeled"})})]})}export{Me as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as U,d as v,h as y,T as x,u as l}from"./vendor-core-8R2fFbyN.js";import{M as N}from"./MediaCard-
|
|
1
|
+
import{n as U,d as v,h as y,T as x,u as l}from"./vendor-core-8R2fFbyN.js";import{M as N}from"./MediaCard-DpKoY-1j.js";import{L as _}from"./LibraryListPage-D3hTqTRU.js";import{R as K}from"./ResetProgressModal-DWeiO-hs.js";import{T as O}from"./TvPopup-PlCU30FO.js";import{e as u}from"./index-CtoKRNLc.js";import{l as Q,u as Y,a as q,b as z,h as G,m as Z,o as j,p as D,t as S,i as I,T as k}from"./useTvLibrary-C0sX-ilZ.js";import"./vendor-ui-CUDCvRS_.js";import"./vendor-icons-CDMuNDeL.js";import"./useIsMobile-Dm_b6Ob3.js";import"./SkeletonGrid-B5loz7ii.js";import"./ErrorMessage-z4f4WGgP.js";import"./Watchlist.module-XGtVQr1d.js";import"./vendor-query-BXRECSI6.js";const H=["All","Continue Watching",...k],P=24;function ce(){const{filter:d="All"}=U(),[T,g]=v(1),[s,p]=v(null),[h,c]=v(!1);y(()=>{document.title="TV Watchlist - dango"},[]),y(()=>{g(1)},[d]);const o=d==="Continue Watching",r=Q(o?"All":d,T,P),i=Y(100),b=q(),w=z(),C=G(),W=Z(),B=j(),E=D(),M=x(()=>o?(i.data?.data??[]).map(e=>{const a=e.currentTime??0,t=e.duration??0,f=e.season??e.lastSeason??1,R=e.episode??e.lastEpisode??1,n=e.mediaType==="movie",m=n?"Movie":`S${f} E${R}`,L=e.completed===!0||e.completed===1||t>0&&a>=t*.8;return{key:e.id,libId:e.id,tmdbId:e.tmdbId,mediaType:e.mediaType,title:e.title,poster:e.poster||"",year:e.year,adult:I({adult:e.adult===1}),status:e.status,badge:m,progressPercent:L?100:t>0?a/t*100:0,progressLabel:t>0?L?"Watched":n?`${u(a)} / ${u(t)}`:`${m} · ${u(a)} / ${u(t)}`:m,watchTarget:S(e.mediaType,e.tmdbId,n?void 0:f,n?void 0:R)}}):(r.data?.data??[]).map(e=>({key:e.id,libId:e.id,tmdbId:e.tmdbId,mediaType:e.mediaType,title:e.title,poster:e.poster||"",year:e.year,adult:I({adult:e.adult===1}),status:e.status,badge:e.lastSeason&&e.lastEpisode?`S${e.lastSeason} E${e.lastEpisode}`:void 0,progressPercent:void 0,progressLabel:void 0,watchTarget:S(e.mediaType,e.tmdbId,e.lastSeason??void 0,e.lastEpisode??void 0)})),[o,i.data,r.data]),A=o?i.data?.total??0:r.data?.total??0,V=o?i.isLoading:r.isLoading,$=o?i.error:r.error,F=()=>{s&&(w.mutate({mediaId:s.libId}),h&&b.mutate(s.libId),p(null),c(!1))};return l(_,{headerTitle:"My TV Watchlist",headerSubtitle:"Track and manage your movies and shows",filters:H,filterBy:d,filterBasePath:"/tv-watchlist",continueFilter:"Continue Watching",statusOptions:[...k],entries:M,total:A,isLoading:V,error:$,page:T,pageSize:P,onPageChange:g,emptyTitle:"Your TV watchlist is looking a bit empty",emptyFilteredText:"No titles match this filter.",emptyAllText:"Let's find something to watch!",browseLabel:"Browse TV & Movies",browseTarget:"/tv",removeListLabel:"Remove from TV Watchlist",listNoun:"TV watchlist",skipConfirmKey:"tvSkipRemoveConfirmation",onBulkStatus:(e,a)=>W.mutate({ids:e,status:a}),onBulkRemove:e=>{o?E.mutate(e):B.mutate(e)},onStatusChange:(e,a)=>C.mutate({id:e,status:a}),onRemoveItem:e=>b.mutate(e),renderCard:e=>l(N,{item:{id:e.libId,title:e.title,thumbnail:e.poster,typeBadge:e.mediaType==="movie"?"Movie":"TV",chapterBadge:e.badge??null,isAdult:e.adult},linkTo:e.watchTarget,hoverIcon:"play",progress:e.progressPercent!==void 0&&e.progressLabel?{percent:e.progressPercent,label:e.progressLabel}:void 0,showProgress:o,metaRow:e.year?l("span",{style:{opacity:.75},children:e.year}):void 0,onRemove:o?()=>p(e):void 0,renderPopup:(a,t)=>l(O,{item:{id:e.tmdbId??0,title:e.title||"",year:e.year||"",type:e.mediaType||"tv",image:e.poster||""},anchorRect:a,onMouseEnter:t.onMouseEnter,onMouseLeave:t.onMouseLeave,onRequestClose:t.close})}),modals:l(K,{isOpen:!!s,itemName:s?.title,progressKind:"watch",listLabel:"my TV watchlist",alsoRemove:h,onAlsoRemoveChange:c,onClose:()=>{p(null),c(!1)},onConfirm:F})})}export{ce as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{h as pe,n as Ke,a as Ve,o as Qe,d as u,A as ge,T as R,u as t,S as He}from"./vendor-core-8R2fFbyN.js";import{u as Je,a as ve}from"./vendor-query-BXRECSI6.js";import{u as Ze,d as Xe,r as et,t as fe,v as ye,z as tt,q as Se,i as at,w as nt,x as st,y as lt,A as rt,C as it,B as T,M as te}from"./index-CtoKRNLc.js";import{I as p}from"./vendor-icons-CDMuNDeL.js";import{A as ct}from"./AnimeCard-D4qo4289.js";import{P as be,S as ot}from"./SkeletonGrid-B5loz7ii.js";import{E as dt}from"./ErrorMessage-z4f4WGgP.js";import{s as a}from"./Watchlist.module-XGtVQr1d.js";import"./useAnimeInfoData-kr3WOIWH.js";import"./QueueOptionsButton-lv26-6jp.js";import"./vendor-ui-CUDCvRS_.js";import"./MediaCard-DpKoY-1j.js";import"./useIsMobile-Dm_b6Ob3.js";const ut=(d,g)=>{const l=new URLSearchParams(g);return l.delete("page"),l.sort(),`${d}|${l.toString()}`},mt=(d,g)=>{const l=new Set(d);return g.forEach(N=>l.add(N)),l},ht=(d,g)=>{const l=new Set(d);return g.forEach(N=>l.delete(N)),l},Ae=["All","Continue Watching","Watching","Completed","On-Hold","Dropped","Planned"],Le=Ae.slice(2),pt=[{value:"ALL",label:"All Types"},{value:"TV",label:"TV Series"},{value:"Movie",label:"Movie"},{value:"OVA",label:"OVA"},{value:"ONA",label:"ONA"},{value:"TV_SHORT",label:"TV Short"},{value:"SPECIAL",label:"Special"},{value:"ADULT",label:"Adult (18+)"}],gt=[{value:"ALL",label:"All Seasons"},{value:"WINTER",label:"Winter"},{value:"SPRING",label:"Spring"},{value:"SUMMER",label:"Summer"},{value:"FALL",label:"Fall"}],Tt=()=>{pe(()=>{document.title="Watchlist - dango"},[]);const{filter:d="All"}=Ke(),g=Ve(),[l,N]=Qe(),ae=Je(),[v,B]=u(parseInt(l.get("page")||"1")),[f,P]=u(l.get("query")||""),[C,q]=u(l.get("sortBy")||"last_added"),[y,W]=u(l.get("type")||"ALL"),[S,I]=u(l.get("season")||"ALL"),[b,$]=u(l.get("year")||"ALL"),[w,O]=u(()=>{const e={},n=l.get("genres")?.split(",").map(r=>r.trim()).filter(Boolean)||[],s=l.get("excludeGenres")?.split(",").map(r=>r.trim()).filter(Boolean)||[];return n.forEach(r=>r&&(e[r]="include")),s.forEach(r=>r&&(e[r]="exclude")),e}),[F,Ne]=u(()=>["type","season","year","genres","excludeGenres"].some(e=>l.has(e))),{lowEndMode:Ce}=Ze(),{titlePreference:M}=Xe(),{data:we}=et(),ne=we?.genres||[],K=ge(null),[c,k]=u(null),[V,D]=u(!1),[se,z]=u(!1),[E,ke]=u(!1),[h,L]=u(new Set),Q=ge(null),i=d==="Continue Watching",G=R(()=>{const e=new URLSearchParams(l);return e.delete("page"),e.set("titlePreference",M),e.toString()},[l,M]),{data:_,isLoading:xe,error:Re}=fe(G,v,14),{data:U,isLoading:Te,error:Be}=ye(d,G,v,14),{data:Pe}=fe(G,v+1,14),{data:We}=ye(d,G,v+1,14),H=R(()=>(i?_?.data:U?.data)||[],[i,_,U]),x=R(()=>(i?_?.total:U?.total)||0,[i,_,U]),Y=i?xe:Te,le=i?Re:Be,re=i?Pe:We;pe(()=>{P(l.get("query")||""),q(l.get("sortBy")||"last_added"),W(l.get("type")||"ALL"),I(l.get("season")||"ALL"),$(l.get("year")||"ALL");const e={},n=l.get("genres")?.split(",").map(o=>o.trim()).filter(Boolean)||[],s=l.get("excludeGenres")?.split(",").map(o=>o.trim()).filter(Boolean)||[];n.forEach(o=>o&&(e[o]="include")),s.forEach(o=>o&&(e[o]="exclude")),O(e),B(parseInt(l.get("page")||"1"));const r=ut(d,l);Q.current!==null&&Q.current!==r&&L(new Set),Q.current=r},[l,d]);const Ie=ve({mutationFn:async({id:e,status:n})=>{await Se("/api/watchlist/status",{method:"POST",body:JSON.stringify({id:e,status:n})})},onSuccess:()=>{ae.invalidateQueries({queryKey:["watchlist"]}),tt.success("Status updated")}}),$e=ve({mutationFn:async e=>{await Se("/api/continue-watching/remove",{method:"POST",body:JSON.stringify({showId:e})})},onSuccess:()=>ae.invalidateQueries({queryKey:["allContinueWatching"]})}),J=at(),{data:ie}=nt("skipRemoveConfirmation"),Oe=st(),Z=R(()=>{const e=n=>n[M]||n.name||"";return[...H].sort((n,s)=>C==="name_asc"?e(n).localeCompare(e(s)):C==="name_desc"?e(s).localeCompare(e(n)):0)},[H,C,M]),X=new Date().getFullYear(),Fe=[{value:"ALL",label:"All Years"},...Array.from({length:X-1980+1},(e,n)=>({value:String(X-n),label:String(X-n)}))],m=(e=C,n=1)=>{const s=new URLSearchParams;f.trim()&&s.set("query",f.trim()),e!=="last_added"&&s.set("sortBy",e),y!=="ALL"&&s.set("type",y),S!=="ALL"&&s.set("season",S),b!=="ALL"&&s.set("year",b);const r=Object.entries(w).filter(([,A])=>A==="include").map(([A])=>A),o=Object.entries(w).filter(([,A])=>A==="exclude").map(([A])=>A);r.length>0&&s.set("genres",r.join(",")),o.length>0&&s.set("excludeGenres",o.join(",")),n>1&&s.set("page",n.toString()),N(s),n!==v&&B(n)},ce=e=>{if(m(C,e),K.current){const n=K.current.getBoundingClientRect().top+window.scrollY-100;window.scrollTo({top:n,behavior:"smooth"})}},Me=()=>{P(""),q("last_added"),W("ALL"),I("ALL"),$("ALL"),O({}),N(new URLSearchParams),B(1)},De=e=>{O(n=>{const s=n[e],r={...n};return s==="include"?r[e]="exclude":s==="exclude"?delete r[e]:r[e]="include",r})},oe=(e,n)=>{if(i){k({id:e,name:n});return}String(ie)==="true"||String(ie)==="1"?J.mutate(e):k({id:e,name:n})},ze=()=>{if(c){if(c.ids){i?(Ee.mutate(c.ids),V&&ue.mutate(c.ids)):ue.mutate(c.ids),L(new Set),k(null),D(!1),z(!1);return}i?($e.mutate(c.id),V&&J.mutate(c.id)):J.mutate(c.id),se&&Oe.mutate({key:"skipRemoveConfirmation",value:!0}),k(null),D(!1),z(!1)}},de=()=>{k(null),D(!1),z(!1)},ue=lt(),Ee=rt(),Ge=it(),_e=()=>{ke(e=>{const n=!e;return n||L(new Set),n})},Ue=e=>{L(n=>{const s=new Set(n);return s.has(e)?s.delete(e):s.add(e),s})},j=Z.map(e=>e.id),ee=j.length>0&&j.every(e=>h.has(e)),Ye=()=>{L(ee?e=>ht(e,j):e=>mt(e,j))},je=e=>{h.size!==0&&(Ge.mutate({ids:[...h],status:e}),L(new Set))},qe=()=>{h.size!==0&&k({ids:[...h]})},me=H.length>=14&&re&&re.data.length>0,he=R(()=>Math.max(1,Math.ceil(x/14)),[x]);return t("div",{className:"page-container",children:[t("header",{className:a.header,children:[t("h2",{className:a.title,children:"My Watchlist"}),t("p",{className:a.subtitle,children:"Track and manage your anime collection"})]}),t("div",{className:a.controls,children:[t("div",{className:a.filters,children:Ae.map(e=>t("button",{className:`${a.filterBtn} ${d===e?a.active:""}`,onClick:()=>{const n=new URLSearchParams(l);n.delete("page"),g({pathname:`/watchlist/${e}`,search:n.toString()}),B(1)},children:e},e))}),t("div",{children:t("select",{className:a.sortSelect,value:C,onChange:e=>{const n=e.currentTarget.value;q(n),m(n,v)},children:[t("option",{value:"last_added",children:"Recently Added"}),t("option",{value:"name_asc",children:"Name (A-Z)"}),t("option",{value:"name_desc",children:"Name (Z-A)"})]})})]}),t("div",{className:a.filterContainer,children:[t("div",{className:a.searchBarWrapper,children:[t("div",{className:a.inputIconWrapper,children:[t(p,{name:"search",className:a.searchIcon}),t("input",{className:a.searchInput,placeholder:"Search your watchlist by title...",value:f,onInput:e=>P(e.currentTarget.value),onKeyDown:e=>e.key==="Enter"&&m()})]}),t("div",{className:a.searchActions,children:[t(T,{onClick:()=>m(),className:a.searchBtn,children:"Search"}),t("button",{className:`${a.filterToggleBtn} ${F?a.active:""}`,onClick:()=>Ne(!F),children:[t(p,{name:"filter",size:14}),t("span",{children:"Filters"}),F?t(p,{name:"chevron-up",size:12}):t(p,{name:"chevron-down",size:12})]})]})]}),t("div",{className:`${a.advancedFilters} ${F?a.show:""}`,children:[t("div",{className:a.filterDivider}),t("div",{className:a.filterGrid,children:[t("div",{className:a.filterItem,children:[t("label",{children:"Type"}),t("select",{value:y,onChange:e=>W(e.currentTarget.value),children:pt.map(e=>t("option",{value:e.value,children:e.label},e.value))})]}),t("div",{className:a.filterItem,children:[t("label",{children:"Season"}),t("select",{value:S,onChange:e=>I(e.currentTarget.value),children:gt.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:b,onChange:e=>$(e.currentTarget.value),children:Fe.map(e=>t("option",{value:e.value,children:e.label},e.value))})]})]}),ne.length>0&&t("div",{className:a.genreSection,children:[t("label",{className:a.genreLabel,children:"Genres"}),t("div",{className:a.genreContainer,children:ne.map(e=>t("button",{className:`${a.genreButton} ${a[w[e]||""]}`,onClick:()=>De(e),children:e},e))})]}),t("div",{className:a.filterActions,children:[t(T,{variant:"secondary",onClick:Me,children:"Reset All"}),t(T,{onClick:()=>m(),className:a.applyBtn,children:"Apply Filters"})]})]})]}),t("div",{className:a.resultsHeader,ref:K,children:[t("h3",{className:a.resultsTitle,children:[i?"Continue Watching":d,t("span",{className:a.itemCount,children:["(",x," items)"]})]}),t("div",{className:a.headerActions,children:[t("button",{className:`${a.manageBtn} ${E?a.active:""}`,onClick:_e,children:[t(p,{name:"pencil-alt",size:13}),t("span",{children:"Bulk Manage"})]}),x>0&&t(be,{page:v,totalPages:he,canGoNext:me,onChange:ce,isLoading:Y})]})]}),E&&t("div",{className:a.manageBar,children:[t("button",{className:a.selectAllBtn,onClick:Ye,children:[t("span",{className:`${a.selectAllBox} ${ee?a.selectAllBoxChecked:""}`,"aria-hidden":"true"}),t("span",{children:ee?"Clear Page":"Select All"})]}),t("span",{className:a.manageCount,children:[h.size," selected"]}),t("div",{className:a.manageSpacer}),!i&&t("select",{className:a.manageStatusSelect,value:"",onChange:e=>{e.currentTarget.value&&je(e.currentTarget.value)},disabled:h.size===0,title:"Set status for selected items",children:[t("option",{value:"",children:"Set status…"}),Le.map(e=>t("option",{value:e,children:e},e))]}),t("button",{className:a.manageRemoveBtn,onClick:qe,disabled:h.size===0,children:[t(p,{name:"trash",size:13}),t("span",{children:"Remove Selected"})]})]}),Y?t(ot,{}):le?t(dt,{message:le.message}):t(He,{children:[(y!=="ALL"||S!=="ALL"||b!=="ALL"||Object.keys(w).length>0||f.trim())&&t("div",{style:{display:"flex",flexWrap:"wrap",gap:"8px",alignItems:"center",marginBottom:"1.5rem"},children:[t("span",{style:{fontSize:"0.8rem",color:"var(--text-muted)",fontWeight:600},children:"Active Filters:"}),f.trim()&&t("span",{className:"badge badge-secondary",style:{display:"inline-flex",alignItems:"center",gap:"6px"},children:["Search: ",f,t("button",{onClick:e=>{e.stopPropagation(),e.preventDefault(),P(""),m()},style:{background:"none",border:"none",color:"inherit",cursor:"pointer"},children:"✕"})]}),y!=="ALL"&&t("span",{className:"badge badge-secondary",style:{display:"inline-flex",alignItems:"center",gap:"6px"},children:["Type: ",y,t("button",{onClick:e=>{e.stopPropagation(),e.preventDefault(),W("ALL"),m()},style:{background:"none",border:"none",color:"inherit",cursor:"pointer"},children:"✕"})]}),S!=="ALL"&&t("span",{className:"badge badge-secondary",style:{display:"inline-flex",alignItems:"center",gap:"6px"},children:["Season: ",S,t("button",{onClick:e=>{e.stopPropagation(),e.preventDefault(),I("ALL"),m()},style:{background:"none",border:"none",color:"inherit",cursor:"pointer"},children:"✕"})]}),b!=="ALL"&&t("span",{className:"badge badge-secondary",style:{display:"inline-flex",alignItems:"center",gap:"6px"},children:["Year: ",b,t("button",{onClick:e=>{e.stopPropagation(),e.preventDefault(),$("ALL"),m()},style:{background:"none",border:"none",color:"inherit",cursor:"pointer"},children:"✕"})]}),Object.entries(w).map(([e,n])=>t("span",{className:`badge ${n==="include"?"badge-primary":"badge-danger"}`,style:{display:"inline-flex",alignItems:"center",gap:"6px"},children:[n==="include"?`+ ${e}`:`- ${e}`,t("button",{onClick:s=>{s.stopPropagation(),s.preventDefault(),O(r=>{const o={...r};return delete o[e],o}),m()},style:{background:"none",border:"none",color:"inherit",cursor:"pointer"},children:"✕"})]},e))]}),t("div",{className:`${a.grid} ${Ce?a.lowEnd:""}`,children:Z.map(e=>{const n=h.has(e.id);return t("div",{className:`${a.itemWrapper} ${n?a.selected:""}`,children:[E&&t("div",{className:a.selectOverlay,onClick:()=>Ue(e.id),title:n?"Deselect":"Select",children:t("span",{className:a.selectBadge,children:n?t(p,{name:"check",size:12}):null})}),t(ct,{anime:e,continueWatching:i,onRemove:()=>oe(e.id,e.name),layout:"vertical"}),!i&&!E&&t("div",{className:a.cardActions,children:[t("select",{className:a.statusSelect,value:e.status,onChange:s=>Ie.mutate({id:e.id,status:s.currentTarget.value}),children:Le.map(s=>t("option",{value:s,children:s},s))}),t("button",{className:a.removeBtn,onClick:()=>oe(e.id,e.name),title:"Remove from Watchlist","aria-label":"Remove from Watchlist",children:t(p,{name:"trash",size:12})})]})]},e._id)})})]}),!Y&&Z.length===0&&t("div",{className:a.emptyState,children:[t("h3",{className:a.emptyTitle,children:"Your watchlist is looking a bit lonely"}),t("p",{className:a.emptyText,children:d!=="All"||f||y!=="ALL"||S!=="ALL"||b!=="ALL"||Object.keys(w).length>0?"No anime match these filters. Try adjusting them to see more titles.":"Let's find something to watch!"}),t("button",{className:a.emptyBtn,onClick:()=>g("/search"),children:[t(p,{name:"search",size:14}),t("span",{children:"Browse Anime"})]})]}),x>0&&t("div",{className:a.bottomPagination,children:t(be,{page:v,totalPages:he,canGoNext:me,onChange:ce,isLoading:Y,variant:"labeled"})}),t(te,{isOpen:!!c,onClose:de,title:i?"Reset Progress":"Remove from Watchlist",children:[t(te.Body,{children:[t("p",{children:c?.ids&&c.ids.length>1?i?`Are you sure you want to remove watch progress for ${c.ids.length} items?`:`Are you sure you want to remove ${c.ids.length} items from your watchlist?`:i?`Are you sure you want to remove your watch progress for "${c?.name}"?`:`Are you sure you want to remove "${c?.name}" from your watchlist?`}),i&&t("label",{children:[t("input",{type:"checkbox",checked:V,onChange:e=>D(e.target.checked)}),"Also remove from my watchlist"]}),!i&&!(c?.ids&&c.ids.length>1)&&t("label",{children:[t("input",{type:"checkbox",checked:se,onChange:e=>z(e.target.checked)}),"Remember my choice"]})]}),t(te.Actions,{children:[t(T,{variant:"secondary",onClick:de,children:"No"}),t(T,{variant:"danger",onClick:ze,children:"Yes"})]})]})]})};export{Tt as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as n}from"./index-
|
|
1
|
+
import{_ as n}from"./index-CtoKRNLc.js";let a=null,e=null;async function r(){return a||(e||(e=n(()=>import("./hls-BOLXTnjL.js"),[]).then(l=>(a=l.default,a)).catch(()=>null)),e)}function c(l){return l.canPlayType("application/vnd.apple.mpegurl")!==""||l.canPlayType("application/x-mpegURL")!==""}export{c,r as l};
|