@serifpersia/dango 3.9.7 → 3.9.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -4
- package/client/dist/assets/{AnimeCard-q5F_tD6Q.js → AnimeCard-BryQpsfk.js} +1 -1
- package/client/dist/assets/{AnimeInfo-Y4TzTq4q.js → AnimeInfo-CwpctGn0.js} +1 -1
- package/client/dist/assets/{AnimeInfoPage-Bu8q7_fN.js → AnimeInfoPage-Bio8K71O.js} +2 -2
- package/client/dist/assets/{Asmr-DuW_Jtwk.js → Asmr-HIu-8L7Z.js} +1 -1
- package/client/dist/assets/{AsmrPopup-DmXAjIpT.js → AsmrPopup-DDIRUtND.js} +1 -1
- package/client/dist/assets/{AsmrResetProgressModal-YlpGKOw-.js → AsmrResetProgressModal-G--_5hi6.js} +1 -1
- package/client/dist/assets/{Home-B2O7RdNh.js → Home-BWkEQ5Tc.js} +1 -1
- package/client/dist/assets/{Insights-CT77CDrU.js → Insights-CQqjy_kF.js} +1 -1
- package/client/dist/assets/{LibraryListPage-AJ6hG1L-.js → LibraryListPage-P3ThNbJF.js} +1 -1
- package/client/dist/assets/{ListeningList-GOx1Ir_v.js → ListeningList-3qKM0AC8.js} +1 -1
- package/client/dist/assets/{Manga-CQKVrxz_.js → Manga-BwegzU0m.js} +1 -1
- package/client/dist/assets/{MangaInfoPage-BB5cQkBO.js → MangaInfoPage-BH9xCU6N.js} +1 -1
- package/client/dist/assets/{MangaReadPage-BDpps3lc.js → MangaReadPage-DrOb1D_A.js} +1 -1
- package/client/dist/assets/{MangaResetProgressModal-CaJT2NHH.js → MangaResetProgressModal-tm1SKBh0.js} +1 -1
- package/client/dist/assets/{Mature-BMXpX3iD.js → Mature-cilbtt-T.js} +1 -1
- package/client/dist/assets/{MatureConsentModal-C5vPRV5i.js → MatureConsentModal-C3JQ0hOC.js} +1 -1
- package/client/dist/assets/{MediaCard-MAnVN0Zz.js → MediaCard-CX1R88mG.js} +1 -1
- package/client/dist/assets/{OptionListMenu-CcJ9TOV5.js → OptionListMenu-Dk6O2_c7.js} +1 -1
- package/client/dist/assets/Player-DvxvINN3.js +56 -0
- package/client/dist/assets/{PlayerProvider-BpSlL46d.js → PlayerProvider-BToIPjV4.js} +1 -1
- package/client/dist/assets/{PlayerSettings-delaSmdG.js → PlayerSettings-ChgEMzSz.js} +1 -1
- package/client/dist/assets/{QueueOptionsButton-DzBTJGGX.js → QueueOptionsButton-Dr3K6INy.js} +1 -1
- package/client/dist/assets/{QueueRail-BT1sLDAw.js → QueueRail-B0TC6DCX.js} +1 -1
- package/client/dist/assets/{ReadingList-DmbVYPKy.js → ReadingList-DCZ23sG0.js} +1 -1
- package/client/dist/assets/{ResetProgressModal-BDobxv1I.js → ResetProgressModal-BvZead5B.js} +1 -1
- package/client/dist/assets/{Search-CxUcaFfI.js → Search-B73ke5YU.js} +1 -1
- package/client/dist/assets/{Settings-CoTHeSKq.js → Settings-SEe-k3OG.js} +2 -2
- package/client/dist/assets/{SkeletonGrid-9Q4VuO4S.js → SkeletonGrid-BRXDEtGD.js} +1 -1
- package/client/dist/assets/{Trackers-DC4EDgyt.js → Trackers-DMmvYK4c.js} +1 -1
- package/client/dist/assets/Tv-3vWq7Hty.js +4 -0
- package/client/dist/assets/TvInfo-DUKI6aoL.js +1 -0
- package/client/dist/assets/{TvPopup-DkLU-7pw.js → TvPopup-BCguPlm4.js} +1 -1
- package/client/dist/assets/{TvSearch-BwEGJcbq.js → TvSearch-BCZ1Bt5O.js} +1 -1
- package/client/dist/assets/{TvWatchlist-CP92PPZB.js → TvWatchlist-CgOxUdL1.js} +1 -1
- package/client/dist/assets/{VirtualKeyboard-CsmRu3E6.js → VirtualKeyboard-DW59v_31.js} +1 -1
- package/client/dist/assets/{WatchAlong-CpfZx3Le.js → WatchAlong-Det8BqIA.js} +1 -1
- package/client/dist/assets/{WatchAlongPanel-Bhu29HGV.js → WatchAlongPanel-B5laz8Xh.js} +1 -1
- package/client/dist/assets/{Watchlist-9ikxJknw.js → Watchlist-itrgSH3A.js} +1 -1
- package/client/dist/assets/index-CANVdkPZ.js +178 -0
- package/client/dist/assets/index-DmkNa-gz.css +1 -0
- package/client/dist/assets/{libraryInvalidation-DGrdMoRs.js → libraryInvalidation-DbrKjF5Q.js} +1 -1
- package/client/dist/assets/{playbackCompletion-Z40dSXOE.js → playbackCompletion-BXXM0PH1.js} +1 -1
- package/client/dist/assets/{useAnimeInfoData-CD7YsaT8.js → useAnimeInfoData-6HMof-NV.js} +1 -1
- package/client/dist/assets/{useMangaLibrary--4Q_E3hs.js → useMangaLibrary-DFCgqpvO.js} +1 -1
- package/client/dist/assets/{useMangaPopup-E_GgQXOf.js → useMangaPopup-BS54vMe3.js} +1 -1
- package/client/dist/assets/{useProviders-jAVzdvgi.js → useProviders-DX0JCmk2.js} +1 -1
- package/client/dist/assets/{useTv-C5QkCKNu.js → useTv-CTuS47dN.js} +1 -1
- package/client/dist/assets/{useTvLibrary-DPJOHbp1.js → useTvLibrary-DHDmFDvV.js} +1 -1
- package/client/dist/assets/{useWatchAlongPlayer-CGkmzN8r.js → useWatchAlongPlayer-BdOwe0vN.js} +1 -1
- package/client/dist/favicon.svg +4 -10
- package/client/dist/index.html +3 -3
- package/client/dist/logo.svg +6 -0
- package/package.json +2 -2
- package/server/dist/server.js +247 -247
- package/server/package.json +1 -1
- package/client/dist/assets/Player-BTtTwYJ2.js +0 -56
- package/client/dist/assets/Tv-DCnM78Kk.js +0 -4
- package/client/dist/assets/TvInfo-foHQYICS.js +0 -1
- package/client/dist/assets/index-COFMCQUU.css +0 -1
- package/client/dist/assets/index-CipsDH5j.js +0 -178
- package/client/dist/repo_logo.svg +0 -33
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{u as t,d as y,A as H,h as _,S as nt,g as Ms,q as C,o as Rs,p as Ls,a as Bs,T as be}from"./vendor-core-DfaOB3Rn.js";import{h as Yt,p as z,t as Et,ac as $s,a6 as Ds,S as rr,e as Os,ak as zs,J as Or,B as ge,a8 as Fs}from"./index-CANVdkPZ.js";import{P as Vs,a as Us,b as Ws,F as Hs,f as qs,c as Ks}from"./PlayerProvider-BToIPjV4.js";import{u as Ys}from"./vendor-query-BBT5_sHx.js";import{I as oe}from"./vendor-icons-C1Pj_eSX.js";import{p as ir,M as Qs,z as Wr,f as lr,c as js,C as Gs,a as Xs,P as Js,b as Tn,u as Zs,i as eo,j as to,n as no,h as ro,k as so,m as oo,l as ao,s as sr,d as io,e as lo,g as co,r as uo,o as De,A as mo,t as ho,E as vo,w as po,x as fo,v as J,y as bo,R as go,q as zr}from"./useWatchAlongPlayer-BdOwe0vN.js";import{S as yo,O as or,a as _o,A as So,b as To}from"./OptionListMenu-Dk6O2_c7.js";import{M as Co}from"./MatureConsentModal-C3JQ0hOC.js";import{u as ko}from"./useProviders-DX0JCmk2.js";import{e as Eo,b as No,f as wo,g as Ao,d as xo,c as Io,h as Po,i as Mo}from"./useTvLibrary-DHDmFDvV.js";import{b as Ro,i as Kt,l as Lo,a as Bo,c as $o,h as Fr}from"./playbackCompletion-BXXM0PH1.js";import{u as Do}from"./useIsMobile-Dvx1uJ82.js";import{S as Oo}from"./SynopsisText-B3Sa5pRv.js";import{W as zo}from"./WatchAlongPanel-B5laz8Xh.js";import"./libraryInvalidation-DbrKjF5Q.js";const Fo="_fullscreenFlat_n2elb_1",Vo="_timeDisplay_n2elb_12",Uo="_bottomControls_n2elb_16",Wo="_leftControls_n2elb_20",Ho="_rightControls_n2elb_21",qo="_controlBtn_n2elb_25",Ko="_controlsOverlay_n2elb_32",Yo="_hidden_n2elb_52",Qo="_topControls_n2elb_58",jo="_backBtn_n2elb_78",Go="_videoTitleInfo_n2elb_98",Xo="_animeTitle_n2elb_104",Jo="_episodeLabel_n2elb_112",Zo="_speedBoostBadge_n2elb_119",ea="_progressBarContainer_n2elb_165",ta="_progressBar_n2elb_165",na="_thumb_n2elb_184",ra="_bufferedBar_n2elb_202",sa="_watchedBar_n2elb_212",oa="_scrubbing_n2elb_237",aa="_timeBubble_n2elb_241",ia="_bottomControlsRow_n2elb_255",la="_nextEpisodeBtn_n2elb_278",ca="_active_n2elb_340",da="_settingsPanel_n2elb_352",ua="_settingsHeader_n2elb_371",ma="_settingsBackBtn_n2elb_379",ha="_settingsTitle_n2elb_397",va="_settingsContent_n2elb_408",pa="_currentValue_n2elb_417",fa="_menuItem_n2elb_423",ba="_menuNote_n2elb_456",ga="_loadingOverlay_n2elb_465",ya="_loadingDots_n2elb_476",_a="_dot_n2elb_481",Sa="_bufferingOverlay_n2elb_510",Ta="_bufferingSpinner_n2elb_519",a={fullscreenFlat:Fo,timeDisplay:Vo,bottomControls:Uo,leftControls:Wo,rightControls:Ho,controlBtn:qo,controlsOverlay:Ko,hidden:Yo,topControls:Qo,backBtn:jo,videoTitleInfo:Go,animeTitle:Xo,episodeLabel:Jo,speedBoostBadge:Zo,progressBarContainer:ea,progressBar:ta,thumb:na,bufferedBar:ra,watchedBar:sa,scrubbing:oa,timeBubble:aa,bottomControlsRow:ia,nextEpisodeBtn:la,active:ca,settingsPanel:da,settingsHeader:ua,settingsBackBtn:ma,settingsTitle:ha,settingsContent:va,currentValue:pa,menuItem:fa,menuNote:ba,loadingOverlay:ga,loadingDots:ya,dot:_a,bufferingOverlay:Sa,bufferingSpinner:Ta},Ca=({player:s,visible:b,settingsOpen:V,onOpenSettings:L,onCloseSettings:O,hasSubtitles:E,isSubtitleActive:I,subtitles:u,onSubtitleChange:i,showNextEpisodeButton:k,onNextEpisode:r,isTheaterMode:B,onTheaterModeToggle:ae,timeLabelRef:te})=>{const{state:we,actions:rt}=s,Ae=()=>{if(I){i(-1);return}let ye=null;try{ye=z.getItem("tvLastSubtitle")}catch{}i(ir(u,{lastKey:ye,enabled:!0}))};return t("div",{className:`${a.controlsOverlay} ${b?"":a.hidden}`,"data-speed-boost-ignore":"true",style:{pointerEvents:"none",background:"none",justifyContent:"flex-end"},children:t("div",{className:a.bottomControls,onClick:ye=>ye.stopPropagation(),children:[t(Vs,{classes:{container:a.progressBarContainer,scrubbing:a.scrubbing,timeBubble:a.timeBubble,bar:a.progressBar,buffered:a.bufferedBar,watched:a.watchedBar,thumb:a.thumb},timeLabelRef:te}),t("div",{className:a.bottomControlsRow,children:[t("div",{className:a.leftControls,children:[t(Us,{className:a.controlBtn}),t(Ws,{buttonClassName:a.controlBtn,onExpandedChange:rt.setShowVolumeSlider}),t("span",{className:a.timeDisplay,ref:te,children:[Yt(0)," / ",Yt(we.duration)]})]}),t("div",{className:a.rightControls,children:[k&&t("button",{className:a.nextEpisodeBtn,onClick:r,title:"Play next episode",children:"Next EP"}),E&&t("button",{className:`${a.controlBtn} ${I?a.active:""}`,onClick:Ae,"aria-label":I?"Turn subtitles off":"Turn subtitles on",children:t(oe,{name:"closed-captioning"})}),t("button",{className:`${a.controlBtn} ${V?a.active:""}`,onClick:()=>V?O():L(),"aria-label":"Settings",children:t(oe,{name:"cog"})}),t("button",{className:`${a.controlBtn} ${B?a.active:""}`,onClick:ye=>{ye.stopPropagation(),ae()},title:B?"Exit Theater Mode":"Theater Mode","aria-label":B?"Exit Theater Mode":"Theater Mode",children:t(oe,{name:"tv"})}),t(Hs,{className:a.controlBtn})]})]})]})})},Cn=-6e4,ar=6e4,Vr=500,ka=({classes:s,delayMs:b,onDelayChange:V})=>{const[L,O]=y(null),E=L??b,I=H(V);I.current=V;const u=H(b);u.current=b;const i=H(null);i.current=L,_(()=>{O(null)},[b]),_(()=>()=>{const B=i.current;B!==null&&B!==u.current&&I.current(B)},[]);const k=B=>{u.current=B,i.current=null,I.current(B),O(null)},r=B=>{const ae=i.current??u.current,te=Math.max(Cn,Math.min(ar,ae+B));k(te)};return t(nt,{children:[t("div",{style:{display:"flex",gap:6,padding:"0.5rem 0.75rem 0.25rem"},children:[t("button",{type:"button",className:s.item,onClick:()=>r(-Vr),"aria-label":"Show subtitles 0.5 seconds earlier",style:{flex:1,justifyContent:"center"},children:t("span",{children:"-0.5s"})}),t("button",{type:"button",className:s.item,onClick:()=>r(Vr),"aria-label":"Show subtitles 0.5 seconds later",style:{flex:1,justifyContent:"center"},children:t("span",{children:"+0.5s"})}),t("button",{type:"button",className:s.item,onClick:()=>k(0),disabled:E===0,"aria-label":"Reset subtitle timing",style:{flex:1,justifyContent:"center"},children:t("span",{children:"Reset"})})]}),t(Qs,{label:"Subtitle timing",display:Wr(E),min:Cn,max:ar,step:100,value:E,percent:(E-Cn)/(ar-Cn)*100,onChange:B=>{const ae=Math.round(B);i.current=ae,O(ae)},onCommit:()=>{const B=i.current;B!==null&&k(B)}}),t("div",{className:s.note,children:"Positive delays subtitles (show later). Negative shows them earlier. 0.0s is default."})]})},Ea=({view:s,onSelectView:b,onClose:V,player:L,onSubtitleStyleChange:O,streams:E,resolutionIdx:I,onResolutionChange:u,hasSubtitles:i,subtitles:k,selectedSubtitle:r,isSubtitleActive:B,onSubtitleChange:ae,audioTracks:te,selectedAudioTrack:we,onAudioTrackChange:rt,videoDelayEnabled:Ae,onVideoDelayToggle:ye,videoDelayMs:Oe,onVideoDelayChange:m,onCalibrate:He,subtitleDelayMs:st,onSubtitleDelayChange:Nt,ambientSettings:ie,onAmbientChange:p})=>{const{state:he}=L,ft=()=>t(nt,{children:[E.length>1&&t("button",{className:a.menuItem,onClick:()=>b("resolution"),children:[t("span",{children:"Resolution"}),t("span",{className:a.currentValue,children:E[I]?.quality||"Auto"})]}),i&&t("button",{className:a.menuItem,onClick:()=>b("subtitles"),children:[t("span",{children:"Subtitles"}),t("span",{className:a.currentValue,children:B?k[r]?.label||k[r]?.language:"Off"})]}),i&&t("button",{className:a.menuItem,onClick:()=>b("subtitle-style"),children:[t("span",{children:"Subtitle Style"}),t("span",{className:a.currentValue,children:[he.subtitleFontSize.toFixed(1),"x · ",he.subtitlePosition]})]}),i&&t("button",{className:a.menuItem,onClick:()=>b("subtitle-timing"),children:[t("span",{children:"Subtitle Timing"}),t("span",{className:a.currentValue,children:Wr(st)})]}),te.length>0&&t("button",{className:a.menuItem,onClick:()=>b("audio"),children:[t("span",{children:"Audio Track"}),t("span",{className:a.currentValue,children:te[we]?.label||te[we]?.language})]}),t("button",{className:a.menuItem,onClick:()=>b("av-sync"),children:[t("span",{children:"A/V Sync"}),t("span",{className:a.currentValue,children:Ae?`${Oe}ms`:"Off"})]}),ie&&p&&t("button",{className:a.menuItem,onClick:()=>b("ambient"),children:[t("span",{children:"Ambient Light"}),t("span",{className:a.currentValue,children:ie.enabled?"On":"Off"})]})]}),N=()=>t(or,{classes:{item:a.menuItem,active:a.active},options:E.map((P,ce)=>({key:String(ce),label:P.quality,selected:ce===I})),onSelect:P=>u(Number(P))}),Y=()=>t(or,{classes:{item:a.menuItem,active:a.active},options:[{key:"off",label:"Off",selected:!B},...k.map((P,ce)=>({key:String(ce),label:P.label||P.language,selected:ce===r}))],onSelect:P=>ae(P==="off"?-1:Number(P))}),Se=()=>t(_o,{classes:{item:a.menuItem,active:a.active},values:{fontSize:he.subtitleFontSize,position:he.subtitlePosition,bgOpacity:he.subtitleBgOpacity,bgColor:he.subtitleBgColor,textColor:he.subtitleTextColor,edge:he.subtitleEdge,bold:he.subtitleBold},onChange:O}),le=()=>t(ka,{classes:{item:a.menuItem,active:a.active,note:a.menuNote},delayMs:st,onDelayChange:P=>Nt?.(P)}),wt=()=>t(or,{classes:{item:a.menuItem,active:a.active},options:te.map((P,ce)=>({key:String(ce),label:P.label||P.language,selected:ce===we})),onSelect:P=>rt(Number(P))}),xe=()=>t(So,{classes:{item:a.menuItem,active:a.active,note:a.menuNote},enabled:Ae,delayMs:Oe,onToggle:P=>ye?.(P),onDelayChange:P=>m?.(P),onCalibrate:He}),Ie=()=>ie&&p?t(To,{classes:{item:a.menuItem,active:a.active,note:a.menuNote},values:ie,onChange:p}):null;return t("div",{"data-speed-boost-ignore":"true",onClick:P=>P.stopPropagation(),children:t(yo,{classes:{panel:a.settingsPanel,header:a.settingsHeader,backBtn:a.settingsBackBtn,title:a.settingsTitle,content:a.settingsContent},title:s==="main"?"Settings":s==="subtitle-style"?"Subtitle Style":s==="subtitle-timing"?"Subtitle Timing":s==="audio"?"Audio Track":s==="resolution"?"Resolution":s==="av-sync"?"A/V Sync":s==="ambient"?"Ambient Light":s.charAt(0).toUpperCase()+s.slice(1),onBack:()=>s==="main"?V():b("main"),children:[s==="main"&&ft(),s==="resolution"&&N(),s==="subtitles"&&Y(),s==="subtitle-style"&&Se(),s==="subtitle-timing"&&le(),s==="audio"&&wt(),s==="av-sync"&&xe(),s==="ambient"&&Ie()]})})},Na=({player:s,title:b,episodeLabel:V,server:L,audioTracks:O,selectedAudioTrack:E,onAudioTrackChange:I,subtitles:u,selectedSubtitle:i,onSubtitleChange:k,streams:r,resolutionIdx:B,onResolutionChange:ae,onBack:te,children:we,videoDelayEnabled:rt=!1,onVideoDelayToggle:Ae,videoDelayMs:ye=0,onVideoDelayChange:Oe,onCalibrateAvSync:m,subtitleDelayMs:He=0,onSubtitleDelayChange:st,showNextEpisodeButton:Nt=!1,onNextEpisode:ie,isLoading:p=!1,isTheaterMode:he,onTheaterModeToggle:ft,ambientSettings:N,onAmbientChange:Y,hideChrome:Se=!1})=>{const{state:le,refs:wt,actions:xe}=s,Ie=wt.videoRef,{subtitleFontSize:P,subtitlePosition:ce,subtitleBgOpacity:Qt,subtitleBgColor:At,subtitleTextColor:de,subtitleEdge:xt,subtitleBold:It}=le,[ee,Te]=y(null),qe=H(null),[ne,jt]=y(0);_(()=>{const me=Ie.current;if(!me)return;const $=()=>jt(me.clientHeight||0);$();const Fe=new ResizeObserver($);return Fe.observe(me),()=>Fe.disconnect()},[Ie]);const Gt=xe.setSubtitleStyle;_(()=>{const me="tv-player-subtitle-style";let $=document.getElementById(me);$||($=document.createElement("style"),$.id=me,document.head.appendChild($));const Fe={fontSize:P,position:ce,bgOpacity:Qt,bgColor:At,textColor:de,edge:xt,bold:It},S=Ie.current,yt=lr(P,ne||S?.clientHeight||720);if($.textContent=js({...Fe,fontSize:yt}),S){const Mt=()=>{const w=Number(ce);return isNaN(w)?0:Math.max(0,Math.min(100,w))},Ce=(w,Z)=>{try{const re=w;re.snapToLines=!1,re.line=Z}catch{}},Xt=()=>{const w=yt*16,Z=S.videoHeight||S.clientHeight||720,re=S.videoWidth||S.clientWidth||1280;return{step:w*1.3/Z*100,chars:Math.max(20,Math.floor(re/(w*.55)))}},Jt=w=>{const Z=Math.max(0,Math.min(100,100-Mt())),re=Array.from(w.activeCues??[]);if(re.length<=1){re.forEach(d=>Ce(d,Z));return}const{step:Rt,chars:Lt}=Xt();let h=Z;for(let d=re.length-1;d>=0;d--){const pe=String(re[d].text??"").replace(/<[^>]*>/g,"").split(`
|
|
2
|
+
`).reduce((en,tn)=>en+Math.max(1,Math.ceil(tn.length/Lt)),0),Bt=h-pe*Rt;Ce(re[d],Math.max(0,Bt)),h=Bt-Rt*.4}},lt=()=>{const w=Math.max(0,Math.min(100,100-Mt()));Array.from(S.textTracks).forEach(Z=>{Z.cues&&(Array.from(Z.cues).forEach(re=>Ce(re,w)),Z.mode==="showing"&&Jt(Z))})};lt();const ct=w=>{const Z=w.target;Z.mode==="showing"&&Jt(Z)},_t=()=>{Array.from(S.textTracks).forEach(w=>{w.removeEventListener("cuechange",ct),w.addEventListener("cuechange",ct)}),lt()};Array.from(S.textTracks).forEach(w=>{w.addEventListener("cuechange",ct)}),S.textTracks.addEventListener("addtrack",_t);const ve=Array.from(S.querySelectorAll("track")),Zt=()=>lt();return ve.forEach(w=>w.addEventListener("load",Zt)),()=>{Array.from(S.textTracks).forEach(w=>{w.removeEventListener("cuechange",ct)}),S.textTracks.removeEventListener("addtrack",_t),ve.forEach(w=>w.removeEventListener("load",Zt))}}},[P,ce,Qt,At,de,xt,It,i,u,Ie,ne]);const ze=u.length>0,bt=i>=0,Pe=()=>{Te("main"),xe.setShowControls(!0)},ot=()=>{Te(null)},ue=le.showControls||!!ee,Me=qs(s.engine),Re=Me.audioTracks.find(me=>me.id===Me.activeAudioTrack)??O[E],at=i>=0?u[i]??Me.subtitleTracks.find(me=>me.id===i):void 0,gt=t(Gs,{visible:ue,title:b,episode:V,server:p?void 0:L,audio:p?void 0:Re?.label||Re?.language,subtitles:p?void 0:at?.label||at?.language,onBack:te,classes:{overlay:a.controlsOverlay,hidden:a.hidden,top:a.topControls,backBtn:a.backBtn,titleInfo:a.videoTitleInfo,title:a.animeTitle,episode:a.episodeLabel}}),kn=!p&&!le.isBuffering&&le.duration>0?t(Xs,{}):null,Pt=t(Ca,{player:s,visible:ue,settingsOpen:!!ee,onOpenSettings:Pe,onCloseSettings:ot,hasSubtitles:ze,isSubtitleActive:bt,subtitles:u,onSubtitleChange:k,showNextEpisodeButton:Nt,onNextEpisode:ie,isTheaterMode:he,onTheaterModeToggle:ft,timeLabelRef:qe}),it=ee?t(Ea,{view:ee,onSelectView:Te,onClose:ot,player:s,onSubtitleStyleChange:Gt,streams:r,resolutionIdx:B,onResolutionChange:ae,hasSubtitles:ze,subtitles:u,selectedSubtitle:i,isSubtitleActive:bt,onSubtitleChange:k,audioTracks:O,selectedAudioTrack:E,onAudioTrackChange:I,videoDelayEnabled:rt,onVideoDelayToggle:Ae,videoDelayMs:ye,onVideoDelayChange:Oe,onCalibrate:()=>{Te(null),m?.()},subtitleDelayMs:He,onSubtitleDelayChange:st,ambientSettings:N,onAmbientChange:Y}):null,En=t(nt,{children:[p&&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})]})}),le.isBuffering&&!p&&t("div",{className:a.bufferingOverlay,"aria-hidden":"true",children:t("div",{className:a.bufferingSpinner})}),le.isSpeedBoostActive&&t("div",{className:a.speedBoostBadge,"aria-hidden":"true",children:[t("span",{children:"2x"}),t(oe,{name:"forward",size:12})]})]});return t(Js,{engine:s.engine,topBar:gt,centerControls:kn,bottomBar:!p&&le.duration>0?Pt:null,settingsPanel:it,overlays:En,isInteracting:!!ee||le.showVolumeSlider,nativeControls:le.useNativeControls,onStageClick:ot,className:le.isFullscreen?a.fullscreenFlat:"",chromeDisabled:Se,children:we})},wa=({servers:s,selectedServer:b,onServerSelect:V})=>s.length===0?null:t("div",{className:Tn.sourceSelectionContainer,children:[t("h4",{children:"Source"}),t("div",{className:Tn.sourceButtons,children:s.map(L=>t("button",{className:`${Tn.sourceButton} ${b===L?Tn.active:""}`,onClick:()=>V(L),children:L},L))})]}),Aa=Ms.memo(wa);function xa({details:s,isMovie:b,season:V,episode:L,videoRef:O,active:E}){const I=H("");I.current||(I.current=`tv-${Date.now()}-${Math.random().toString(36).slice(2)}`);const u=C(()=>{if(!s)return;const i=O.current,k=b?"":`S${String(V).padStart(2,"0")}E${String(L).padStart(2,"0")}`;Et.discord.tvPresence.mutate({title:s.title,episodeLabel:k,isPlaying:i?!i.paused&&!i.ended:!0,thumbnail:s.poster,currentTime:i?i.currentTime:0,duration:i&&i.duration||0,isAdult:s.adult===!0,sessionId:I.current}).catch(()=>{}),Et.discord.heartbeat.mutate({sessionId:I.current}).catch(()=>{})},[s,b,V,L,O]);return _(()=>{if(!s)return;u();const i=window.setInterval(()=>{const k=O.current;(!k||!k.paused)&&u()},15e3);return()=>window.clearInterval(i)},[u,s,O]),_(()=>{if(!s||!E)return;const i=O.current;if(!i)return;const k=()=>u();return i.addEventListener("play",k),i.addEventListener("pause",k),i.addEventListener("seeked",k),()=>{i.removeEventListener("play",k),i.removeEventListener("pause",k),i.removeEventListener("seeked",k)}},[s,E,u,O]),_(()=>{const i=I.current,k=()=>$s(i),r=()=>k();return window.addEventListener("pagehide",r),window.addEventListener("beforeunload",r),()=>{window.removeEventListener("pagehide",r),window.removeEventListener("beforeunload",r),k()}},[]),{sendPresence:u}}function Ia(s,b,V){const L=()=>{const E=Array.isArray(s.audioTracks)?s.audioTracks.length:0,I=V.getWant(),u=E>0?Math.min(Math.max(0,I),E-1):I;s.audioTrack=u,u!==I&&V.onResolve(u)},O=(E,I)=>{const u=V.getWant(),i=Array.isArray(s.audioTracks)?s.audioTracks.length:0;if(I.id!==u&&u>=0&&u<i){s.audioTrack!==u&&(s.audioTrack=u);return}V.onResolve(I.id)};return s.on(b.MANIFEST_PARSED,L),s.on(b.AUDIO_TRACK_SWITCHED,O),()=>{s.off(b.MANIFEST_PARSED,L),s.off(b.AUDIO_TRACK_SWITCHED,O)}}const Pa=/\b(SmartTV|SMART-TV|Tizen|Web0S|webOS|NetCast|HbbTV|AppleTV|CrKey|BRAVIA|AFT[A-Za-z]|Fire\s?TV|GoogleTV|Roku|VIDAA|DTV|PlayStation|Xbox|Opera TV|POV_TV)\b/i;function Ma(){try{if(Pa.test(navigator.userAgent||""))return!0;const s=navigator.deviceMemory;if(typeof s=="number"&&s>0&&s<2)return!0}catch{}return!1}const Ra="_statusMsg_vmhzm_1",La="_error_vmhzm_7",Ba="_spinner_vmhzm_11",$a="_spin_vmhzm_11",Da="_sourceLoader_vmhzm_16",Oa="_ringSpinner_vmhzm_22",za="_meta_vmhzm_40",Fa="_year_vmhzm_48",Va="_rating_vmhzm_53",Ua="_typeBadge_vmhzm_62",Wa="_tv_vmhzm_70",Ha="_movie_vmhzm_75",qa="_controlLabel_vmhzm_80",Ka="_select_vmhzm_90",Ya="_playerSection_vmhzm_102",Qa="_video_vmhzm_106",ja="_videoHidden_vmhzm_128",Ga="_delayCanvas_vmhzm_133",Xa="_delayCanvasActive_vmhzm_146",Ja="_subtitleOverlay_vmhzm_150",Za="_videoIframe_vmhzm_169",ei="_retryButton_vmhzm_177",ti="_sidebarSeason_vmhzm_192",ni="_mobileSeasonRow_vmhzm_208",ri="_providerActions_vmhzm_221",si="_providerRow_vmhzm_228",oi="_autoplayActive_vmhzm_247",ai="_genreRow_vmhzm_258",ii="_genreChip_vmhzm_265",li="_metaRow_vmhzm_275",ci="_detailGrid_vmhzm_284",di="_detailItem_vmhzm_292",ui="_imdbLink_vmhzm_314",mi="_watchedOverlay_vmhzm_324",hi="_watchedTitle_vmhzm_346",vi="_watchedSubtext_vmhzm_352",pi="_watchedActions_vmhzm_358",fi="_watchedActionsCentered_vmhzm_376",f={statusMsg:Ra,error:La,spinner:Ba,spin:$a,sourceLoader:Da,ringSpinner:Oa,meta:za,year:Fa,rating:Va,typeBadge:Ua,tv:Wa,movie:Ha,controlLabel:qa,select:Ka,playerSection:Ya,video:Qa,videoHidden:ja,delayCanvas:Ga,delayCanvasActive:Xa,subtitleOverlay:Ja,videoIframe:Za,retryButton:ei,sidebarSeason:ti,mobileSeasonRow:ni,providerActions:ri,providerRow:si,autoplayActive:oi,genreRow:ai,genreChip:ii,metaRow:li,detailGrid:ci,detailItem:di,imdbLink:ui,watchedOverlay:mi,watchedTitle:hi,watchedSubtext:vi,watchedActions:pi,watchedActionsCentered:fi},bi=[],gi=[];function Ur({error:s,onRetry:b}){return t("div",{className:`${f.statusMsg} ${f.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:s}),t("button",{className:f.retryButton,onClick:b,children:"Retry"})]})})}const Li=()=>{const{id:s}=Rs(),[b]=Ls(),V=H(b);V.current=b;const L=Bs(),O=Ys(),E=b.get("type"),I=Ds(),u=!!I.session,i=u&&!I.session?.host,k=i&&["tv","movie"].includes(I.room?.selection.kind||"")?I.room?.selection:null,[r,B]=y(null),[ae,te]=y(null),[we,rt]=y(()=>Date.now()),Ae=(ae??r?.next_episode_to_air??null)?.air_timestamp;_(()=>{if(typeof Ae!="number"||Ae<=Date.now())return;const e=setInterval(()=>rt(Date.now()),1e3);return()=>clearInterval(e)},[Ae]);const[ye,Oe]=y(()=>parseInt(b.get("s")||"1",10)||1),m=k?.season??ye,[He,st]=y([]),[Nt,ie]=y(()=>parseInt(b.get("e")||"1",10)||1),p=k?Number(k.episode):Nt,[he,ft]=y(()=>{try{return z.getItem("tvProvider")||""}catch{return""}}),N=k?.provider??he,[Y,Se]=y([]),[le,wt]=y(""),[xe,Ie]=y(""),{options:P,isFallback:ce,isLoading:Qt}=ko(),At=be(()=>P.filter(e=>(e.kind??"tv")==="tv").map(e=>({id:e.id,label:e.label,tier:e.tier==="embed"?"embed":"direct",servers:e.servers})),[P]),de=ce||At.length===0?bi:At,xt=de.filter(e=>e.tier==="direct"),It=de.filter(e=>e.tier==="embed"),[ee,Te]=y(!1),[qe,ne]=y(""),[jt,Gt]=y([]),[ze,bt]=y(0),[Pe,ot]=y([]),[ue,Me]=y(-1),[Re,at]=y(0),[gt,kn]=y(""),[Pt,it]=y(""),[En,me]=y(()=>{try{return z.getItem("tvServer")||""}catch{return""}}),$=k?.source??En,Fe=be(()=>de.find(e=>e.id===N),[de,N]),S=Fe?.tier==="embed",[yt,Mt]=y([]),[Ce,Xt]=y(""),[Jt,lt]=y(""),[ct,_t]=y(!1),ve=be(()=>yt.length>0?yt:Fe?.servers??[],[yt,Fe]),Zt=be(()=>Ce&&!u?["Embed",...ve]:ve,[ve,Ce,u]),w=ct&&!!Ce,Z=w?Jt||Ce:"";_(()=>{if(!Ce){lt("");return}let e=!1;return rr(`/api/resolve?url=${encodeURIComponent(Ce)}`).then(n=>{!e&&n.finalUrl&<(n.finalUrl)}).catch(()=>{}),()=>{e=!0}},[Ce]);const re=H([]);_(()=>{re.current=Y},[Y]);const Rt=H(ze);_(()=>{Rt.current=ze},[ze]);const Lt=H(ue);_(()=>{Lt.current=ue},[ue]);const h=Zs({skipIntervals:gi}),d=h.refs.videoRef,ke=H(null),pe=H([]),Bt=H(null),en=H(null),{videoDelayMs:tn,videoDelayEnabled:Nn,setDelayEnabled:Hr,handleVideoDelayChange:cr,isCalibrating:qr,testClipActive:Ee,stopCalibration:wn,openAvSyncCalibrator:Kr,cancelAvSyncCalibrator:Yr,applyAvSyncCalibrator:Qr,toggleTestClip:jr,calibReturnRef:nn,effectiveVideoDelayMs:An}=eo(d),[St,Gr]=y(()=>{try{const e=Number(z.getItem("tvSubtitleDelayMs"));if(Number.isFinite(e)&&e>=-6e4&&e<=6e4)return Math.round(e)}catch{}return 0}),xn=H(St);xn.current=St;const Xr=C(e=>{const n=Math.max(-6e4,Math.min(6e4,Math.round(e)));if(xn.current!==n){xn.current=n,Gr(n);try{z.setItem("tvSubtitleDelayMs",String(n))}catch{}}},[]);to({videoRef:d,canvasRef:Bt,delayMs:An,enabled:Nn});const In=Nn,_e=In||St!==0,{settings:Pn,update:Jr}=no(),Mn=H(_e);Mn.current=_e;const Rn=C(()=>{if(!Mn.current)return;const e=d.current;e&&Array.from(e.textTracks).forEach(n=>{n.mode!=="hidden"&&(n.mode="hidden")})},[d]),{hasConsent:$t,grant:Zr}=Os(),v=E==="movie";xa({details:r,isMovie:v,season:m,episode:p,videoRef:d,active:!S&&!ee&&!qe&&Y.length>0});const rn=s?zs(E||"tv",s):"",Q=rn,Ve=`${Q}:${m}:${p}:${N}:${$}`,sn=be(()=>!s||!r||S||w||ee||xe!==Ve||Y[Re]?.type!=="hls"?null:{kind:v?"movie":"tv",...v?{}:{season:m},showId:s,episode:String(v?1:p),provider:N,source:$,mode:"sub",title:r.title},[s,r,S,w,ee,xe,Ve,Y,Re,v,m,p,N,$]),dr=ro(h.engine,sn,ee||!r),ur=Eo(),Ln=No(),Ke=wo(),Ye=Ao(),{toggle:mr,bookmarkedIds:es,pending:ts}=xo(),{data:hr}=Io(r?rn:void 0),Dt=hr?!!hr.inLibrary:rn?es.has(rn):!1,ns=C(()=>{!r||!s||mr({tmdbId:Number(s),mediaType:E||"tv",title:r.title,poster:r.poster,year:r.year,adult:r.adult})},[r,s,E,mr]),{data:Qe,isFetched:Ot,isFetching:Bn}=Po(Q||void 0,m,p),on=be(()=>He.map(e=>e.episode_number).sort((e,n)=>e-n),[He]),zt=on.indexOf(p),$n=zt>0?on[zt-1]:null,M=zt>=0&&zt<on.length-1?on[zt+1]:null,an=be(()=>(r?.seasons??[]).map(e=>e.season_number).filter(e=>Number.isFinite(e)).sort((e,n)=>e-n),[r]),j=be(()=>{if(v||M!=null)return null;const e=an.indexOf(m);return e>=0&&e<an.length-1?an[e+1]:(r?.number_of_seasons??0)>m?m+1:null},[v,M,an,m,r?.number_of_seasons]),Dn=Ro(r?.status),dt=v||M==null&&j==null&&Dn,vr=M==null&&j==null&&!dt,Le=Qe?.currentTime??0,ln=H(null),[je,cn]=y(!1),[Tt,pr]=y(0),[Ft,fr]=y(!1),[ut,mt]=y(!1),[rs,On]=y(!1),[ss,os]=y(""),[dn,as]=y(!1),[is,zn]=y(!1),[Fn,Vn]=y(!1),{isTheaterMode:Ue,toggleTheaterMode:Un,handleLayoutClick:ls}=so(),br=Qe?.duration??0,gr=Qe?.completed===1,Vt=`${Q}:${m}:${p}`,[yr,cs]=y(null);_(()=>{Ot&&cs(e=>e?.key===Vt?e:{key:Vt,watched:gr||Kt(Le,br)})},[Ot,Vt,gr,Le,br]);const ds=Ot&&yr?.key===Vt&&yr.watched,[un]=y(Lo),[us,_r]=y(!1);_(()=>{_r(!1)},[Vt]);const Sr=!u&&!Ee&&ds&&!Fn,Ge=Sr&&un,ht=Sr&&!un&&!us,Xe=ut&&un,ms=ut&&!un,Tr=C(()=>{Vn(!0),mt(!1)},[]);_(()=>{const e=n=>{n.defaultPrevented||n.ctrlKey||n.metaKey||n.altKey||n.repeat||n.target.closest('input, textarea, button, select, a, [role="button"], [contenteditable="true"]')||n.key.toLowerCase()==="t"&&Un()};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[Un]),oo(h,(Y.length>0||Pt!=="")&&!Ue&&!je&&!ut&&!Ge&&!ht);const hs=Do(),[Ct,vs]=y(Bo),ps=C(e=>{vs(e),$o(e)},[]),fs=e=>t("div",{className:e,children:[t("button",{className:`${J.episodeNavBtn} ${J.secondary} ${Ct?f.autoplayActive:""}`,onClick:()=>ps(!Ct),type:"button","aria-pressed":Ct,children:Ct?"AUTOPLAY: ON":"AUTOPLAY: OFF"}),t("button",{className:`${J.episodeNavBtn} ${J.secondary}`,onClick:()=>Ln.mutate({mediaId:Q??"",season:m,episode:p}),disabled:Ln.isPending,type:"button",children:[t(oe,{name:"undo",size:14}),Ln.isPending?"Resetting...":"Reset Progress"]}),t("button",{className:`${J.episodeNavBtn} ${J.secondary}`,onClick:()=>$n!=null&&kt(String($n)),disabled:i||$n==null,type:"button",children:[t(oe,{name:"chevron-left",size:12}),"Prev EP"]}),t("button",{className:`${J.episodeNavBtn} ${J.primary}`,onClick:()=>M!=null&&kt(String(M)),disabled:i||M==null,type:"button",children:["Next EP",t(oe,{name:"chevron-right",size:12})]}),hs&&t("button",{className:`${J.episodeNavBtn} ${J.episodePickerBtn}`,onClick:()=>zn(!0),type:"button",children:[t(oe,{name:"list-ul",size:12}),"Episodes"]})]}),Je=H(!1),We=H(null),Wn=H(0),G=H(null),Cr=C(()=>{G.current=Le,Vn(!0),mt(!1)},[Le]),mn=H(""),bs=Fr(Le),Ut=!u&&!Je.current&&!Fn&&(je||ut||bs||Ge||ht),hn=H(Ut);hn.current=Ut;const vn=H(!1);_(()=>{vn.current=Ft},[Ft]);const Ze=C((e,n)=>{if(!Q||!n||n<30)return;const o=Kt(e,n);Math.abs(e-Wn.current)<10&&!o||(Wn.current=e,ur.mutate({mediaId:Q,season:m,episode:p,currentTime:Math.floor(e),duration:Math.floor(n),completed:o,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:E||"tv",adult:r?.adult?1:0}))},[Q,m,p,ur,r,E]),Be=C((e,n)=>{wn();const o=new URLSearchParams(b);o.set("type",b.get("type")||"tv"),o.set("s",String(e)),o.set("e",String(n)),L(`${window.location.pathname}?${o.toString()}`)},[b,L,wn]),Wt=C(()=>{const e=d.current;if(!e||v||M==null){On(!1);return}const n=e.duration||0,o=e.currentTime||0;On(n>0&&o/n>=.8)},[v,M,d]),pn=C((e,n)=>["tv-sources",N,v?"movie":"tv",s,e,n,$],[N,v,s,$]),fn=C(async(e,n)=>{if(!r||!s||!N)return{valid:!1,sources:[]};const o=v?"movie":"tv",c=await Et.tv.sources.query({provider:N,type:o,tmdbId:String(s),season:e,episode:n,title:r.title||"",year:r.year||"",totalSeasons:String(r.number_of_seasons||1),imdbId:r.imdb_id||"",...$?{server:$}:{}});return{valid:"valid"in c?c.valid:!1,error:"error"in c?c.error:void 0,sources:c.sources,referer:"referer"in c?c.referer:void 0,audioTracks:c.audioTracks,subtitles:"subtitles"in c?c.subtitles:void 0,servers:"servers"in c?c.servers:void 0,server:"server"in c?c.server:void 0,embedUrl:"embedUrl"in c?c.embedUrl:void 0}},[r,s,N,v,$]),kr=C(()=>{if(v||!r||!s||!N||S||M==null)return;const e=pn(m,M);O.getQueryState(e)?.status!=="success"&&O.prefetchQuery({queryKey:e,queryFn:()=>fn(m,M),staleTime:300*1e3,gcTime:1800*1e3})},[v,r,s,N,S,M,m,O,pn,fn]),gs=C(()=>{if(Ee)return;Wt();const e=d.current;!e||e.paused||e.ended||(e.duration>0&&e.duration-e.currentTime<=60&&kr(),!We.current&&(We.current=setTimeout(()=>{We.current=null,Ze(e.currentTime,e.duration||0)},5e3)))},[Ze,d,Ee,Wt,kr]),ys=C(()=>{const e=d.current;if(!(!e||!r)&&(We.current&&clearTimeout(We.current),We.current=null,Ze(e.currentTime,e.duration||0),!i)){if(M!=null){Ct&&(ie(M),Be(m,M));return}!v&&j==null&&!Dn||(os(v?r.title:`${r.title} - Season ${m}`),mt(!0),Je.current=!0)}},[v,r,m,M,j,Dn,Ct,Ze,Be,d,i]),{checkEnd:bn,logDuration:Er}=ao({videoRef:d,sourceType:S?"iframe":void 0,resetKey:`${Q}:${m}:${p}:${Fn}`,onEnd:ys}),_s=C(()=>{h.actions.onPlay()},[h.actions]),Ss=C(()=>{h.actions.onPause();const e=d.current;e&&!e.ended&&Ze(e.currentTime,e.duration||0)},[h.actions,Ze,d]),Ts=C(()=>{const e=d.current;if(e){try{const n=parseFloat(z.getItem("playerVolume")||"");isNaN(n)||(e.volume=Math.max(0,Math.min(1,n))),e.muted=z.getItem("playerMuted")==="true"}catch{}if(G.current!=null&&G.current>0){try{e.currentTime=G.current}catch{}G.current=null}Wt()}},[d,Wt]),Hn=C(()=>{const e=d.current;if(e&&G.current!=null&&G.current>0){try{e.currentTime=G.current}catch{}G.current=null}},[d]),Cs=C(()=>{Tt>0&&(G.current=Tt);const e=d.current;if(e&&Tt>0){try{e.currentTime=Tt,G.current=null}catch{}e.play().catch(()=>{})}cn(!1),Je.current=!0},[Tt,d]),Nr=C(()=>{G.current=null;const e=d.current;e&&(e.currentTime=0,e.play().catch(()=>{})),cn(!1),Je.current=!0},[d]),qn=C(()=>{M!=null&&(Je.current=!0,ie(M),Be(m,M))},[M,m,Be]),Kn=C(()=>{j!=null&&(mt(!1),Je.current=!0,Oe(j),ie(1),Be(j,1))},[j,Be]),Yn=C(async()=>{if(Q)try{Dt?await Ke.mutateAsync({id:Q,status:"Completed"}):r&&s&&(await Ye.mutateAsync({tmdbId:Number(s),mediaType:E||"tv",title:r.title,poster:r.poster,backdrop:r.backdrop,year:r.year,overview:r.overview,adult:r.adult,status:"Completed",silent:!0}),Or.success("Moved to Completed")),mt(!1),L("/")}catch{}},[Q,Dt,Ke,Ye,r,s,E,L]);_(()=>{Je.current=!1,ln.current=null,cn(!1),On(!1),pr(0),fr(!1),Vn(!1),vn.current=!1,G.current=null,Wn.current=0},[Q,m,p]),_(()=>{mn.current=Ve},[Ve]),_(()=>{Ot&&(fr(!0),vn.current=!0)},[Ot,Q,m,p]),_(()=>{if(u||Bn||!Qe||Je.current)return;const e=`${Q}:${m}:${p}`;if(ln.current===e)return;ln.current=e;const n=Qe,o=n.currentTime??0;Fr(o)&&n.completed!==1&&!Kt(o,n.duration??0)&&(pr(o),cn(!0))},[Qe,Bn,Q,m,p,u]),_(()=>{!u&&je&&d.current&&d.current.pause()},[je,d,u]),_(()=>{!u&&ht&&d.current&&d.current.pause()},[ht,d,u]),_(()=>{(Ge||ht||Xe)&&h.state.isFullscreen&&h.actions.toggleFullscreen()},[Ge,ht,Xe,h.state.isFullscreen,h.actions]),_(()=>{const e=d.current;return()=>{We.current&&clearTimeout(We.current),We.current=null,!e?.ended&&h.engine.getState().duration>0&&Ze(h.engine.getTimeline().currentTime,h.engine.getState().duration)}},[h.engine,Ze,d]);const Qn=C(e=>{let n=null,o=!0;try{n=z.getItem("tvLastSubtitle"),o=z.getItem("tvSubtitlesEnabled")!=="false"}catch{}return ir(e,{lastKey:n,enabled:o})},[]),jn=C(e=>{if(!(e<0))try{z.setItem("tvSubtitlesEnabled","true"),z.setItem("tvSelectedSubtitle",String(e))}catch{}},[]),wr=C(e=>{if(e.length===0)return 0;let n=null;try{n=z.getItem("tvLastAudio")}catch{}if(n){const o=e.findIndex(A=>sr(A)===n);if(o>=0)return o;const c=n.indexOf("|||"),l=c>=0?n.slice(0,c):n,g=c>=0?n.slice(c+3):n,R=e.findIndex(A=>A.language===l||A.label===g);if(R>=0)return R}return ir(e,{lastKey:null,enabled:!0})},[]),Ar=C(e=>{let n=null;try{n=z.getItem("tvLastQuality")}catch{}if(!n||e.length===0)return 0;const o=e.findIndex(A=>(A.quality||"")===n);if(o>=0)return o;const c=A=>{const K=/(\d{3,4})/.exec(A||"");return K?parseInt(K[1],10):0},l=c(n);if(!l)return 0;let g=0,R=1/0;return e.forEach((A,K)=>{const T=c(A.quality),U=Math.abs(T-l);T>0&&U<R&&(R=U,g=K)}),g},[]),{data:xr}=Mo(Q||void 0),Ir=be(()=>(xr?.progress??[]).filter(n=>n.season===m&&(n.completed===1||Kt(n.currentTime,n.duration))).map(n=>String(n.episode)),[xr,m]),Pr=be(()=>He.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})),[He]),Mr=be(()=>(r?.genres??[]).map(e=>e.name).slice(0,5),[r]),Rr=be(()=>{const e=ae??r?.next_episode_to_air??null;if(!e||!e.air_date)return null;const n=new Date(`${e.air_date}T00:00:00`);if(isNaN(n.getTime()))return null;const o=n.toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"}),c=`Next episode: S${e.season_number} E${e.episode_number} · ${o}`,l=e.air_timestamp;if(typeof l!="number"||l<=0)return c;let g=Math.floor((l-we)/1e3);if(g<=0)return null;const R=Math.floor(g/86400);g%=86400;const A=Math.floor(g/3600);g%=3600;const K=Math.floor(g/60),T=g%60,U=`${R}d ${A}h ${String(K).padStart(2,"0")}m ${String(T).padStart(2,"0")}s`;return`${c} · in ${U}`},[ae,r,we]),Gn=be(()=>[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,Rr].filter(Boolean),[r,Rr]);_(()=>{if(!i&&de.length!==0&&!de.some(e=>e.id===N)){const e=de.find(n=>n.tier==="direct")?.id??de[0].id;ft(e);try{z.setItem("tvProvider",e)}catch{}}},[de,N,i]),_(()=>{Mt([]),Xt(""),lt(""),_t(!1)},[N]),_(()=>{if(!i&&ve.length!==0&&!ve.includes($)){me(ve[0]);try{z.setItem("tvServer",ve[0])}catch{}}},[ve,$,i]),_(()=>{if(!s){B(null),Se([]),Ie(""),ne(""),it("");return}const e=Number(s),n=E||"tv";B(null),Se([]),Ie(""),ne(""),it("");const o=parseInt(V.current.get("s")||"",10),c=parseInt(V.current.get("e")||"",10);Oe(isNaN(o)?1:o),ie(isNaN(c)?1:c),at(0),Et.tv.details.query({type:n,id:String(e)}).then(l=>{const g={id:l.id,title:l.title||"",overview:l.overview||"",vote_average:l.vote_average,year:l.year,poster:l.poster,backdrop:l.backdrop,imdb_id:l.imdb_id||void 0,adult:l.adult,status:l.status,in_production:l.in_production,seasons:l.seasons,number_of_seasons:l.number_of_seasons,number_of_episodes:l.number_of_episodes,first_air_date:l.first_air_date,last_air_date:l.last_air_date,next_episode_to_air:l.next_episode_to_air,last_episode_to_air:l.last_episode_to_air};if(B(g),te(null),g.seasons&&g.seasons.length>0&&isNaN(o)){const R=g.seasons.find(A=>A.season_number===1)?.season_number??g.seasons[0].season_number;Oe(R)}}).catch(()=>{})},[s,E]),_(()=>{if(!r||!s)return;if(!(r.seasons!==void 0||r.number_of_seasons!==void 0)){st([]);return}const n=parseInt(b.get("e")||"",10);te(null),Et.tv.episodes.query({id:String(s),season:String(m)}).then(o=>{const c=(o.episodes||[]).map(l=>({episode_number:l.episode_number,name:l.name||"",vote_average:l.vote_average,overview:l.overview||"",still_path:l.still_path||""}));st(c),te(o.nextAiring??null),c.length!==0&&ie(l=>!isNaN(n)&&c.some(g=>g.episode_number===n)?n:c.some(g=>g.episode_number===l)?l:c[0].episode_number)}).catch(()=>{})},[r,s,m,b]),_(()=>{if(!S||!r||!s)return;rr(`/api/tv/embed/${N}/${v?"movie":"tv"}/${s}?season=${m}&episode=${p}`).then(n=>{if(n.url)return it(n.url),rr(`/api/resolve?url=${encodeURIComponent(n.url)}`).then(o=>{o.finalUrl&&it(o.finalUrl)})}).catch(()=>{})},[N,r,s,m,p,v,S]);const gn=C(async()=>{if(!r||!s||!N||S||r.adult&&!$t)return;const e=Ve;Te(!0),ne(""),re.current.length===0&&(Se([]),at(0),Gt([]),ot([]));try{const n=await O.fetchQuery({queryKey:pn(m,p),queryFn:()=>fn(m,p),staleTime:3e5,gcTime:18e5});if(mn.current!==e)return;if(Te(!1),!n.valid||!n.sources?.length){ne(n.error?`${n.error}`:ve.length>0?`No streams from ${$}. Try another server.`:"No streams available.");return}if(u&&$&&n.server&&n.server!==$){Se([]),ne("The host's selected server is unavailable. Automatic source switching is disabled in watch-along rooms.");return}!i&&!$&&n.server&&me(n.server);const o=u?n.sources.filter(A=>A.type==="hls"):n.sources;if(u&&o.length===0){Se([]),ne("The room requires a direct HLS source. No compatible stream is available here.");return}Se(o),wt(n.server||$),Ie(e),n.servers?.length&&Mt(n.servers),n.embedUrl&&Xt(n.embedUrl),at(Ar(o)),n.referer&&kn(n.referer);const c=n.audioTracks||[];Gt(c),bt(c.length>0?wr(c):0);const l=n.subtitles||[];if(ot(l),l.length>0){const A=Qn(l);Me(A),jn(A)}else Me(-1);const g=v?"movie":"tv",R=s;Et.tv.subtitles.query({type:g,tmdbId:String(R),season:String(m),episode:String(p)}).then(A=>{if(mn.current!==e)return;const K=Array.isArray(A.subtitles)?A.subtitles:[];K.length!==0&&ot(T=>{const U=[...T,...K.filter(X=>!T.some(W=>W.url===X.url))];if(T.length===0){const X=Qn(U);Me(X),jn(X)}return U})}).catch(()=>{}),ne("")}catch(n){if(mn.current!==e)return;Te(!1),ne(n instanceof Error?n.message:"Failed to load streams.")}},[r,s,N,m,p,v,S,$t,ve,$,Qn,jn,wr,Ar,O,pn,fn,Ve,u,i]),Xn=C(()=>{const e=d.current;e&&!isNaN(e.currentTime)&&(G.current=e.currentTime)},[d]),ks=C(e=>{if(!(i||u&&e==="Embed")){if(e==="Embed"){_t(!0);return}Xn(),_t(!1),me(e);try{z.setItem("tvServer",e)}catch{}ne("")}},[Xn,i,u]),Es=C(e=>{ft(e);try{z.setItem("tvProvider",e)}catch{}},[]);_(()=>{N&&r&&!S&&gn()},[N,r,gn,S]),_(()=>{if(Ge){h.engine.unload();return}if(!d.current)return;if(ke.current=null,S||w||u&&Y[Re]?.type!=="hls"){h.engine.unload();return}if(Ee&&!u)return h.engine.loadSource({url:"/av-sync-test.mp4"},{autoPlay:!hn.current});if(nn.current!=null&&(G.current=nn.current,nn.current=null),xe===Ve&&G.current==null&&!hn.current)try{const T=d.current;T&&!T.ended&&T.currentTime>1&&(G.current=T.currentTime)}catch{}const n=G.current??0,o=!ee&&xe===Ve?w?"":Y[Re]?.url||"":"";if(!o){try{d.current?.pause(),d.current?.removeAttribute("src"),d.current?.load()}catch{}return}const c=d.current;c.pause(),c.removeAttribute("src"),c.load(),h.actions.resetMediaState();const l=`/api/tv/stream-proxy?url=${encodeURIComponent(o)}&referer=${encodeURIComponent(gt)}&provider=${encodeURIComponent(N)}`,g=Ma()||document.body.classList.contains("low-end"),R=g?60:180,A=h.engine.loadSource({url:l,hls:Y[Re]?.type==="hls"},{hlsConfig:{enableWorker:!0,lowLatencyMode:!1,startPosition:n>0?n:-1,maxBufferLength:R,maxMaxBufferLength:R+(g?30:60),backBufferLength:g?30:60,maxBufferSize:(g?120:360)*1e3*1e3,fragLoadPolicy:{default:{maxTimeToFirstByteMs:15e3,maxLoadTimeMs:45e3,timeoutRetry:{maxNumRetry:2,retryDelayMs:0,maxRetryDelayMs:0},errorRetry:{maxNumRetry:3,retryDelayMs:800,maxRetryDelayMs:6e3}}},manifestLoadPolicy:{default:{maxTimeToFirstByteMs:1e4,maxLoadTimeMs:25e3,timeoutRetry:{maxNumRetry:1,retryDelayMs:500,maxRetryDelayMs:2e3},errorRetry:{maxNumRetry:2,retryDelayMs:800,maxRetryDelayMs:4e3}}}},onHls:(T,U)=>{ke.current=T;const X=()=>{let F=!1,D=0;try{F=z.getItem("tvSubtitlesEnabled")==="true";const x=parseInt(z.getItem("tvSelectedSubtitle")||"0",10);!isNaN(x)&&x>=0&&(D=x)}catch{}return{enabled:F,index:D}},W=()=>{if(typeof T.subtitleTrack!="number")return;if(pe.current.length>0){T.subtitleTrack=-1;return}const F=Array.isArray(T.subtitleTracks)?T.subtitleTracks:[];if(F.length===0){T.subtitleTrack=-1;return}const D=X();if(D.enabled){const x=D.index<F.length?D.index:0;T.subtitleTrack=x,Me(x),Rn()}else T.subtitleTrack=-1};Ia(T,U.Events,{getWant:()=>Rt.current,onResolve:F=>bt(F)}),T.on(U.Events.MANIFEST_PARSED,W),T.on(U.Events.SUBTITLE_TRACKS_UPDATED,()=>{W()}),T.on(U.Events.SUBTITLE_TRACK_SWITCH,(F,D)=>{if(pe.current.length>0){if(D.id!==-1)try{T.subtitleTrack=-1}catch{}return}const x=Array.isArray(T.subtitleTracks)?T.subtitleTracks:[];if(x.length!==0){if(D.id===-1){const Ne=X();if(Ne.enabled){const se=Ne.index<x.length?Ne.index:0;T.subtitleTrack=se;return}}Me(D.id),Rn()}})},onReady:()=>{(n>0||!hn.current&&vn.current)&&h.engine.play()},onError:T=>{ne(T.message),Te(!1),ke.current=null}}),K=()=>{const X=c.error?.code===4?"Video source not supported or not found":"Failed to load video stream";ne(`${X}. The source may be invalid or expired. Try switching source or reloading.`),Te(!1)};return c.addEventListener("error",K),()=>{A(),ke.current=null,c.removeEventListener("error",K)}},[Y,xe,ee,Re,N,gt,S,w,d,nn,Ee,Q,m,p,Hn,Rn,h.actions,h.engine,Ve,u,Ge]),_(()=>{if(i||!Ft||je||ut||Ut||S||Ee)return;const e=d.current;!e||!e.paused||e.ended||e.readyState<1||(Hn(),h.engine.play())},[Ft,je,ut,Ut,S,Ee,Hn,d,i,h.engine]),_(()=>{const e=ke.current;!e||typeof e.audioTrack!="number"||(e.audioTrack=ze)},[ze]),_(()=>{const e=ke.current;!e||typeof e.subtitleTrack!="number"||!Array.isArray(e.subtitleTracks)||e.subtitleTracks.length===0||pe.current.length>0||(ue>=0?e.subtitleTrack=ue:e.subtitleTrack=-1)},[ue]),_(()=>{const e=d.current;if(!(!e||S)&&(e.querySelectorAll("track").forEach(n=>n.remove()),pe.current=[],Pe.length!==0&&(Pe.forEach(n=>{const o=document.createElement("track");o.kind="subtitles",o.label=n.label||n.language||"Unknown",o.srclang=n.language||n.label||"en";const c=`/api/subtitle-proxy?url=${encodeURIComponent(n.url)}&referer=${encodeURIComponent(gt)}`;o.src=c,o.addEventListener("load",()=>{const l=pe.current.indexOf(o),g=o.track;if(g&&l>=0){const R=l===Lt.current;g.mode=R&&!Mn.current?"showing":"hidden"}}),e.appendChild(o),pe.current.push(o)}),Pe.length>0)))try{const n=ke.current;n&&typeof n.subtitleTrack=="number"&&n.subtitleTrack!==-1&&(n.subtitleTrack=-1)}catch{}},[Pe,gt,S,N,$,d]),_(()=>{const e=d.current;if(!e||S)return;const n=ke.current;pe.current.length>0&&n&&typeof n.subtitleTrack=="number"&&Array.isArray(n.subtitleTracks)&&n.subtitleTracks.length>0&&(n.subtitleTrack=-1);const o=()=>{const g=lr(h.state.subtitleFontSize,e.clientHeight||720),R=Math.max(0,Math.min(100,100-h.state.subtitlePosition)),A=()=>{const W=g*16,F=e.videoHeight||e.clientHeight||720,D=e.videoWidth||e.clientWidth||1280;return{step:W*1.3/F*100,chars:Math.max(20,Math.floor(D/(W*.55)))}},K=(W,F)=>{const D=W;D.snapToLines=!1,D.line=F},T=W=>{if(!W.cues)return;Array.from(W.cues).forEach(se=>K(se,R));const F=Array.from(W.activeCues??[]);if(F.length<=1){F.forEach(se=>K(se,R));return}const{step:D,chars:x}=A();let Ne=R;for(let se=F.length-1;se>=0;se--){const et=String(F[se].text??"").replace(/<[^>]*>/g,"").split(`
|
|
3
|
+
`).reduce((_n,Ht)=>_n+Math.max(1,Math.ceil(Ht.length/x)),0);Ne=Math.max(0,Ne-et*D),K(F[se],Ne),Ne-=D*.4}},U=pe.current;if(U.length>0){U.forEach((W,F)=>{const D=W.track;if(!D)return;const x=F===ue;D.mode=x&&!_e?"showing":"hidden",x&&!_e&&T(D)});return}const X=Array.from(e.textTracks);X.length!==0&&X.forEach((W,F)=>{const D=F===ue;W.mode=D&&!_e?"showing":"hidden",D&&!_e&&T(W)})};o();const c=()=>o();e.textTracks.addEventListener("addtrack",c),e.addEventListener("loadedmetadata",o,{once:!0});const l=window.setTimeout(o,600);return()=>{e.textTracks.removeEventListener("addtrack",c),e.removeEventListener("loadedmetadata",o),window.clearTimeout(l)}},[ue,Pe,S,N,d,_e,h.state.subtitleFontSize,h.state.subtitlePosition]),_(()=>{if(!_e)return;const e=d.current,n=en.current;if(!e||!n)return;const o=St/1e3,c=An/1e3,l=new Set;let g=[],R=-1,A=-1,K=-1,T=-1,U=0,X=0,W=!1;const F=()=>{const q=Lt.current;if(q<0)return null;const tt=pe.current;return tt.length>0?tt[q]?.track??null:Array.from(e.textTracks)[q]??null},D=(q,tt)=>{const fe=q.cues;if(!fe||fe.length===0)return Array.from(q.activeCues??[]);let vt=0,pt=fe.length;for(;vt<pt;){const $e=vt+pt>>>1;fe[$e].endTime+o<tt?vt=$e+1:pt=$e}const qt=[];for(let $e=vt;$e<fe.length;$e++){const Sn=fe[$e];if(Sn.startTime+o>tt)break;Sn.endTime+o>=tt&&qt.push(Sn)}return qt},x=()=>{const q=F(),tt=e.currentTime-c,fe=q?D(q,tt):[],vt=e.clientWidth,pt=e.clientHeight,qt=e.videoWidth,$e=e.videoHeight;if(fe.length===g.length&&fe.every((er,tr)=>er===g[tr])&&vt===R&&pt===A&&qt===K&&$e===T||(g=fe,R=vt,A=pt,K=qt,T=$e,n.textContent="",fe.length===0))return;const $r={fontSize:lr(h.state.subtitleFontSize,pt),position:h.state.subtitlePosition,bgOpacity:h.state.subtitleBgOpacity,bgColor:h.state.subtitleBgColor,textColor:h.state.subtitleTextColor,edge:h.state.subtitleEdge,bold:h.state.subtitleBold},xs=io($r),Is=lo(e,$r.position);fe.forEach((er,tr)=>{const Dr=String(er.text??"");if(!co(Dr).trim())return;const nr=document.createElement("div"),Ps=(fe.length-1-tr)*1.7;nr.style.cssText=`${xs}
|
|
4
|
+
bottom: calc(${Is}px + ${Ps}em);`,nr.innerHTML=uo(Dr),n.appendChild(nr)})},Ne=()=>{Array.from(e.textTracks).forEach(q=>{l.has(q)||(l.add(q),q.addEventListener("cuechange",x))})},se=()=>{Ne(),x()},Zn=()=>{if(W||X)return;const q=()=>{X=0,!(W||e.paused||e.ended)&&(x(),Zn())};X=window.requestAnimationFrame(q)},et=e,_n=()=>{U=0,x(),!W&&et.requestVideoFrameCallback&&(U=et.requestVideoFrameCallback(_n))},Ht=()=>{x(),et.requestVideoFrameCallback?U||(U=et.requestVideoFrameCallback(_n)):Zn()};Ne(),e.textTracks.addEventListener("addtrack",se),e.textTracks.addEventListener("removetrack",se),e.addEventListener("timeupdate",x),e.addEventListener("seeked",x),e.addEventListener("loadedmetadata",x),e.addEventListener("play",Ht);const Lr=Array.from(e.querySelectorAll("track"));Lr.forEach(q=>q.addEventListener("load",x));const Br=typeof ResizeObserver>"u"?null:new ResizeObserver(()=>x());return Br?.observe(e),x(),Ht(),()=>{W=!0,l.forEach(q=>q.removeEventListener("cuechange",x)),e.textTracks.removeEventListener("addtrack",se),e.textTracks.removeEventListener("removetrack",se),e.removeEventListener("timeupdate",x),e.removeEventListener("seeked",x),e.removeEventListener("loadedmetadata",x),e.removeEventListener("play",Ht),Lr.forEach(q=>q.removeEventListener("load",x)),Br?.disconnect(),X&&window.cancelAnimationFrame(X),U&&et.cancelVideoFrameCallback&&et.cancelVideoFrameCallback(U),n.textContent=""}},[_e,St,ue,Pe,An,d,h.state.subtitleFontSize,h.state.subtitlePosition,h.state.subtitleBgOpacity,h.state.subtitleBgColor,h.state.subtitleTextColor,h.state.subtitleEdge,h.state.subtitleBold]);const Jn=()=>{B(null),Se([]),it(""),L(-1)},Ns=C(e=>{i||(Oe(e),ie(1),Be(e,1))},[Be,i]),yn=!v&&r?.seasons&&r.seasons.length>1?t("label",{className:f.sidebarSeason,children:[t("span",{children:"Season"}),t("select",{disabled:i,value:m,onChange:e=>Ns(parseInt(e.currentTarget.value,10)||1),className:f.select,children:r.seasons.map(e=>t("option",{value:e.season_number,children:[e.season_number===0?"Specials":`Season ${e.season_number}`," (",e.episode_count," ","ep)"]},e.season_number))})]}):null,kt=C(e=>{if(i)return;const n=parseInt(e,10);if(!isNaN(n)){try{d.current?.pause()}catch{}ie(n),Be(m,n)}zn(!1)},[m,Be,d,i]);_(()=>{if(v)return;const e=n=>{n.target.closest('input, textarea, button, select, a, [role="button"], [contenteditable="true"]')||n.key.toLowerCase()==="n"&&(M!=null?kt(String(M)):Or.error("No next episode available"))};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[v,M,kt]);const ws=e=>{bt(e);try{const o=jt[e];o&&z.setItem("tvLastAudio",sr(o))}catch{}const n=ke.current;n&&n.audioTrack!==void 0&&(n.audioTrack=e)},As=e=>{Me(e);try{if(e===-1)z.setItem("tvSubtitlesEnabled","false");else{z.setItem("tvSubtitlesEnabled","true"),z.setItem("tvSelectedSubtitle",String(e));const l=Pe[e];l&&z.setItem("tvLastSubtitle",sr(l))}}catch{}const n=d.current,o=ke.current;if(o&&typeof o.subtitleTrack=="number"&&Array.isArray(o.subtitleTracks)&&o.subtitleTracks.length>0&&(o.subtitleTrack=pe.current.length>0||e<0?-1:e),!n)return;const c=pe.current;if(c.length>0){c.forEach((l,g)=>{const R=l.track;if(!R)return;const A=g===e;R.mode=A&&!_e?"showing":"hidden"});return}Array.from(n.textTracks).forEach((l,g)=>{const R=g===e;l.mode=R&&!_e?"showing":"hidden"})};return _(()=>{if(!r){document.title="TV & Movies - dango";return}document.title=v?`${r.title} - dango`:`${r.title} - Season ${m} Episode ${p} - dango`},[r,v,m,p]),_(()=>{if(!r||v)return;const e=new URLSearchParams(b),n=e.get("s"),o=e.get("e"),c=String(m),l=String(p);n===c&&o===l||(e.set("type",b.get("type")||"tv"),e.set("s",c),e.set("e",l),L(`${window.location.pathname}?${e.toString()}`,{replace:!0}))},[r,v,m,p,b,L]),t("div",{className:`${De.playerPageLayout} ${Ue?De.theaterMode:""} ${v?De.noSidebar:""}`,onClick:ls,children:[Ue&&t(mo,{videoRef:d,active:Pn.enabled&&!S&&Y.length>0&&!qe&&!(r?.adult&&!$t),settings:Pn}),!Ue&&!v&&t("aside",{className:De.episodeSidebar,children:r?t(ho,{episodes:Pr,currentEpisode:String(p),watchedEpisodes:Ir,onEpisodeClick:kt,header:yn}):t(vo,{variant:"sidebar"})}),t("div",{className:De.playerMain,children:[r&&t("div",{className:f.playerSection,onContextMenu:e=>e.preventDefault(),style:r.adult&&!$t?{filter:"blur(14px)",pointerEvents:"none",userSelect:"none"}:void 0,children:S&&Pt&&!u?t("iframe",{src:Pt,className:f.videoIframe,allow:"autoplay; fullscreen",allowFullScreen:!0}):!S&&Z&&!u?t("iframe",{src:Z,className:f.videoIframe,allow:"autoplay; fullscreen",allowFullScreen:!0}):!S&&(Y.length>0||ee)?t(nt,{children:[qe&&t(Ur,{error:qe,onRetry:gn}),t(Na,{player:h,title:r.title,episodeLabel:v?void 0:`S${m} E${p}`,server:le||Fe?.label||N,audioTracks:jt,selectedAudioTrack:ze,onAudioTrackChange:ws,subtitles:Pe,selectedSubtitle:ue,onSubtitleChange:As,streams:Y,resolutionIdx:Re,onResolutionChange:e=>{Xn(),at(e);try{const n=Y[e]?.quality;n&&z.setItem("tvLastQuality",n)}catch{}},onBack:Jn,videoDelayEnabled:Nn,onVideoDelayToggle:Hr,videoDelayMs:tn,onVideoDelayChange:cr,onCalibrateAvSync:u?void 0:Kr,subtitleDelayMs:St,onSubtitleDelayChange:Xr,showNextEpisodeButton:!i&&rs&&!je&&!ut,onNextEpisode:qn,isLoading:ee,isTheaterMode:Ue,onTheaterModeToggle:Un,ambientSettings:Pn,onAmbientChange:Jr,hideChrome:Ge||Xe,children:t(nt,{children:[t(Ks,{autoPlay:!u&&Ft&&!Ut,playsInline:!0,disablePictureInPicture:!0,className:`${f.video} ${In?f.videoHidden:""}`,onTimeUpdate:()=>{Ee||(gs(),bn())},onEnded:()=>{Ee||bn(!0)},onPlay:_s,onPause:Ss,onSeeked:()=>{Ee||(Wt(),bn())},onLoadedMetadata:()=>{Ts(),Er(),bn()},onDurationChange:()=>{Er()},onContextMenu:e=>e.preventDefault(),onError:()=>{ne("Video failed to load. Try another server or reload."),Te(!1)}}),t("canvas",{ref:Bt,className:`${f.delayCanvas} ${In?f.delayCanvasActive:""}`}),_e&&t("div",{ref:en,className:f.subtitleOverlay}),t(po,{isOpen:qr,ms:tn,onChange:cr,onApply:Qr,onClose:Yr,testClipActive:Ee,onTestClip:jr}),(Ge||Xe)&&t("div",{className:f.watchedOverlay,children:[t(oe,{name:"check-circle",size:48,style:{color:"var(--accent-lighter)"}}),t("p",{className:f.watchedTitle,children:Xe||dt?j!=null?"Season Complete!":v?"Movie Completed!":"Show Completed!":v?"Movie watched":`S${m} E${p} watched`}),t("p",{className:f.watchedSubtext,children:Xe||dt?j!=null?`You finished Season ${m}.`:v?"You finished this movie!":"Congratulations! You finished all available episodes.":"Resume where you left off, replay from the beginning, or continue with the next episode."}),t("div",{className:`${f.watchedActions} ${Xe?f.watchedActionsCentered:""}`,children:[t("div",{children:Le>5&&!Xe&&t(ge,{variant:vr?void 0:"secondary",onClick:Cr,children:`Resume ${Yt(Le)}`})}),t("div",{children:M!=null?t(ge,{onClick:qn,children:`Watch EP ${M}`}):j!=null?t(ge,{onClick:Kn,children:`Start Season ${j}`}):null}),t("div",{children:[t(ge,{variant:"secondary",onClick:Tr,children:"Replay"}),dt&&t(ge,{onClick:Yn,disabled:Ke.isPending||Ye.isPending,children:Ke.isPending||Ye.isPending?"Saving...":"Move to Completed"})]})]})]})]})})]}):qe&&!S?t(Ur,{error:qe,onRetry:gn}):null}),t(zo,{playback:sn?{selection:sn,position:d.current?.currentTime||0,playing:!1,rate:h.engine.getState().playbackRate}:null,onCreate:()=>{wn(),h.engine.pause()},needsPlayback:dr.needsPlayback,onEnablePlayback:dr.enablePlayback}),u&&!ee&&r&&!sn&&t("p",{role:"alert",children:"The host's direct HLS source is unavailable here. Retry or leave the room to use another source."}),!Ue&&r&&t(fo,{}),!Ue&&yn&&t("div",{className:f.mobileSeasonRow,children:yn}),!Ue&&r&&t("div",{className:J.streamPanel,children:[t("div",{className:f.providerRow,children:[t("label",{className:f.controlLabel,children:["Provider",t("select",{value:N,onChange:e=>Es(e.currentTarget.value),className:f.select,disabled:i||de.length===0,children:Qt?t("option",{value:"",children:"Loading..."}):de.length===0?t("option",{value:"",children:"No providers available"}):t(nt,{children:[xt.length>0&&t("optgroup",{label:"Direct HLS",children:xt.map(e=>t("option",{value:e.id,children:e.label},e.id))}),It.length>0&&t("optgroup",{label:"Embeds",children:It.map(e=>t("option",{value:e.id,children:e.label},e.id))})]})})]}),!v&&fs(f.providerActions)]}),!i&&!S&&(ee?t("div",{className:f.sourceLoader,children:t("div",{className:f.ringSpinner})}):t(Aa,{servers:Zt,selectedServer:ct?"Embed":$,onServerSelect:ks}))]}),!Ue&&r&&t("div",{className:De.playerInfoContainer,children:[t("div",{className:De.playerInfoHeader,children:[t("div",{className:De.playerAnimeCard,children:r.poster&&t(Fs,{src:`https://image.tmdb.org/t/p/w342${r.poster}`,alt:r.title,loading:"lazy",decoding:"async"})}),t("div",{className:De.videoTitleSection,children:[t("div",{className:J.titleContainer,children:[t("h1",{children:r.title}),t("div",{className:f.meta,children:[t("span",{className:f.year,children:r.year}),r.vote_average!=null&&r.vote_average>0&&t("span",{className:f.rating,children:[t(oe,{name:"star",size:12}),Number(r.vote_average).toFixed(1)]}),t("span",{className:`${f.typeBadge} ${f[v?"movie":"tv"]}`,children:v?"Movie":"TV Show"})]}),Mr.length>0&&t("div",{className:f.genreRow,children:Mr.map(e=>t("span",{className:f.genreChip,children:e},e))}),Gn.length>0&&t("div",{className:f.metaRow,children:Gn.map((e,n)=>t("span",{children:[e,n<Gn.length-1?" · ":""]},`${e}-${n}`))})]}),t("div",{className:J.controls,children:t("button",{className:`${J.watchlistBtn} ${Dt?J.inList:""}`,onClick:ns,disabled:ts,type:"button",children:[Dt?t(oe,{name:"check",size:14}):t(oe,{name:"plus",size:14}),Dt?"In Watchlist":"Add to Watchlist"]})})]})]}),t("div",{className:De.infoColumns,children:[t("div",{className:`${J.descriptionSection} ${J.synopsisFlat}`,children:[t("h3",{children:"Synopsis"}),t(Oo,{text:r.overview,emptyText:"No description available."}),t("button",{className:J.detailsToggleBtn,onClick:()=>as(!dn),type:"button",children:[dn?t(oe,{name:"chevron-up"}):t(oe,{name:"chevron-down"}),dn?"Hide Details":"Show Details"]})]}),dn&&t("div",{className:f.detailGrid,children:[r.first_air_date&&t("div",{className:f.detailItem,children:[t("strong",{children:v?"Release Date":"First Air Date"}),t("span",{children:r.first_air_date})]}),r.last_air_date&&t("div",{className:f.detailItem,children:[t("strong",{children:"Last Air Date"}),t("span",{children:r.last_air_date})]}),r.networks&&r.networks.length>0&&t("div",{className:f.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:f.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:f.detailItem,children:[t("strong",{children:"Episode Runtime"}),t("span",{children:[r.episode_run_time[0]," min"]})]}),r.imdb_id&&t("div",{className:f.detailItem,children:[t("strong",{children:"IMDb"}),t("a",{href:`https://www.imdb.com/title/${r.imdb_id}`,target:"_blank",rel:"noopener noreferrer",className:f.imdbLink,children:"View on IMDb"})]})]})]})]}),!v&&t(bo,{isOpen:is,onClose:()=>zn(!1),episodes:Pr,currentEpisode:String(p),watchedEpisodes:Ir,onEpisodeClick:kt,header:yn}),r?.adult&&!$t&&t(Co,{isOpen:!0,onClose:Jn,onGrant:Zr}),t(go,{isOpen:!u&&je&&!Bn&&ln.current===`${Q}:${m}:${p}`&&Qe?.completed!==1&&!Kt(Le,Qe?.duration??0),onClose:Nr,title:"Resume Watching",message:t(nt,{children:["You were at ",t("strong",{children:Yt(Tt)})]}),restartLabel:"Start from Beginning",onResume:Cs,onRestart:Nr}),t(zr,{isOpen:ht,onClose:()=>_r(!0),title:dt?v?"Movie Completed!":"Show Completed!":"Episode Completed",heading:v?r?.title??"Movie":`S${m} E${p}`,message:dt?v?"You finished this movie!":"Congratulations! You finished all available episodes.":v?"You've already watched this movie. Resume where you left off or replay it.":"You've already watched this episode. Resume where you left off, replay it, or continue with the next episode.",children:[Le>5&&t(ge,{variant:vr?void 0:"secondary",onClick:Cr,children:`Resume ${Yt(Le)}`}),t(ge,{variant:"secondary",onClick:Tr,children:"Replay"}),M!=null?t(ge,{onClick:qn,children:["Watch EP ",M]}):j!=null?t(ge,{onClick:Kn,children:["Start Season ",j]}):dt?t(ge,{onClick:Yn,disabled:Ke.isPending||Ye.isPending,children:Ke.isPending||Ye.isPending?"Saving...":"Move to Completed"}):null]}),t(zr,{isOpen:ms,onClose:()=>mt(!1),title:v?"Movie Completed!":j!=null?"Season Complete!":"Show Completed!",heading:ss,message:v?"You finished this movie!":j!=null?`You finished Season ${m}.`:"Congratulations! You finished all available episodes.",children:j!=null?t(ge,{onClick:Kn,children:["Start Season ",j]}):t(nt,{children:[t(ge,{onClick:()=>{mt(!1),Jn()},children:"Back to Details"}),t(ge,{onClick:Yn,disabled:Ke.isPending||Ye.isPending,children:Ke.isPending||Ye.isPending?"Saving...":"Move to Completed"})]})}),!r&&t("div",{className:f.statusMsg,children:[t(oe,{name:"spinner",className:f.spinner})," Loading..."]})]})]})};export{Li as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{o as R,a as q,p as E,d as c,h as C,T,u as e,g as F}from"./vendor-core-DfaOB3Rn.js";import{I as a}from"./vendor-icons-C1Pj_eSX.js";import{aj as j,e as U,ak as H,t as J,B as w,a8 as K,i as I}from"./index-CANVdkPZ.js";import{c as Q,d as X}from"./useTvLibrary-DHDmFDvV.js";import"./vendor-query-BBT5_sHx.js";import"./libraryInvalidation-DbrKjF5Q.js";const Y="_container_198yg_1",Z="_heroSection_198yg_11",ee="_bannerContainer_198yg_17",ne="_banner_198yg_17",te="_bannerOverlay_198yg_37",se="_heroContent_198yg_49",ae="_posterContainer_198yg_62",oe="_poster_198yg_62",ie="_infoGlass_198yg_86",re="_title_198yg_100",le="_quickMeta_198yg_110",ce="_metaItem_198yg_118",de="_iconStar_198yg_126",_e="_iconTv_198yg_130",me="_iconType_198yg_134",he="_genres_198yg_139",ge="_genre_198yg_139",ve="_metaRow_198yg_156",pe="_metaValue_198yg_164",ue="_metaDivider_198yg_168",ye="_synopsisSection_198yg_173",ke="_sectionTitleSmall_198yg_179",be="_synopsis_198yg_173",Ne="_actions_198yg_196",Se="_watchBtn_198yg_202",fe="_watchlistBtn_198yg_226",Ce="_active_198yg_250",Te="_seasonPickerLabel_198yg_256",we="_seasonSelect_198yg_267",Ie="_detailsToggleBtn_198yg_286",Be="_expandedContent_198yg_304",De="_detailGrid_198yg_309",Me="_detailItem_198yg_315",Le="_imdbLink_198yg_333",Pe="_heroSkeleton_198yg_343",$e="_skeletonBanner_198yg_347",Ge="_skeletonContent_198yg_354",xe="_skeletonPoster_198yg_365",Oe="_skeletonInfo_198yg_373",Ae="_skeletonTitle_198yg_380",Ve="_skeletonMeta_198yg_388",We="_skeletonDesc_198yg_396",ze="_skeletonActions_198yg_404",Re="_errorState_198yg_413",qe="_matureOverlay_198yg_434",Ee="_matureContent_198yg_444",n={container:Y,heroSection:Z,bannerContainer:ee,banner:ne,bannerOverlay:te,heroContent:se,posterContainer:ae,poster:oe,infoGlass:ie,title:re,quickMeta:le,metaItem:ce,iconStar:de,iconTv:_e,iconType:me,genres:he,genre:ge,metaRow:ve,metaValue:pe,metaDivider:ue,synopsisSection:ye,sectionTitleSmall:ke,synopsis:be,actions:Ne,watchBtn:Se,watchlistBtn:fe,active:Ce,seasonPickerLabel:Te,seasonSelect:we,detailsToggleBtn:Ie,expandedContent:Be,detailGrid:De,detailItem:Me,imdbLink:Le,heroSkeleton:Pe,skeletonBanner:$e,skeletonContent:Ge,skeletonPoster:xe,skeletonInfo:Oe,skeletonTitle:Ae,skeletonMeta:Ve,skeletonDesc:We,skeletonActions:ze,errorState:Re,matureOverlay:qe,matureContent:Ee};function Qe(){const{id:o}=R(),d=q(),[B]=E(),i=j(B.get("type")),{hasConsent:D}=U(),[t,M]=c(null),[L,m]=c(!0),[u,y]=c(""),[_,P]=c(!1),[h,$]=c(1),G=H(i,o??""),x=Number(o),{data:O}=Q(t?G:void 0),g=!!O?.inLibrary,{toggle:A}=X();C(()=>{o&&(m(!0),y(""),J.tv.details.query({type:i,id:String(o)}).then(s=>{const r={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,number_of_episodes:s.number_of_episodes,status:s.status,first_air_date:s.first_air_date,last_air_date:s.last_air_date};M(r),m(!1)}).catch(s=>{y(s.message),m(!1)}))},[o,i]),C(()=>{document.title=t?.title?`${t.title} - dango`:"TV & Movies - dango"},[t?.title]);const V=()=>{!o||!t||d(l?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})},l=i==="movie",v=!l,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].sort((s,r)=>s.season_number-r.season_number):[],[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(u||!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:u||"Something went wrong"}),e(w,{onClick:()=>d(-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(K,{src:b,alt:t.title,className:n.poster,decoding:"async"})}),e("div",{className:n.infoGlass,children:[e("div",{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:l?"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,r)=>e(F.Fragment,{children:[e("span",{className:n.metaValue,children:s}),r<p.length-1&&e("span",{className:n.metaDivider,children:"·"})]},r))}),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}),l?"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.currentTarget.value,10)||1),className:n.seasonSelect,children:S.map(s=>e("option",{value:s.season_number,children:[s.season_number===0?"Specials":`Season ${s.season_number}`," (",s.episode_count," Episodes)"]},s.season_number))})]}),e("button",{className:n.detailsToggleBtn,onClick:()=>P(!_),children:[_?e(a,{name:"chevron-up"}):e(a,{name:"chevron-down"}),_?"Hide Details":"Show Details"]}),_&&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:l?"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:()=>d("/"),children:"Go Back"})]})})]})}export{Qe as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as n,h as b,T as k,u as T}from"./vendor-core-DfaOB3Rn.js";import{ak as _,t as m,k as w,i as I,l as P}from"./index-
|
|
1
|
+
import{d as n,h as b,T as k,u as T}from"./vendor-core-DfaOB3Rn.js";import{ak as _,t as m,k as w,i as I,l as P}from"./index-CANVdkPZ.js";import{d as D}from"./useTvLibrary-DHDmFDvV.js";import{a as W}from"./MediaCard-CX1R88mG.js";const S=({item:e,anchorRect:l,onMouseEnter:i,onMouseLeave:c,onRequestClose:p})=>{const[a,u]=n(null),[d,r]=n(!0),{toggle:v,bookmarkedIds:g}=D(),y=_(e.type,e.id),f=g.has(y);b(()=>{let o=!1;return r(!0),m.tv.details.query({type:e.type,id:String(e.id)}).then(s=>{o||(u({overview:s.overview,vote_average:s.vote_average,number_of_seasons:s.number_of_seasons}),r(!1))}).catch(()=>{o||r(!1)}),()=>{o=!0}},[e.id,e.type]);const h=k(()=>a?.genres?a.genres.slice(0,4).map(o=>o.name):[],[a?.genres]),t=[];return a?.vote_average!=null&&a.vote_average>0&&t.push({icon:"star",label:Number(a.vote_average).toFixed(1),accent:!0}),t.push({icon:"tv",label:e.type==="tv"?"TV Show":"Movie"}),e.year&&t.push({label:e.year}),a?.status&&t.push({label:a.status}),T(W,{anchorRect:l,title:e.title,loading:d,meta:t,genres:h,synopsis:P(a?.overview,200),primaryAction:{to:I(e.type,e.id),label:"Watch now",icon:"play"},secondaryAction:{to:w(e.type,e.id),label:"Details",icon:"info-circle"},bookmarked:f,onToggleBookmark:()=>v({tmdbId:e.id,mediaType:e.type,title:e.title,poster:e.image,year:e.year}),onMouseEnter:i,onMouseLeave:c,onRequestClose:p})};export{S as T};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{h as I,p as ae,A as re,d as o,T as Y,q as M,u as t}from"./vendor-core-DfaOB3Rn.js";import{I as h}from"./vendor-icons-C1Pj_eSX.js";import{P as D}from"./MediaCard-
|
|
1
|
+
import{h as I,p as ae,A as re,d as o,T as Y,q as M,u as t}from"./vendor-core-DfaOB3Rn.js";import{I as h}from"./vendor-icons-C1Pj_eSX.js";import{P as D}from"./MediaCard-CX1R88mG.js";import{a as ne,T as se}from"./useTv-CTuS47dN.js";import{S as le}from"./SkeletonGrid-BRXDEtGD.js";import{u as ie,T as W,M as Q,aa as oe,B as x}from"./index-CANVdkPZ.js";import{E as ce}from"./ErrorMessage-hMt90aG4.js";import{s as r}from"./Search.module-C_qwCdHS.js";import"./vendor-ui-3qrARCPr.js";import"./useIsMobile-Dvx1uJ82.js";import"./MatureConsentModal-C3JQ0hOC.js";import"./TvPopup-BCguPlm4.js";import"./useTvLibrary-DHDmFDvV.js";import"./vendor-query-BBT5_sHx.js";import"./libraryInvalidation-DbrKjF5Q.js";const de=[{value:"multi",label:"All"},{value:"tv",label:"TV Shows"},{value:"movie",label:"Movies"}],ue=[{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"}],O=new Date().getFullYear(),me=[{value:"ALL",label:"All Years"},...Array.from({length:O-1980+1},(l,m)=>({value:String(O-m),label:String(O-m)}))];function _e(){I(()=>{document.title="Search TV & Movies - dango"},[]);const[l,m]=ae(),{lowEndMode:K}=ie(),C=re(null),[g,H]=o(l.get("q")||""),[p,U]=o(l.get("q")||""),[u,v]=o(parseInt(l.get("page")||"1",10)||1),[i,J]=o(l.get("type")||"multi"),[$,k]=o(l.get("genre")||""),[y,B]=o(l.get("year")||"ALL"),[f,E]=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}),P=Y(()=>{if(i==="tv")return Object.entries(W).map(([a,n])=>({id:a,name:n}));if(i==="movie")return Object.entries(Q).map(([a,n])=>({id:a,name:n}));const e=new Map;for(const[a,n]of Object.entries(W))e.set(a,n);for(const[a,n]of Object.entries(Q))e.set(a,n);return Array.from(e.entries()).map(([a,n])=>({id:a,name:n}))},[i]),S=Y(()=>Object.entries(c).filter(([,a])=>a==="include").map(([a])=>a).join(","),[c]),{data:L,isLoading:w,isError:Z,error:ee}=ne({query:p,type:i,genre:S,year:y,sort_by:f,page:u}),T=L?.results||[],_=L?.total_pages||0,j=L?.total_results||0,R=u<Math.min(_,500),d=M((e={})=>{const a=new URLSearchParams,n=e.q!==void 0?e.q:p,s=e.type!==void 0?e.type:i,G=e.year!==void 0?e.year:y,V=e.sort!==void 0?e.sort:f,F=e.page!==void 0?e.page:String(u),z=e.genre!==void 0?e.genre:S;n.trim()&&a.set("q",n.trim()),s!=="multi"&&a.set("type",s),z&&a.set("genre",z),G!=="ALL"&&a.set("year",G),V!=="popularity.desc"&&a.set("sort_by",V),F!=="1"&&a.set("page",F),m(a,{replace:!0})},[p,i,y,f,u,S,m]),A=M(()=>{oe(),v(1),U(g),d({q:g,page:"1"}),window.scrollTo({top:0,behavior:"smooth"})},[g,d]),q=M(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=M(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 I(()=>{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(h,{name:"search",className:r.searchIcon}),t("input",{type:"text","data-virtual-keyboard":"true",className:r.searchInput,placeholder:"Search titles...",value:g,onInput:e=>H(e.currentTarget.value),onKeyDown:e=>e.key==="Enter"&&A()})]}),t("div",{className:r.searchActions,children:[t("select",{value:i,onChange:e=>{J(e.currentTarget.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:A,className:r.searchBtn,children:"Search"}),t("button",{className:`${r.filterToggleBtn} ${b?r.active:""}`,onClick:()=>X(!b),children:[t(h,{name:"filter",size:14}),t("span",{children:"Filters"}),b?t(h,{name:"chevron-up",size:12}):t(h,{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=>E(e.currentTarget.value),children:ue.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=>B(e.currentTarget.value),children:me.map(e=>t("option",{value:e.value,children:e.label},e.value))})]})]}),P.length>0&&t("div",{className:r.genreSection,children:[t("label",{className:r.genreLabel,children:"Genres"}),t("div",{className:r.genreContainer,children:P.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({}),B("ALL"),E("popularity.desc"),v(1),d({genre:"",year:"ALL",sort:"popularity.desc",page:"1"})},children:"Reset All"}),t(x,{onClick:A,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=P.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:[p?`Results for "${p}"`:S?"Browsing genres":i==="tv"?"Popular TV Shows":i==="movie"?"Popular Movies":"Trending",j>0&&t("span",{style:{fontWeight:400,color:"var(--text-tertiary)",fontSize:"0.85em",marginLeft:"0.5em"},children:["(",j.toLocaleString(),")"]})]}),T.length>0&&t(D,{page:u,totalPages:Math.max(1,Math.min(_,500)),canGoNext:R,onChange:q,isLoading:w})]}),t("div",{className:`${r.resultsGrid} ${K?r.lowEnd:""}`,children:w?t(le,{}):T.map(e=>t(se,{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(h,{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(D,{page:u,totalPages:Math.max(1,Math.min(_,500)),canGoNext:R,onChange:q,isLoading:w,variant:"labeled"})})]})}export{_e as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as $,d as f,h as L,T as U,u as d}from"./vendor-core-DfaOB3Rn.js";import{M as x}from"./MediaCard-
|
|
1
|
+
import{o as $,d as f,h as L,T as U,u as d}from"./vendor-core-DfaOB3Rn.js";import{M as x}from"./MediaCard-CX1R88mG.js";import{L as F}from"./LibraryListPage-P3ThNbJF.js";import{R as N}from"./ResetProgressModal-BvZead5B.js";import{T as _}from"./TvPopup-BCguPlm4.js";import{i as y,h as u,j as R}from"./index-CANVdkPZ.js";import{j,u as K,a as O,b as Q,f as Y,k as q,l as z,m as G,T as I}from"./useTvLibrary-DHDmFDvV.js";import"./vendor-icons-C1Pj_eSX.js";import"./vendor-ui-3qrARCPr.js";import"./useIsMobile-Dvx1uJ82.js";import"./MatureConsentModal-C3JQ0hOC.js";import"./SkeletonGrid-BRXDEtGD.js";import"./ErrorMessage-hMt90aG4.js";import"./LibraryListPage.module-r6k9nyT9.js";import"./vendor-query-BBT5_sHx.js";import"./libraryInvalidation-DbrKjF5Q.js";const Z=["All","Continue Watching",...I],S=24;function ct(){const{filter:l="All"}=$(),[c,m]=f(1),[s,v]=f(null);L(()=>{document.title="TV Watchlist - dango"},[]),L(()=>{m(1)},[l]);const o=l==="Continue Watching",r=j(o?"All":l,c,S),i=K(100),T=O(),P=Q(),k=Y(),w=q(),C=z(),B=G(),M=U(()=>o?(i.data?.data??[]).map(t=>{const a=t.currentTime??0,e=t.duration??0,g=t.season??1,h=t.episode??1,n=t.mediaType==="movie",p=n?"Movie":`S${g} E${h}`,b=t.completed===1||e>0&&a>=e*.8;return{key:t.id,libId:t.id,tmdbId:t.tmdbId??0,mediaType:t.mediaType,title:t.title||"",poster:t.poster||"",year:t.year,adult:R({adult:t.adult===1}),status:t.watchlistStatus??"",badge:p,progressPercent:b?100:e>0?a/e*100:0,progressLabel:e>0?b?"Watched":n?`${u(a)} / ${u(e)}`:`${p} · ${u(a)} / ${u(e)}`:p,watchTarget:y(t.mediaType,t.tmdbId??0,n?void 0:g,n?void 0:h)}}):(r.data?.data??[]).map(t=>({key:t.id,libId:t.id,tmdbId:t.tmdbId,mediaType:t.mediaType,title:t.title,poster:t.poster||"",year:t.year,adult:R({adult:t.adult===1}),status:t.status,badge:t.lastSeason&&t.lastEpisode?`S${t.lastSeason} E${t.lastEpisode}`:void 0,progressPercent:void 0,progressLabel:void 0,watchTarget:y(t.mediaType,t.tmdbId,t.lastSeason??void 0,t.lastEpisode??void 0)})),[o,i.data,r.data]),W=o?i.data?.total??0:r.data?.total??0,E=o?i.isLoading:r.isLoading,A=o?i.error:r.error,V=t=>{s&&(P.mutate({mediaId:s.libId}),t&&T.mutate(s.libId))};return d(F,{headerTitle:"My TV Watchlist",headerSubtitle:"Track and manage your movies and shows",filters:Z,filterBy:l,filterBasePath:"/tv-watchlist",continueFilter:"Continue Watching",statusOptions:[...I],entries:M,total:W,isLoading:E,error:A,page:c,pageSize:S,onPageChange:m,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:(t,a)=>w.mutate({ids:t,status:a}),onBulkRemove:t=>{o?B.mutate(t):C.mutate(t)},onStatusChange:(t,a)=>k.mutate({id:t,status:a}),onRemoveItem:t=>T.mutate(t),renderCard:t=>d(x,{item:{id:t.libId,title:t.title,thumbnail:t.poster,typeBadge:t.mediaType==="movie"?"Movie":"TV",chapterBadge:t.badge??null,isAdult:t.adult},linkTo:t.watchTarget,hoverIcon:"play",progress:t.progressPercent!==void 0&&t.progressLabel?{percent:t.progressPercent,label:t.progressLabel}:void 0,showProgress:o,metaRow:t.year?d("span",{style:{opacity:.75},children:t.year}):void 0,onRemove:o?()=>v(t):void 0,renderPopup:(a,e)=>d(_,{item:{id:t.tmdbId??0,title:t.title||"",year:t.year||"",type:t.mediaType||"tv",image:t.poster||""},anchorRect:a,onMouseEnter:e.onMouseEnter,onMouseLeave:e.onMouseLeave,onRequestClose:e.close})}),modals:d(N,{isOpen:!!s,itemName:s?.title,progressKind:"watch",listLabel:"my TV watchlist",onClose:()=>{v(null)},onConfirm:V})})}export{ct as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as w,A as E,h as v,q as N,$ as D,u as o}from"./vendor-core-DfaOB3Rn.js";import{p as x}from"./index-
|
|
1
|
+
import{d as w,A as E,h as v,q as N,$ as D,u as o}from"./vendor-core-DfaOB3Rn.js";import{p as x}from"./index-CANVdkPZ.js";import"./vendor-query-BBT5_sHx.js";import"./vendor-icons-C1Pj_eSX.js";const O="_keyboard_1l8yf_1",R="_small_1l8yf_18",T="_medium_1l8yf_25",q="_large_1l8yf_32",U="_topBar_1l8yf_39",V="_dragHandle_1l8yf_48",W="_grip_1l8yf_59",X="_topButton_1l8yf_67",Y="_key_1l8yf_1",j="_closeButton_1l8yf_98",A="_keys_1l8yf_104",F="_row_1l8yf_111",J="_wideKey_1l8yf_132",P="_spaceKey_1l8yf_136",G="_spaceIcon_1l8yf_144",Q="_activeKey_1l8yf_153",t={keyboard:O,small:R,medium:T,large:q,topBar:U,dragHandle:V,grip:W,topButton:X,key:Y,closeButton:j,keys:A,row:F,wideKey:J,spaceKey:P,spaceIcon:G,activeKey:Q},$="virtual-keyboard-state",b=["small","medium","large"],Z=["1","2","3","4","5","6","7","8","9","0"],ee=["!","@","#","$","%","^","&","*","(",")"],te=[["q","w","e","r","t","y","u","i","o","p"],["a","s","d","f","g","h","j","k","l"],["z","x","c","v","b","n","m"]],ne=()=>{const i={position:{x:Math.max(12,window.innerWidth-690),y:Math.max(90,window.innerHeight-330)},size:"medium"};try{const c=x.getItem($);if(!c)return i;const s=JSON.parse(c);return{position:s.position&&Number.isFinite(s.position.x)&&Number.isFinite(s.position.y)?s.position:i.position,size:s.size&&b.includes(s.size)?s.size:i.size}}catch{return i}},K=(i,c)=>{const s=c?.offsetWidth??650,r=c?.offsetHeight??270;return{x:Math.min(Math.max(8,i.x),Math.max(8,window.innerWidth-s-8)),y:Math.min(Math.max(8,i.y),Math.max(8,window.innerHeight-r-8))}};function re({activeInputRef:i,isVisible:c,onClose:s}){const[{position:r,size:l},h]=w(ne),[k,z]=w(!1),[g,S]=w(!1),f=E(null),u=E(null);v(()=>{x.setItem($,JSON.stringify({position:r,size:l}))},[r,l]),v(()=>{const e=()=>{h(n=>({...n,position:K(n.position,f.current)}))};return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]);const _=()=>i.current&&document.contains(i.current)?i.current:document.activeElement instanceof HTMLInputElement?document.activeElement:null,d=e=>{const n=_();if(!n)return;const a=n.selectionStart??n.value.length,p=n.selectionEnd??n.value.length;n.setRangeText(e,a,p,"end"),n.dispatchEvent(new Event("input",{bubbles:!0})),n.focus()},M=()=>{const e=_();if(!e)return;const n=e.selectionStart??e.value.length,a=e.selectionEnd??e.value.length;n===a&&n===0||(e.setRangeText("",n===a?n-1:n,a,"end"),e.dispatchEvent(new Event("input",{bubbles:!0})),e.focus())},B=()=>{const e=_();if(!e){s();return}const n=e.form;n?n.requestSubmit():e.dispatchEvent(new KeyboardEvent("keydown",{key:"Enter",bubbles:!0})),s()},C=e=>{e.preventDefault()},y=N(e=>{if(!u.current)return;const n={x:e.clientX-u.current.x,y:e.clientY-u.current.y};h(a=>({...a,position:K(n,f.current)}))},[]),m=N(()=>{u.current=null,window.removeEventListener("mousemove",y),window.removeEventListener("mouseup",m)},[y]),L=e=>{e.preventDefault(),u.current={x:e.clientX-r.x,y:e.clientY-r.y},window.addEventListener("mousemove",y),window.addEventListener("mouseup",m)};if(v(()=>()=>{window.removeEventListener("mousemove",y),window.removeEventListener("mouseup",m)},[y,m]),!c)return null;const H=g?ee:Z,I=()=>{h(e=>{const n=b[(b.indexOf(e.size)+1)%b.length];return{...e,size:n}})};return D(o("div",{ref:f,className:`${t.keyboard} ${t[l]}`,style:{left:r.x,top:r.y},onMouseDown:C,"data-virtual-keyboard-root":!0,children:[o("div",{className:t.topBar,children:[o("div",{className:t.dragHandle,onMouseDown:L,"aria-label":"Move virtual keyboard",children:[o("span",{className:t.grip,"aria-hidden":"true"}),o("span",{children:"Virtual Keyboard"})]}),o("button",{type:"button",className:t.topButton,onClick:I,children:["Size: ",l[0].toUpperCase()+l.slice(1)]}),o("button",{type:"button",className:`${t.topButton} ${t.closeButton}`,onClick:s,children:"X"})]}),o("div",{className:t.keys,children:[o("div",{className:t.row,children:[H.map(e=>o("button",{type:"button",className:t.key,onClick:()=>d(e),children:e},e)),o("button",{type:"button",className:`${t.key} ${t.wideKey}`,onClick:M,"aria-label":"Backspace",children:"⟵"})]}),te.map((e,n)=>o("div",{className:t.row,children:[e.map(a=>{const p=k?a.toUpperCase():a;return o("button",{type:"button",className:t.key,onClick:()=>d(p),children:p},a)}),n===1&&o("button",{type:"button",className:`${t.key} ${t.wideKey}`,onClick:B,children:"Enter"})]},e.join(""))),o("div",{className:t.row,children:[o("button",{type:"button",className:`${t.key} ${t.wideKey} ${g?t.activeKey:""}`,onClick:()=>S(e=>!e),children:"Ctrl"}),o("button",{type:"button",className:`${t.key} ${t.wideKey} ${k?t.activeKey:""}`,onClick:()=>z(e=>!e),children:"Shift"}),o("button",{type:"button",className:`${t.key} ${t.spaceKey}`,onClick:()=>d(" "),"aria-label":"Space",children:o("span",{className:t.spaceIcon})}),o("button",{type:"button",className:t.key,onClick:()=>d("."),children:"."}),o("button",{type:"button",className:t.key,onClick:()=>d("-"),children:"-"})]})]})]}),document.body)}export{re as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as h,d as s,u as e}from"./vendor-core-DfaOB3Rn.js";import{a6 as d,B as m}from"./index-
|
|
1
|
+
import{c as h,d as s,u as e}from"./vendor-core-DfaOB3Rn.js";import{a6 as d,B as m}from"./index-CANVdkPZ.js";import{W as u,s as p,a as g}from"./WatchAlongPanel-B5laz8Xh.js";import"./vendor-query-BBT5_sHx.js";import"./vendor-icons-C1Pj_eSX.js";function b(){const o=d(),c=h(),[t,l]=s(c.hash.slice(1)),[n,a]=s("");return e("div",{style:{maxWidth:640,margin:"2rem auto",padding:"0 1rem"},children:[e("h1",{children:"Watch along"}),e("p",{children:"Watch with friends across the internet. The host chooses the episode, provider, and source, and controls playback. Your dango streams your own video."}),o.session&&e(u,{}),!o.session&&e("form",{className:p.panel,onSubmit:r=>{r.preventDefault();try{o.join(t),a("")}catch(i){a(i instanceof Error?i.message:"Could not join room")}},children:[e(g,{}),e("label",{htmlFor:"watch-invite",children:"Invite link or room code"}),e("input",{id:"watch-invite",value:t,onChange:r=>l(r.currentTarget.value),required:!0,autoComplete:"off"}),e("p",{children:"Joining shares your connection and playback readiness with the room service. Start a room from an episode using a direct HLS source."}),e(m,{type:"submit",disabled:!o.workerUrl,style:{marginTop:"1rem"},children:"Join room"}),!o.workerUrl&&e("p",{children:"Watch along is unavailable. The server needs a watch-along service URL."}),n&&e("p",{role:"alert",children:n})]})]})}export{b as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as h,A as _,h as z,u as s,L as C}from"./vendor-core-DfaOB3Rn.js";import{a6 as g,B as r}from"./index-
|
|
1
|
+
import{d as h,A as _,h as z,u as s,L as C}from"./vendor-core-DfaOB3Rn.js";import{a6 as g,B as r}from"./index-CANVdkPZ.js";const N="_panel_ntzz0_1",b="_summary_ntzz0_10",k="_heading_ntzz0_20",x="_actions_ntzz0_21",T="_members_ntzz0_22",A="_name_ntzz0_29",o={panel:N,summary:b,heading:k,actions:x,members:T,name:A};function L(){const t=g();return s("label",{className:o.name,children:["Display name",s("input",{value:t.displayName,onChange:a=>t.setDisplayName(a.currentTarget.value),maxLength:32,placeholder:"Your name (optional)",autoComplete:"nickname"}),s("small",{children:"Remembered for this profile on this browser."})]})}function D({playback:t,onCreate:a,needsPlayback:l,onEnablePlayback:p}){const e=g(),[y,m]=h(!1),[d,i]=h(""),[v,f]=h(!1),c=_(null);z(()=>{c.current&&(e.session||l)&&(c.current.open=!0)},[e.session,l]);const u=e.session?`${e.workerUrl}/join#${e.session.id}.${e.session.guestToken}`:"";return s("details",{ref:c,className:o.panel,"aria-label":"Watch along",children:[s("summary",{className:o.summary,children:["Watch along",e.session?e.session.host?" · You are hosting":" · Following host":""]}),s("div",{className:o.heading,children:e.session?s("div",{className:o.actions,children:[s(r,{size:"sm",variant:"secondary",onClick:async()=>{f(!0);try{await navigator.clipboard.writeText(u),i("Invite copied")}catch{i("Copy the invite below")}},children:"Copy invite"}),s(r,{size:"sm",variant:"ghost",onClick:e.leave,children:e.session.host?"End room":"Leave room"})]}):s("div",{className:o.actions,children:[a&&s(r,{size:"sm",loading:y,disabled:!t||!e.workerUrl,onClick:async()=>{if(t){m(!0),i("");try{a(),await e.create({...t,playing:!1})}catch(n){i(n instanceof Error?n.message:"Could not create room")}finally{m(!1)}}},children:"Create room"}),s(C,{to:"/watch-along",children:"Join a room"})]})}),s(L,{}),!e.session&&s("p",{children:"Direct HLS only. Each viewer needs their own dango. Room controls use the shared watch-along service."}),e.session&&s("p",{children:[e.connected?e.room?.hostOnline?"Connected":"Host disconnected. Room closes after 60 seconds unless they reconnect":"Connecting…"," ","· Provider and source follow the host. Volume and subtitles stay yours."]}),e.room&&s("p",{children:[e.session?.host&&"End the room when you are finished watching. ","Rooms automatically close six hours after creation. This room expires at"," ",s("time",{dateTime:new Date(e.room.expiresAt).toISOString(),children:new Date(e.room.expiresAt).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}),", even if playback is still active."]}),e.room&&s("ul",{className:o.members,children:e.room.members.map((n,w)=>s("li",{children:[n.name||(n.host?"Host":`Guest ${w+1}`),n.name&&n.host?" (host)":"",n.id===e.selfId?" (you)":"",": ",n.status]},n.id))}),l&&s(r,{size:"sm",onClick:p,children:"Enable playback"}),v&&e.session&&s("input",{"aria-label":"Room invite",readOnly:!0,value:u,onFocus:n=>n.currentTarget.select()}),(e.error||d)&&s("p",{role:"status",children:e.error||d})]})}export{D as W,L as a,o as s};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{h as fe,o as He,a as Ze,p as Je,d as h,A as ye,T,u as t,S as Xe}from"./vendor-core-DfaOB3Rn.js";import{u as et,a as Se}from"./vendor-query-BBT5_sHx.js";import{o as tt,u as at,d as nt,G as st,H as _e,I as we,q as Ae,J as lt,t as rt,w as ct,K as it,L as ot,N as dt,O as ht,P as ut,B as W,Q as se}from"./index-CipsDH5j.js";import{I as g}from"./vendor-icons-C1Pj_eSX.js";import{A as mt}from"./AnimeCard-q5F_tD6Q.js";import{S as pt}from"./SkeletonGrid-9Q4VuO4S.js";import{E as gt}from"./ErrorMessage-hMt90aG4.js";import{P as Le}from"./MediaCard-MAnVN0Zz.js";import{s as n}from"./LibraryListPage.module-r6k9nyT9.js";import{A as vt}from"./ActiveFilterChips-olGfwxle.js";import"./useAnimeInfoData-CD7YsaT8.js";import"./QueueOptionsButton-DzBTJGGX.js";import"./vendor-ui-3qrARCPr.js";import"./playbackCompletion-Z40dSXOE.js";import"./useIsMobile-Dvx1uJ82.js";import"./MatureConsentModal-C5vPRV5i.js";const ft=(d,v)=>{const l=new URLSearchParams(v);return l.delete("page"),l.sort(),`${d}|${l.toString()}`},yt=(d,v)=>{const l=new Set(d);return v.forEach(w=>l.add(w)),l},St=(d,v)=>{const l=new Set(d);return v.forEach(w=>l.delete(w)),l},_t="_sortSelect_cahhw_1",wt="_filterContainer_cahhw_30",At="_slideUpIn_cahhw_1",Lt="_searchBarWrapper_cahhw_44",Ct="_inputIconWrapper_cahhw_50",Nt="_searchIcon_cahhw_55",bt="_searchInput_cahhw_64",Bt="_searchActions_cahhw_84",kt="_searchBtn_cahhw_89",Rt="_filterToggleBtn_cahhw_94",Tt="_advancedFilters_cahhw_115",Wt="_show_cahhw_122",It="_filterDivider_cahhw_128",xt="_filterGrid_cahhw_134",Pt="_filterItem_cahhw_141",$t="_genreSection_cahhw_183",Ft="_genreLabel_cahhw_189",Gt="_genreContainer_cahhw_199",Ot="_genreButton_cahhw_205",Mt="_include_cahhw_222",Et="_exclude_cahhw_228",Dt="_filterActions_cahhw_235",zt="_applyBtn_cahhw_246",c={sortSelect:_t,filterContainer:wt,slideUpIn:At,searchBarWrapper:Lt,inputIconWrapper:Ct,searchIcon:Nt,searchInput:bt,searchActions:Bt,searchBtn:kt,filterToggleBtn:Rt,advancedFilters:Tt,show:Wt,filterDivider:It,filterGrid:xt,filterItem:Pt,genreSection:$t,genreLabel:Ft,genreContainer:Gt,genreButton:Ot,include:Mt,exclude:Et,filterActions:Dt,applyBtn:zt},Ne=["All","Continue Watching","Watching","Completed","On-Hold","Dropped","Planned"],Ce=Ne.slice(2),Ut=[{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+)"}],qt=[{value:"ALL",label:"All Seasons"},{value:"WINTER",label:"Winter"},{value:"SPRING",label:"Spring"},{value:"SUMMER",label:"Summer"},{value:"FALL",label:"Fall"}],ca=()=>{fe(()=>{document.title="Watchlist - dango"},[]);const{filter:d="All"}=He(),v=Ze(),[l,w]=Je(),Q=et(),le=tt(),[f,I]=h(parseInt(l.get("page")||"1")),[A,x]=h(l.get("query")||""),[L,V]=h(l.get("sortBy")||"last_added"),[C,P]=h(l.get("type")||"ALL"),[N,$]=h(l.get("season")||"ALL"),[b,F]=h(l.get("year")||"ALL"),[k,G]=h(()=>{const e={},a=l.get("genres")?.split(",").map(r=>r.trim()).filter(Boolean)||[],s=l.get("excludeGenres")?.split(",").map(r=>r.trim()).filter(Boolean)||[];return a.forEach(r=>r&&(e[r]="include")),s.forEach(r=>r&&(e[r]="exclude")),e}),[O,be]=h(()=>["type","season","year","genres","excludeGenres"].some(e=>l.has(e))),{lowEndMode:Be}=at(),{titlePreference:M}=nt(),{data:ke}=st(),re=ke?.genres||[],H=ye(null),[o,B]=h(null),[Z,E]=h(!1),[ce,D]=h(!1),[z,Re]=h(!1),[p,y]=h(new Set),J=ye(null),i=d==="Continue Watching",U=T(()=>{const e=new URLSearchParams(l);return e.delete("page"),e.set("titlePreference",M),e.toString()},[l,M]),{data:q,isLoading:Te,error:We}=_e(U,f,14),{data:Y,isLoading:Ie,error:xe}=we(d,U,f,14),{data:Pe}=_e(U,f+1,14),{data:$e}=we(d,U,f+1,14),X=T(()=>(i?q?.data:Y?.data)||[],[i,q,Y]),R=T(()=>(i?q?.total:Y?.total)||0,[i,q,Y]),j=i?Te:Ie,ie=i?We:xe,oe=i?Pe:$e;fe(()=>{x(l.get("query")||""),V(l.get("sortBy")||"last_added"),P(l.get("type")||"ALL"),$(l.get("season")||"ALL"),F(l.get("year")||"ALL");const e={},a=l.get("genres")?.split(",").map(u=>u.trim()).filter(Boolean)||[],s=l.get("excludeGenres")?.split(",").map(u=>u.trim()).filter(Boolean)||[];a.forEach(u=>u&&(e[u]="include")),s.forEach(u=>u&&(e[u]="exclude")),G(e),I(parseInt(l.get("page")||"1"));const r=ft(d,l);J.current!==null&&J.current!==r&&y(new Set),J.current=r},[l,d]);const Fe=Se({mutationFn:async({id:e,status:a})=>{await rt.watchlist.setStatus.mutate({id:e,status:a})},onSuccess:()=>{Q.invalidateQueries({queryKey:[Ae.watchlist]}),lt.success("Status updated")}}),Ge=Se(le.continueWatching.remove.mutationOptions({onSuccess:()=>{Q.invalidateQueries(le.continueWatching.pathFilter()),Q.invalidateQueries({queryKey:[Ae.continueWatching]})}})),ee=ct(),{data:de}=it("skipRemoveConfirmation"),Oe=ot(),te=T(()=>{const e=a=>a[M]||a.name||"";return[...X].sort((a,s)=>L==="name_asc"?e(a).localeCompare(e(s)):L==="name_desc"?e(s).localeCompare(e(a)):0)},[X,L,M]),ae=new Date().getFullYear(),Me=[{value:"ALL",label:"All Years"},...Array.from({length:ae-1980+1},(e,a)=>({value:String(ae-a),label:String(ae-a)}))],m=(e=L,a=1)=>{const s=new URLSearchParams;A.trim()&&s.set("query",A.trim()),e!=="last_added"&&s.set("sortBy",e),C!=="ALL"&&s.set("type",C),N!=="ALL"&&s.set("season",N),b!=="ALL"&&s.set("year",b);const r=Object.entries(k).filter(([,_])=>_==="include").map(([_])=>_),u=Object.entries(k).filter(([,_])=>_==="exclude").map(([_])=>_);r.length>0&&s.set("genres",r.join(",")),u.length>0&&s.set("excludeGenres",u.join(",")),a>1&&s.set("page",a.toString()),w(s),a!==f&&I(a)},he=e=>{if(m(L,e),H.current){const a=H.current.getBoundingClientRect().top+window.scrollY-100;window.scrollTo({top:a,behavior:"smooth"})}},Ee=()=>{x(""),V("last_added"),P("ALL"),$("ALL"),F("ALL"),G({}),w(new URLSearchParams),I(1)},De=e=>{G(a=>{const s=a[e],r={...a};return s==="include"?r[e]="exclude":s==="exclude"?delete r[e]:r[e]="include",r})},ue=(e,a)=>{if(i){B({id:e,name:a});return}String(de)==="true"||String(de)==="1"?ee.mutate({id:e}):B({id:e,name:a})},ze=()=>{if(o){if(o.ids){i?(Ue.mutate({ids:o.ids}),Z&&pe.mutate({ids:o.ids})):pe.mutate({ids:o.ids}),y(new Set),B(null),E(!1),D(!1);return}i?(Ge.mutate({showId:o.id}),Z&&ee.mutate({id:o.id})):ee.mutate({id:o.id}),ce&&Oe.mutate({key:"skipRemoveConfirmation",value:!0}),B(null),E(!1),D(!1)}},me=()=>{B(null),E(!1),D(!1)},pe=dt(),Ue=ht(),qe=ut(),Ye=()=>{Re(e=>{const a=!e;return a||y(new Set),a})},je=e=>{y(a=>{const s=new Set(a);return s.has(e)?s.delete(e):s.add(e),s})},K=te.map(e=>e.id),ne=K.length>0&&K.every(e=>p.has(e)),Ke=()=>{y(ne?e=>St(e,K):e=>yt(e,K))},Qe=e=>{p.size!==0&&(qe.mutate({ids:[...p],status:e}),y(new Set))},Ve=()=>{p.size!==0&&B({ids:[...p]})},ge=X.length>=14&&oe&&oe.data.length>0,ve=T(()=>Math.max(1,Math.ceil(R/14)),[R]),S=[];A.trim()&&S.push({key:"query",label:`Search: ${A}`,onRemove:()=>{x(""),m()}}),C!=="ALL"&&S.push({key:"type",label:`Type: ${C}`,onRemove:()=>{P("ALL"),m()}}),N!=="ALL"&&S.push({key:"season",label:`Season: ${N}`,onRemove:()=>{$("ALL"),m()}}),b!=="ALL"&&S.push({key:"year",label:`Year: ${b}`,onRemove:()=>{F("ALL"),m()}});for(const[e,a]of Object.entries(k))S.push({key:e,label:a==="include"?`+ ${e}`:`-${e}`,tone:a==="include"?"primary":"danger",onRemove:()=>{G(s=>{const r={...s};return delete r[e],r}),m()}});return t("div",{className:"page-container",children:[t("header",{className:n.header,children:[t("h2",{className:n.title,children:"My Watchlist"}),t("p",{className:n.subtitle,children:"Track and manage your anime collection"})]}),t("div",{className:n.controls,children:[t("div",{className:n.filters,children:Ne.map(e=>t("button",{className:`${n.filterBtn} ${d===e?n.active:""}`,onClick:()=>{const a=new URLSearchParams(l);a.delete("page"),v({pathname:`/watchlist/${e}`,search:a.toString()}),I(1)},children:e},e))}),t("div",{children:t("select",{className:c.sortSelect,value:L,onChange:e=>{const a=e.currentTarget.value;V(a),m(a,f)},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:c.filterContainer,children:[t("div",{className:c.searchBarWrapper,children:[t("div",{className:c.inputIconWrapper,children:[t(g,{name:"search",className:c.searchIcon}),t("input",{className:c.searchInput,placeholder:"Search your watchlist by title...",value:A,onInput:e=>x(e.currentTarget.value),onKeyDown:e=>e.key==="Enter"&&m()})]}),t("div",{className:c.searchActions,children:[t(W,{onClick:()=>m(),className:c.searchBtn,children:"Search"}),t("button",{className:`${c.filterToggleBtn} ${O?n.active:""}`,onClick:()=>be(!O),children:[t(g,{name:"filter",size:14}),t("span",{children:"Filters"}),O?t(g,{name:"chevron-up",size:12}):t(g,{name:"chevron-down",size:12})]})]})]}),t("div",{className:`${c.advancedFilters} ${O?c.show:""}`,children:[t("div",{className:c.filterDivider}),t("div",{className:c.filterGrid,children:[t("div",{className:c.filterItem,children:[t("label",{children:"Type"}),t("select",{value:C,onChange:e=>P(e.currentTarget.value),children:Ut.map(e=>t("option",{value:e.value,children:e.label},e.value))})]}),t("div",{className:c.filterItem,children:[t("label",{children:"Season"}),t("select",{value:N,onChange:e=>$(e.currentTarget.value),children:qt.map(e=>t("option",{value:e.value,children:e.label},e.value))})]}),t("div",{className:c.filterItem,children:[t("label",{children:"Year"}),t("select",{value:b,onChange:e=>F(e.currentTarget.value),children:Me.map(e=>t("option",{value:e.value,children:e.label},e.value))})]})]}),re.length>0&&t("div",{className:c.genreSection,children:[t("label",{className:c.genreLabel,children:"Genres"}),t("div",{className:c.genreContainer,children:re.map(e=>t("button",{className:`${c.genreButton} ${c[k[e]||""]}`,onClick:()=>De(e),children:e},e))})]}),t("div",{className:c.filterActions,children:[t(W,{variant:"secondary",onClick:Ee,children:"Reset All"}),t(W,{onClick:()=>m(),className:c.applyBtn,children:"Apply Filters"})]})]})]}),t("div",{className:n.resultsHeader,ref:H,children:[t("h3",{className:n.resultsTitle,children:[i?"Continue Watching":d,t("span",{className:n.itemCount,children:["(",R," items)"]})]}),t("div",{className:n.headerActions,children:[t("button",{className:`${n.manageBtn} ${z?n.active:""}`,onClick:Ye,children:[t(g,{name:"pencil-alt",size:13}),t("span",{children:"Bulk Manage"})]}),R>0&&t(Le,{page:f,totalPages:ve,canGoNext:ge,onChange:he,isLoading:j})]})]}),z&&t("div",{className:n.manageBar,children:[t("button",{className:n.selectAllBtn,onClick:Ke,children:[t("span",{className:`${n.selectAllBox} ${ne?n.selectAllBoxChecked:""}`,"aria-hidden":"true"}),t("span",{children:ne?"Clear Page":"Select All"})]}),t("span",{className:n.manageCount,children:[p.size," selected"]}),t("div",{className:n.manageSpacer}),!i&&t("select",{className:n.manageStatusSelect,value:"",onChange:e=>{e.currentTarget.value&&Qe(e.currentTarget.value)},disabled:p.size===0,title:"Set status for selected items",children:[t("option",{value:"",children:"Set status…"}),Ce.map(e=>t("option",{value:e,children:e},e))]}),t("button",{className:n.manageRemoveBtn,onClick:Ve,disabled:p.size===0,children:[t(g,{name:"trash",size:13}),t("span",{children:"Remove Selected"})]})]}),j?t(pt,{}):ie?t(gt,{message:ie.message}):t(Xe,{children:[S.length>0&&t(vt,{chips:S}),t("div",{className:`${n.grid} ${Be?n.lowEnd:""}`,children:te.map(e=>{const a=p.has(e.id);return t("div",{className:`${n.itemWrapper} ${a?n.selected:""}`,children:[z&&t("div",{className:n.selectOverlay,onClick:()=>je(e.id),title:a?"Deselect":"Select",children:t("span",{className:n.selectBadge,children:a?t(g,{name:"check",size:12}):null})}),t(mt,{anime:e,continueWatching:i,onRemove:()=>ue(e.id,e.name),layout:"vertical"}),!i&&!z&&t("div",{className:n.cardActions,children:[t("select",{className:n.statusSelect,value:e.status,onChange:s=>Fe.mutate({id:e.id,status:s.currentTarget.value}),children:Ce.map(s=>t("option",{value:s,children:s},s))}),t("button",{className:n.removeBtn,onClick:()=>ue(e.id,e.name),title:"Remove from Watchlist","aria-label":"Remove from Watchlist",children:t(g,{name:"trash",size:12})})]})]},e._id)})})]}),!j&&te.length===0&&t("div",{className:n.emptyState,children:[t("h3",{className:n.emptyTitle,children:"Your watchlist is looking a bit lonely"}),t("p",{className:n.emptyText,children:d!=="All"||A||C!=="ALL"||N!=="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:n.emptyBtn,onClick:()=>v("/search"),children:[t(g,{name:"search",size:14}),t("span",{children:"Browse Anime"})]})]}),R>0&&t("div",{className:n.bottomPagination,children:t(Le,{page:f,totalPages:ve,canGoNext:ge,onChange:he,isLoading:j,variant:"labeled"})}),t(se,{isOpen:!!o,onClose:me,title:i?"Reset Progress":"Remove from Watchlist",children:[t(se.Body,{children:[t("p",{children:o?.ids&&o.ids.length>1?i?`Are you sure you want to remove watch progress for ${o.ids.length} items?`:`Are you sure you want to remove ${o.ids.length} items from your watchlist?`:i?`Are you sure you want to remove your watch progress for "${o?.name}"?`:`Are you sure you want to remove "${o?.name}" from your watchlist?`}),i&&t("label",{children:[t("input",{type:"checkbox",checked:Z,onChange:e=>E(e.currentTarget.checked)}),"Also remove from my watchlist"]}),!i&&!(o?.ids&&o.ids.length>1)&&t("label",{children:[t("input",{type:"checkbox",checked:ce,onChange:e=>D(e.currentTarget.checked)}),"Remember my choice"]})]}),t(se.Actions,{children:[t(W,{variant:"secondary",onClick:me,children:"No"}),t(W,{variant:"danger",onClick:ze,children:"Yes"})]})]})]})};export{ca as default};
|
|
1
|
+
import{h as fe,o as He,a as Ze,p as Je,d as h,A as ye,T,u as t,S as Xe}from"./vendor-core-DfaOB3Rn.js";import{u as et,a as Se}from"./vendor-query-BBT5_sHx.js";import{o as tt,u as at,d as nt,G as st,H as _e,I as we,q as Ae,J as lt,t as rt,w as ct,K as it,L as ot,N as dt,O as ht,P as ut,B as W,Q as se}from"./index-CANVdkPZ.js";import{I as g}from"./vendor-icons-C1Pj_eSX.js";import{A as mt}from"./AnimeCard-BryQpsfk.js";import{S as pt}from"./SkeletonGrid-BRXDEtGD.js";import{E as gt}from"./ErrorMessage-hMt90aG4.js";import{P as Le}from"./MediaCard-CX1R88mG.js";import{s as n}from"./LibraryListPage.module-r6k9nyT9.js";import{A as vt}from"./ActiveFilterChips-olGfwxle.js";import"./useAnimeInfoData-6HMof-NV.js";import"./QueueOptionsButton-Dr3K6INy.js";import"./vendor-ui-3qrARCPr.js";import"./playbackCompletion-BXXM0PH1.js";import"./useIsMobile-Dvx1uJ82.js";import"./MatureConsentModal-C3JQ0hOC.js";const ft=(d,v)=>{const l=new URLSearchParams(v);return l.delete("page"),l.sort(),`${d}|${l.toString()}`},yt=(d,v)=>{const l=new Set(d);return v.forEach(w=>l.add(w)),l},St=(d,v)=>{const l=new Set(d);return v.forEach(w=>l.delete(w)),l},_t="_sortSelect_cahhw_1",wt="_filterContainer_cahhw_30",At="_slideUpIn_cahhw_1",Lt="_searchBarWrapper_cahhw_44",Ct="_inputIconWrapper_cahhw_50",Nt="_searchIcon_cahhw_55",bt="_searchInput_cahhw_64",Bt="_searchActions_cahhw_84",kt="_searchBtn_cahhw_89",Rt="_filterToggleBtn_cahhw_94",Tt="_advancedFilters_cahhw_115",Wt="_show_cahhw_122",It="_filterDivider_cahhw_128",xt="_filterGrid_cahhw_134",Pt="_filterItem_cahhw_141",$t="_genreSection_cahhw_183",Ft="_genreLabel_cahhw_189",Gt="_genreContainer_cahhw_199",Ot="_genreButton_cahhw_205",Mt="_include_cahhw_222",Et="_exclude_cahhw_228",Dt="_filterActions_cahhw_235",zt="_applyBtn_cahhw_246",c={sortSelect:_t,filterContainer:wt,slideUpIn:At,searchBarWrapper:Lt,inputIconWrapper:Ct,searchIcon:Nt,searchInput:bt,searchActions:Bt,searchBtn:kt,filterToggleBtn:Rt,advancedFilters:Tt,show:Wt,filterDivider:It,filterGrid:xt,filterItem:Pt,genreSection:$t,genreLabel:Ft,genreContainer:Gt,genreButton:Ot,include:Mt,exclude:Et,filterActions:Dt,applyBtn:zt},Ne=["All","Continue Watching","Watching","Completed","On-Hold","Dropped","Planned"],Ce=Ne.slice(2),Ut=[{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+)"}],qt=[{value:"ALL",label:"All Seasons"},{value:"WINTER",label:"Winter"},{value:"SPRING",label:"Spring"},{value:"SUMMER",label:"Summer"},{value:"FALL",label:"Fall"}],ca=()=>{fe(()=>{document.title="Watchlist - dango"},[]);const{filter:d="All"}=He(),v=Ze(),[l,w]=Je(),Q=et(),le=tt(),[f,I]=h(parseInt(l.get("page")||"1")),[A,x]=h(l.get("query")||""),[L,V]=h(l.get("sortBy")||"last_added"),[C,P]=h(l.get("type")||"ALL"),[N,$]=h(l.get("season")||"ALL"),[b,F]=h(l.get("year")||"ALL"),[k,G]=h(()=>{const e={},a=l.get("genres")?.split(",").map(r=>r.trim()).filter(Boolean)||[],s=l.get("excludeGenres")?.split(",").map(r=>r.trim()).filter(Boolean)||[];return a.forEach(r=>r&&(e[r]="include")),s.forEach(r=>r&&(e[r]="exclude")),e}),[O,be]=h(()=>["type","season","year","genres","excludeGenres"].some(e=>l.has(e))),{lowEndMode:Be}=at(),{titlePreference:M}=nt(),{data:ke}=st(),re=ke?.genres||[],H=ye(null),[o,B]=h(null),[Z,E]=h(!1),[ce,D]=h(!1),[z,Re]=h(!1),[p,y]=h(new Set),J=ye(null),i=d==="Continue Watching",U=T(()=>{const e=new URLSearchParams(l);return e.delete("page"),e.set("titlePreference",M),e.toString()},[l,M]),{data:q,isLoading:Te,error:We}=_e(U,f,14),{data:Y,isLoading:Ie,error:xe}=we(d,U,f,14),{data:Pe}=_e(U,f+1,14),{data:$e}=we(d,U,f+1,14),X=T(()=>(i?q?.data:Y?.data)||[],[i,q,Y]),R=T(()=>(i?q?.total:Y?.total)||0,[i,q,Y]),j=i?Te:Ie,ie=i?We:xe,oe=i?Pe:$e;fe(()=>{x(l.get("query")||""),V(l.get("sortBy")||"last_added"),P(l.get("type")||"ALL"),$(l.get("season")||"ALL"),F(l.get("year")||"ALL");const e={},a=l.get("genres")?.split(",").map(u=>u.trim()).filter(Boolean)||[],s=l.get("excludeGenres")?.split(",").map(u=>u.trim()).filter(Boolean)||[];a.forEach(u=>u&&(e[u]="include")),s.forEach(u=>u&&(e[u]="exclude")),G(e),I(parseInt(l.get("page")||"1"));const r=ft(d,l);J.current!==null&&J.current!==r&&y(new Set),J.current=r},[l,d]);const Fe=Se({mutationFn:async({id:e,status:a})=>{await rt.watchlist.setStatus.mutate({id:e,status:a})},onSuccess:()=>{Q.invalidateQueries({queryKey:[Ae.watchlist]}),lt.success("Status updated")}}),Ge=Se(le.continueWatching.remove.mutationOptions({onSuccess:()=>{Q.invalidateQueries(le.continueWatching.pathFilter()),Q.invalidateQueries({queryKey:[Ae.continueWatching]})}})),ee=ct(),{data:de}=it("skipRemoveConfirmation"),Oe=ot(),te=T(()=>{const e=a=>a[M]||a.name||"";return[...X].sort((a,s)=>L==="name_asc"?e(a).localeCompare(e(s)):L==="name_desc"?e(s).localeCompare(e(a)):0)},[X,L,M]),ae=new Date().getFullYear(),Me=[{value:"ALL",label:"All Years"},...Array.from({length:ae-1980+1},(e,a)=>({value:String(ae-a),label:String(ae-a)}))],m=(e=L,a=1)=>{const s=new URLSearchParams;A.trim()&&s.set("query",A.trim()),e!=="last_added"&&s.set("sortBy",e),C!=="ALL"&&s.set("type",C),N!=="ALL"&&s.set("season",N),b!=="ALL"&&s.set("year",b);const r=Object.entries(k).filter(([,_])=>_==="include").map(([_])=>_),u=Object.entries(k).filter(([,_])=>_==="exclude").map(([_])=>_);r.length>0&&s.set("genres",r.join(",")),u.length>0&&s.set("excludeGenres",u.join(",")),a>1&&s.set("page",a.toString()),w(s),a!==f&&I(a)},he=e=>{if(m(L,e),H.current){const a=H.current.getBoundingClientRect().top+window.scrollY-100;window.scrollTo({top:a,behavior:"smooth"})}},Ee=()=>{x(""),V("last_added"),P("ALL"),$("ALL"),F("ALL"),G({}),w(new URLSearchParams),I(1)},De=e=>{G(a=>{const s=a[e],r={...a};return s==="include"?r[e]="exclude":s==="exclude"?delete r[e]:r[e]="include",r})},ue=(e,a)=>{if(i){B({id:e,name:a});return}String(de)==="true"||String(de)==="1"?ee.mutate({id:e}):B({id:e,name:a})},ze=()=>{if(o){if(o.ids){i?(Ue.mutate({ids:o.ids}),Z&&pe.mutate({ids:o.ids})):pe.mutate({ids:o.ids}),y(new Set),B(null),E(!1),D(!1);return}i?(Ge.mutate({showId:o.id}),Z&&ee.mutate({id:o.id})):ee.mutate({id:o.id}),ce&&Oe.mutate({key:"skipRemoveConfirmation",value:!0}),B(null),E(!1),D(!1)}},me=()=>{B(null),E(!1),D(!1)},pe=dt(),Ue=ht(),qe=ut(),Ye=()=>{Re(e=>{const a=!e;return a||y(new Set),a})},je=e=>{y(a=>{const s=new Set(a);return s.has(e)?s.delete(e):s.add(e),s})},K=te.map(e=>e.id),ne=K.length>0&&K.every(e=>p.has(e)),Ke=()=>{y(ne?e=>St(e,K):e=>yt(e,K))},Qe=e=>{p.size!==0&&(qe.mutate({ids:[...p],status:e}),y(new Set))},Ve=()=>{p.size!==0&&B({ids:[...p]})},ge=X.length>=14&&oe&&oe.data.length>0,ve=T(()=>Math.max(1,Math.ceil(R/14)),[R]),S=[];A.trim()&&S.push({key:"query",label:`Search: ${A}`,onRemove:()=>{x(""),m()}}),C!=="ALL"&&S.push({key:"type",label:`Type: ${C}`,onRemove:()=>{P("ALL"),m()}}),N!=="ALL"&&S.push({key:"season",label:`Season: ${N}`,onRemove:()=>{$("ALL"),m()}}),b!=="ALL"&&S.push({key:"year",label:`Year: ${b}`,onRemove:()=>{F("ALL"),m()}});for(const[e,a]of Object.entries(k))S.push({key:e,label:a==="include"?`+ ${e}`:`-${e}`,tone:a==="include"?"primary":"danger",onRemove:()=>{G(s=>{const r={...s};return delete r[e],r}),m()}});return t("div",{className:"page-container",children:[t("header",{className:n.header,children:[t("h2",{className:n.title,children:"My Watchlist"}),t("p",{className:n.subtitle,children:"Track and manage your anime collection"})]}),t("div",{className:n.controls,children:[t("div",{className:n.filters,children:Ne.map(e=>t("button",{className:`${n.filterBtn} ${d===e?n.active:""}`,onClick:()=>{const a=new URLSearchParams(l);a.delete("page"),v({pathname:`/watchlist/${e}`,search:a.toString()}),I(1)},children:e},e))}),t("div",{children:t("select",{className:c.sortSelect,value:L,onChange:e=>{const a=e.currentTarget.value;V(a),m(a,f)},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:c.filterContainer,children:[t("div",{className:c.searchBarWrapper,children:[t("div",{className:c.inputIconWrapper,children:[t(g,{name:"search",className:c.searchIcon}),t("input",{className:c.searchInput,placeholder:"Search your watchlist by title...",value:A,onInput:e=>x(e.currentTarget.value),onKeyDown:e=>e.key==="Enter"&&m()})]}),t("div",{className:c.searchActions,children:[t(W,{onClick:()=>m(),className:c.searchBtn,children:"Search"}),t("button",{className:`${c.filterToggleBtn} ${O?n.active:""}`,onClick:()=>be(!O),children:[t(g,{name:"filter",size:14}),t("span",{children:"Filters"}),O?t(g,{name:"chevron-up",size:12}):t(g,{name:"chevron-down",size:12})]})]})]}),t("div",{className:`${c.advancedFilters} ${O?c.show:""}`,children:[t("div",{className:c.filterDivider}),t("div",{className:c.filterGrid,children:[t("div",{className:c.filterItem,children:[t("label",{children:"Type"}),t("select",{value:C,onChange:e=>P(e.currentTarget.value),children:Ut.map(e=>t("option",{value:e.value,children:e.label},e.value))})]}),t("div",{className:c.filterItem,children:[t("label",{children:"Season"}),t("select",{value:N,onChange:e=>$(e.currentTarget.value),children:qt.map(e=>t("option",{value:e.value,children:e.label},e.value))})]}),t("div",{className:c.filterItem,children:[t("label",{children:"Year"}),t("select",{value:b,onChange:e=>F(e.currentTarget.value),children:Me.map(e=>t("option",{value:e.value,children:e.label},e.value))})]})]}),re.length>0&&t("div",{className:c.genreSection,children:[t("label",{className:c.genreLabel,children:"Genres"}),t("div",{className:c.genreContainer,children:re.map(e=>t("button",{className:`${c.genreButton} ${c[k[e]||""]}`,onClick:()=>De(e),children:e},e))})]}),t("div",{className:c.filterActions,children:[t(W,{variant:"secondary",onClick:Ee,children:"Reset All"}),t(W,{onClick:()=>m(),className:c.applyBtn,children:"Apply Filters"})]})]})]}),t("div",{className:n.resultsHeader,ref:H,children:[t("h3",{className:n.resultsTitle,children:[i?"Continue Watching":d,t("span",{className:n.itemCount,children:["(",R," items)"]})]}),t("div",{className:n.headerActions,children:[t("button",{className:`${n.manageBtn} ${z?n.active:""}`,onClick:Ye,children:[t(g,{name:"pencil-alt",size:13}),t("span",{children:"Bulk Manage"})]}),R>0&&t(Le,{page:f,totalPages:ve,canGoNext:ge,onChange:he,isLoading:j})]})]}),z&&t("div",{className:n.manageBar,children:[t("button",{className:n.selectAllBtn,onClick:Ke,children:[t("span",{className:`${n.selectAllBox} ${ne?n.selectAllBoxChecked:""}`,"aria-hidden":"true"}),t("span",{children:ne?"Clear Page":"Select All"})]}),t("span",{className:n.manageCount,children:[p.size," selected"]}),t("div",{className:n.manageSpacer}),!i&&t("select",{className:n.manageStatusSelect,value:"",onChange:e=>{e.currentTarget.value&&Qe(e.currentTarget.value)},disabled:p.size===0,title:"Set status for selected items",children:[t("option",{value:"",children:"Set status…"}),Ce.map(e=>t("option",{value:e,children:e},e))]}),t("button",{className:n.manageRemoveBtn,onClick:Ve,disabled:p.size===0,children:[t(g,{name:"trash",size:13}),t("span",{children:"Remove Selected"})]})]}),j?t(pt,{}):ie?t(gt,{message:ie.message}):t(Xe,{children:[S.length>0&&t(vt,{chips:S}),t("div",{className:`${n.grid} ${Be?n.lowEnd:""}`,children:te.map(e=>{const a=p.has(e.id);return t("div",{className:`${n.itemWrapper} ${a?n.selected:""}`,children:[z&&t("div",{className:n.selectOverlay,onClick:()=>je(e.id),title:a?"Deselect":"Select",children:t("span",{className:n.selectBadge,children:a?t(g,{name:"check",size:12}):null})}),t(mt,{anime:e,continueWatching:i,onRemove:()=>ue(e.id,e.name),layout:"vertical"}),!i&&!z&&t("div",{className:n.cardActions,children:[t("select",{className:n.statusSelect,value:e.status,onChange:s=>Fe.mutate({id:e.id,status:s.currentTarget.value}),children:Ce.map(s=>t("option",{value:s,children:s},s))}),t("button",{className:n.removeBtn,onClick:()=>ue(e.id,e.name),title:"Remove from Watchlist","aria-label":"Remove from Watchlist",children:t(g,{name:"trash",size:12})})]})]},e._id)})})]}),!j&&te.length===0&&t("div",{className:n.emptyState,children:[t("h3",{className:n.emptyTitle,children:"Your watchlist is looking a bit lonely"}),t("p",{className:n.emptyText,children:d!=="All"||A||C!=="ALL"||N!=="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:n.emptyBtn,onClick:()=>v("/search"),children:[t(g,{name:"search",size:14}),t("span",{children:"Browse Anime"})]})]}),R>0&&t("div",{className:n.bottomPagination,children:t(Le,{page:f,totalPages:ve,canGoNext:ge,onChange:he,isLoading:j,variant:"labeled"})}),t(se,{isOpen:!!o,onClose:me,title:i?"Reset Progress":"Remove from Watchlist",children:[t(se.Body,{children:[t("p",{children:o?.ids&&o.ids.length>1?i?`Are you sure you want to remove watch progress for ${o.ids.length} items?`:`Are you sure you want to remove ${o.ids.length} items from your watchlist?`:i?`Are you sure you want to remove your watch progress for "${o?.name}"?`:`Are you sure you want to remove "${o?.name}" from your watchlist?`}),i&&t("label",{children:[t("input",{type:"checkbox",checked:Z,onChange:e=>E(e.currentTarget.checked)}),"Also remove from my watchlist"]}),!i&&!(o?.ids&&o.ids.length>1)&&t("label",{children:[t("input",{type:"checkbox",checked:ce,onChange:e=>D(e.currentTarget.checked)}),"Remember my choice"]})]}),t(se.Actions,{children:[t(W,{variant:"secondary",onClick:me,children:"No"}),t(W,{variant:"danger",onClick:ze,children:"Yes"})]})]})]})};export{ca as default};
|