@serifpersia/dango 3.4.5 → 3.4.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/README.md +1 -1
  2. package/client/dist/assets/{AnimeCard-I3S6qw9d.js → AnimeCard-BVdH0EeW.js} +1 -1
  3. package/client/dist/assets/{AnimeInfo-CLU2NSBR.js → AnimeInfo-Dw2Nop6Q.js} +1 -1
  4. package/client/dist/assets/{AnimeInfoPage-4Mw9ArDy.js → AnimeInfoPage-Cw-Tq3YX.js} +2 -2
  5. package/client/dist/assets/{Asmr-DN9XBc5Y.js → Asmr-BrjzzyOi.js} +1 -1
  6. package/client/dist/assets/{AsmrResetProgressModal-DyU1Z2Gw.js → AsmrResetProgressModal-CYjpcYpb.js} +1 -1
  7. package/client/dist/assets/{AvSyncCalibrator-DxL0mr_4.js → AvSyncCalibrator-BuHurVgo.js} +3 -3
  8. package/client/dist/assets/AvSyncCalibrator-D0FYSwiz.css +1 -0
  9. package/client/dist/assets/{Home-CeTeJ-gM.js → Home-KdnP7sNM.js} +1 -1
  10. package/client/dist/assets/{Insights-i34-qV4C.js → Insights-DDWry-t1.js} +1 -1
  11. package/client/dist/assets/{LibraryListPage-DE-ASOX2.js → LibraryListPage-CV8Z9JlO.js} +1 -1
  12. package/client/dist/assets/{ListeningList-DrNce5ll.js → ListeningList-DSMbMZT7.js} +1 -1
  13. package/client/dist/assets/{Manga-DOrf7Fk6.js → Manga-J6XoqEKq.js} +1 -1
  14. package/client/dist/assets/{MangaInfoPage-CAZMLMGw.js → MangaInfoPage-N7TxsN5u.js} +1 -1
  15. package/client/dist/assets/{MangaReadPage-DQVEo8_F.js → MangaReadPage-D_VzSNWq.js} +1 -1
  16. package/client/dist/assets/{MangaResetProgressModal-DOjpLAMp.js → MangaResetProgressModal-DyhQYBDy.js} +1 -1
  17. package/client/dist/assets/{Mature-D2xb9EGB.js → Mature-Db53R-LR.js} +1 -1
  18. package/client/dist/assets/{MediaCard-CKUEcFTd.js → MediaCard-BcLjlpfR.js} +1 -1
  19. package/client/dist/assets/{Music-w_a34r7r.js → Music-DjxQjJOl.js} +1 -1
  20. package/client/dist/assets/{OptionListMenu-DxZHBMIZ.js → OptionListMenu-DngTgHxH.js} +1 -1
  21. package/client/dist/assets/Player-Be_7Ne5p.js +56 -0
  22. package/client/dist/assets/{PlayerSettings-Ddlg-MvW.js → PlayerSettings-D47ItGDR.js} +1 -1
  23. package/client/dist/assets/{QueueOptionsButton-BMvAC6Ut.js → QueueOptionsButton-ClVTpH8J.js} +1 -1
  24. package/client/dist/assets/{QueueRail-CAoGJvHP.js → QueueRail-DeJKVRs5.js} +1 -1
  25. package/client/dist/assets/{Radio-6O7rAUv1.js → Radio-DU0ma3GA.js} +1 -1
  26. package/client/dist/assets/{ReadingList-k3g8oHvs.js → ReadingList-qXW7Dk5z.js} +1 -1
  27. package/client/dist/assets/{ResetProgressModal-vFC6N-Qw.js → ResetProgressModal-C6ukct_c.js} +1 -1
  28. package/client/dist/assets/{Search-Bh9Y6nIJ.js → Search-DjjKA_Wu.js} +1 -1
  29. package/client/dist/assets/{Settings-DRumujfh.js → Settings-DQt_S5Qw.js} +1 -1
  30. package/client/dist/assets/{SkeletonGrid-BtzUnQE0.js → SkeletonGrid-nx2HEi4P.js} +1 -1
  31. package/client/dist/assets/{Trackers-D0nqy8wu.js → Trackers-BcGzeqj2.js} +1 -1
  32. package/client/dist/assets/Tv-COvyHdeJ.js +4 -0
  33. package/client/dist/assets/{TvInfo-BkECbOKN.js → TvInfo-CUd1agFy.js} +1 -1
  34. package/client/dist/assets/{TvPopup-D8WWY6o4.js → TvPopup-CJeu3tgc.js} +1 -1
  35. package/client/dist/assets/{TvSearch-kWPep3gL.js → TvSearch-BIypjbU3.js} +1 -1
  36. package/client/dist/assets/{TvWatchlist-dD4emIHx.js → TvWatchlist-DZrBdiqZ.js} +1 -1
  37. package/client/dist/assets/{Watchlist-cWxw38nU.js → Watchlist-Dw8cPe0n.js} +1 -1
  38. package/client/dist/assets/{hls-uG_Y3i5s.js → hls-B3_1VuDP.js} +1 -1
  39. package/client/dist/assets/{index-BWIWE3Qy.js → index-gMxawd-E.js} +2 -2
  40. package/client/dist/assets/{useAnimeInfoData-DjPBg24u.js → useAnimeInfoData-_iOLEAa8.js} +1 -1
  41. package/client/dist/assets/{useAsmr-DQyobNQX.js → useAsmr-Blk4v41t.js} +1 -1
  42. package/client/dist/assets/{useAsmrPopup-CDoroMBD.js → useAsmrPopup-D9SQIgZa.js} +1 -1
  43. package/client/dist/assets/{useMangaLibrary-C6L8mrnS.js → useMangaLibrary-B60at6ni.js} +1 -1
  44. package/client/dist/assets/{useMangaPopup-BSuMa_vA.js → useMangaPopup-DEfGjWSu.js} +1 -1
  45. package/client/dist/assets/{useProviders-XIdvDof6.js → useProviders-Ca0bZWt7.js} +1 -1
  46. package/client/dist/assets/{useTv-DzSYasru.js → useTv-WJCDL5_5.js} +1 -1
  47. package/client/dist/assets/{useTvLibrary-BnbHS-gg.js → useTvLibrary-Fgn5i9rJ.js} +1 -1
  48. package/client/dist/index.html +1 -1
  49. package/package.json +2 -2
  50. package/server/dist/hono/proxy.js +102 -75
  51. package/server/dist/hono/tv.js +2 -2
  52. package/server/dist/hono/watchlist.js +2 -291
  53. package/server/dist/lib/anilist.js +0 -3
  54. package/server/dist/lib/mal.js +0 -38
  55. package/server/dist/lib/offline-db.js +0 -6
  56. package/server/dist/providers/remote-loader.js +15 -26
  57. package/server/dist/providers/title-matching.js +5 -5
  58. package/server/dist/repositories/manga.repository.js +0 -1
  59. package/server/dist/repositories/watched-episodes.repository.js +0 -2
  60. package/server/dist/utils/megaplay.utils.js +1 -2
  61. package/server/package.json +1 -1
  62. package/client/dist/assets/AvSyncCalibrator-C2wu1ydI.css +0 -1
  63. package/client/dist/assets/Player-B8YHeATv.js +0 -56
  64. package/client/dist/assets/Tv-DVebLMNS.js +0 -4
@@ -0,0 +1,4 @@
1
+ import{d as y,A as E,h as S,u as t,S as Ae,o as Rr,p as $r,a as Dr,T as Ie,q as T}from"./vendor-core-DfaOB3Rn.js";import{u as Or}from"./vendor-query-BBT5_sHx.js";import{g as un,e as Vr,t as yt,z as Fr,W as jr,M as cn,B as Ce}from"./index-gMxawd-E.js";import{I as O}from"./vendor-icons-DrybRNxP.js";import{M as Wr,v as cr,f as $n,e as zr,C as Hr,S as Ur,U as qr,a as Kr,p as Dn,u as Yr,b as Qr,d as Gr,l as Xr,t as Jr,i as Pn,w as Zr,x as es,y as or,s as Ln,g as ts,h as ns,j as rs,r as ss,k as at,m as as,E as os,A as is,P as ls,n as be,q as cs}from"./AvSyncCalibrator-BuHurVgo.js";import{O as mn,S as ds,a as us,A as ms}from"./OptionListMenu-DngTgHxH.js";import{u as hs}from"./useProviders-Ca0bZWt7.js";import{d as ps,g as gs,h as fs,f as vs,e as bs,j as ys,k as Ss}from"./useTvLibrary-Fgn5i9rJ.js";import{l as _s,c as Cs}from"./hls-B3_1VuDP.js";import{u as Ts}from"./useIsMobile-Dvx1uJ82.js";import{S as ks}from"./SynopsisText-B3Sa5pRv.js";const Es="_fullscreenFlat_1xij1_1",xs="_timeDisplay_1xij1_15",Ns="_bottomControls_1xij1_19",ws="_leftControls_1xij1_23",Is="_rightControls_1xij1_24",Bs="_controlBtn_1xij1_28",Ms="_controlsOverlay_1xij1_47",As="_hidden_1xij1_67",Ps="_topControls_1xij1_73",Ls="_backBtn_1xij1_93",Rs="_videoTitleInfo_1xij1_113",$s="_animeTitle_1xij1_119",Ds="_episodeLabel_1xij1_127",Os="_speedBoostBadge_1xij1_134",Vs="_progressBarContainer_1xij1_180",Fs="_progressBar_1xij1_180",js="_thumb_1xij1_199",Ws="_bufferedBar_1xij1_217",zs="_watchedBar_1xij1_227",Hs="_scrubbing_1xij1_252",Us="_timeBubble_1xij1_256",qs="_bottomControlsRow_1xij1_270",Ks="_nextEpisodeBtn_1xij1_293",Ys="_active_1xij1_346",Qs="_settingsPanel_1xij1_421",Gs="_settingsHeader_1xij1_440",Xs="_settingsBackBtn_1xij1_448",Js="_settingsTitle_1xij1_466",Zs="_settingsContent_1xij1_477",ea="_currentValue_1xij1_486",ta="_menuItem_1xij1_501",na="_menuNote_1xij1_534",ra="_loadingOverlay_1xij1_547",sa="_loadingDots_1xij1_558",aa="_dot_1xij1_563",oa="_bufferingOverlay_1xij1_592",ia="_bufferingSpinner_1xij1_601",a={fullscreenFlat:Es,timeDisplay:xs,bottomControls:Ns,leftControls:ws,rightControls:Is,controlBtn:Bs,controlsOverlay:Ms,hidden:As,topControls:Ps,backBtn:Ls,videoTitleInfo:Rs,animeTitle:$s,episodeLabel:Ds,speedBoostBadge:Os,progressBarContainer:Vs,progressBar:Fs,thumb:js,bufferedBar:Ws,watchedBar:zs,scrubbing:Hs,timeBubble:Us,bottomControlsRow:qs,nextEpisodeBtn:Ks,active:Ys,settingsPanel:Qs,settingsHeader:Gs,settingsBackBtn:Xs,settingsTitle:Js,settingsContent:Zs,currentValue:ea,menuItem:ta,menuNote:na,loadingOverlay:ra,loadingDots:sa,dot:aa,bufferingOverlay:oa,bufferingSpinner:ia},dn=-6e4,Rn=6e4,ir=500,la=({classes:m,delayMs:k,onDelayChange:H})=>{const[V,L]=y(null),x=V??k,r=E(H);r.current=H;const M=E(k);M.current=k;const o=E(null);o.current=V,S(()=>{L(null)},[k]),S(()=>()=>{const q=o.current;q!==null&&q!==M.current&&r.current(q)},[]);const se=q=>{M.current=q,o.current=null,r.current(q),L(null)},ae=q=>{const f=o.current??M.current,ye=Math.max(dn,Math.min(Rn,f+q));se(ye)};return t(Ae,{children:[t("div",{style:{display:"flex",gap:6,padding:"0.5rem 0.75rem 0.25rem"},children:[t("button",{type:"button",className:m.item,onClick:()=>ae(-ir),"aria-label":"Show subtitles 0.5 seconds earlier",style:{flex:1,justifyContent:"center"},children:t("span",{children:"-0.5s"})}),t("button",{type:"button",className:m.item,onClick:()=>ae(ir),"aria-label":"Show subtitles 0.5 seconds later",style:{flex:1,justifyContent:"center"},children:t("span",{children:"+0.5s"})}),t("button",{type:"button",className:m.item,onClick:()=>se(0),disabled:x===0,"aria-label":"Reset subtitle timing",style:{flex:1,justifyContent:"center"},children:t("span",{children:"Reset"})})]}),t(Wr,{label:"Subtitle timing",display:cr(x),min:dn,max:Rn,step:100,value:x,percent:(x-dn)/(Rn-dn)*100,onChange:q=>{const f=Math.round(q);o.current=f,L(f)},onCommit:()=>{const q=o.current;q!==null&&se(q)}}),t("div",{className:m.note,children:"Positive delays subtitles (show later). Negative shows them earlier. 0.0s is default."})]})},ca=({classes:m,tracks:k,selected:H,onChange:V})=>t(mn,{classes:m,options:k.map((L,x)=>({key:String(x),label:L.label||L.language,selected:x===H})),onSelect:L=>V(Number(L))}),da=({player:m,title:k,episodeLabel:H,audioTracks:V,selectedAudioTrack:L,onAudioTrackChange:x,subtitles:r,selectedSubtitle:M,onSubtitleChange:o,streams:se,qualityIdx:ae,onQualityChange:q,onBack:f,children:ye,movyServers:A=[],selectedMovyServer:St="atlanta",onMovyServerSelect:me,isMovySource:je=!1,videoDelayEnabled:_t=!1,onVideoDelayToggle:Ct,videoDelayMs:Tt=0,onVideoDelayChange:hn,onCalibrateAvSync:pn,subtitleDelayMs:kt=0,onSubtitleDelayChange:oe,showNextEpisodeButton:$t=!1,onNextEpisode:Dt,isLoading:Be=!1})=>{const{state:_,refs:Pe,actions:C}=m,X=Pe.videoRef,{subtitleFontSize:Le,subtitlePosition:he,subtitleBgOpacity:We,subtitleBgColor:pe,subtitleTextColor:ze,subtitleEdge:J,subtitleBold:Te}=_,[N,Q]=y(null),He=E(null),[Ot,Et]=y(0);S(()=>{const i=X.current;if(!i)return;const d=()=>Et(i.clientHeight||0);d();const $e=new ResizeObserver(d);return $e.observe(i),()=>$e.disconnect()},[X,se]);const ie=(i,d)=>{try{localStorage.setItem(i,String(d))}catch{}},ne=(i,d)=>{switch(i){case"fontSize":typeof d=="number"&&(C.setSubtitleFontSize(d),ie("subtitleFontSize",d));break;case"position":typeof d=="number"&&(C.setSubtitlePosition(d),ie("subtitlePosition",d));break;case"bgOpacity":typeof d=="number"&&(C.setSubtitleBgOpacity(d),ie("subtitleBgOpacity",d));break;case"bgColor":typeof d=="string"&&(C.setSubtitleBgColor(d),ie("subtitleBgColor",d));break;case"textColor":typeof d=="string"&&(C.setSubtitleTextColor(d),ie("subtitleTextColor",d));break;case"edge":(d==="shadow"||d==="outline"||d==="none")&&(C.setSubtitleEdge(d),ie("subtitleEdge",d));break;case"bold":typeof d=="boolean"&&(C.setSubtitleBold(d),ie("subtitleBold",d));break}};S(()=>{const i="tv-player-subtitle-style";let d=document.getElementById(i);d||(d=document.createElement("style"),d.id=i,document.head.appendChild(d));const $e={fontSize:Le,position:he,bgOpacity:We,bgColor:pe,textColor:ze,edge:J,bold:Te},ee=X.current,Kt=$n(Le,Ot||ee?.clientHeight||720);if(d.textContent=zr({...$e,fontSize:Kt}),ee){const Yt=()=>{const I=Number(he);return isNaN(I)?0:Math.max(0,Math.min(100,I))},Nt=(I,z)=>{try{const l=I;l.snapToLines=!1,l.line=z}catch{}},fn=()=>{const I=Kt*16,z=ee.videoHeight||ee.clientHeight||720,l=ee.videoWidth||ee.clientWidth||1280;return{step:I*1.3/z*100,chars:Math.max(20,Math.floor(l/(I*.55)))}},ct=I=>{const z=Math.max(0,Math.min(100,100-Yt())),l=Array.from(I.activeCues??[]);if(l.length<=1){l.forEach(_e=>Nt(_e,z));return}const{step:Ge,chars:$}=fn();let wt=z;for(let _e=l.length-1;_e>=0;_e--){const bn=String(l[_e].text??"").replace(/<[^>]*>/g,"").split(`
2
+ `).reduce((Gt,mt)=>Gt+Math.max(1,Math.ceil(mt.length/$)),0),Qt=wt-bn*Ge;Nt(l[_e],Math.max(0,Qt)),wt=Qt-Ge*.4}},Ye=()=>{const I=Math.max(0,Math.min(100,100-Yt()));Array.from(ee.textTracks).forEach(z=>{z.cues&&(Array.from(z.cues).forEach(l=>Nt(l,I)),z.mode==="showing"&&ct(z))})};Ye();const K=I=>{const z=I.target;z.mode==="showing"&&ct(z)},dt=()=>{Array.from(ee.textTracks).forEach(I=>{I.removeEventListener("cuechange",K),I.addEventListener("cuechange",K)}),Ye()};Array.from(ee.textTracks).forEach(I=>{I.addEventListener("cuechange",K)}),ee.textTracks.addEventListener("addtrack",dt);const ut=Array.from(ee.querySelectorAll("track")),Qe=()=>Ye();return ut.forEach(I=>I.addEventListener("load",Qe)),()=>{Array.from(ee.textTracks).forEach(I=>{I.removeEventListener("cuechange",K)}),ee.textTracks.removeEventListener("addtrack",dt),ut.forEach(I=>I.removeEventListener("load",Qe))}}},[Le,he,We,pe,ze,J,Te,M,r,X,Ot]);const Vt=i=>{const d=X.current;!d||isNaN(_.duration)||_.duration===0||(d.currentTime=i*_.duration)},xt=()=>{X.current&&(C.setIsScrubbing(!0),C.wasPlayingBeforeScrub.current=!X.current.paused,X.current.pause())},R=i=>{const d=X.current;d&&_.duration&&(d.currentTime=i*_.duration)},Z=()=>{C.setIsScrubbing(!1),C.wasPlayingBeforeScrub.current&&X.current?.play().catch(()=>{})},Ft=i=>{const d=X.current;d&&(d.volume=i,d.muted=i===0,localStorage.setItem("playerVolume",i.toString()))},jt=()=>{C.toggleMute()},Re=r.length>0,v=M>=0,c=()=>{Q("main"),C.setShowControls(!0)},le=()=>{if(v){o(-1);return}let i=null;try{i=localStorage.getItem("tvLastSubtitle")}catch{}o(Dn(r,{lastKey:i,enabled:!0}))},re=()=>{Q(null)},Wt=()=>t(Ae,{children:[se.length>1&&t("button",{className:a.menuItem,onClick:()=>Q("quality"),children:[t("span",{children:"Quality"}),t("span",{className:a.currentValue,children:se[ae]?.quality||"Auto"})]}),je&&A.length>0&&t("button",{className:a.menuItem,onClick:()=>Q("server"),children:[t("span",{style:{display:"flex",alignItems:"center",gap:6},children:[t(O,{name:"server",size:12})," Movy Server"]}),t("span",{className:a.currentValue,style:{textTransform:"capitalize"},children:St})]}),Re&&t("button",{className:a.menuItem,onClick:()=>Q("subtitles"),children:[t("span",{children:"Subtitles"}),t("span",{className:a.currentValue,children:v?r[M]?.label||r[M]?.language:"Off"})]}),Re&&t("button",{className:a.menuItem,onClick:()=>Q("subtitle-style"),children:[t("span",{children:"Subtitle Style"}),t("span",{className:a.currentValue,children:[Le.toFixed(1),"x · ",he]})]}),Re&&t("button",{className:a.menuItem,onClick:()=>Q("subtitle-timing"),children:[t("span",{children:"Subtitle Timing"}),t("span",{className:a.currentValue,children:cr(kt)})]}),V.length>0&&t("button",{className:a.menuItem,onClick:()=>Q("audio"),children:[t("span",{children:"Audio Track"}),t("span",{className:a.currentValue,children:V[L]?.label||V[L]?.language})]}),t("button",{className:a.menuItem,onClick:()=>Q("av-sync"),children:[t("span",{children:"A/V Sync"}),t("span",{className:a.currentValue,children:_t?`${Tt}ms`:"Off"})]})]}),zt=()=>t(mn,{classes:{item:a.menuItem,active:a.active},options:se.map((i,d)=>({key:String(d),label:i.quality,selected:d===ae})),onSelect:i=>q(Number(i))}),Ue=()=>t(mn,{classes:{item:a.menuItem,active:a.active},options:[{key:"off",label:"Off",selected:!v},...r.map((i,d)=>({key:String(d),label:i.label||i.language,selected:d===M}))],onSelect:i=>o(i==="off"?-1:Number(i))}),Ht=()=>t(us,{classes:{item:a.menuItem,active:a.active},values:{fontSize:Le,position:he,bgOpacity:We,bgColor:pe,textColor:ze,edge:J,bold:Te},onChange:ne}),qe=()=>t(la,{classes:{item:a.menuItem,active:a.active,note:a.menuNote},delayMs:kt,onDelayChange:i=>oe?.(i)}),ot=()=>t(ca,{classes:{item:a.menuItem,active:a.active},tracks:V,selected:L,onChange:x}),gn=()=>t(mn,{classes:{item:a.menuItem,active:a.active},options:A.map(i=>({key:i,label:t("span",{style:{textTransform:"capitalize"},children:i}),selected:St===i})),onSelect:i=>me?.(i)}),it=()=>t(ms,{classes:{item:a.menuItem,active:a.active,note:a.menuNote},enabled:_t,delayMs:Tt,onToggle:i=>Ct?.(i),onDelayChange:i=>hn?.(i),onCalibrate:()=>{Q(null),pn?.()}}),Se=_.isMuted?t(O,{name:"volume-mute"}):_.volume<.5?t(O,{name:"volume-down"}):t(O,{name:"volume-up"}),Ke=t("div",{className:`${a.controlsOverlay} ${!_.showControls&&!N?a.hidden:""}`,"data-speed-boost-ignore":"true",style:{pointerEvents:"none",background:"none"},children:t("div",{className:a.topControls,onClick:i=>i.stopPropagation(),children:[t("button",{className:a.backBtn,onClick:f,title:"Back","aria-label":"Back",children:t(O,{name:"chevron-left"})}),t("div",{className:a.videoTitleInfo,children:[t("span",{className:a.animeTitle,children:k}),H&&t("span",{className:a.episodeLabel,children:H})]})]})}),lt=!Be&&!_.isBuffering&&_.duration>0?t(Hr,{isPlaying:_.isPlaying,onTogglePlay:C.togglePlay,onSkipBack:()=>C.seek(-10),onSkipForward:()=>C.seek(10)}):null,ge=t("div",{className:`${a.controlsOverlay} ${!_.showControls&&!N?a.hidden:""}`,"data-speed-boost-ignore":"true",style:{pointerEvents:"none",background:"none",justifyContent:"flex-end"},children:t("div",{className:a.bottomControls,onClick:i=>i.stopPropagation(),children:[t(Ur,{classes:{container:a.progressBarContainer,scrubbing:a.scrubbing,timeBubble:a.timeBubble,bar:a.progressBar,buffered:a.bufferedBar,watched:a.watchedBar,thumb:a.thumb},videoRef:X,duration:_.duration,formatTime:un,isScrubbing:_.isScrubbing,buffered:"full",onSeek:Vt,onScrubStart:xt,onScrubMove:R,onScrubEnd:Z,timeLabelRef:He}),t("div",{className:a.bottomControlsRow,children:[t("div",{className:a.leftControls,children:[t("button",{className:a.controlBtn,onClick:C.togglePlay,"aria-label":_.isPlaying?"Pause":"Play",children:_.isPlaying?t(O,{name:"pause"}):t(O,{name:"play"})}),t(qr,{muted:_.isMuted,volume:_.volume,volumeIcon:Se,buttonClassName:a.controlBtn,onToggleMute:jt,onVolumeChange:Ft,onExpandedChange:i=>C.setShowVolumeSlider(i)}),t("span",{className:a.timeDisplay,ref:He,children:[un(0)," / ",un(_.duration)]})]}),t("div",{className:a.rightControls,children:[$t&&t("button",{className:a.nextEpisodeBtn,onClick:Dt,title:"Play next episode",children:"Next EP"}),Re&&t("button",{className:`${a.controlBtn} ${v?a.active:""}`,onClick:le,"aria-label":v?"Turn subtitles off":"Turn subtitles on",children:t(O,{name:"closed-captioning"})}),t("button",{className:`${a.controlBtn} ${N?a.active:""}`,onClick:()=>N?re():c(),"aria-label":"Settings",children:t(O,{name:"cog"})}),t("button",{className:a.controlBtn,onClick:C.toggleFullscreen,"aria-label":_.isFullscreen?"Exit Fullscreen":"Fullscreen",children:_.isFullscreen?t(O,{name:"compress"}):t(O,{name:"expand"})})]})]})]})}),Ut=N?t("div",{"data-speed-boost-ignore":"true",onClick:i=>i.stopPropagation(),children:t(ds,{classes:{panel:a.settingsPanel,header:a.settingsHeader,backBtn:a.settingsBackBtn,title:a.settingsTitle,content:a.settingsContent},title:N==="main"?"Settings":N==="subtitle-style"?"Subtitle Style":N==="subtitle-timing"?"Subtitle Timing":N==="audio"?"Audio Track":N==="server"?"Movy Server":N==="av-sync"?"A/V Sync":N.charAt(0).toUpperCase()+N.slice(1),onBack:()=>N==="main"?re():Q("main"),children:[N==="main"&&Wt(),N==="quality"&&zt(),N==="subtitles"&&Ue(),N==="subtitle-style"&&Ht(),N==="subtitle-timing"&&qe(),N==="audio"&&ot(),N==="server"&&gn(),N==="av-sync"&&it()]})}):null,qt=t(Ae,{children:[Be&&t("div",{className:a.loadingOverlay,"aria-hidden":"true",children:t("div",{className:a.loadingDots,children:[t("div",{className:a.dot}),t("div",{className:a.dot}),t("div",{className:a.dot})]})}),_.isBuffering&&!Be&&t("div",{className:a.bufferingOverlay,"aria-hidden":"true",children:t("div",{className:a.bufferingSpinner})}),_.isSpeedBoostActive&&t("div",{className:a.speedBoostBadge,"aria-hidden":"true",children:[t("span",{children:"2x"}),t(O,{name:"forward",size:12})]})]});return t(Kr,{player:m,topBar:Ke,centerControls:lt,bottomBar:!Be&&_.duration>0?ge:null,settingsPanel:Ut,overlays:qt,isInteracting:!!N,className:_.isFullscreen?a.fullscreenFlat:"",children:ye})};function ua(m,k,H){const V=()=>{const x=Array.isArray(m.audioTracks)?m.audioTracks.length:0,r=H.getWant(),M=x>0?Math.min(Math.max(0,r),x-1):r;m.audioTrack=M,M!==r&&H.onResolve(M)},L=(x,r)=>{const M=H.getWant(),o=Array.isArray(m.audioTracks)?m.audioTracks.length:0;if(r.id!==M&&M>=0&&M<o){m.audioTrack!==M&&(m.audioTrack=M);return}H.onResolve(r.id)};return m.on(k.MANIFEST_PARSED,V),m.on(k.AUDIO_TRACK_SWITCHED,L),()=>{m.off(k.MANIFEST_PARSED,V),m.off(k.AUDIO_TRACK_SWITCHED,L)}}const ma="_page_263ma_1",ha="_header_263ma_7",pa="_pageTitle_263ma_11",ga="_searchForm_263ma_21",fa="_searchInput_263ma_27",va="_searchBtn_263ma_42",ba="_suggestions_263ma_58",ya="_suggestionPill_263ma_65",Sa="_statusMsg_263ma_81",_a="_error_263ma_87",Ca="_textOnly_263ma_91",Ta="_spinner_263ma_96",ka="_spin_263ma_96",Ea="_grid_263ma_110",xa="_skeletonCard_263ma_116",Na="_skeletonThumb_263ma_121",wa="_skeletonLine_263ma_127",Ia="_shimmer_263ma_134",Ba="_backBtn_263ma_154",Ma="_meta_263ma_172",Aa="_headerActions_263ma_180",Pa="_watchlistBtn_263ma_187",La="_active_263ma_205",Ra="_year_263ma_215",$a="_rating_263ma_220",Da="_typeBadge_263ma_229",Oa="_tv_263ma_237",Va="_movie_263ma_242",Fa="_tvSeries_263ma_247",ja="_tvMiniSeries_263ma_252",Wa="_overview_263ma_257",za="_controls_263ma_264",Ha="_controlLabel_263ma_272",Ua="_select_263ma_282",qa="_playerSection_263ma_293",Ka="_video_263ma_297",Ya="_videoHidden_263ma_319",Qa="_delayCanvas_263ma_324",Ga="_delayCanvasActive_263ma_337",Xa="_subtitleOverlay_263ma_341",Ja="_videoIframe_263ma_360",Za="_retryButton_263ma_368",eo="_sidebarSeason_263ma_383",to="_mobileSeasonRow_263ma_399",no="_sidebarPosterCard_263ma_413",ro="_sidebarPosterMeta_263ma_428",so="_providerSelectWrap_263ma_445",ao="_genreRow_263ma_457",oo="_genreChip_263ma_464",io="_metaRow_263ma_474",lo="_detailGrid_263ma_483",co="_detailItem_263ma_490",uo="_imdbLink_263ma_512",b={page:ma,header:ha,pageTitle:pa,searchForm:ga,searchInput:fa,searchBtn:va,suggestions:ba,suggestionPill:ya,statusMsg:Sa,error:_a,textOnly:Ca,spinner:Ta,spin:ka,grid:Ea,skeletonCard:xa,skeletonThumb:Na,skeletonLine:wa,shimmer:Ia,backBtn:Ba,meta:Ma,headerActions:Aa,watchlistBtn:Pa,active:La,year:Ra,rating:$a,typeBadge:Da,tv:Oa,movie:Va,tvSeries:Fa,tvMiniSeries:ja,overview:Wa,controls:za,controlLabel:Ha,select:Ua,playerSection:qa,video:Ka,videoHidden:Ya,delayCanvas:Qa,delayCanvasActive:Ga,subtitleOverlay:Xa,videoIframe:Ja,retryButton:Za,sidebarSeason:eo,mobileSeasonRow:to,sidebarPosterCard:no,sidebarPosterMeta:ro,providerSelectWrap:so,genreRow:ao,genreChip:oo,metaRow:io,detailGrid:lo,detailItem:co,imdbLink:uo},mo=[],ho=[];function lr({error:m,servers:k,selectedServer:H,onRetry:V,onSelect:L}){return t("div",{className:`${b.statusMsg} ${b.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:m}),t("button",{className:b.retryButton,onClick:V,children:"Retry"})]}),k.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:"}),k.map(x=>t("button",{onClick:()=>L(x),className:b.retryButton,style:{padding:"4px 8px",fontSize:"0.75rem",textTransform:"capitalize",background:H===x?"var(--accent)":void 0,color:H===x?"white":void 0},children:x},x))]})]})}const xo=()=>{const{id:m}=Rr(),[k]=$r(),H=E(k);H.current=k;const V=Dr(),L=Or(),x=k.get("type"),[r,M]=y(null),[o,se]=y(()=>parseInt(k.get("s")||"1",10)||1),[ae,q]=y([]),[f,ye]=y(()=>parseInt(k.get("e")||"1",10)||1),[A,St]=y(()=>{try{return localStorage.getItem("tvProvider")||""}catch{return""}}),[me,je]=y([]),[_t,Ct]=y(""),{options:Tt,isFallback:hn,isLoading:pn}=hs(),kt=Ie(()=>Tt.filter(e=>(e.kind??"tv")==="tv").map(e=>({id:e.value,label:e.label,tier:e.tier==="embed"?"embed":"direct",servers:e.servers})),[Tt]),oe=hn||kt.length===0?mo:kt,$t=oe.filter(e=>e.tier==="direct"),Dt=oe.filter(e=>e.tier==="embed"),[Be,_]=y(!1),[Pe,C]=y(""),[X,Le]=y([]),[he,We]=y(0),[pe,ze]=y([]),[J,Te]=y(-1),[N,Q]=y(0),[He,Ot]=y(""),[Et,ie]=y(""),[ne,Vt]=y(()=>{try{return localStorage.getItem("movyServer")||""}catch{return""}}),xt=Ie(()=>oe.find(e=>e.id===A),[oe,A]),R=xt?.tier==="embed",Z=Ie(()=>xt?.servers??[],[xt]),Ft=E([]);S(()=>{Ft.current=me},[me]);const jt=E(he);S(()=>{jt.current=he},[he]);const Re=E(J);S(()=>{Re.current=J},[J]);const v=Yr({skipIntervals:ho}),c=v.refs.videoRef,le=E(null),re=E([]),Wt=E(null),zt=E(null),[Ue,Ht]=y(()=>{try{const e=Number(localStorage.getItem("playerVideoDelayMs"));if(Number.isFinite(e)&&e>=0&&e<=500)return Math.round(e)}catch{}return 180}),[qe,ot]=y(()=>{try{return localStorage.getItem("playerVideoDelayEnabled")==="true"}catch{return!1}}),[gn,it]=y(!1),[Se,Ke]=y(!1),lt=E(null),ge=E(null),Ut=(e,n)=>{try{localStorage.setItem("playerVideoDelayMs",String(e)),localStorage.setItem("playerVideoDelayEnabled",String(n))}catch{}},qt=e=>{const n=Math.max(0,Math.min(500,Math.round(e)));Ht(n);try{localStorage.setItem("playerVideoDelayMs",String(n))}catch{}},[i,d]=y(()=>{try{const e=Number(localStorage.getItem("tvSubtitleDelayMs"));if(Number.isFinite(e)&&e>=-6e4&&e<=6e4)return Math.round(e)}catch{}return 0}),$e=E(i);$e.current=i;const ee=T(e=>{const n=Math.max(-6e4,Math.min(6e4,Math.round(e)));if($e.current!==n){$e.current=n,d(n);try{localStorage.setItem("tvSubtitleDelayMs",String(n))}catch{}}},[]),Kt=()=>{lt.current={enabled:qe,ms:Ue},ot(!0);try{localStorage.setItem("playerVideoDelayEnabled","true")}catch{}it(!0)},Yt=()=>{const e=lt.current;lt.current=null,e&&(Ht(e.ms),ot(e.enabled),Ut(e.ms,e.enabled)),Ke(!1),it(!1)},Nt=()=>{lt.current=null,ot(!0),Ut(Ue,!0),Ke(!1),it(!1)},fn=()=>{if(Se){Ke(!1);return}const e=c.current;e&&!isNaN(e.currentTime)&&(ge.current=e.currentTime),Ke(!0)},ct=qe?Ue:0;Qr({videoRef:c,canvasRef:Wt,delayMs:ct,enabled:qe});const Ye=qe,K=Ye||i!==0,dt=E(K);dt.current=K;const ut=T(()=>{if(!dt.current)return;const e=c.current;e&&Array.from(e.textTracks).forEach(n=>{n.mode!=="hidden"&&(n.mode="hidden")})},[c]),{hasConsent:Qe,grant:I}=Vr(),z=E("");z.current||(z.current=`tv-${Date.now()}-${Math.random().toString(36).slice(2)}`);const l=x==="movie",Ge=m?ps(x||"tv",m):"",$=Ge,wt=gs(),_e=fs(),{toggle:vn,bookmarkedIds:bn,pending:Qt}=vs(),{data:Gt}=bs(r?Ge:void 0),mt=Gt?!!Gt.inLibrary:Ge?bn.has(Ge):!1,dr=T(()=>{!r||!m||vn({tmdbId:Number(m),mediaType:x||"tv",title:r.title,poster:r.poster,year:r.year,adult:r.adult})},[r,m,x,vn]),{data:Xe,isFetched:On,isPending:Vn}=ys($||void 0,o,f),Xt=Ie(()=>ae.map(e=>e.episode_number).sort((e,n)=>e-n),[ae]),Je=Xt.indexOf(f),yn=Je>0?Xt[Je-1]:null,w=Je>=0&&Je<Xt.length-1?Xt[Je+1]:null,Jt=Ie(()=>(r?.seasons??[]).map(e=>e.season_number).filter(e=>Number.isFinite(e)).sort((e,n)=>e-n),[r]),fe=Ie(()=>{if(l||w!=null)return null;const e=Jt.indexOf(o);return e>=0&&e<Jt.length-1?Jt[e+1]:(r?.number_of_seasons??0)>o?o+1:null},[l,w,Jt,o,r?.number_of_seasons]),Fn=Xe?.currentTime??0,jn=Xe?.duration??0,Sn=Xe?.completed===!0||Xe?.completed===1||Pn(Fn,jn),[ke,Me]=y(!1),Ee=E(!1),_n=E(null),It=E(null);S(()=>{Ee.current=!1,It.current=null,Me(!1)},[$,o,f]);const[xe,Zt]=y(!1),[ht,Wn]=y(0),[Ze,zn]=y(!1),[De,et]=y(!1),[ur,Cn]=y(!1),[mr,Hn]=y(""),[en,hr]=y(!1),[pr,Tn]=y(!1);Gr(v,(me.length>0||Et!=="")&&!xe&&!ke&&!De);const gr=Ts(),[pt,fr]=y(Xr),vr=T(e=>{fr(e),Jr(e)},[]),ce=E(!1),tt=E(null),kn=E(0),Un=E(!1),qn=E(0),te=E(null),Bt=E(""),br=or(Fn,jn),Mt=!ce.current&&!Ee.current&&(xe||ke||De||Sn||br),gt=E(Mt);gt.current=Mt;const ft=E(!1);S(()=>{ft.current=Ze},[Ze]);const Oe=T((e,n)=>{if(!$||!n||n<30)return;const s=Pn(e,n),u=s?n:e;Math.abs(u-kn.current)<10&&!s||(kn.current=u,wt.mutate({mediaId:$,season:o,episode:f,currentTime:Math.floor(u),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:x||"tv",adult:r?.adult?1:0}))},[$,o,f,wt,r,x]),Ne=T((e,n)=>{Ke(!1),it(!1);const s=new URLSearchParams(k);s.set("type",k.get("type")||"tv"),s.set("s",String(e)),s.set("e",String(n)),V(`${window.location.pathname}?${s.toString()}`)},[k,V]),At=T(()=>{const e=c.current;if(!e||l||w==null){Cn(!1);return}const n=e.duration||0,s=e.currentTime||0;Cn(n>0&&s/n>=.8)},[l,w,c]),tn=T((e,n)=>["tv-sources",A,l?"movie":"tv",m,e,n,ne],[A,l,m,ne]),nn=T(async(e,n)=>{if(!r||!m||!A)return{valid:!1,sources:[]};const s=l?"movie":"tv",u=await yt.tv.sources.query({provider:A,type:s,tmdbId:String(m),season:e,episode:n,title:r.title||"",year:r.year||"",totalSeasons:String(r.number_of_seasons||1),imdbId:r.imdb_id||"",...Z.length>0&&ne?{server:ne}:{}});return{valid:"valid"in u?u.valid:!1,error:"error"in u?u.error:void 0,sources:u.sources,referer:"referer"in u?u.referer:void 0,audioTracks:u.audioTracks,subtitles:"subtitles"in u?u.subtitles:void 0}},[r,m,A,l,Z,ne]),Kn=T(()=>{if(l||!r||!m||!A||R||w==null)return;const e=tn(o,w);L.getQueryState(e)?.status!=="success"&&L.prefetchQuery({queryKey:e,queryFn:()=>nn(o,w),staleTime:300*1e3,gcTime:1800*1e3})},[l,r,m,A,R,w,o,L,tn,nn]),yr=T(()=>{if(Se)return;At();const e=c.current;!e||e.paused||e.ended||(e.duration>0&&e.duration-e.currentTime<=60&&Kn(),tt.current&&clearTimeout(tt.current),tt.current=setTimeout(()=>{Oe(e.currentTime,e.duration||0)},5e3))},[Oe,c,Se,At,Kn]),Sr=T(()=>{const e=c.current;if(!e||!r)return;tt.current&&clearTimeout(tt.current),Oe(e.currentTime,e.duration||0),Un.current=!0;const n=Zr({seekInduced:Date.now()-qn.current<es,autoplayEnabled:pt,hasNext:!l&&w!=null,isFinal:l||w==null});n==="advance"&&w!=null?(ye(w),Ne(o,w)):n==="prompt-next"?(Ee.current=!1,ce.current=!0,Me(!0)):n==="prompt-complete"&&(Hn(l?r.title:`${r.title} — Season ${o}`),et(!0),Ee.current=!0,ce.current=!0)},[l,r,o,w,pt,Oe,Ne,c]),_r=T(()=>{Un.current=!1,v.actions.onPlay()},[v.actions]),Cr=T(()=>{v.actions.onPause();const e=c.current;e&&!e.ended&&Oe(e.currentTime,e.duration||0)},[v.actions,Oe,c]),Tr=T(()=>{v.actions.onLoadedMetadata();const e=c.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}At()}},[v.actions,c,At]),vt=T(()=>{const e=c.current;if(e&&te.current!=null&&te.current>0){try{e.currentTime=te.current}catch{}te.current=null}},[c]),kr=T(()=>{ht>0&&(te.current=ht);const e=c.current;if(e&&ht>0){try{e.currentTime=ht,te.current=null}catch{}e.play().catch(()=>{})}Zt(!1),ce.current=!0},[ht,c]),Yn=T(()=>{te.current=null;const e=c.current;e&&(e.currentTime=0,e.play().catch(()=>{})),Zt(!1),ce.current=!0},[c]),Er=T(()=>{Ee.current=!0,Me(!1),ce.current=!0},[]),xr=T(()=>{Ee.current=!0,Me(!1),ce.current=!0,te.current=null;const e=c.current;if(e){try{e.currentTime=0}catch{}e.play().catch(()=>{})}},[c]),Qn=T(()=>{w!=null&&(Ee.current=!0,Me(!1),ce.current=!0,ye(w),Ne(o,w))},[w,o,Ne]),Gn=T(()=>{fe!=null&&(Ee.current=!0,Me(!1),et(!1),ce.current=!0,se(fe),ye(1),Ne(fe,1))},[fe,Ne]),Nr=T(async()=>{if($)try{await _e.mutateAsync({id:$,status:"Completed"}),et(!1),Me(!1),V("/")}catch{}},[$,_e,V]);S(()=>{ce.current=!1,_n.current=null,Zt(!1),Cn(!1),Wn(0),zn(!1),ft.current=!1,te.current=null,Bt.current=`${$}:${o}:${f}`,kn.current=0},[$,o,f]),S(()=>{On&&(zn(!0),ft.current=!0)},[On,$,o,f]),S(()=>{if(!Xe||ce.current)return;const e=`${$}:${o}:${f}`;if(_n.current===e)return;_n.current=e;const n=Xe,s=n.currentTime??0,u=n.duration??0;or(s,u)&&(Wn(s),Zt(!0))},[Xe,$,o,f]),S(()=>{if(!Ze||ce.current||Ee.current||xe||De||ke)return;const e=`${$}:${o}:${f}`;if(It.current!==e){if(!Sn){Vn||(It.current=e);return}if(l){It.current=e,Me(!0);return}if(!(!r||Je<0||ae.length===0)){if(It.current=e,w==null&&fe==null){r&&ae.length>0&&(Hn(`${r.title} — Season ${o}`),et(!0),Ee.current=!0,ce.current=!0);return}Me(!0)}}},[Ze,Sn,Vn,xe,De,ke,l,w,fe,r,Je,ae.length,$,o,f]),S(()=>{(xe||ke)&&c.current&&c.current.pause()},[xe,ke,c]),S(()=>{const e=c.current;return()=>{tt.current&&clearTimeout(tt.current),e&&!e.ended&&Oe(e.currentTime,e.duration||0)}},[Oe,c]);const En=T(e=>{let n=null,s=!0;try{n=localStorage.getItem("tvLastSubtitle"),s=localStorage.getItem("tvSubtitlesEnabled")!=="false"}catch{}return Dn(e,{lastKey:n,enabled:s})},[]),xn=T(e=>{if(!(e<0))try{localStorage.setItem("tvSubtitlesEnabled","true"),localStorage.setItem("tvSelectedSubtitle",String(e))}catch{}},[]),Xn=T(e=>{if(e.length===0)return 0;let n=null;try{n=localStorage.getItem("tvLastAudio")}catch{}if(n){const s=e.findIndex(F=>Ln(F)===n);if(s>=0)return s;const u=n.indexOf("|||"),h=u>=0?n.slice(0,u):n,p=u>=0?n.slice(u+3):n,g=e.findIndex(F=>F.language===h||F.label===p);if(g>=0)return g}return Dn(e,{lastKey:null,enabled:!0})},[]),{data:Jn}=Ss($||void 0),Zn=Ie(()=>(Jn?.progress??[]).filter(n=>n.season===o&&(n.completed===!0||n.completed===1||Pn(n.currentTime,n.duration))).map(n=>String(n.episode)),[Jn,o]),er=Ie(()=>ae.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})),[ae]),tr=Ie(()=>(r?.genres??[]).map(e=>e.name).slice(0,5),[r]),Nn=Ie(()=>[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]);S(()=>{if(oe.length!==0&&!oe.some(e=>e.id===A)){const e=oe.find(n=>n.tier==="direct")?.id??oe[0].id;St(e);try{localStorage.setItem("tvProvider",e)}catch{}}},[oe,A]),S(()=>{if(Z.length!==0&&!Z.includes(ne)){Vt(Z[0]);try{localStorage.setItem("movyServer",Z[0])}catch{}}},[Z,ne]),S(()=>{if(!m){M(null),je([]),Ct(""),C(""),ie("");return}const e=Number(m),n=x||"tv";M(null),je([]),Ct(""),C(""),ie("");const s=parseInt(H.current.get("s")||"",10),u=parseInt(H.current.get("e")||"",10);se(isNaN(s)?1:s),ye(isNaN(u)?1:u),Q(0),yt.tv.details.query({type:n,id:String(e)}).then(h=>{const p={id:h.id,title:h.title||"",overview:h.overview||"",vote_average:h.vote_average,year:h.year,poster:h.poster,backdrop:h.backdrop,imdb_id:h.imdb_id||void 0,adult:h.adult,seasons:h.seasons,number_of_seasons:h.number_of_seasons};M(p),p.seasons&&p.seasons.length>0&&isNaN(s)&&se(p.seasons[0].season_number)}).catch(()=>{})},[m,x]),S(()=>{if(!r||!m)return;if(!(r.seasons!==void 0||r.number_of_seasons!==void 0)){q([]);return}const n=parseInt(k.get("e")||"",10);yt.tv.episodes.query({id:String(m),season:String(o)}).then(s=>{const u=(s.episodes||[]).map(h=>({episode_number:h.episode_number,name:h.name||"",vote_average:h.vote_average,overview:h.overview||"",still_path:h.still_path||""}));q(u),u.length!==0&&ye(h=>!isNaN(n)&&u.some(p=>p.episode_number===n)?n:u.some(p=>p.episode_number===h)?h:u[0].episode_number)}).catch(()=>{})},[r,m,o,k]),S(()=>{if(!R||!r||!m)return;fetch(`/api/tv/embed/${A}/${l?"movie":"tv"}/${m}?season=${o}&episode=${f}`).then(n=>n.json()).then(n=>{if(n.url)return ie(n.url),fetch(`/api/resolve?url=${encodeURIComponent(n.url)}`).then(s=>s.json()).then(s=>{s.finalUrl&&ie(s.finalUrl)})}).catch(()=>{})},[A,r,m,o,f,l,R]);const rn=T(async()=>{if(!r||!m||!A||R||r.adult&&!Qe)return;const e=`${$}:${o}:${f}`;Ft.current.length>0?C(""):(_(!0),C(""),je([]),Q(0),Le([]),ze([]));try{const s=await L.fetchQuery({queryKey:tn(o,f),queryFn:()=>nn(o,f),staleTime:3e5,gcTime:18e5});if(Bt.current!==e)return;if(_(!1),!s.valid||!s.sources?.length){C(s.error?`${s.error}`:Z.length>0?`No streams from ${ne}. Try another server.`:"No streams available.");return}je(s.sources),Ct(e),Q(0),s.referer&&Ot(s.referer);const u=s.audioTracks||[];Le(u),We(u.length>0?Xn(u):0);const h=s.subtitles||[];if(ze(h),h.length>0){const F=En(h);Te(F),xn(F)}else Te(-1);const p=l?"movie":"tv",g=m;yt.tv.subtitles.query({type:p,tmdbId:String(g),season:String(o),episode:String(f)}).then(F=>{if(Bt.current!==e)return;const ve=Array.isArray(F.subtitles)?F.subtitles:[];ve.length!==0&&ze(U=>{const B=[...U,...ve.filter(D=>!U.some(P=>P.url===D.url))];if(U.length===0){const D=En(B);Te(D),xn(D)}return B})}).catch(()=>{}),C("")}catch{if(Bt.current!==e)return;_(!1),C("Failed to load streams.")}},[r,m,A,o,f,l,R,Qe,Z,ne,En,xn,Xn,$,L,tn,nn]),wn=T(e=>{const n=e.toLowerCase();Vt(n);try{localStorage.setItem("movyServer",n)}catch{}C("")},[]),wr=T(e=>{St(e);try{localStorage.setItem("tvProvider",e)}catch{}},[]);S(()=>{A&&r&&!R&&rn()},[A,r,rn,R]),S(()=>{if(!c.current||(le.current&&(le.current.destroy(),le.current=null),R))return;let e=!1;if(Se){const p=c.current;return p&&(p.pause(),p.removeAttribute("src"),p.load(),p.src="/av-sync-test.mp4",gt.current||p.play().catch(()=>{})),()=>{e=!0}}const n=_t===`${$}:${o}:${f}`&&me[N]?.url||"";if(!n){try{c.current?.pause()}catch{}return}const s=c.current;if(Bt.current===`${$}:${o}:${f}`&&te.current==null&&!gt.current)try{!s.ended&&s.currentTime>1&&(te.current=s.currentTime)}catch{}s.pause(),s.removeAttribute("src"),s.load(),v.actions.resetMediaState();const u=`/api/tv/stream-proxy?url=${encodeURIComponent(n)}&referer=${encodeURIComponent(He)}`;me[N]?.type==="hls"?(async()=>{const p=await _s();if(!e)if(p&&p.isSupported()){const g=new p({enableWorker:!0});le.current=g,g.on(p.Events.ERROR,(U,B)=>{B.fatal&&(C(`Stream failed (${B.details}). Try another source or reload.`),_(!1),g.destroy(),le.current=null)}),g.loadSource(u),g.attachMedia(s);const F=()=>{let U=!1,B=0;try{U=localStorage.getItem("tvSubtitlesEnabled")==="true";const D=parseInt(localStorage.getItem("tvSelectedSubtitle")||"0",10);!isNaN(D)&&D>=0&&(B=D)}catch{}return{enabled:U,index:B}},ve=()=>{if(typeof g.subtitleTrack!="number")return;if(re.current.length>0){g.subtitleTrack=-1;return}const U=Array.isArray(g.subtitleTracks)?g.subtitleTracks:[];if(U.length===0){g.subtitleTrack=-1;return}const B=F();if(B.enabled){const D=B.index<U.length?B.index:0;g.subtitleTrack=D,Te(D),ut()}else g.subtitleTrack=-1};ua(g,p.Events,{getWant:()=>jt.current,onResolve:U=>We(U)}),g.on(p.Events.MANIFEST_PARSED,()=>{ve(),ge.current!=null&&(s.currentTime=ge.current,ge.current=null),vt(),!gt.current&&ft.current&&s.play().catch(()=>{})}),g.on(p.Events.SUBTITLE_TRACKS_UPDATED,()=>{ve()}),g.on(p.Events.SUBTITLE_TRACK_SWITCH,(U,B)=>{if(re.current.length>0){if(B.id!==-1)try{g.subtitleTrack=-1}catch{}return}const D=Array.isArray(g.subtitleTracks)?g.subtitleTracks:[];if(D.length!==0){if(B.id===-1){const P=F();if(P.enabled){const Y=P.index<D.length?P.index:0;g.subtitleTrack=Y;return}}Te(B.id),ut()}})}else Cs(s)&&(s.src=u,ge.current!=null&&(s.currentTime=ge.current,ge.current=null),vt(),!gt.current&&ft.current&&s.play().catch(()=>{C("Failed to play stream. Try another source.")}))})():(s.src=u,ge.current!=null&&(s.currentTime=ge.current,ge.current=null),vt(),!gt.current&&ft.current&&s.play().catch(()=>{C("Failed to play stream. Try another source.")}));const h=()=>{const F=s.error?.code===4?"Video source not supported or not found":"Failed to load video stream";C(`${F}. The source may be invalid or expired. Try switching source or reloading.`),_(!1)};return s.addEventListener("error",h),()=>{e=!0,s.removeEventListener("error",h)}},[me,_t,N,A,He,R,c,Se,$,o,f,vt,ut,v.actions]),S(()=>{if(!Ze||xe||ke||De||Mt||R||Se)return;const e=c.current;!e||!e.paused||e.ended||e.readyState<1||(vt(),e.play().catch(()=>{}))},[Ze,xe,ke,De,Mt,R,Se,vt,c]),S(()=>{const e=le.current;!e||typeof e.audioTrack!="number"||(e.audioTrack=he)},[he]),S(()=>{const e=le.current;!e||typeof e.subtitleTrack!="number"||!Array.isArray(e.subtitleTracks)||e.subtitleTracks.length===0||re.current.length>0||(J>=0?e.subtitleTrack=J:e.subtitleTrack=-1)},[J]),S(()=>{const e=c.current;if(!(!e||R)&&(e.querySelectorAll("track").forEach(n=>n.remove()),re.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 u=`/api/subtitle-proxy?url=${encodeURIComponent(n.url)}&referer=${encodeURIComponent(He)}`;s.src=u,s.addEventListener("load",()=>{const h=re.current.indexOf(s),p=s.track;if(p&&h>=0){const g=h===Re.current;p.mode=g&&!dt.current?"showing":"hidden"}}),e.appendChild(s),re.current.push(s)}),pe.length>0)))try{const n=le.current;n&&typeof n.subtitleTrack=="number"&&n.subtitleTrack!==-1&&(n.subtitleTrack=-1)}catch{}},[pe,He,R,A,c]),S(()=>{const e=c.current;if(!e||R)return;const n=le.current;re.current.length>0&&n&&typeof n.subtitleTrack=="number"&&Array.isArray(n.subtitleTracks)&&n.subtitleTracks.length>0&&(n.subtitleTrack=-1);const s=()=>{const p=$n(v.state.subtitleFontSize,e.clientHeight||720),g=Math.max(0,Math.min(100,100-v.state.subtitlePosition)),F=()=>{const P=p*16,Y=e.videoHeight||e.clientHeight||720,G=e.videoWidth||e.clientWidth||1280;return{step:P*1.3/Y*100,chars:Math.max(20,Math.floor(G/(P*.55)))}},ve=(P,Y)=>{const G=P;G.snapToLines=!1,G.line=Y},U=P=>{if(!P.cues)return;Array.from(P.cues).forEach(de=>ve(de,g));const Y=Array.from(P.activeCues??[]);if(Y.length<=1){Y.forEach(de=>ve(de,g));return}const{step:G,chars:j}=F();let nt=g;for(let de=Y.length-1;de>=0;de--){const Ve=String(Y[de].text??"").replace(/<[^>]*>/g,"").split(`
3
+ `).reduce((on,Lt)=>on+Math.max(1,Math.ceil(Lt.length/j)),0);nt=Math.max(0,nt-Ve*G),ve(Y[de],nt),nt-=G*.4}},B=re.current;if(B.length>0){B.forEach((P,Y)=>{const G=P.track;if(!G)return;const j=Y===J;G.mode=j&&!K?"showing":"hidden",j&&!K&&U(G)});return}const D=Array.from(e.textTracks);D.length!==0&&D.forEach((P,Y)=>{const G=Y===J;P.mode=G&&!K?"showing":"hidden",G&&!K&&U(P)})};s();const u=()=>s();e.textTracks.addEventListener("addtrack",u),e.addEventListener("loadedmetadata",s,{once:!0});const h=window.setTimeout(s,600);return()=>{e.textTracks.removeEventListener("addtrack",u),e.removeEventListener("loadedmetadata",s),window.clearTimeout(h)}},[J,pe,R,A,c,K,v.state.subtitleFontSize,v.state.subtitlePosition]),S(()=>{if(!K)return;const e=c.current,n=zt.current;if(!e||!n)return;const s=i/1e3,u=ct/1e3,h=new Set;let p=[],g=-1,F=-1,ve=-1,U=-1,B=0,D=0,P=!1;const Y=()=>{const W=Re.current;if(W<0)return null;const Fe=re.current;return Fe.length>0?Fe[W]?.track??null:Array.from(e.textTracks)[W]??null},G=(W,Fe)=>{const ue=W.cues;if(!ue||ue.length===0)return Array.from(W.activeCues??[]);let rt=0,st=ue.length;for(;rt<st;){const we=rt+st>>>1;ue[we].endTime+s<Fe?rt=we+1:st=we}const Rt=[];for(let we=rt;we<ue.length;we++){const ln=ue[we];if(ln.startTime+s>Fe)break;ln.endTime+s>=Fe&&Rt.push(ln)}return Rt},j=()=>{const W=Y(),Fe=e.currentTime-u,ue=W?G(W,Fe):[],rt=e.clientWidth,st=e.clientHeight,Rt=e.videoWidth,we=e.videoHeight;if(ue.length===p.length&&ue.every((Bn,Mn)=>Bn===p[Mn])&&rt===g&&st===F&&Rt===ve&&we===U||(p=ue,g=rt,F=st,ve=Rt,U=we,n.textContent="",ue.length===0))return;const sr={fontSize:$n(v.state.subtitleFontSize,st),position:v.state.subtitlePosition,bgOpacity:v.state.subtitleBgOpacity,bgColor:v.state.subtitleBgColor,textColor:v.state.subtitleTextColor,edge:v.state.subtitleEdge,bold:v.state.subtitleBold},Ar=ts(sr),Pr=ns(e,sr.position);ue.forEach((Bn,Mn)=>{const ar=String(Bn.text??"");if(!rs(ar).trim())return;const An=document.createElement("div"),Lr=(ue.length-1-Mn)*1.7;An.style.cssText=`${Ar}
4
+ bottom: calc(${Pr}px + ${Lr}em);`,An.innerHTML=ss(ar),n.appendChild(An)})},nt=()=>{Array.from(e.textTracks).forEach(W=>{h.has(W)||(h.add(W),W.addEventListener("cuechange",j))})},de=()=>{nt(),j()},In=()=>{if(P||D)return;const W=()=>{D=0,!(P||e.paused||e.ended)&&(j(),In())};D=window.requestAnimationFrame(W)},Ve=e,on=()=>{B=0,j(),!P&&Ve.requestVideoFrameCallback&&(B=Ve.requestVideoFrameCallback(on))},Lt=()=>{j(),Ve.requestVideoFrameCallback?B||(B=Ve.requestVideoFrameCallback(on)):In()};nt(),e.textTracks.addEventListener("addtrack",de),e.textTracks.addEventListener("removetrack",de),e.addEventListener("timeupdate",j),e.addEventListener("seeked",j),e.addEventListener("loadedmetadata",j),e.addEventListener("play",Lt);const nr=Array.from(e.querySelectorAll("track"));nr.forEach(W=>W.addEventListener("load",j));const rr=typeof ResizeObserver>"u"?null:new ResizeObserver(()=>j());return rr?.observe(e),j(),Lt(),()=>{P=!0,h.forEach(W=>W.removeEventListener("cuechange",j)),e.textTracks.removeEventListener("addtrack",de),e.textTracks.removeEventListener("removetrack",de),e.removeEventListener("timeupdate",j),e.removeEventListener("seeked",j),e.removeEventListener("loadedmetadata",j),e.removeEventListener("play",Lt),nr.forEach(W=>W.removeEventListener("load",j)),rr?.disconnect(),D&&window.cancelAnimationFrame(D),B&&Ve.cancelVideoFrameCallback&&Ve.cancelVideoFrameCallback(B),n.textContent=""}},[K,i,J,pe,ct,c,v.state.subtitleFontSize,v.state.subtitlePosition,v.state.subtitleBgOpacity,v.state.subtitleBgColor,v.state.subtitleTextColor,v.state.subtitleEdge,v.state.subtitleBold]);const sn=()=>{M(null),je([]),ie(""),V(-1)},Ir=T(e=>{se(e),ye(1),Ne(e,1)},[Ne]),an=!l&&r?.seasons&&r.seasons.length>1?t("label",{className:b.sidebarSeason,children:[t("span",{children:"Season"}),t("select",{value:o,onChange:e=>Ir(parseInt(e.target.value,10)||1),className:b.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=T(e=>{const n=parseInt(e,10);if(!isNaN(n)){try{c.current?.pause()}catch{}ye(n),Ne(o,n)}Tn(!1)},[o,Ne,c]);S(()=>{if(l)return;const e=n=>{n.target.closest('input, textarea, button, select, a, [role="button"], [contenteditable="true"]')||n.key.toLowerCase()==="n"&&(w!=null?bt(String(w)):Fr.error("No next episode available"))};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[l,w,bt]);const Br=e=>{We(e);try{const s=X[e];s&&localStorage.setItem("tvLastAudio",Ln(s))}catch{}const n=le.current;n&&n.audioTrack!==void 0&&(n.audioTrack=e)},Mr=e=>{Te(e);try{if(e===-1)localStorage.setItem("tvSubtitlesEnabled","false");else{localStorage.setItem("tvSubtitlesEnabled","true"),localStorage.setItem("tvSelectedSubtitle",String(e));const h=pe[e];h&&localStorage.setItem("tvLastSubtitle",Ln(h))}}catch{}const n=c.current,s=le.current;if(s&&typeof s.subtitleTrack=="number"&&Array.isArray(s.subtitleTracks)&&s.subtitleTracks.length>0&&(s.subtitleTrack=re.current.length>0||e<0?-1:e),!n)return;const u=re.current;if(u.length>0){u.forEach((h,p)=>{const g=h.track;if(!g)return;const F=p===e;g.mode=F&&!K?"showing":"hidden"});return}Array.from(n.textTracks).forEach((h,p)=>{const g=p===e;h.mode=g&&!K?"showing":"hidden"})},Pt=T(()=>{if(!r)return;const e=c.current,n=l?"":`S${String(o).padStart(2,"0")}E${String(f).padStart(2,"0")}`;yt.discord.tvPresence.mutate({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:z.current}).catch(()=>{}),yt.discord.heartbeat.mutate({sessionId:z.current}).catch(()=>{})},[r,l,o,f,c]);return S(()=>{if(!r)return;Pt();const e=window.setInterval(()=>{const n=c.current;(!n||!n.paused)&&Pt()},15e3);return()=>window.clearInterval(e)},[Pt,r,c]),S(()=>{if(!r||R||Be||Pe||me.length===0)return;const e=c.current;if(!e)return;const n=()=>Pt();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,R,Be,Pe,me,Pt,c]),S(()=>{const e=z.current,n=()=>jr(e),s=()=>n();return window.addEventListener("pagehide",s),window.addEventListener("beforeunload",s),()=>{window.removeEventListener("pagehide",s),window.removeEventListener("beforeunload",s),n()}},[]),S(()=>{if(!r){document.title="TV & Movies - dango";return}document.title=l?`${r.title} - dango`:`${r.title} - Season ${o} Episode ${f} - dango`},[r,l,o,f]),S(()=>{if(!r||l)return;const e=new URLSearchParams(k),n=e.get("s"),s=e.get("e"),u=String(o),h=String(f);n===u&&s===h||(e.set("type",k.get("type")||"tv"),e.set("s",u),e.set("e",h),V(`${window.location.pathname}?${e.toString()}`,{replace:!0}))},[r,l,o,f,k,V]),t("div",{className:at.playerPageLayout,children:[t("aside",{className:at.episodeSidebar,children:r?l?t("div",{className:b.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:b.sidebarPosterMeta,children:[t("strong",{children:r.title}),t("span",{children:r.year})]})]}):t(as,{episodes:er,currentEpisode:String(f),watchedEpisodes:Zn,onEpisodeClick:bt,header:an}):l?t("div",{className:b.statusMsg,children:[t(O,{name:"spinner",className:b.spinner})," Loading..."]}):t(os,{variant:"sidebar"})}),t("div",{className:at.playerMain,children:[r&&t("div",{className:b.playerSection,onContextMenu:e=>e.preventDefault(),style:r.adult&&!Qe?{filter:"blur(14px)",pointerEvents:"none",userSelect:"none"}:void 0,children:R&&Et?t("iframe",{src:Et,className:b.videoIframe,allow:"autoplay; fullscreen",allowFullScreen:!0}):!R&&(me.length>0||Be)?t(Ae,{children:[Pe&&t(lr,{error:Pe,servers:Z,selectedServer:ne,onRetry:rn,onSelect:wn}),t(da,{player:v,title:r.title,episodeLabel:l?void 0:`S${o} E${f}`,audioTracks:X,selectedAudioTrack:he,onAudioTrackChange:Br,subtitles:pe,selectedSubtitle:J,onSubtitleChange:Mr,streams:me,qualityIdx:N,onQualityChange:Q,onBack:sn,movyServers:Z,selectedMovyServer:ne,onMovyServerSelect:wn,isMovySource:Z.length>0,videoDelayEnabled:qe,onVideoDelayToggle:e=>{ot(e);try{localStorage.setItem("playerVideoDelayEnabled",String(e))}catch{}},videoDelayMs:Ue,onVideoDelayChange:qt,onCalibrateAvSync:Kt,subtitleDelayMs:i,onSubtitleDelayChange:ee,showNextEpisodeButton:ur&&!xe&&!ke&&!De,onNextEpisode:Qn,isLoading:Be,children:[t("video",{ref:c,autoPlay:Ze&&!Mt,playsInline:!0,disablePictureInPicture:!0,className:`${b.video} ${Ye?b.videoHidden:""}`,onTimeUpdate:yr,onEnded:()=>{Se||Sr()},onPlay:_r,onPause:Cr,onSeeked:()=>{qn.current=Date.now(),At()},onLoadedMetadata:Tr,onVolumeChange:v.actions.onVolumeChange,onWaiting:v.actions.onWaiting,onPlaying:v.actions.onPlaying,onCanPlay:v.actions.onCanPlay,onContextMenu:e=>e.preventDefault(),onError:()=>{C("Video failed to load. Try another server or reload."),_(!1)}}),t("canvas",{ref:Wt,className:`${b.delayCanvas} ${Ye?b.delayCanvasActive:""}`}),K&&t("div",{ref:zt,className:b.subtitleOverlay}),t(is,{isOpen:gn,ms:Ue,onChange:qt,onApply:Nt,onClose:Yt,testClipActive:Se,onTestClip:fn})]})]}):Pe&&!R?t(lr,{error:Pe,servers:Z,selectedServer:ne,onRetry:rn,onSelect:wn}):null}),r&&t(ls,{showTheater:!1}),an&&t("div",{className:b.mobileSeasonRow,children:an}),r&&t("div",{className:b.providerSelectWrap,children:t("label",{className:b.controlLabel,children:["Source",t("select",{value:A,onChange:e=>wr(e.target.value),className:b.select,disabled:oe.length===0,children:pn?t("option",{value:"",children:"Loading…"}):oe.length===0?t("option",{value:"",children:"No providers available"}):t(Ae,{children:[$t.length>0&&t("optgroup",{label:"Direct HLS",children:$t.map(e=>t("option",{value:e.id,children:e.label},e.id))}),Dt.length>0&&t("optgroup",{label:"Embeds",children:Dt.map(e=>t("option",{value:e.id,children:e.label},e.id))})]})})]})}),r&&t("div",{className:at.playerInfoContainer,children:[t("div",{className:at.playerInfoHeader,children:[t("div",{className:at.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:at.videoTitleSection,children:[t("div",{className:be.titleContainer,children:[t("h1",{children:r.title}),t("div",{className:b.meta,children:[t("span",{className:b.year,children:r.year}),r.vote_average!=null&&r.vote_average>0&&t("span",{className:b.rating,children:[t(O,{name:"star",size:12}),Number(r.vote_average).toFixed(1)]}),t("span",{className:`${b.typeBadge} ${b[l?"movie":"tv"]}`,children:l?"Movie":"TV Show"})]}),tr.length>0&&t("div",{className:b.genreRow,children:tr.map(e=>t("span",{className:b.genreChip,children:e},e))}),Nn.length>0&&t("div",{className:b.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} ${mt?be.inList:""}`,onClick:dr,disabled:Qt,type:"button",children:[mt?t(O,{name:"check",size:14}):t(O,{name:"plus",size:14}),mt?"In Watchlist":"Add to Watchlist"]}),!l&&t(Ae,{children:[t("button",{className:`${be.watchlistBtn}`,onClick:()=>yn!=null&&bt(String(yn)),disabled:yn==null,type:"button",children:[t(O,{name:"chevron-left",size:14}),"Prev EP"]}),t("button",{className:`${be.watchlistBtn}`,onClick:()=>w!=null&&bt(String(w)),disabled:w==null,type:"button",children:["Next EP",t(O,{name:"chevron-right",size:14})]}),!l&&t("button",{className:`${be.watchlistBtn} ${be.modeToggleBtn} ${pt?be.modeToggleActive:""}`,onClick:()=>vr(!pt),type:"button","aria-pressed":pt,children:pt?"AUTOPLAY: ON":"AUTOPLAY: OFF"}),gr&&t("button",{className:`${be.watchlistBtn}`,onClick:()=>Tn(!0),type:"button",children:[t(O,{name:"list-ul",size:14}),"Episodes"]})]})]})]})]}),t("div",{className:be.descriptionSection,children:[t("h3",{children:"Synopsis"}),t(ks,{text:r.overview,emptyText:"No description available."})]}),t("button",{className:be.detailsToggleBtn,onClick:()=>hr(!en),type:"button",children:[en?t(O,{name:"chevron-up"}):t(O,{name:"chevron-down"}),en?"Hide Details":"Show Details"]}),en&&t("div",{className:b.detailGrid,children:[r.first_air_date&&t("div",{className:b.detailItem,children:[t("strong",{children:l?"Release Date":"First Air Date"}),t("span",{children:r.first_air_date})]}),r.last_air_date&&t("div",{className:b.detailItem,children:[t("strong",{children:"Last Air Date"}),t("span",{children:r.last_air_date})]}),r.networks&&r.networks.length>0&&t("div",{className:b.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:b.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:b.detailItem,children:[t("strong",{children:"Episode Runtime"}),t("span",{children:[r.episode_run_time[0]," min"]})]}),r.imdb_id&&t("div",{className:b.detailItem,children:[t("strong",{children:"IMDb"}),t("a",{href:`https://www.imdb.com/title/${r.imdb_id}`,target:"_blank",rel:"noopener noreferrer",className:b.imdbLink,children:"View on IMDb"})]})]})]}),!l&&t(cs,{isOpen:pr,onClose:()=>Tn(!1),episodes:er,currentEpisode:String(f),watchedEpisodes:Zn,onEpisodeClick:bt,header:an}),r?.adult&&!Qe&&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(Ce,{variant:"secondary",onClick:sn,children:"Go Back"}),t(Ce,{onClick:I,children:"I'm 18+, Continue"})]})]})}),t(cn,{isOpen:xe,onClose:Yn,title:"Resume Watching",children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t("p",{children:["You were at ",t("strong",{children:un(ht)})]}),t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center"},children:[t(Ce,{variant:"secondary",onClick:Yn,children:"Start from Beginning"}),t(Ce,{onClick:kr,children:"Resume"})]})]})}),t(cn,{isOpen:ke,onClose:Er,title:l?"Movie Completed":"Episode Completed",children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t("p",{children:l?t(Ae,{children:"You've already watched this movie."}):t(Ae,{children:["You've already watched"," ",t("strong",{children:["Season ",o," Episode ",f]}),". Would you like to continue?"]})}),t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center",flexWrap:"wrap"},children:[t(Ce,{variant:"secondary",onClick:xr,children:"Replay"}),w!=null?t(Ce,{onClick:Qn,children:["Watch EP ",w]}):fe!=null?t(Ce,{onClick:Gn,children:["Start Season ",fe]}):null]})]})}),t(cn,{isOpen:De,onClose:()=>et(!1),title:l?"Movie Completed!":fe!=null?"Season Complete!":"Show Completed!",children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t(O,{name:"check-circle",size:48,style:{color:"var(--accent-lighter)",marginBottom:"0.5rem"}}),t("p",{style:{fontSize:"1.1rem",fontWeight:600},children:mr}),t("p",{style:{color:"var(--text-secondary)"},children:l?"You finished this movie!":fe!=null?`You finished Season ${o}.`:"Congratulations! You finished all available episodes."}),t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center",flexWrap:"wrap"},children:[t(Ce,{variant:"secondary",onClick:()=>et(!1),children:"Close"}),fe!=null?t(Ce,{onClick:Gn,children:["Start Season ",fe]}):t(Ae,{children:[t(Ce,{onClick:()=>{et(!1),sn()},children:"Back to Details"}),mt&&t(Ce,{onClick:Nr,disabled:_e.isPending,children:_e.isPending?"Saving...":"Move to Completed"})]})]})]})}),!r&&t("div",{className:b.statusMsg,children:[t(O,{name:"spinner",className:b.spinner})," Loading..."]})]})]})};export{xo as default};
@@ -1 +1 @@
1
- import{o as R,a as q,p as E,d as l,h as C,T,u as e,g as F}from"./vendor-core-DfaOB3Rn.js";import{I as a}from"./vendor-icons-DrybRNxP.js";import{e as j,t as U,B as w}from"./index-BWIWE3Qy.js";import{n as H,d as J,e as K,f as Q,t as I}from"./useTvLibrary-BnbHS-gg.js";import"./vendor-query-BBT5_sHx.js";const X="_container_198yg_1",Y="_heroSection_198yg_11",Z="_bannerContainer_198yg_17",ee="_banner_198yg_17",ne="_bannerOverlay_198yg_37",te="_heroContent_198yg_49",se="_posterContainer_198yg_62",ae="_poster_198yg_62",oe="_infoGlass_198yg_86",ie="_title_198yg_100",re="_quickMeta_198yg_110",le="_metaItem_198yg_118",ce="_iconStar_198yg_126",de="_iconTv_198yg_130",me="_iconType_198yg_134",_e="_genres_198yg_139",he="_genre_198yg_139",ge="_metaRow_198yg_156",ve="_metaValue_198yg_164",pe="_metaDivider_198yg_168",ye="_synopsisSection_198yg_173",ue="_sectionTitleSmall_198yg_179",ke="_synopsis_198yg_173",be="_actions_198yg_196",Ne="_watchBtn_198yg_202",Se="_watchlistBtn_198yg_226",fe="_active_198yg_250",Ce="_seasonPickerLabel_198yg_256",Te="_seasonSelect_198yg_267",we="_detailsToggleBtn_198yg_286",Ie="_expandedContent_198yg_304",Be="_detailGrid_198yg_309",De="_detailItem_198yg_315",Me="_imdbLink_198yg_333",Le="_heroSkeleton_198yg_343",Pe="_skeletonBanner_198yg_347",$e="_skeletonContent_198yg_354",Ge="_skeletonPoster_198yg_365",xe="_skeletonInfo_198yg_373",Oe="_skeletonTitle_198yg_380",Ae="_skeletonMeta_198yg_388",Ve="_skeletonDesc_198yg_396",We="_skeletonActions_198yg_404",ze="_errorState_198yg_413",Re="_matureOverlay_198yg_434",qe="_matureContent_198yg_444",n={container:X,heroSection:Y,bannerContainer:Z,banner:ee,bannerOverlay:ne,heroContent:te,posterContainer:se,poster:ae,infoGlass:oe,title:ie,quickMeta:re,metaItem:le,iconStar:ce,iconTv:de,iconType:me,genres:_e,genre:he,metaRow:ge,metaValue:ve,metaDivider:pe,synopsisSection:ye,sectionTitleSmall:ue,synopsis:ke,actions:be,watchBtn:Ne,watchlistBtn:Se,active:fe,seasonPickerLabel:Ce,seasonSelect:Te,detailsToggleBtn:we,expandedContent:Ie,detailGrid:Be,detailItem:De,imdbLink:Me,heroSkeleton:Le,skeletonBanner:Pe,skeletonContent:$e,skeletonPoster:Ge,skeletonInfo:xe,skeletonTitle:Oe,skeletonMeta:Ae,skeletonDesc:Ve,skeletonActions:We,errorState:ze,matureOverlay:Re,matureContent:qe};function Je(){const{id:o}=R(),c=q(),[B]=E(),i=H(B.get("type")),{hasConsent:D}=j(),[t,M]=l(null),[L,_]=l(!0),[y,u]=l(""),[d,P]=l(!1),[h,$]=l(1),G=J(i,o),x=Number(o),{data:O}=K(t?G:void 0),g=!!O?.inLibrary,{toggle:A}=Q();C(()=>{o&&(_(!0),u(""),U.tv.details.query({type:i,id:String(o)}).then(s=>{const m={id:s.id,title:s.title||"",overview:s.overview||"",vote_average:s.vote_average,year:s.year,poster:s.poster,backdrop:s.backdrop,imdb_id:s.imdb_id||void 0,adult:s.adult,seasons:s.seasons?.map(z=>({...z,name:""})),number_of_seasons:s.number_of_seasons};M(m),_(!1)}).catch(s=>{u(s.message),_(!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,h,1))},W=()=>{t&&A({tmdbId:x,mediaType:i,title:t.title,poster:t.poster,year:t.year,adult:t.adult})},r=i==="movie",v=!r,k=t?.backdrop?`https://image.tmdb.org/t/p/w1280${t.backdrop}`:"",b=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]),S=T(()=>t?.seasons?t.seasons.filter(s=>s.season_number>0):[],[t?.seasons]),p=[t?.year,t?.status,v&&t?.number_of_seasons?`${t.number_of_seasons} Season${t.number_of_seasons>1?"s":""}`:null,v&&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(y||!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:y||"Something went wrong"}),e(w,{onClick:()=>c(-1),children:"Go Back"})]})});const f=t.adult&&!D;return e("div",{className:n.container,style:f?{filter:"blur(14px)",pointerEvents:"none",userSelect:"none"}:void 0,children:[e("div",{className:n.heroSection,children:[e("div",{className:n.bannerContainer,children:[k&&e("div",{className:n.banner,style:{backgroundImage:`url(${k})`}}),e("div",{className:n.bannerOverlay})]}),e("div",{className:n.heroContent,children:[e("div",{className:n.posterContainer,children:b&&e("img",{src:b,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))})]}),p.length>0&&e("div",{className:n.metaRow,children:p.map((s,m)=>e(F.Fragment,{children:[e("span",{className:n.metaValue,children:s}),m<p.length-1&&e("span",{className:n.metaDivider,children:"·"})]},m))}),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${h}`]}),e("button",{className:`${n.watchlistBtn} ${g?n.active:""}`,onClick:W,children:[g?e(a,{name:"check",size:14}):e(a,{name:"plus",size:14}),g?"In Watchlist":"Add to Watchlist"]})]}),v&&S.length>1&&e("label",{className:n.seasonPickerLabel,children:[e("span",{children:"Season"}),e("select",{value:h,onChange:s=>$(parseInt(s.target.value,10)||1),className:n.seasonSelect,children:S.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:()=>P(!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"})]})]})})]})]})]}),f&&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{Je as default};
1
+ import{o as R,a as q,p as E,d as l,h as C,T,u as e,g as F}from"./vendor-core-DfaOB3Rn.js";import{I as a}from"./vendor-icons-DrybRNxP.js";import{e as j,t as U,B as w}from"./index-gMxawd-E.js";import{n as H,d as J,e as K,f as Q,t as I}from"./useTvLibrary-Fgn5i9rJ.js";import"./vendor-query-BBT5_sHx.js";const X="_container_198yg_1",Y="_heroSection_198yg_11",Z="_bannerContainer_198yg_17",ee="_banner_198yg_17",ne="_bannerOverlay_198yg_37",te="_heroContent_198yg_49",se="_posterContainer_198yg_62",ae="_poster_198yg_62",oe="_infoGlass_198yg_86",ie="_title_198yg_100",re="_quickMeta_198yg_110",le="_metaItem_198yg_118",ce="_iconStar_198yg_126",de="_iconTv_198yg_130",me="_iconType_198yg_134",_e="_genres_198yg_139",he="_genre_198yg_139",ge="_metaRow_198yg_156",ve="_metaValue_198yg_164",pe="_metaDivider_198yg_168",ye="_synopsisSection_198yg_173",ue="_sectionTitleSmall_198yg_179",ke="_synopsis_198yg_173",be="_actions_198yg_196",Ne="_watchBtn_198yg_202",Se="_watchlistBtn_198yg_226",fe="_active_198yg_250",Ce="_seasonPickerLabel_198yg_256",Te="_seasonSelect_198yg_267",we="_detailsToggleBtn_198yg_286",Ie="_expandedContent_198yg_304",Be="_detailGrid_198yg_309",De="_detailItem_198yg_315",Me="_imdbLink_198yg_333",Le="_heroSkeleton_198yg_343",Pe="_skeletonBanner_198yg_347",$e="_skeletonContent_198yg_354",Ge="_skeletonPoster_198yg_365",xe="_skeletonInfo_198yg_373",Oe="_skeletonTitle_198yg_380",Ae="_skeletonMeta_198yg_388",Ve="_skeletonDesc_198yg_396",We="_skeletonActions_198yg_404",ze="_errorState_198yg_413",Re="_matureOverlay_198yg_434",qe="_matureContent_198yg_444",n={container:X,heroSection:Y,bannerContainer:Z,banner:ee,bannerOverlay:ne,heroContent:te,posterContainer:se,poster:ae,infoGlass:oe,title:ie,quickMeta:re,metaItem:le,iconStar:ce,iconTv:de,iconType:me,genres:_e,genre:he,metaRow:ge,metaValue:ve,metaDivider:pe,synopsisSection:ye,sectionTitleSmall:ue,synopsis:ke,actions:be,watchBtn:Ne,watchlistBtn:Se,active:fe,seasonPickerLabel:Ce,seasonSelect:Te,detailsToggleBtn:we,expandedContent:Ie,detailGrid:Be,detailItem:De,imdbLink:Me,heroSkeleton:Le,skeletonBanner:Pe,skeletonContent:$e,skeletonPoster:Ge,skeletonInfo:xe,skeletonTitle:Oe,skeletonMeta:Ae,skeletonDesc:Ve,skeletonActions:We,errorState:ze,matureOverlay:Re,matureContent:qe};function Je(){const{id:o}=R(),c=q(),[B]=E(),i=H(B.get("type")),{hasConsent:D}=j(),[t,M]=l(null),[L,_]=l(!0),[y,u]=l(""),[d,P]=l(!1),[h,$]=l(1),G=J(i,o),x=Number(o),{data:O}=K(t?G:void 0),g=!!O?.inLibrary,{toggle:A}=Q();C(()=>{o&&(_(!0),u(""),U.tv.details.query({type:i,id:String(o)}).then(s=>{const m={id:s.id,title:s.title||"",overview:s.overview||"",vote_average:s.vote_average,year:s.year,poster:s.poster,backdrop:s.backdrop,imdb_id:s.imdb_id||void 0,adult:s.adult,seasons:s.seasons?.map(z=>({...z,name:""})),number_of_seasons:s.number_of_seasons};M(m),_(!1)}).catch(s=>{u(s.message),_(!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,h,1))},W=()=>{t&&A({tmdbId:x,mediaType:i,title:t.title,poster:t.poster,year:t.year,adult:t.adult})},r=i==="movie",v=!r,k=t?.backdrop?`https://image.tmdb.org/t/p/w1280${t.backdrop}`:"",b=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]),S=T(()=>t?.seasons?t.seasons.filter(s=>s.season_number>0):[],[t?.seasons]),p=[t?.year,t?.status,v&&t?.number_of_seasons?`${t.number_of_seasons} Season${t.number_of_seasons>1?"s":""}`:null,v&&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(y||!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:y||"Something went wrong"}),e(w,{onClick:()=>c(-1),children:"Go Back"})]})});const f=t.adult&&!D;return e("div",{className:n.container,style:f?{filter:"blur(14px)",pointerEvents:"none",userSelect:"none"}:void 0,children:[e("div",{className:n.heroSection,children:[e("div",{className:n.bannerContainer,children:[k&&e("div",{className:n.banner,style:{backgroundImage:`url(${k})`}}),e("div",{className:n.bannerOverlay})]}),e("div",{className:n.heroContent,children:[e("div",{className:n.posterContainer,children:b&&e("img",{src:b,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))})]}),p.length>0&&e("div",{className:n.metaRow,children:p.map((s,m)=>e(F.Fragment,{children:[e("span",{className:n.metaValue,children:s}),m<p.length-1&&e("span",{className:n.metaDivider,children:"·"})]},m))}),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${h}`]}),e("button",{className:`${n.watchlistBtn} ${g?n.active:""}`,onClick:W,children:[g?e(a,{name:"check",size:14}):e(a,{name:"plus",size:14}),g?"In Watchlist":"Add to Watchlist"]})]}),v&&S.length>1&&e("label",{className:n.seasonPickerLabel,children:[e("span",{children:"Season"}),e("select",{value:h,onChange:s=>$(parseInt(s.target.value,10)||1),className:n.seasonSelect,children:S.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:()=>P(!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"})]})]})})]})]})]}),f&&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{Je as default};
@@ -1 +1 @@
1
- import{A as b,d as v,h as P,T as z,u as e,S,L as p}from"./vendor-core-DfaOB3Rn.js";import{I as i}from"./vendor-icons-DrybRNxP.js";import{f as W,d as B,c as D,t as L}from"./useTvLibrary-BnbHS-gg.js";import{t as M}from"./index-BWIWE3Qy.js";import{p as a,a as A}from"./MediaCard-CKUEcFTd.js";const R=({item:s,anchorRect:m,onMouseEnter:u,onMouseLeave:g,onRequestClose:r})=>{const d=b(!1),[n,N]=v(null),[f,l]=v(!0),{toggle:y,bookmarkedIds:w}=W(),I=B(s.type,s.id),c=w.has(I);P(()=>{let t=!1;return l(!0),M.tv.details.query({type:s.type,id:String(s.id)}).then(o=>{t||(N({overview:o.overview,vote_average:o.vote_average,number_of_seasons:o.number_of_seasons}),l(!1))}).catch(()=>{t||l(!1)}),()=>{t=!0}},[s.id,s.type]);const h=z(()=>n?.genres?n.genres.slice(0,4).map(t=>t.name):[],[n?.genres]),k=D(s.type,s.id),T=L(s.type,s.id),_=t=>{t.preventDefault(),t.stopPropagation(),y({tmdbId:s.id,mediaType:s.type,title:s.title,poster:s.image,year:s.year})};return e(A,{anchorRect:m,onMouseEnter:()=>{d.current=!0,u()},onMouseLeave:()=>{d.current=!1,g()},onRequestClose:r,children:[e("div",{className:a.header,children:e("div",{className:a.title,children:s.title})}),e("div",{className:a.body,children:f?e("div",{className:a.loading,children:[e("div",{className:a.spinner}),e("span",{children:"Fetching details..."})]}):e(S,{children:[e("div",{className:a.metaRow,children:[n?.vote_average!=null&&n.vote_average>0&&e("div",{className:a.metaItem,children:[e(i,{name:"star",className:a.scoreIcon,size:14}),e("span",{children:Number(n.vote_average).toFixed(1)})]}),e("div",{className:a.metaItem,children:[e(i,{name:"tv",size:14}),e("span",{children:s.type==="tv"?"TV Show":"Movie"})]}),s.year&&e("div",{className:a.metaItem,children:e("span",{children:s.year})}),n?.status&&e("div",{className:a.metaItem,children:e("span",{children:n.status})})]}),h.length>0&&e("div",{className:a.genres,children:h.map(t=>e("span",{className:a.genre,children:t},t))}),n?.overview&&e("div",{className:a.synopsis,children:n.overview.length>200?n.overview.slice(0,200)+"...":n.overview})]})}),e("div",{className:a.footer,children:[e("div",{className:a.primaryAction,children:e(p,{to:T,className:a.watchBtn,onClick:r,children:[e(i,{name:"play",size:14}),"Watch now"]})}),e("div",{className:a.secondaryActions,children:[e("button",{className:`${a.watchlistBtn} ${c?a.active:""}`,onClick:_,children:[c?e(i,{name:"check",size:12}):e(i,{name:"plus",size:12}),e("span",{children:c?"Remove":"Watchlist"})]}),e(p,{to:k,className:a.detailsBtn,onClick:r,children:[e(i,{name:"info-circle",size:12}),e("span",{children:"Details"})]})]})]})]})};export{R as T};
1
+ import{A as b,d as v,h as P,T as z,u as e,S,L as p}from"./vendor-core-DfaOB3Rn.js";import{I as i}from"./vendor-icons-DrybRNxP.js";import{f as W,d as B,c as D,t as L}from"./useTvLibrary-Fgn5i9rJ.js";import{t as M}from"./index-gMxawd-E.js";import{p as a,a as A}from"./MediaCard-BcLjlpfR.js";const R=({item:s,anchorRect:m,onMouseEnter:u,onMouseLeave:g,onRequestClose:r})=>{const d=b(!1),[n,N]=v(null),[f,l]=v(!0),{toggle:y,bookmarkedIds:w}=W(),I=B(s.type,s.id),c=w.has(I);P(()=>{let t=!1;return l(!0),M.tv.details.query({type:s.type,id:String(s.id)}).then(o=>{t||(N({overview:o.overview,vote_average:o.vote_average,number_of_seasons:o.number_of_seasons}),l(!1))}).catch(()=>{t||l(!1)}),()=>{t=!0}},[s.id,s.type]);const h=z(()=>n?.genres?n.genres.slice(0,4).map(t=>t.name):[],[n?.genres]),k=D(s.type,s.id),T=L(s.type,s.id),_=t=>{t.preventDefault(),t.stopPropagation(),y({tmdbId:s.id,mediaType:s.type,title:s.title,poster:s.image,year:s.year})};return e(A,{anchorRect:m,onMouseEnter:()=>{d.current=!0,u()},onMouseLeave:()=>{d.current=!1,g()},onRequestClose:r,children:[e("div",{className:a.header,children:e("div",{className:a.title,children:s.title})}),e("div",{className:a.body,children:f?e("div",{className:a.loading,children:[e("div",{className:a.spinner}),e("span",{children:"Fetching details..."})]}):e(S,{children:[e("div",{className:a.metaRow,children:[n?.vote_average!=null&&n.vote_average>0&&e("div",{className:a.metaItem,children:[e(i,{name:"star",className:a.scoreIcon,size:14}),e("span",{children:Number(n.vote_average).toFixed(1)})]}),e("div",{className:a.metaItem,children:[e(i,{name:"tv",size:14}),e("span",{children:s.type==="tv"?"TV Show":"Movie"})]}),s.year&&e("div",{className:a.metaItem,children:e("span",{children:s.year})}),n?.status&&e("div",{className:a.metaItem,children:e("span",{children:n.status})})]}),h.length>0&&e("div",{className:a.genres,children:h.map(t=>e("span",{className:a.genre,children:t},t))}),n?.overview&&e("div",{className:a.synopsis,children:n.overview.length>200?n.overview.slice(0,200)+"...":n.overview})]})}),e("div",{className:a.footer,children:[e("div",{className:a.primaryAction,children:e(p,{to:T,className:a.watchBtn,onClick:r,children:[e(i,{name:"play",size:14}),"Watch now"]})}),e("div",{className:a.secondaryActions,children:[e("button",{className:`${a.watchlistBtn} ${c?a.active:""}`,onClick:_,children:[c?e(i,{name:"check",size:12}):e(i,{name:"plus",size:12}),e("span",{children:c?"Remove":"Watchlist"})]}),e(p,{to:k,className:a.detailsBtn,onClick:r,children:[e(i,{name:"info-circle",size:12}),e("span",{children:"Details"})]})]})]})]})};export{R as T};
@@ -1 +1 @@
1
- import{h as W,p as ae,A as re,d as o,T as z,q as A,u as t}from"./vendor-core-DfaOB3Rn.js";import{I as p}from"./vendor-icons-DrybRNxP.js";import{P as I,S as ne}from"./SkeletonGrid-BtzUnQE0.js";import{a as se,T as le}from"./useTv-DzSYasru.js";import{u as ie,U as oe,B as x}from"./index-BWIWE3Qy.js";import{E as ce}from"./ErrorMessage-DAxegITP.js";import{s as r}from"./Search.module-CMEai-B-.js";import"./MediaCard-CKUEcFTd.js";import"./vendor-ui-3qrARCPr.js";import"./useIsMobile-Dvx1uJ82.js";import"./TvPopup-D8WWY6o4.js";import"./useTvLibrary-BnbHS-gg.js";import"./vendor-query-BBT5_sHx.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"},H={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:K}=ie(),C=re(null),[g,Q]=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(H).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(H))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=>Q(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} ${K?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
+ import{h as W,p as ae,A as re,d as o,T as z,q as A,u as t}from"./vendor-core-DfaOB3Rn.js";import{I as p}from"./vendor-icons-DrybRNxP.js";import{P as I,S as ne}from"./SkeletonGrid-nx2HEi4P.js";import{a as se,T as le}from"./useTv-WJCDL5_5.js";import{u as ie,U as oe,B as x}from"./index-gMxawd-E.js";import{E as ce}from"./ErrorMessage-DAxegITP.js";import{s as r}from"./Search.module-CMEai-B-.js";import"./MediaCard-BcLjlpfR.js";import"./vendor-ui-3qrARCPr.js";import"./useIsMobile-Dvx1uJ82.js";import"./TvPopup-CJeu3tgc.js";import"./useTvLibrary-Fgn5i9rJ.js";import"./vendor-query-BBT5_sHx.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"},H={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:K}=ie(),C=re(null),[g,Q]=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(H).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(H))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=>Q(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} ${K?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{o as U,d as v,h as y,T as x,u as l}from"./vendor-core-DfaOB3Rn.js";import{M as N}from"./MediaCard-CKUEcFTd.js";import{L as _}from"./LibraryListPage-DE-ASOX2.js";import{R as K}from"./ResetProgressModal-vFC6N-Qw.js";import{T as O}from"./TvPopup-D8WWY6o4.js";import{g as u}from"./index-BWIWE3Qy.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-BnbHS-gg.js";import"./vendor-ui-3qrARCPr.js";import"./vendor-icons-DrybRNxP.js";import"./useIsMobile-Dvx1uJ82.js";import"./SkeletonGrid-BtzUnQE0.js";import"./ErrorMessage-DAxegITP.js";import"./Watchlist.module-XGtVQr1d.js";import"./vendor-query-BBT5_sHx.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};
1
+ import{o as U,d as v,h as y,T as x,u as l}from"./vendor-core-DfaOB3Rn.js";import{M as N}from"./MediaCard-BcLjlpfR.js";import{L as _}from"./LibraryListPage-CV8Z9JlO.js";import{R as K}from"./ResetProgressModal-C6ukct_c.js";import{T as O}from"./TvPopup-CJeu3tgc.js";import{g as u}from"./index-gMxawd-E.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-Fgn5i9rJ.js";import"./vendor-ui-3qrARCPr.js";import"./vendor-icons-DrybRNxP.js";import"./useIsMobile-Dvx1uJ82.js";import"./SkeletonGrid-nx2HEi4P.js";import"./ErrorMessage-DAxegITP.js";import"./Watchlist.module-XGtVQr1d.js";import"./vendor-query-BBT5_sHx.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};
@@ -1 +1 @@
1
- import{h as ge,o as Ke,a as Qe,p as Ve,d as u,A as ve,T as R,u as t,S as He}from"./vendor-core-DfaOB3Rn.js";import{u as Ze,a as fe}from"./vendor-query-BBT5_sHx.js";import{h as Je,u as Xe,d as et,v as tt,w as ye,x as Se,z as at,t as nt,k as st,y as lt,A as rt,C as it,D as ct,E as ot,B as T,M as ae}from"./index-BWIWE3Qy.js";import{I as p}from"./vendor-icons-DrybRNxP.js";import{A as dt}from"./AnimeCard-I3S6qw9d.js";import{P as be,S as ut}from"./SkeletonGrid-BtzUnQE0.js";import{E as mt}from"./ErrorMessage-DAxegITP.js";import{s as a}from"./Watchlist.module-XGtVQr1d.js";import"./useAnimeInfoData-DjPBg24u.js";import"./QueueOptionsButton-BMvAC6Ut.js";import"./vendor-ui-3qrARCPr.js";import"./MediaCard-CKUEcFTd.js";import"./useIsMobile-Dvx1uJ82.js";const ht=(d,g)=>{const l=new URLSearchParams(g);return l.delete("page"),l.sort(),`${d}|${l.toString()}`},pt=(d,g)=>{const l=new Set(d);return g.forEach(N=>l.add(N)),l},gt=(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),vt=[{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+)"}],ft=[{value:"ALL",label:"All Seasons"},{value:"WINTER",label:"Winter"},{value:"SPRING",label:"Spring"},{value:"SUMMER",label:"Summer"},{value:"FALL",label:"Fall"}],Wt=()=>{ge(()=>{document.title="Watchlist - dango"},[]);const{filter:d="All"}=Ke(),g=Qe(),[l,N]=Ve(),q=Ze(),ne=Je(),[v,B]=u(parseInt(l.get("page")||"1")),[f,W]=u(l.get("query")||""),[C,K]=u(l.get("sortBy")||"last_added"),[y,P]=u(l.get("type")||"ALL"),[S,I]=u(l.get("season")||"ALL"),[b,$]=u(l.get("year")||"ALL"),[k,F]=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}),[M,Ne]=u(()=>["type","season","year","genres","excludeGenres"].some(e=>l.has(e))),{lowEndMode:Ce}=Xe(),{titlePreference:O}=et(),{data:ke}=tt(),se=ke?.genres||[],Q=ve(null),[c,w]=u(null),[V,D]=u(!1),[le,E]=u(!1),[z,we]=u(!1),[h,L]=u(new Set),H=ve(null),i=d==="Continue Watching",G=R(()=>{const e=new URLSearchParams(l);return e.delete("page"),e.set("titlePreference",O),e.toString()},[l,O]),{data:_,isLoading:xe,error:Re}=ye(G,v,14),{data:U,isLoading:Te,error:Be}=Se(d,G,v,14),{data:We}=ye(G,v+1,14),{data:Pe}=Se(d,G,v+1,14),Z=R(()=>(i?_?.data:U?.data)||[],[i,_,U]),x=R(()=>(i?_?.total:U?.total)||0,[i,_,U]),Y=i?xe:Te,re=i?Re:Be,ie=i?We:Pe;ge(()=>{W(l.get("query")||""),K(l.get("sortBy")||"last_added"),P(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")),F(e),B(parseInt(l.get("page")||"1"));const r=ht(d,l);H.current!==null&&H.current!==r&&L(new Set),H.current=r},[l,d]);const Ie=fe({mutationFn:async({id:e,status:n})=>{await nt.watchlist.setStatus.mutate({id:e,status:n})},onSuccess:()=>{q.invalidateQueries({queryKey:["watchlist"]}),at.success("Status updated")}}),$e=fe(ne.continueWatching.remove.mutationOptions({onSuccess:()=>{q.invalidateQueries(ne.continueWatching.pathFilter()),q.invalidateQueries({queryKey:["allContinueWatching"]})}})),J=st(),{data:ce}=lt("skipRemoveConfirmation"),Fe=rt(),X=R(()=>{const e=n=>n[O]||n.name||"";return[...Z].sort((n,s)=>C==="name_asc"?e(n).localeCompare(e(s)):C==="name_desc"?e(s).localeCompare(e(n)):0)},[Z,C,O]),ee=new Date().getFullYear(),Me=[{value:"ALL",label:"All Years"},...Array.from({length:ee-1980+1},(e,n)=>({value:String(ee-n),label:String(ee-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(k).filter(([,A])=>A==="include").map(([A])=>A),o=Object.entries(k).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)},oe=e=>{if(m(C,e),Q.current){const n=Q.current.getBoundingClientRect().top+window.scrollY-100;window.scrollTo({top:n,behavior:"smooth"})}},Oe=()=>{W(""),K("last_added"),P("ALL"),I("ALL"),$("ALL"),F({}),N(new URLSearchParams),B(1)},De=e=>{F(n=>{const s=n[e],r={...n};return s==="include"?r[e]="exclude":s==="exclude"?delete r[e]:r[e]="include",r})},de=(e,n)=>{if(i){w({id:e,name:n});return}String(ce)==="true"||String(ce)==="1"?J.mutate({id:e}):w({id:e,name:n})},Ee=()=>{if(c){if(c.ids){i?(ze.mutate({ids:c.ids}),V&&me.mutate({ids:c.ids})):me.mutate({ids:c.ids}),L(new Set),w(null),D(!1),E(!1);return}i?($e.mutate({showId:c.id}),V&&J.mutate({id:c.id})):J.mutate({id:c.id}),le&&Fe.mutate({key:"skipRemoveConfirmation",value:!0}),w(null),D(!1),E(!1)}},ue=()=>{w(null),D(!1),E(!1)},me=it(),ze=ct(),Ge=ot(),_e=()=>{we(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=X.map(e=>e.id),te=j.length>0&&j.every(e=>h.has(e)),Ye=()=>{L(te?e=>gt(e,j):e=>pt(e,j))},je=e=>{h.size!==0&&(Ge.mutate({ids:[...h],status:e}),L(new Set))},qe=()=>{h.size!==0&&w({ids:[...h]})},he=Z.length>=14&&ie&&ie.data.length>0,pe=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;K(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=>W(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} ${M?a.active:""}`,onClick:()=>Ne(!M),children:[t(p,{name:"filter",size:14}),t("span",{children:"Filters"}),M?t(p,{name:"chevron-up",size:12}):t(p,{name:"chevron-down",size:12})]})]})]}),t("div",{className:`${a.advancedFilters} ${M?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=>P(e.currentTarget.value),children:vt.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:ft.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:Me.map(e=>t("option",{value:e.value,children:e.label},e.value))})]})]}),se.length>0&&t("div",{className:a.genreSection,children:[t("label",{className:a.genreLabel,children:"Genres"}),t("div",{className:a.genreContainer,children:se.map(e=>t("button",{className:`${a.genreButton} ${a[k[e]||""]}`,onClick:()=>De(e),children:e},e))})]}),t("div",{className:a.filterActions,children:[t(T,{variant:"secondary",onClick:Oe,children:"Reset All"}),t(T,{onClick:()=>m(),className:a.applyBtn,children:"Apply Filters"})]})]})]}),t("div",{className:a.resultsHeader,ref:Q,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} ${z?a.active:""}`,onClick:_e,children:[t(p,{name:"pencil-alt",size:13}),t("span",{children:"Bulk Manage"})]}),x>0&&t(be,{page:v,totalPages:pe,canGoNext:he,onChange:oe,isLoading:Y})]})]}),z&&t("div",{className:a.manageBar,children:[t("button",{className:a.selectAllBtn,onClick:Ye,children:[t("span",{className:`${a.selectAllBox} ${te?a.selectAllBoxChecked:""}`,"aria-hidden":"true"}),t("span",{children:te?"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(ut,{}):re?t(mt,{message:re.message}):t(He,{children:[(y!=="ALL"||S!=="ALL"||b!=="ALL"||Object.keys(k).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(),W(""),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(),P("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(k).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(),F(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:X.map(e=>{const n=h.has(e.id);return t("div",{className:`${a.itemWrapper} ${n?a.selected:""}`,children:[z&&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(dt,{anime:e,continueWatching:i,onRemove:()=>de(e.id,e.name),layout:"vertical"}),!i&&!z&&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:()=>de(e.id,e.name),title:"Remove from Watchlist","aria-label":"Remove from Watchlist",children:t(p,{name:"trash",size:12})})]})]},e._id)})})]}),!Y&&X.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(k).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:pe,canGoNext:he,onChange:oe,isLoading:Y,variant:"labeled"})}),t(ae,{isOpen:!!c,onClose:ue,title:i?"Reset Progress":"Remove from Watchlist",children:[t(ae.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:le,onChange:e=>E(e.target.checked)}),"Remember my choice"]})]}),t(ae.Actions,{children:[t(T,{variant:"secondary",onClick:ue,children:"No"}),t(T,{variant:"danger",onClick:Ee,children:"Yes"})]})]})]})};export{Wt as default};
1
+ import{h as ge,o as Ke,a as Qe,p as Ve,d as u,A as ve,T as R,u as t,S as He}from"./vendor-core-DfaOB3Rn.js";import{u as Ze,a as fe}from"./vendor-query-BBT5_sHx.js";import{h as Je,u as Xe,d as et,v as tt,w as ye,x as Se,z as at,t as nt,k as st,y as lt,A as rt,C as it,D as ct,E as ot,B as T,M as ae}from"./index-gMxawd-E.js";import{I as p}from"./vendor-icons-DrybRNxP.js";import{A as dt}from"./AnimeCard-BVdH0EeW.js";import{P as be,S as ut}from"./SkeletonGrid-nx2HEi4P.js";import{E as mt}from"./ErrorMessage-DAxegITP.js";import{s as a}from"./Watchlist.module-XGtVQr1d.js";import"./useAnimeInfoData-_iOLEAa8.js";import"./QueueOptionsButton-ClVTpH8J.js";import"./vendor-ui-3qrARCPr.js";import"./MediaCard-BcLjlpfR.js";import"./useIsMobile-Dvx1uJ82.js";const ht=(d,g)=>{const l=new URLSearchParams(g);return l.delete("page"),l.sort(),`${d}|${l.toString()}`},pt=(d,g)=>{const l=new Set(d);return g.forEach(N=>l.add(N)),l},gt=(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),vt=[{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+)"}],ft=[{value:"ALL",label:"All Seasons"},{value:"WINTER",label:"Winter"},{value:"SPRING",label:"Spring"},{value:"SUMMER",label:"Summer"},{value:"FALL",label:"Fall"}],Wt=()=>{ge(()=>{document.title="Watchlist - dango"},[]);const{filter:d="All"}=Ke(),g=Qe(),[l,N]=Ve(),q=Ze(),ne=Je(),[v,B]=u(parseInt(l.get("page")||"1")),[f,W]=u(l.get("query")||""),[C,K]=u(l.get("sortBy")||"last_added"),[y,P]=u(l.get("type")||"ALL"),[S,I]=u(l.get("season")||"ALL"),[b,$]=u(l.get("year")||"ALL"),[k,F]=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}),[M,Ne]=u(()=>["type","season","year","genres","excludeGenres"].some(e=>l.has(e))),{lowEndMode:Ce}=Xe(),{titlePreference:O}=et(),{data:ke}=tt(),se=ke?.genres||[],Q=ve(null),[c,w]=u(null),[V,D]=u(!1),[le,E]=u(!1),[z,we]=u(!1),[h,L]=u(new Set),H=ve(null),i=d==="Continue Watching",G=R(()=>{const e=new URLSearchParams(l);return e.delete("page"),e.set("titlePreference",O),e.toString()},[l,O]),{data:_,isLoading:xe,error:Re}=ye(G,v,14),{data:U,isLoading:Te,error:Be}=Se(d,G,v,14),{data:We}=ye(G,v+1,14),{data:Pe}=Se(d,G,v+1,14),Z=R(()=>(i?_?.data:U?.data)||[],[i,_,U]),x=R(()=>(i?_?.total:U?.total)||0,[i,_,U]),Y=i?xe:Te,re=i?Re:Be,ie=i?We:Pe;ge(()=>{W(l.get("query")||""),K(l.get("sortBy")||"last_added"),P(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")),F(e),B(parseInt(l.get("page")||"1"));const r=ht(d,l);H.current!==null&&H.current!==r&&L(new Set),H.current=r},[l,d]);const Ie=fe({mutationFn:async({id:e,status:n})=>{await nt.watchlist.setStatus.mutate({id:e,status:n})},onSuccess:()=>{q.invalidateQueries({queryKey:["watchlist"]}),at.success("Status updated")}}),$e=fe(ne.continueWatching.remove.mutationOptions({onSuccess:()=>{q.invalidateQueries(ne.continueWatching.pathFilter()),q.invalidateQueries({queryKey:["allContinueWatching"]})}})),J=st(),{data:ce}=lt("skipRemoveConfirmation"),Fe=rt(),X=R(()=>{const e=n=>n[O]||n.name||"";return[...Z].sort((n,s)=>C==="name_asc"?e(n).localeCompare(e(s)):C==="name_desc"?e(s).localeCompare(e(n)):0)},[Z,C,O]),ee=new Date().getFullYear(),Me=[{value:"ALL",label:"All Years"},...Array.from({length:ee-1980+1},(e,n)=>({value:String(ee-n),label:String(ee-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(k).filter(([,A])=>A==="include").map(([A])=>A),o=Object.entries(k).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)},oe=e=>{if(m(C,e),Q.current){const n=Q.current.getBoundingClientRect().top+window.scrollY-100;window.scrollTo({top:n,behavior:"smooth"})}},Oe=()=>{W(""),K("last_added"),P("ALL"),I("ALL"),$("ALL"),F({}),N(new URLSearchParams),B(1)},De=e=>{F(n=>{const s=n[e],r={...n};return s==="include"?r[e]="exclude":s==="exclude"?delete r[e]:r[e]="include",r})},de=(e,n)=>{if(i){w({id:e,name:n});return}String(ce)==="true"||String(ce)==="1"?J.mutate({id:e}):w({id:e,name:n})},Ee=()=>{if(c){if(c.ids){i?(ze.mutate({ids:c.ids}),V&&me.mutate({ids:c.ids})):me.mutate({ids:c.ids}),L(new Set),w(null),D(!1),E(!1);return}i?($e.mutate({showId:c.id}),V&&J.mutate({id:c.id})):J.mutate({id:c.id}),le&&Fe.mutate({key:"skipRemoveConfirmation",value:!0}),w(null),D(!1),E(!1)}},ue=()=>{w(null),D(!1),E(!1)},me=it(),ze=ct(),Ge=ot(),_e=()=>{we(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=X.map(e=>e.id),te=j.length>0&&j.every(e=>h.has(e)),Ye=()=>{L(te?e=>gt(e,j):e=>pt(e,j))},je=e=>{h.size!==0&&(Ge.mutate({ids:[...h],status:e}),L(new Set))},qe=()=>{h.size!==0&&w({ids:[...h]})},he=Z.length>=14&&ie&&ie.data.length>0,pe=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;K(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=>W(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} ${M?a.active:""}`,onClick:()=>Ne(!M),children:[t(p,{name:"filter",size:14}),t("span",{children:"Filters"}),M?t(p,{name:"chevron-up",size:12}):t(p,{name:"chevron-down",size:12})]})]})]}),t("div",{className:`${a.advancedFilters} ${M?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=>P(e.currentTarget.value),children:vt.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:ft.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:Me.map(e=>t("option",{value:e.value,children:e.label},e.value))})]})]}),se.length>0&&t("div",{className:a.genreSection,children:[t("label",{className:a.genreLabel,children:"Genres"}),t("div",{className:a.genreContainer,children:se.map(e=>t("button",{className:`${a.genreButton} ${a[k[e]||""]}`,onClick:()=>De(e),children:e},e))})]}),t("div",{className:a.filterActions,children:[t(T,{variant:"secondary",onClick:Oe,children:"Reset All"}),t(T,{onClick:()=>m(),className:a.applyBtn,children:"Apply Filters"})]})]})]}),t("div",{className:a.resultsHeader,ref:Q,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} ${z?a.active:""}`,onClick:_e,children:[t(p,{name:"pencil-alt",size:13}),t("span",{children:"Bulk Manage"})]}),x>0&&t(be,{page:v,totalPages:pe,canGoNext:he,onChange:oe,isLoading:Y})]})]}),z&&t("div",{className:a.manageBar,children:[t("button",{className:a.selectAllBtn,onClick:Ye,children:[t("span",{className:`${a.selectAllBox} ${te?a.selectAllBoxChecked:""}`,"aria-hidden":"true"}),t("span",{children:te?"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(ut,{}):re?t(mt,{message:re.message}):t(He,{children:[(y!=="ALL"||S!=="ALL"||b!=="ALL"||Object.keys(k).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(),W(""),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(),P("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(k).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(),F(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:X.map(e=>{const n=h.has(e.id);return t("div",{className:`${a.itemWrapper} ${n?a.selected:""}`,children:[z&&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(dt,{anime:e,continueWatching:i,onRemove:()=>de(e.id,e.name),layout:"vertical"}),!i&&!z&&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:()=>de(e.id,e.name),title:"Remove from Watchlist","aria-label":"Remove from Watchlist",children:t(p,{name:"trash",size:12})})]})]},e._id)})})]}),!Y&&X.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(k).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:pe,canGoNext:he,onChange:oe,isLoading:Y,variant:"labeled"})}),t(ae,{isOpen:!!c,onClose:ue,title:i?"Reset Progress":"Remove from Watchlist",children:[t(ae.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:le,onChange:e=>E(e.target.checked)}),"Remember my choice"]})]}),t(ae.Actions,{children:[t(T,{variant:"secondary",onClick:ue,children:"No"}),t(T,{variant:"danger",onClick:Ee,children:"Yes"})]})]})]})};export{Wt as default};
@@ -1 +1 @@
1
- import{_ as n}from"./index-BWIWE3Qy.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};
1
+ import{_ as n}from"./index-gMxawd-E.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};