@serifpersia/dango 4.0.4 → 4.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/README.md +1 -1
  2. package/client/dist/assets/AnimeCard-ZMgtR741.js +1 -0
  3. package/client/dist/assets/AnimeInfo-CmDzxK-x.js +1 -0
  4. package/client/dist/assets/AnimeInfoPage-BtMHG64S.js +2 -0
  5. package/client/dist/assets/Asmr-Ct7Pp0i7.js +2 -0
  6. package/client/dist/assets/AsmrPopup-ER6dDxFM.js +1 -0
  7. package/client/dist/assets/{AsmrResetProgressModal-BFgtJIjq.js → AsmrResetProgressModal-CmDqGKma.js} +1 -1
  8. package/client/dist/assets/Home-CWsXJfHc.js +1 -0
  9. package/client/dist/assets/{Insights-xaMU0gDH.js → Insights-Dlu3LypY.js} +1 -1
  10. package/client/dist/assets/{LibraryListPage-y1J_sbu3.js → LibraryListPage-L4Lyt1BV.js} +1 -1
  11. package/client/dist/assets/ListeningList-CEiZWAUS.js +1 -0
  12. package/client/dist/assets/Manga-CazCyWIh.js +1 -0
  13. package/client/dist/assets/{MangaInfoPage-BHnn83Zv.js → MangaInfoPage-8ZsayGOJ.js} +1 -1
  14. package/client/dist/assets/{MangaReadPage-CDQJ6lwj.js → MangaReadPage-CG59Zuhi.js} +1 -1
  15. package/client/dist/assets/{MangaResetProgressModal-Cw4txoU9.js → MangaResetProgressModal-CmIGgwJc.js} +1 -1
  16. package/client/dist/assets/Mature-B_0sseRY.css +1 -0
  17. package/client/dist/assets/Mature-Dw4DVRVT.js +1 -0
  18. package/client/dist/assets/{MatureConsentModal-BuJjdQ5N.js → MatureConsentModal-CBGHgiBA.js} +1 -1
  19. package/client/dist/assets/MediaCard-Bd24Icus.js +1 -0
  20. package/client/dist/assets/MediaCard-DsoEaANc.css +1 -0
  21. package/client/dist/assets/OptionListMenu-BdiwBX1S.js +1 -0
  22. package/client/dist/assets/Player-DJSkQVjM.js +56 -0
  23. package/client/dist/assets/PlayerControls.module-D5c6Q5Ln.js +1 -0
  24. package/client/dist/assets/PlayerProvider-C6humJW5.js +1 -0
  25. package/client/dist/assets/PlayerSettings-C3MmSKgQ.js +1 -0
  26. package/client/dist/assets/PlayerSurface-C0SuP9xJ.js +1 -0
  27. package/client/dist/assets/PlayerSurface-LthWKdFi.css +1 -0
  28. package/client/dist/assets/{QueueOptionsButton-Tsij7x21.js → QueueOptionsButton-C1o8UacJ.js} +1 -1
  29. package/client/dist/assets/{QueueRail-DHSBCDXc.js → QueueRail-Dj_zPCND.js} +1 -1
  30. package/client/dist/assets/{ReadingList-Bl-49YU7.js → ReadingList-CMo85dG4.js} +1 -1
  31. package/client/dist/assets/{ResetProgressModal-DIn1j8Qp.js → ResetProgressModal-udBYaYWc.js} +1 -1
  32. package/client/dist/assets/Search-DM1vfczV.css +1 -0
  33. package/client/dist/assets/{Search-uY6VQ4os.js → Search-vE5ITchW.js} +1 -1
  34. package/client/dist/assets/Search.module-DjQZ0jox.js +1 -0
  35. package/client/dist/assets/Settings-DTdakL-f.js +21 -0
  36. package/client/dist/assets/SettingsShell-ByVlsU3X.js +1 -0
  37. package/client/dist/assets/{SkeletonGrid-xUVpcN5T.js → SkeletonGrid-CKVHMLEB.js} +1 -1
  38. package/client/dist/assets/{Trackers-DXrxbGg1.js → Trackers-Cbuzzhap.js} +2 -2
  39. package/client/dist/assets/{Tv-DFrBiMVQ.js → Tv-z-RzIer_.js} +4 -4
  40. package/client/dist/assets/{TvInfo-eLmiGzwb.js → TvInfo-DBdRrmSJ.js} +1 -1
  41. package/client/dist/assets/TvPopup-C_TEPZqV.js +1 -0
  42. package/client/dist/assets/{TvSearch-D_IGBBD8.js → TvSearch-DhZt3CXR.js} +1 -1
  43. package/client/dist/assets/{TvWatchlist-Ol8QK-C9.js → TvWatchlist-Dg7X14X1.js} +1 -1
  44. package/client/dist/assets/{VirtualKeyboard-Bp-M8SVt.js → VirtualKeyboard-BkfL6fYx.js} +1 -1
  45. package/client/dist/assets/{WatchAlong-qJzs9_fD.js → WatchAlong-D-Wdl6L6.js} +1 -1
  46. package/client/dist/assets/{WatchAlongPanel-DLuYT4hH.js → WatchAlongPanel-BtiB_ErQ.js} +1 -1
  47. package/client/dist/assets/{Watchlist-DcAUYWtZ.js → Watchlist-DFXVM31Q.js} +1 -1
  48. package/client/dist/assets/{index-BBbcJwUD.css → index-BpCEsLT2.css} +1 -1
  49. package/client/dist/assets/index-hrS3r0UE.js +179 -0
  50. package/client/dist/assets/{libraryInvalidation-Cv-7EfU1.js → libraryInvalidation-DWCCaTbI.js} +1 -1
  51. package/client/dist/assets/{playbackCompletion-BTwrTq5S.js → playbackCompletion-DzRc-CrM.js} +1 -1
  52. package/client/dist/assets/{useAnimeInfoData-tmC_S41n.js → useAnimeInfoData-Di0AjMa7.js} +1 -1
  53. package/client/dist/assets/{useMangaLibrary-CPluPl_T.js → useMangaLibrary-DQvZO29f.js} +1 -1
  54. package/client/dist/assets/{useMangaPopup-DRDWlEcN.js → useMangaPopup-BiaJvL8C.js} +1 -1
  55. package/client/dist/assets/{useTv-Dl0TYap6.js → useTv-Daayom0r.js} +1 -1
  56. package/client/dist/assets/{useTvLibrary-BCgO-d_K.js → useTvLibrary-7zDxMjFz.js} +1 -1
  57. package/client/dist/assets/useWatchAlongPlayer-BNJCb3D5.js +10 -0
  58. package/client/dist/assets/{useWatchAlongPlayer-Dk7zB7P4.css → useWatchAlongPlayer-BsaopdPw.css} +1 -1
  59. package/client/dist/index.html +2 -2
  60. package/orchestrator.js +1 -1
  61. package/package.json +2 -2
  62. package/server/dist/server.js +169 -169
  63. package/server/package.json +1 -1
  64. package/client/dist/assets/AnimeCard-Dj2gXZQ_.js +0 -1
  65. package/client/dist/assets/AnimeInfo-FTnsxEMu.js +0 -1
  66. package/client/dist/assets/AnimeInfoPage-DaoQEHyi.js +0 -2
  67. package/client/dist/assets/Asmr-Dj290riM.js +0 -2
  68. package/client/dist/assets/AsmrPopup-DCxF-0FD.js +0 -1
  69. package/client/dist/assets/Home-BvAHDt_3.js +0 -1
  70. package/client/dist/assets/ListeningList-DxPvvTGs.js +0 -1
  71. package/client/dist/assets/Manga-Dc9QLjTm.js +0 -1
  72. package/client/dist/assets/Mature-DJmUUtlF.css +0 -1
  73. package/client/dist/assets/Mature-DdHf-knG.js +0 -1
  74. package/client/dist/assets/MediaCard-Co-j57uA.css +0 -1
  75. package/client/dist/assets/MediaCard-FQr72c16.js +0 -1
  76. package/client/dist/assets/OptionListMenu-CAjFAq0c.js +0 -1
  77. package/client/dist/assets/Player-DO3lmGMJ.js +0 -56
  78. package/client/dist/assets/PlayerProvider-1nQxpPbi.js +0 -1
  79. package/client/dist/assets/PlayerSettings-BxmbpvrQ.js +0 -1
  80. package/client/dist/assets/Search-DCKK3seW.css +0 -1
  81. package/client/dist/assets/Search.module-C_qwCdHS.js +0 -1
  82. package/client/dist/assets/Settings-CHkvGAxk.js +0 -21
  83. package/client/dist/assets/TvPopup-CaXs4L6B.js +0 -1
  84. package/client/dist/assets/index-CkZCduQZ.js +0 -178
  85. package/client/dist/assets/useProviders-aA8vRBov.js +0 -1
  86. package/client/dist/assets/useWatchAlongPlayer-DfbkmL7h.js +0 -10
  87. /package/client/dist/assets/{Player-1LfYnRyR.css → PlayerControls-1LfYnRyR.css} +0 -0
@@ -1,4 +1,4 @@
1
- import{u as t,d as b,A as K,h as C,S as Ie,g as qr,q as N,o as Kr,p as Yr,a as Qr,T as ye}from"./vendor-core-DfaOB3Rn.js";import{h as an,p as F,t as rt,ac as jr,a7 as Gr,U as us,e as Xr,ak as Zr,K as Ys,B as _e,F as Jr}from"./index-CkZCduQZ.js";import{P as eo,a as to,b as no,F as so,f as ro,c as oo}from"./PlayerProvider-1nQxpPbi.js";import{u as ao}from"./vendor-query-BBT5_sHx.js";import{I as he}from"./vendor-icons-C1Pj_eSX.js";import{p as hs,M as io,z as Zs,f as ps,c as lo,C as co,a as uo,P as mo,b as xn,u as ho,i as po,j as vo,n as fo,h as bo,k as go,m as yo,l as _o,s as Pn,d as So,e as Co,g as To,r as ko,o as Me,A as No,t as Eo,E as wo,w as Io,x as Ao,v as te,y as xo,R as Po,q as Qs}from"./useWatchAlongPlayer-DfbkmL7h.js";import{S as Lo,O as Ln,a as Ro,A as $o,b as Mo}from"./OptionListMenu-CAjFAq0c.js";import{M as Bo}from"./MatureConsentModal-BuJjdQ5N.js";import{u as Oo}from"./useProviders-aA8vRBov.js";import{e as Do,b as zo,f as Fo,g as Vo,d as Uo,c as Wo,h as Ho,i as qo}from"./useTvLibrary-BCgO-d_K.js";import{b as Ko,i as on,l as Yo,a as Qo,c as jo,h as js}from"./playbackCompletion-BTwrTq5S.js";import{u as Go}from"./useIsMobile-Dvx1uJ82.js";import{S as Xo}from"./SynopsisText-B3Sa5pRv.js";import{W as Zo}from"./WatchAlongPanel-DLuYT4hH.js";import"./libraryInvalidation-Cv-7EfU1.js";const Jo="_fullscreenFlat_n2elb_1",ea="_timeDisplay_n2elb_12",ta="_bottomControls_n2elb_16",na="_leftControls_n2elb_20",sa="_rightControls_n2elb_21",ra="_controlBtn_n2elb_25",oa="_controlsOverlay_n2elb_32",aa="_hidden_n2elb_52",ia="_topControls_n2elb_58",la="_backBtn_n2elb_78",ca="_videoTitleInfo_n2elb_98",da="_animeTitle_n2elb_104",ua="_episodeLabel_n2elb_112",ma="_speedBoostBadge_n2elb_119",ha="_progressBarContainer_n2elb_165",pa="_progressBar_n2elb_165",va="_thumb_n2elb_184",fa="_bufferedBar_n2elb_202",ba="_watchedBar_n2elb_212",ga="_scrubbing_n2elb_237",ya="_timeBubble_n2elb_241",_a="_bottomControlsRow_n2elb_255",Sa="_nextEpisodeBtn_n2elb_278",Ca="_active_n2elb_340",Ta="_settingsPanel_n2elb_352",ka="_settingsHeader_n2elb_371",Na="_settingsBackBtn_n2elb_379",Ea="_settingsTitle_n2elb_397",wa="_settingsContent_n2elb_408",Ia="_currentValue_n2elb_417",Aa="_menuItem_n2elb_423",xa="_menuNote_n2elb_456",Pa="_loadingOverlay_n2elb_465",La="_loadingDots_n2elb_476",Ra="_dot_n2elb_481",$a="_bufferingOverlay_n2elb_510",Ma="_bufferingSpinner_n2elb_519",o={fullscreenFlat:Jo,timeDisplay:ea,bottomControls:ta,leftControls:na,rightControls:sa,controlBtn:ra,controlsOverlay:oa,hidden:aa,topControls:ia,backBtn:la,videoTitleInfo:ca,animeTitle:da,episodeLabel:ua,speedBoostBadge:ma,progressBarContainer:ha,progressBar:pa,thumb:va,bufferedBar:fa,watchedBar:ba,scrubbing:ga,timeBubble:ya,bottomControlsRow:_a,nextEpisodeBtn:Sa,active:Ca,settingsPanel:Ta,settingsHeader:ka,settingsBackBtn:Na,settingsTitle:Ea,settingsContent:wa,currentValue:Ia,menuItem:Aa,menuNote:xa,loadingOverlay:Pa,loadingDots:La,dot:Ra,bufferingOverlay:$a,bufferingSpinner:Ma},Ba=({player:r,visible:g,settingsOpen:W,onOpenSettings:$,onCloseSettings:D,hasSubtitles:w,isSubtitleActive:P,subtitles:d,onSubtitleChange:i,showNextEpisodeButton:E,onNextEpisode:s,isTheaterMode:M,onTheaterModeToggle:oe,timeLabelRef:ae})=>{const{state:Ae,actions:ot}=r,xe=()=>{if(P){i(-1);return}let Se=null;try{Se=F.getItem("tvLastSubtitle")}catch{}i(hs(d,{lastKey:Se,enabled:!0}))};return t("div",{className:`${o.controlsOverlay} ${g?"":o.hidden}`,"data-speed-boost-ignore":"true",style:{pointerEvents:"none",background:"none",justifyContent:"flex-end"},children:t("div",{className:o.bottomControls,onClick:Se=>Se.stopPropagation(),children:[t(eo,{classes:{container:o.progressBarContainer,scrubbing:o.scrubbing,timeBubble:o.timeBubble,bar:o.progressBar,buffered:o.bufferedBar,watched:o.watchedBar,thumb:o.thumb},timeLabelRef:ae}),t("div",{className:o.bottomControlsRow,children:[t("div",{className:o.leftControls,children:[t(to,{className:o.controlBtn}),t(no,{buttonClassName:o.controlBtn,onExpandedChange:ot.setShowVolumeSlider}),t("span",{className:o.timeDisplay,ref:ae,children:[an(0)," / ",an(Ae.duration)]})]}),t("div",{className:o.rightControls,children:[E&&t("button",{className:o.nextEpisodeBtn,onClick:s,title:"Play next episode",children:"Next EP"}),w&&t("button",{className:`${o.controlBtn} ${P?o.active:""}`,onClick:xe,"aria-label":P?"Turn subtitles off":"Turn subtitles on",children:t(he,{name:"closed-captioning"})}),t("button",{className:`${o.controlBtn} ${W?o.active:""}`,onClick:()=>W?D():$(),"aria-label":"Settings",children:t(he,{name:"cog"})}),t("button",{className:`${o.controlBtn} ${M?o.active:""}`,onClick:Se=>{Se.stopPropagation(),oe()},title:M?"Exit Theater Mode":"Theater Mode","aria-label":M?"Exit Theater Mode":"Theater Mode",children:t(he,{name:"tv"})}),t(so,{className:o.controlBtn})]})]})]})})},Rn=-6e4,ms=6e4,Gs=500,Oa=({classes:r,delayMs:g,onDelayChange:W})=>{const[$,D]=b(null),w=$??g,P=K(W);P.current=W;const d=K(g);d.current=g;const i=K(null);i.current=$,C(()=>{D(null)},[g]),C(()=>()=>{const M=i.current;M!==null&&M!==d.current&&P.current(M)},[]);const E=M=>{d.current=M,i.current=null,P.current(M),D(null)},s=M=>{const oe=i.current??d.current,ae=Math.max(Rn,Math.min(ms,oe+M));E(ae)};return t(Ie,{children:[t("div",{style:{display:"flex",gap:6,padding:"0.5rem 0.75rem 0.25rem"},children:[t("button",{type:"button",className:r.item,onClick:()=>s(-Gs),"aria-label":"Show subtitles 0.5 seconds earlier",style:{flex:1,justifyContent:"center"},children:t("span",{children:"-0.5s"})}),t("button",{type:"button",className:r.item,onClick:()=>s(Gs),"aria-label":"Show subtitles 0.5 seconds later",style:{flex:1,justifyContent:"center"},children:t("span",{children:"+0.5s"})}),t("button",{type:"button",className:r.item,onClick:()=>E(0),disabled:w===0,"aria-label":"Reset subtitle timing",style:{flex:1,justifyContent:"center"},children:t("span",{children:"Reset"})})]}),t(io,{label:"Subtitle timing",display:Zs(w),min:Rn,max:ms,step:100,value:w,percent:(w-Rn)/(ms-Rn)*100,onChange:M=>{const oe=Math.round(M);i.current=oe,D(oe)},onCommit:()=>{const M=i.current;M!==null&&E(M)}}),t("div",{className:r.note,children:"Positive delays subtitles (show later). Negative shows them earlier. 0.0s is default."})]})},Da=({view:r,onSelectView:g,onClose:W,player:$,onSubtitleStyleChange:D,streams:w,resolutionIdx:P,onResolutionChange:d,hasSubtitles:i,subtitles:E,selectedSubtitle:s,isSubtitleActive:M,onSubtitleChange:oe,audioTracks:ae,selectedAudioTrack:Ae,onAudioTrackChange:ot,videoDelayEnabled:xe,onVideoDelayToggle:Se,videoDelayMs:Be,onVideoDelayChange:u,onCalibrate:Ke,subtitleDelayMs:at,onSubtitleDelayChange:Mt,ambientSettings:pe,onAmbientChange:v,onOpenSubtitles:it,openSubLanguages:Ye,openSubFiles:T,openSubLoading:V,openSubError:se,onOpenSubLangSelect:St,onOpenSubFileSelect:Bt})=>{const{state:ne}=$,lt=()=>t(Ie,{children:[w.length>1&&t("button",{className:o.menuItem,onClick:()=>g("resolution"),children:[t("span",{children:"Resolution"}),t("span",{className:o.currentValue,children:w[P]?.quality||"Auto"})]}),(i||it)&&t("button",{className:o.menuItem,onClick:()=>g("subtitles"),children:[t("span",{children:"Subtitles"}),t("span",{className:o.currentValue,children:M?E[s]?.label||E[s]?.language:"Off"})]}),i&&t("button",{className:o.menuItem,onClick:()=>g("subtitle-style"),children:[t("span",{children:"Subtitle Style"}),t("span",{className:o.currentValue,children:[ne.subtitleFontSize.toFixed(1),"x · ",ne.subtitlePosition]})]}),i&&t("button",{className:o.menuItem,onClick:()=>g("subtitle-timing"),children:[t("span",{children:"Subtitle Timing"}),t("span",{className:o.currentValue,children:Zs(at)})]}),ae.length>0&&t("button",{className:o.menuItem,onClick:()=>g("audio"),children:[t("span",{children:"Audio Track"}),t("span",{className:o.currentValue,children:ae[Ae]?.label||ae[Ae]?.language})]}),t("button",{className:o.menuItem,onClick:()=>g("av-sync"),children:[t("span",{children:"A/V Sync"}),t("span",{className:o.currentValue,children:xe?`${Be}ms`:"Off"})]}),pe&&v&&t("button",{className:o.menuItem,onClick:()=>g("ambient"),children:[t("span",{children:"Ambient Light"}),t("span",{className:o.currentValue,children:pe.enabled?"On":"Off"})]})]}),Ct=()=>t(Ln,{classes:{item:o.menuItem,active:o.active},options:w.map((y,I)=>({key:String(I),label:y.quality,selected:I===P})),onSelect:y=>d(Number(y))}),Ot=()=>t(Ie,{children:[t("button",{type:"button",className:`${o.menuItem} ${M?"":o.active}`,onClick:()=>oe(-1),children:t("span",{children:"Off"})}),it&&t("button",{type:"button",className:o.menuItem,onClick:it,children:t("span",{children:"Open Subtitles..."})}),E.map((y,I)=>t("button",{type:"button",className:`${o.menuItem} ${I===s?o.active:""}`,onClick:()=>oe(I),children:t("span",{children:y.label||y.language})},I))]}),Dt=()=>t(Ie,{children:[V&&t("div",{className:o.menuNote,children:"Loading languages..."}),!V&&se&&t("div",{className:o.menuNote,children:se}),!V&&!se&&(Ye?.length??0)===0&&t("div",{className:o.menuNote,children:"No languages found"}),!V&&(Ye?.length??0)>0&&t(Ln,{classes:{item:o.menuItem,active:o.active},options:(Ye||[]).map((y,I)=>({key:String(y.id||y.language||I),label:`${y.label||y.language||y.id}${y.count?` (${y.count})`:""}`,selected:!1})),onSelect:y=>St?.(y)})]}),ie=()=>t(Ie,{children:[V&&t("div",{className:o.menuNote,children:"Loading files..."}),!V&&se&&t("div",{className:o.menuNote,children:se}),!V&&!se&&(T?.length??0)===0&&t("div",{className:o.menuNote,children:"No files found"}),!V&&(T?.length??0)>0&&t(Ln,{classes:{item:o.menuItem,active:o.active},options:(T||[]).map(y=>({key:y.id,label:y.label,selected:!1})),onSelect:y=>{const I=(T||[]).find(dt=>String(dt.id)===y);I&&Bt?.({...I,language:I.language||"en"})}})]}),le=()=>t(Ro,{classes:{item:o.menuItem,active:o.active},values:{fontSize:ne.subtitleFontSize,position:ne.subtitlePosition,bgOpacity:ne.subtitleBgOpacity,bgColor:ne.subtitleBgColor,textColor:ne.subtitleTextColor,edge:ne.subtitleEdge,bold:ne.subtitleBold},onChange:D}),ct=()=>t(Oa,{classes:{item:o.menuItem,active:o.active,note:o.menuNote},delayMs:at,onDelayChange:y=>Mt?.(y)}),Oe=()=>t(Ln,{classes:{item:o.menuItem,active:o.active},options:ae.map((y,I)=>({key:String(I),label:y.label||y.language,selected:I===Ae})),onSelect:y=>ot(Number(y))}),ce=()=>t($o,{classes:{item:o.menuItem,active:o.active,note:o.menuNote},enabled:xe,delayMs:Be,onToggle:y=>Se?.(y),onDelayChange:y=>u?.(y),onCalibrate:Ke}),Ce=()=>pe&&v?t(Mo,{classes:{item:o.menuItem,active:o.active,note:o.menuNote},values:pe,onChange:v}):null;return t("div",{"data-speed-boost-ignore":"true",onClick:y=>y.stopPropagation(),children:t(Lo,{classes:{panel:o.settingsPanel,header:o.settingsHeader,backBtn:o.settingsBackBtn,title:o.settingsTitle,content:o.settingsContent},title:r==="main"?"Settings":r==="subtitle-style"?"Subtitle Style":r==="subtitle-timing"?"Subtitle Timing":r==="audio"?"Audio Track":r==="resolution"?"Resolution":r==="av-sync"?"A/V Sync":r==="ambient"?"Ambient Light":r==="opensub-langs"?"Open Subtitles":r==="opensub-files"?"Select File":r.charAt(0).toUpperCase()+r.slice(1),onBack:()=>{if(r==="main")return W();if(r==="opensub-files")return g("opensub-langs");g("main")},children:[r==="main"&&lt(),r==="resolution"&&Ct(),r==="subtitles"&&Ot(),r==="subtitle-style"&&le(),r==="subtitle-timing"&&ct(),r==="audio"&&Oe(),r==="av-sync"&&ce(),r==="ambient"&&Ce(),r==="opensub-langs"&&Dt(),r==="opensub-files"&&ie()]})})},za=({player:r,title:g,episodeLabel:W,server:$,audioTracks:D,selectedAudioTrack:w,onAudioTrackChange:P,subtitles:d,selectedSubtitle:i,onSubtitleChange:E,streams:s,resolutionIdx:M,onResolutionChange:oe,onBack:ae,children:Ae,videoDelayEnabled:ot=!1,onVideoDelayToggle:xe,videoDelayMs:Se=0,onVideoDelayChange:Be,onCalibrateAvSync:u,subtitleDelayMs:Ke=0,onSubtitleDelayChange:at,showNextEpisodeButton:Mt=!1,onNextEpisode:pe,isLoading:v=!1,isTheaterMode:it,onTheaterModeToggle:Ye,ambientSettings:T,onAmbientChange:V,hideChrome:se=!1,onOpenSubtitles:St,openSubLanguages:Bt,openSubFiles:ne,openSubLoading:lt,openSubError:Ct,onOpenSubLangSelect:Ot,onOpenSubFileSelect:Dt})=>{const{state:ie,refs:le,actions:ct}=r,Oe=le.videoRef,{subtitleFontSize:ce,subtitlePosition:Ce,subtitleBgOpacity:y,subtitleBgColor:I,subtitleTextColor:dt,subtitleEdge:zt,subtitleBold:De}=ie,[ze,de]=b(null),Tt=K(null),[ve,Fe]=b(0);C(()=>{const re=Oe.current;if(!re)return;const Te=()=>Fe(re.clientHeight||0);Te();const H=new ResizeObserver(Te);return H.observe(re),()=>H.disconnect()},[Oe]);const $n=ct.setSubtitleStyle;C(()=>{const re="tv-player-subtitle-style";let Te=document.getElementById(re);Te||(Te=document.createElement("style"),Te.id=re,document.head.appendChild(Te));const H={fontSize:ce,position:Ce,bgOpacity:y,bgColor:I,textColor:dt,edge:zt,bold:De},X=Oe.current,R=ps(ce,ve||X?.clientHeight||720);if(Te.textContent=lo({...H,fontSize:R}),X){const wt=()=>{const z=Number(Ce);return isNaN(z)?0:Math.max(0,Math.min(100,z))},It=(z,Q)=>{try{const ue=z;ue.snapToLines=!1,ue.line=Q}catch{}},Ue=()=>{const z=R*16,Q=X.videoHeight||X.clientHeight||720,ue=X.videoWidth||X.clientWidth||1280;return{step:z*1.3/Q*100,chars:Math.max(20,Math.floor(ue/(z*.55)))}},Ht=z=>{const Q=Math.max(0,Math.min(100,100-wt())),ue=Array.from(z.activeCues??[]);if(ue.length<=1){ue.forEach(m=>It(m,Q));return}const{step:Yt,chars:cn}=Ue();let xt=Q;for(let m=ue.length-1;m>=0;m--){const ke=String(ue[m].text??"").replace(/<[^>]*>/g,"").split(`
2
- `).reduce((dn,un)=>dn+Math.max(1,Math.ceil(un.length/cn)),0),fe=xt-ke*Yt;It(ue[m],Math.max(0,fe)),xt=fe-Yt*.4}},qt=()=>{const z=Math.max(0,Math.min(100,100-wt()));Array.from(X.textTracks).forEach(Q=>{Q.cues&&(Array.from(Q.cues).forEach(ue=>It(ue,z)),Q.mode==="showing"&&Ht(Q))})};qt();const Qe=z=>{const Q=z.target;Q.mode==="showing"&&Ht(Q)},Kt=()=>{Array.from(X.textTracks).forEach(z=>{z.removeEventListener("cuechange",Qe),z.addEventListener("cuechange",Qe)}),qt()};Array.from(X.textTracks).forEach(z=>{z.addEventListener("cuechange",Qe)}),X.textTracks.addEventListener("addtrack",Kt);const At=Array.from(X.querySelectorAll("track")),be=()=>qt();return At.forEach(z=>z.addEventListener("load",be)),()=>{Array.from(X.textTracks).forEach(z=>{z.removeEventListener("cuechange",Qe)}),X.textTracks.removeEventListener("addtrack",Kt),At.forEach(z=>z.removeEventListener("load",be))}}},[ce,Ce,y,I,dt,zt,De,i,d,Oe,ve]);const Ft=d.length>0||!!St,ln=i>=0,Vt=()=>{de("main"),ct.setShowControls(!0)},kt=()=>{de(null)},ut=ie.showControls||!!ze,Ut=ro(r.engine),Ve=Ut.audioTracks.find(re=>re.id===Ut.activeAudioTrack)??D[w],Pe=i>=0?d[i]??Ut.subtitleTracks.find(re=>re.id===i):void 0,Nt=t(co,{visible:ut,title:g,episode:W,server:v?void 0:$,audio:v?void 0:Ve?.label||Ve?.language,subtitles:v?void 0:Pe?.label||Pe?.language,onBack:ae,classes:{overlay:o.controlsOverlay,hidden:o.hidden,top:o.topControls,backBtn:o.backBtn,titleInfo:o.videoTitleInfo,title:o.animeTitle,episode:o.episodeLabel}}),Et=!v&&!ie.isBuffering&&ie.duration>0?t(uo,{}):null,Mn=t(Ba,{player:r,visible:ut,settingsOpen:!!ze,onOpenSettings:Vt,onCloseSettings:kt,hasSubtitles:Ft,isSubtitleActive:ln,subtitles:d,onSubtitleChange:E,showNextEpisodeButton:Mt,onNextEpisode:pe,isTheaterMode:it,onTheaterModeToggle:Ye,timeLabelRef:Tt}),Wt=ze?t(Da,{view:ze,onSelectView:de,onClose:kt,player:r,onSubtitleStyleChange:$n,streams:s,resolutionIdx:M,onResolutionChange:oe,hasSubtitles:Ft,subtitles:d,selectedSubtitle:i,isSubtitleActive:ln,onSubtitleChange:E,audioTracks:D,selectedAudioTrack:w,onAudioTrackChange:P,videoDelayEnabled:ot,onVideoDelayToggle:xe,videoDelayMs:Se,onVideoDelayChange:Be,onCalibrate:()=>{de(null),u?.()},subtitleDelayMs:Ke,onSubtitleDelayChange:at,ambientSettings:T,onAmbientChange:V,onOpenSubtitles:()=>{St?.(),de("opensub-langs")},openSubLanguages:Bt,openSubFiles:ne,openSubLoading:lt,openSubError:Ct,onOpenSubLangSelect:re=>{Ot?.(re),de("opensub-files")},onOpenSubFileSelect:re=>{Dt?.(re),kt()}}):null,mt=t(Ie,{children:[v&&t("div",{className:o.loadingOverlay,"aria-hidden":"true",children:t("div",{className:o.loadingDots,children:[t("div",{className:o.dot}),t("div",{className:o.dot}),t("div",{className:o.dot})]})}),ie.isBuffering&&!v&&t("div",{className:o.bufferingOverlay,"aria-hidden":"true",children:t("div",{className:o.bufferingSpinner})}),ie.isSpeedBoostActive&&t("div",{className:o.speedBoostBadge,"aria-hidden":"true",children:[t("span",{children:"2x"}),t(he,{name:"forward",size:12})]})]});return t(mo,{engine:r.engine,topBar:Nt,centerControls:Et,bottomBar:!v&&ie.duration>0?Mn:null,settingsPanel:Wt,overlays:mt,isInteracting:!!ze||ie.showVolumeSlider,nativeControls:ie.useNativeControls,onStageClick:kt,className:ie.isFullscreen?o.fullscreenFlat:"",chromeDisabled:se,children:Ae})},Fa=({servers:r,selectedServer:g,onServerSelect:W})=>r.length===0?null:t("div",{className:xn.sourceSelectionContainer,children:[t("h4",{children:"Source"}),t("div",{className:xn.sourceButtons,children:r.map($=>t("button",{className:`${xn.sourceButton} ${g===$?xn.active:""}`,onClick:()=>W($),children:$},$))})]}),Va=qr.memo(Fa);function Ua({details:r,isMovie:g,season:W,episode:$,videoRef:D,active:w}){const P=K("");P.current||(P.current=`tv-${Date.now()}-${Math.random().toString(36).slice(2)}`);const d=N(()=>{if(!r)return;const i=D.current,E=g?"":`S${String(W).padStart(2,"0")}E${String($).padStart(2,"0")}`;rt.discord.tvPresence.mutate({title:r.title,episodeLabel:E,isPlaying:i?!i.paused&&!i.ended:!0,thumbnail:r.poster,currentTime:i?i.currentTime:0,duration:i&&i.duration||0,isAdult:r.adult===!0,sessionId:P.current}).catch(()=>{}),rt.discord.heartbeat.mutate({sessionId:P.current}).catch(()=>{})},[r,g,W,$,D]);return C(()=>{if(!r)return;d();const i=window.setInterval(()=>{const E=D.current;(!E||!E.paused)&&d()},15e3);return()=>window.clearInterval(i)},[d,r,D]),C(()=>{if(!r||!w)return;const i=D.current;if(!i)return;const E=()=>d();return i.addEventListener("play",E),i.addEventListener("pause",E),i.addEventListener("seeked",E),()=>{i.removeEventListener("play",E),i.removeEventListener("pause",E),i.removeEventListener("seeked",E)}},[r,w,d,D]),C(()=>{const i=P.current,E=()=>jr(i),s=()=>E();return window.addEventListener("pagehide",s),window.addEventListener("beforeunload",s),()=>{window.removeEventListener("pagehide",s),window.removeEventListener("beforeunload",s),E()}},[]),{sendPresence:d}}function Wa(r,g,W){const $=()=>{const w=Array.isArray(r.audioTracks)?r.audioTracks.length:0,P=W.getWant(),d=w>0?Math.min(Math.max(0,P),w-1):P;r.audioTrack=d,d!==P&&W.onResolve(d)},D=(w,P)=>{const d=W.getWant(),i=Array.isArray(r.audioTracks)?r.audioTracks.length:0;if(P.id!==d&&d>=0&&d<i){r.audioTrack!==d&&(r.audioTrack=d);return}W.onResolve(P.id)};return r.on(g.MANIFEST_PARSED,$),r.on(g.AUDIO_TRACK_SWITCHED,D),()=>{r.off(g.MANIFEST_PARSED,$),r.off(g.AUDIO_TRACK_SWITCHED,D)}}const Ha=/\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 qa(){try{if(Ha.test(navigator.userAgent||""))return!0;const r=navigator.deviceMemory;if(typeof r=="number"&&r>0&&r<2)return!0}catch{}return!1}const Ka="_statusMsg_vmhzm_1",Ya="_error_vmhzm_7",Qa="_spinner_vmhzm_11",ja="_spin_vmhzm_11",Ga="_sourceLoader_vmhzm_16",Xa="_ringSpinner_vmhzm_22",Za="_meta_vmhzm_40",Ja="_year_vmhzm_48",ei="_rating_vmhzm_53",ti="_typeBadge_vmhzm_62",ni="_tv_vmhzm_70",si="_movie_vmhzm_75",ri="_controlLabel_vmhzm_80",oi="_select_vmhzm_90",ai="_playerSection_vmhzm_102",ii="_video_vmhzm_106",li="_videoHidden_vmhzm_128",ci="_delayCanvas_vmhzm_133",di="_delayCanvasActive_vmhzm_146",ui="_subtitleOverlay_vmhzm_150",mi="_videoIframe_vmhzm_169",hi="_retryButton_vmhzm_177",pi="_sidebarSeason_vmhzm_192",vi="_mobileSeasonRow_vmhzm_208",fi="_providerActions_vmhzm_221",bi="_providerRow_vmhzm_228",gi="_autoplayActive_vmhzm_247",yi="_genreRow_vmhzm_258",_i="_genreChip_vmhzm_265",Si="_metaRow_vmhzm_275",Ci="_detailGrid_vmhzm_284",Ti="_detailItem_vmhzm_292",ki="_imdbLink_vmhzm_314",Ni="_watchedOverlay_vmhzm_324",Ei="_watchedTitle_vmhzm_346",wi="_watchedSubtext_vmhzm_352",Ii="_watchedActions_vmhzm_358",Ai="_watchedActionsCentered_vmhzm_376",S={statusMsg:Ka,error:Ya,spinner:Qa,spin:ja,sourceLoader:Ga,ringSpinner:Xa,meta:Za,year:Ja,rating:ei,typeBadge:ti,tv:ni,movie:si,controlLabel:ri,select:oi,playerSection:ai,video:ii,videoHidden:li,delayCanvas:ci,delayCanvasActive:di,subtitleOverlay:ui,videoIframe:mi,retryButton:hi,sidebarSeason:pi,mobileSeasonRow:vi,providerActions:fi,providerRow:bi,autoplayActive:gi,genreRow:yi,genreChip:_i,metaRow:Si,detailGrid:Ci,detailItem:Ti,imdbLink:ki,watchedOverlay:Ni,watchedTitle:Ei,watchedSubtext:wi,watchedActions:Ii,watchedActionsCentered:Ai},xi=[],Pi=[];function Xs({error:r,onRetry:g}){return t("div",{className:`${S.statusMsg} ${S.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:r}),t("button",{className:S.retryButton,onClick:g,children:"Retry"})]})})}const Yi=()=>{const{id:r}=Kr(),[g]=Yr(),W=K(g);W.current=g;const $=Qr(),D=ao(),w=g.get("type"),P=Gr(),d=!!P.session,i=d&&!P.session?.host,E=i&&["tv","movie"].includes(P.room?.selection.kind||"")?P.room?.selection:null,[s,M]=b(null),[oe,ae]=b(null),[Ae,ot]=b(()=>Date.now()),xe=(oe??s?.next_episode_to_air??null)?.air_timestamp;C(()=>{if(typeof xe!="number"||xe<=Date.now())return;const e=setInterval(()=>ot(Date.now()),1e3);return()=>clearInterval(e)},[xe]);const[Se,Be]=b(()=>parseInt(g.get("s")||"1",10)||1),u=E?.season??Se,[Ke,at]=b([]),[Mt,pe]=b(()=>parseInt(g.get("e")||"1",10)||1),v=E?Number(E.episode):Mt,[it,Ye]=b(()=>{try{return F.getItem("tvProvider")||""}catch{return""}}),T=E?.provider??it,[V,se]=b([]),[St,Bt]=b(""),[ne,lt]=b(""),{options:Ct,isFallback:Ot,isLoading:Dt}=Oo(),ie=ye(()=>Ct.filter(e=>(e.kind??"tv")==="tv").map(e=>({id:e.id,label:e.label,tier:e.tier==="embed"?"embed":"direct",servers:e.servers})),[Ct]),le=Ot||ie.length===0?xi:ie,ct=le.filter(e=>e.tier==="direct"),Oe=le.filter(e=>e.tier==="embed"),[ce,Ce]=b(!1),[y,I]=b(""),[dt,zt]=b([]),[De,ze]=b(0),[de,Tt]=b([]),[ve,Fe]=b(-1),[$n,Ft]=b([]),[ln,Vt]=b([]),[kt,ut]=b(!1),[Ut,Ve]=b(null),[Pe,Nt]=b(0),[Et,Mn]=b(""),[Wt,mt]=b(""),[re,Te]=b(()=>{try{return F.getItem("tvServer")||""}catch{return""}}),H=E?.source??re,X=ye(()=>le.find(e=>e.id===T),[le,T]),R=X?.tier==="embed",[wt,It]=b([]),[Ue,Ht]=b(""),[qt,Qe]=b(""),[Kt,At]=b(!1),be=ye(()=>wt.length>0?wt:X?.servers??[],[wt,X]),z=ye(()=>Ue&&!d?["Embed",...be]:be,[be,Ue,d]),Q=Kt&&!!Ue,ue=Q?qt||Ue:"";C(()=>{if(!Ue){Qe("");return}let e=!1;return us(`/api/resolve?url=${encodeURIComponent(Ue)}`).then(n=>{!e&&n.finalUrl&&Qe(n.finalUrl)}).catch(()=>{}),()=>{e=!0}},[Ue]);const Yt=K([]);C(()=>{Yt.current=V},[V]);const cn=K(De);C(()=>{cn.current=De},[De]);const xt=K(ve);C(()=>{xt.current=ve},[ve]);const m=ho({skipIntervals:Pi}),h=m.refs.videoRef,ke=K(null),fe=K([]),dn=K(null),un=K(null),{videoDelayMs:vs,videoDelayEnabled:Bn,setDelayEnabled:Js,handleVideoDelayChange:fs,isCalibrating:er,testClipActive:Ee,stopCalibration:On,openAvSyncCalibrator:tr,cancelAvSyncCalibrator:nr,applyAvSyncCalibrator:sr,toggleTestClip:rr,calibReturnRef:mn,effectiveVideoDelayMs:Dn}=po(h),[Pt,or]=b(()=>{try{const e=Number(F.getItem("tvSubtitleDelayMs"));if(Number.isFinite(e)&&e>=-6e4&&e<=6e4)return Math.round(e)}catch{}return 0}),zn=K(Pt);zn.current=Pt;const ar=N(e=>{const n=Math.max(-6e4,Math.min(6e4,Math.round(e)));if(zn.current!==n){zn.current=n,or(n);try{F.setItem("tvSubtitleDelayMs",String(n))}catch{}}},[]);vo({videoRef:h,canvasRef:dn,delayMs:Dn,enabled:Bn});const Fn=Bn,Ne=Fn||Pt!==0,{settings:Vn,update:ir}=fo(),Un=K(Ne);Un.current=Ne;const Wn=N(()=>{if(!Un.current)return;const e=h.current;e&&Array.from(e.textTracks).forEach(n=>{n.mode!=="hidden"&&(n.mode="hidden")})},[h]),{hasConsent:Qt,grant:lr}=Xr(),p=w==="movie";Ua({details:s,isMovie:p,season:u,episode:v,videoRef:h,active:!R&&!ce&&!y&&V.length>0});const hn=r?Zr(w||"tv",r):"",Z=hn,We=`${Z}:${u}:${v}:${T}:${H}`,pn=ye(()=>!r||!s||R||Q||ce||ne!==We||V[Pe]?.type!=="hls"?null:{kind:p?"movie":"tv",...p?{}:{season:u},showId:r,episode:String(p?1:v),provider:T,source:H,mode:"sub",title:s.title},[r,s,R,Q,ce,ne,We,V,Pe,p,u,v,T,H]),bs=bo(m.engine,pn,ce||!s),gs=Do(),Hn=zo(),je=Fo(),Ge=Vo(),{toggle:ys,bookmarkedIds:cr,pending:dr}=Uo(),{data:_s}=Wo(s?hn:void 0),jt=_s?!!_s.inLibrary:hn?cr.has(hn):!1,ur=N(()=>{!s||!r||ys({tmdbId:Number(r),mediaType:w||"tv",title:s.title,poster:s.poster,year:s.year,adult:s.adult})},[s,r,w,ys]),{data:Xe,isFetched:Gt,isFetching:qn}=Ho(Z||void 0,u,v),vn=ye(()=>Ke.map(e=>e.episode_number).sort((e,n)=>e-n),[Ke]),Xt=vn.indexOf(v),Kn=Xt>0?vn[Xt-1]:null,L=Xt>=0&&Xt<vn.length-1?vn[Xt+1]:null,fn=ye(()=>(s?.seasons??[]).map(e=>e.season_number).filter(e=>Number.isFinite(e)).sort((e,n)=>e-n),[s]),J=ye(()=>{if(p||L!=null)return null;const e=fn.indexOf(u);return e>=0&&e<fn.length-1?fn[e+1]:(s?.number_of_seasons??0)>u?u+1:null},[p,L,fn,u,s?.number_of_seasons]),Yn=Ko(s?.status),ht=p||L==null&&J==null&&Yn,Ss=L==null&&J==null&&!ht,Le=Xe?.currentTime??0,bn=K(null),[pt,gn]=b(!1),[Lt,Cs]=b(0),[Zt,Ts]=b(!1),[Rt,vt]=b(!1),[mr,Qn]=b(!1),[hr,pr]=b(""),[yn,vr]=b(!1),[fr,jn]=b(!1),[Gn,Xn]=b(!1),{isTheaterMode:He,toggleTheaterMode:Zn,handleLayoutClick:br}=go(),ks=Xe?.duration??0,Ns=Xe?.completed===1,Jt=`${Z}:${u}:${v}`,[Es,gr]=b(null);C(()=>{Gt&&gr(e=>e?.key===Jt?e:{key:Jt,watched:Ns||on(Le,ks)})},[Gt,Jt,Ns,Le,ks]);const yr=Gt&&Es?.key===Jt&&Es.watched,[_n]=b(Yo),[_r,ws]=b(!1);C(()=>{ws(!1)},[Jt]);const Is=!d&&!Ee&&yr&&!Gn,Ze=Is&&_n,ft=Is&&!_n&&!_r,Je=Rt&&_n,Sr=Rt&&!_n,As=N(()=>{Xn(!0),vt(!1)},[]);C(()=>{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"&&Zn()};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[Zn]),yo(m,(V.length>0||Wt!=="")&&!He&&!pt&&!Rt&&!Ze&&!ft);const Cr=Go(),[$t,Tr]=b(Qo),kr=N(e=>{Tr(e),jo(e)},[]),Nr=e=>t("div",{className:e,children:[t("button",{className:`${te.episodeNavBtn} ${te.secondary} ${$t?S.autoplayActive:""}`,onClick:()=>kr(!$t),type:"button","aria-pressed":$t,children:$t?"AUTOPLAY: ON":"AUTOPLAY: OFF"}),t("button",{className:`${te.episodeNavBtn} ${te.secondary}`,onClick:()=>Hn.mutate({mediaId:Z??"",season:u,episode:v}),disabled:Hn.isPending,type:"button",children:[t(he,{name:"undo",size:14}),Hn.isPending?"Resetting...":"Reset Progress"]}),t("button",{className:`${te.episodeNavBtn} ${te.secondary}`,onClick:()=>Kn!=null&&gt(String(Kn)),disabled:i||Kn==null,type:"button",children:[t(he,{name:"chevron-left",size:12}),"Prev EP"]}),t("button",{className:`${te.episodeNavBtn} ${te.primary}`,onClick:()=>L!=null&&gt(String(L)),disabled:i||L==null,type:"button",children:["Next EP",t(he,{name:"chevron-right",size:12})]}),Cr&&t("button",{className:`${te.episodeNavBtn} ${te.episodePickerBtn}`,onClick:()=>jn(!0),type:"button",children:[t(he,{name:"list-ul",size:12}),"Episodes"]})]}),et=K(!1),qe=K(null),Jn=K(0),ee=K(null),xs=N(()=>{ee.current=Le,Xn(!0),vt(!1)},[Le]),bt=K(""),Er=js(Le),en=!d&&!et.current&&!Gn&&(pt||Rt||Er||Ze||ft),Sn=K(en);Sn.current=en;const Cn=K(!1);C(()=>{Cn.current=Zt},[Zt]);const tt=N((e,n)=>{if(!Z||!n||n<30)return;const a=on(e,n);Math.abs(e-Jn.current)<10&&!a||(Jn.current=e,gs.mutate({mediaId:Z,season:u,episode:v,currentTime:Math.floor(e),duration:Math.floor(n),completed:a,title:s?.title??null,poster:s?.poster??null,backdrop:s?.backdrop??null,year:s?.year??null,overview:s?.overview??null,tmdbId:s?.id??null,mediaType:w||"tv",adult:s?.adult?1:0}))},[Z,u,v,gs,s,w]),Re=N((e,n)=>{On();const a=new URLSearchParams(g);a.set("type",g.get("type")||"tv"),a.set("s",String(e)),a.set("e",String(n)),$(`${window.location.pathname}?${a.toString()}`)},[g,$,On]),tn=N(()=>{const e=h.current;if(!e||p||L==null){Qn(!1);return}const n=e.duration||0,a=e.currentTime||0;Qn(n>0&&a/n>=.8)},[p,L,h]),Tn=N((e,n)=>["tv-sources",T,p?"movie":"tv",r,e,n,H],[T,p,r,H]),kn=N(async(e,n)=>{if(!s||!r||!T)return{valid:!1,sources:[]};const a=p?"movie":"tv",l=await rt.tv.sources.query({provider:T,type:a,tmdbId:String(r),season:e,episode:n,title:s.title||"",year:s.year||"",totalSeasons:String(s.number_of_seasons||1),imdbId:s.imdb_id||"",...H?{server:H}:{}});return{valid:"valid"in l?l.valid:!1,error:"error"in l?l.error:void 0,sources:l.sources,referer:"referer"in l?l.referer:void 0,audioTracks:l.audioTracks,subtitles:"subtitles"in l?l.subtitles:void 0,servers:"servers"in l?l.servers:void 0,server:"server"in l?l.server:void 0,embedUrl:"embedUrl"in l?l.embedUrl:void 0}},[s,r,T,p,H]),Ps=N(()=>{if(p||!s||!r||!T||R||L==null)return;const e=Tn(u,L);D.getQueryState(e)?.status!=="success"&&D.prefetchQuery({queryKey:e,queryFn:()=>kn(u,L),staleTime:300*1e3,gcTime:1800*1e3})},[p,s,r,T,R,L,u,D,Tn,kn]),wr=N(()=>{if(Ee)return;tn();const e=h.current;!e||e.paused||e.ended||(e.duration>0&&e.duration-e.currentTime<=60&&Ps(),!qe.current&&(qe.current=setTimeout(()=>{qe.current=null,tt(e.currentTime,e.duration||0)},5e3)))},[tt,h,Ee,tn,Ps]),Ir=N(()=>{const e=h.current;if(!(!e||!s)&&(qe.current&&clearTimeout(qe.current),qe.current=null,tt(e.currentTime,e.duration||0),!i)){if(L!=null){$t&&(pe(L),Re(u,L));return}!p&&J==null&&!Yn||(pr(p?s.title:`${s.title} - Season ${u}`),vt(!0),et.current=!0)}},[p,s,u,L,J,Yn,$t,tt,Re,h,i]),{checkEnd:Nn,logDuration:Ls}=_o({videoRef:h,sourceType:R?"iframe":void 0,resetKey:`${Z}:${u}:${v}:${Gn}`,onEnd:Ir}),Ar=N(()=>{m.actions.onPlay()},[m.actions]),xr=N(()=>{m.actions.onPause();const e=h.current;e&&!e.ended&&tt(e.currentTime,e.duration||0)},[m.actions,tt,h]),Pr=N(()=>{const e=h.current;if(e){try{const n=parseFloat(F.getItem("playerVolume")||"");isNaN(n)||(e.volume=Math.max(0,Math.min(1,n))),e.muted=F.getItem("playerMuted")==="true"}catch{}if(ee.current!=null&&ee.current>0){try{e.currentTime=ee.current}catch{}ee.current=null}tn()}},[h,tn]),es=N(()=>{const e=h.current;if(e&&ee.current!=null&&ee.current>0){try{e.currentTime=ee.current}catch{}ee.current=null}},[h]),Lr=N(()=>{Lt>0&&(ee.current=Lt);const e=h.current;if(e&&Lt>0){try{e.currentTime=Lt,ee.current=null}catch{}e.play().catch(()=>{})}gn(!1),et.current=!0},[Lt,h]),Rs=N(()=>{ee.current=null;const e=h.current;e&&(e.currentTime=0,e.play().catch(()=>{})),gn(!1),et.current=!0},[h]),$s=N(()=>{L!=null&&(et.current=!0,pe(L),Re(u,L))},[L,u,Re]),ts=N(()=>{J!=null&&(vt(!1),et.current=!0,Be(J),pe(1),Re(J,1))},[J,Re]),ns=N(async()=>{if(Z)try{jt?await je.mutateAsync({id:Z,status:"Completed"}):s&&r&&(await Ge.mutateAsync({tmdbId:Number(r),mediaType:w||"tv",title:s.title,poster:s.poster,backdrop:s.backdrop,year:s.year,overview:s.overview,adult:s.adult,status:"Completed",silent:!0}),Ys.success("Moved to Completed")),vt(!1),$("/")}catch{}},[Z,jt,je,Ge,s,r,w,$]);C(()=>{et.current=!1,bn.current=null,gn(!1),Qn(!1),Cs(0),Ts(!1),Xn(!1),Cn.current=!1,ee.current=null,Jn.current=0},[Z,u,v]),C(()=>{bt.current=We},[We]),C(()=>{Gt&&(Ts(!0),Cn.current=!0)},[Gt,Z,u,v]),C(()=>{if(d||qn||!Xe||et.current)return;const e=`${Z}:${u}:${v}`;if(bn.current===e)return;bn.current=e;const n=Xe,a=n.currentTime??0;js(a)&&n.completed!==1&&!on(a,n.duration??0)&&(Cs(a),gn(!0))},[Xe,qn,Z,u,v,d]),C(()=>{!d&&pt&&h.current&&h.current.pause()},[pt,h,d]),C(()=>{!d&&ft&&h.current&&h.current.pause()},[ft,h,d]),C(()=>{(Ze||ft||Je)&&m.state.isFullscreen&&m.actions.toggleFullscreen()},[Ze,ft,Je,m.state.isFullscreen,m.actions]),C(()=>{const e=h.current;return()=>{qe.current&&clearTimeout(qe.current),qe.current=null,!e?.ended&&m.engine.getState().duration>0&&tt(m.engine.getTimeline().currentTime,m.engine.getState().duration)}},[m.engine,tt,h]);const ss=N(e=>{let n=null,a=!0;try{n=F.getItem("tvLastSubtitle"),a=F.getItem("tvSubtitlesEnabled")!=="false"}catch{}return hs(e,{lastKey:n,enabled:a})},[]),nn=N((e,n)=>{if(!(e<0))try{F.setItem("tvSubtitlesEnabled","true"),F.setItem("tvSelectedSubtitle",String(e));const a=n?.[e];a&&F.setItem("tvLastSubtitle",Pn(a))}catch{}},[]),Ms=N(e=>{if(e.length===0)return 0;let n=null;try{n=F.getItem("tvLastAudio")}catch{}if(n){const a=e.findIndex(k=>Pn(k)===n);if(a>=0)return a;const l=n.indexOf("|||"),c=l>=0?n.slice(0,l):n,f=l>=0?n.slice(l+3):n,A=e.findIndex(k=>k.language===c||k.label===f);if(A>=0)return A}return hs(e,{lastKey:null,enabled:!0})},[]),Bs=N(e=>{let n=null;try{n=F.getItem("tvLastQuality")}catch{}if(!n||e.length===0)return 0;const a=e.findIndex(k=>(k.quality||"")===n);if(a>=0)return a;const l=k=>{const Y=/(\d{3,4})/.exec(k||"");return Y?parseInt(Y[1],10):0},c=l(n);if(!c)return 0;let f=0,A=1/0;return e.forEach((k,Y)=>{const _=l(k.quality),B=Math.abs(_-c);_>0&&B<A&&(A=B,f=Y)}),f},[]),{data:Os}=qo(Z||void 0),Ds=ye(()=>(Os?.progress??[]).filter(n=>n.season===u&&(n.completed===1||on(n.currentTime,n.duration))).map(n=>String(n.episode)),[Os,u]),zs=ye(()=>Ke.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})),[Ke]),Fs=ye(()=>(s?.genres??[]).map(e=>e.name).slice(0,5),[s]),Vs=ye(()=>{const e=oe??s?.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 a=n.toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"}),l=`Next episode: S${e.season_number} E${e.episode_number} · ${a}`,c=e.air_timestamp;if(typeof c!="number"||c<=0)return l;let f=Math.floor((c-Ae)/1e3);if(f<=0)return null;const A=Math.floor(f/86400);f%=86400;const k=Math.floor(f/3600);f%=3600;const Y=Math.floor(f/60),_=f%60,B=`${A}d ${k}h ${String(Y).padStart(2,"0")}m ${String(_).padStart(2,"0")}s`;return`${l} · in ${B}`},[oe,s,Ae]),rs=ye(()=>[s?.year,s?.status,s?.number_of_seasons?`${s.number_of_seasons} Season${s.number_of_seasons>1?"s":""}`:null,s?.number_of_episodes?`${s.number_of_episodes} Episodes`:null,Vs].filter(Boolean),[s,Vs]);C(()=>{if(!i&&le.length!==0&&!le.some(e=>e.id===T)){const e=le.find(n=>n.tier==="direct")?.id??le[0].id;Ye(e);try{F.setItem("tvProvider",e)}catch{}}},[le,T,i]),C(()=>{It([]),Ht(""),Qe(""),At(!1)},[T]),C(()=>{if(!i&&be.length!==0&&!be.includes(H)){Te(be[0]);try{F.setItem("tvServer",be[0])}catch{}}},[be,H,i]),C(()=>{if(!r){M(null),se([]),lt(""),I(""),mt("");return}const e=Number(r),n=w||"tv";M(null),se([]),lt(""),I(""),mt("");const a=parseInt(W.current.get("s")||"",10),l=parseInt(W.current.get("e")||"",10);Be(isNaN(a)?1:a),pe(isNaN(l)?1:l),Nt(0),rt.tv.details.query({type:n,id:String(e)}).then(c=>{const f={id:c.id,title:c.title||"",overview:c.overview||"",vote_average:c.vote_average,year:c.year,poster:c.poster,backdrop:c.backdrop,imdb_id:c.imdb_id||void 0,adult:c.adult,status:c.status,in_production:c.in_production,seasons:c.seasons,number_of_seasons:c.number_of_seasons,number_of_episodes:c.number_of_episodes,first_air_date:c.first_air_date,last_air_date:c.last_air_date,next_episode_to_air:c.next_episode_to_air,last_episode_to_air:c.last_episode_to_air};if(M(f),ae(null),f.seasons&&f.seasons.length>0&&isNaN(a)){const A=f.seasons.find(k=>k.season_number===1)?.season_number??f.seasons[0].season_number;Be(A)}}).catch(()=>{})},[r,w]),C(()=>{if(!s||!r)return;if(!(s.seasons!==void 0||s.number_of_seasons!==void 0)){at([]);return}const n=parseInt(g.get("e")||"",10);ae(null),rt.tv.episodes.query({id:String(r),season:String(u)}).then(a=>{const l=(a.episodes||[]).map(c=>({episode_number:c.episode_number,name:c.name||"",vote_average:c.vote_average,overview:c.overview||"",still_path:c.still_path||""}));at(l),ae(a.nextAiring??null),l.length!==0&&pe(c=>!isNaN(n)&&l.some(f=>f.episode_number===n)?n:l.some(f=>f.episode_number===c)?c:l[0].episode_number)}).catch(()=>{})},[s,r,u,g]),C(()=>{if(!R||!s||!r)return;us(`/api/tv/embed/${T}/${p?"movie":"tv"}/${r}?season=${u}&episode=${v}`).then(n=>{if(n.url)return mt(n.url),us(`/api/resolve?url=${encodeURIComponent(n.url)}`).then(a=>{a.finalUrl&&mt(a.finalUrl)})}).catch(()=>{})},[T,s,r,u,v,p,R]);const En=N(async()=>{if(!s||!r||!T||R||s.adult&&!Qt)return;const e=We;Ce(!0),I(""),Yt.current.length===0&&(se([]),Nt(0),zt([]),Tt([]));try{const n=await D.fetchQuery({queryKey:Tn(u,v),queryFn:()=>kn(u,v),staleTime:3e5,gcTime:18e5});if(bt.current!==e)return;if(Ce(!1),!n.valid||!n.sources?.length){I(n.error?`${n.error}`:be.length>0?`No streams from ${H}. Try another server.`:"No streams available.");return}if(d&&H&&n.server&&n.server!==H){se([]),I("The host's selected server is unavailable. Automatic source switching is disabled in watch-along rooms.");return}!i&&!H&&n.server&&Te(n.server);const a=d?n.sources.filter(k=>k.type==="hls"):n.sources;if(d&&a.length===0){se([]),I("The room requires a direct HLS source. No compatible stream is available here.");return}se(a),Bt(n.server||H),lt(e),n.servers?.length&&It(n.servers),n.embedUrl&&Ht(n.embedUrl),Nt(Bs(a)),n.referer&&Mn(n.referer);const l=n.audioTracks||[];zt(l),ze(l.length>0?Ms(l):0);const c=(n.subtitles||[]).map(k=>({...k,source:"provider"}));if(Tt(c),c.length>0){const k=ss(c);Fe(k),k>=0&&nn(k,c)}else Fe(-1);const f=p?"movie":"tv",A=r;rt.tv.subtitles.query({type:f,tmdbId:String(A),season:String(u),episode:String(v)}).then(k=>{if(bt.current!==e)return;const Y=(Array.isArray(k.subtitles)?k.subtitles:[]).map(_=>({..._,source:"provider"}));Y.length!==0&&Tt(_=>{const B=[..._,...Y.filter(G=>!_.some(q=>q.url===G.url))];return _.length===0&&B.length>0&&Promise.resolve().then(()=>{if(bt.current!==e)return;const G=ss(B);G>=0&&(Fe(G),nn(G,B))}),B})}).catch(()=>{}),I("")}catch(n){if(bt.current!==e)return;Ce(!1),I(n instanceof Error?n.message:"Failed to load streams.")}},[s,r,T,u,v,p,R,Qt,be,H,ss,nn,Ms,Bs,D,Tn,kn,We,d,i]),os=N(()=>{const e=h.current;e&&!isNaN(e.currentTime)&&(ee.current=e.currentTime)},[h]),Rr=N(e=>{if(!(i||d&&e==="Embed")){if(e==="Embed"){At(!0);return}os(),At(!1),Te(e);try{F.setItem("tvServer",e)}catch{}I("")}},[os,i,d]),$r=N(e=>{Ye(e);try{F.setItem("tvProvider",e)}catch{}},[]);C(()=>{T&&s&&!R&&En()},[T,s,En,R]),C(()=>{if(Ze){m.engine.unload();return}if(!h.current)return;if(ke.current=null,R||Q||d&&V[Pe]?.type!=="hls"){m.engine.unload();return}if(Ee&&!d)return m.engine.loadSource({url:"/av-sync-test.mp4"},{autoPlay:!Sn.current});if(mn.current!=null&&(ee.current=mn.current,mn.current=null),ne===We&&ee.current==null&&!Sn.current)try{const _=h.current;_&&!_.ended&&_.currentTime>1&&(ee.current=_.currentTime)}catch{}const n=ee.current??0,a=!ce&&ne===We?Q?"":V[Pe]?.url||"":"";if(!a){try{h.current?.pause(),h.current?.removeAttribute("src"),h.current?.load()}catch{}return}const l=h.current;l.pause(),l.removeAttribute("src"),l.load(),m.actions.resetMediaState();const c=`/api/tv/stream-proxy?url=${encodeURIComponent(a)}&referer=${encodeURIComponent(Et)}&provider=${encodeURIComponent(T)}`,f=qa()||document.body.classList.contains("low-end"),A=f?60:180,k=m.engine.loadSource({url:c,hls:V[Pe]?.type==="hls"},{hlsConfig:{enableWorker:!0,lowLatencyMode:!1,startPosition:n>0?n:-1,maxBufferLength:A,maxMaxBufferLength:A+(f?30:60),backBufferLength:f?30:60,maxBufferSize:(f?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:(_,B)=>{ke.current=_;const G=()=>{let U=!1,O=0;try{U=F.getItem("tvSubtitlesEnabled")==="true";const x=parseInt(F.getItem("tvSelectedSubtitle")||"0",10);!isNaN(x)&&x>=0&&(O=x)}catch{}return{enabled:U,index:O}},q=()=>{if(typeof _.subtitleTrack!="number")return;if(fe.current.length>0){_.subtitleTrack=-1;return}const U=Array.isArray(_.subtitleTracks)?_.subtitleTracks:[];if(U.length===0){_.subtitleTrack=-1;return}const O=G();if(O.enabled){const x=O.index<U.length?O.index:0;_.subtitleTrack=x,Fe(x),Wn()}else _.subtitleTrack=-1};Wa(_,B.Events,{getWant:()=>cn.current,onResolve:U=>ze(U)}),_.on(B.Events.MANIFEST_PARSED,q),_.on(B.Events.SUBTITLE_TRACKS_UPDATED,()=>{q()}),_.on(B.Events.SUBTITLE_TRACK_SWITCH,(U,O)=>{if(fe.current.length>0){if(O.id!==-1)try{_.subtitleTrack=-1}catch{}return}const x=Array.isArray(_.subtitleTracks)?_.subtitleTracks:[];if(x.length!==0){if(O.id===-1){const we=G();if(we.enabled){const me=we.index<x.length?we.index:0;_.subtitleTrack=me;return}}Fe(O.id),Wn()}})},onReady:()=>{(n>0||!Sn.current&&Cn.current)&&m.engine.play()},onError:_=>{I(_.message),Ce(!1),ke.current=null}}),Y=()=>{const G=l.error?.code===4?"Video source not supported or not found":"Failed to load video stream";I(`${G}. The source may be invalid or expired. Try switching source or reloading.`),Ce(!1)};return l.addEventListener("error",Y),()=>{k(),ke.current=null,l.removeEventListener("error",Y)}},[V,ne,ce,Pe,T,Et,R,Q,h,mn,Ee,Z,u,v,es,Wn,m.actions,m.engine,We,d,Ze]),C(()=>{if(i||!Zt||pt||Rt||en||R||Ee)return;const e=h.current;!e||!e.paused||e.ended||e.readyState<1||(es(),m.engine.play())},[Zt,pt,Rt,en,R,Ee,es,h,i,m.engine]),C(()=>{const e=ke.current;!e||typeof e.audioTrack!="number"||(e.audioTrack=De)},[De]),C(()=>{const e=ke.current;!e||typeof e.subtitleTrack!="number"||!Array.isArray(e.subtitleTracks)||e.subtitleTracks.length===0||fe.current.length>0||(ve>=0?e.subtitleTrack=ve:e.subtitleTrack=-1)},[ve]),C(()=>{const e=h.current;if(!(!e||R)&&(e.querySelectorAll("track").forEach(n=>n.remove()),fe.current=[],de.length!==0&&(de.forEach(n=>{const a=document.createElement("track");a.kind="subtitles",a.label=n.label||n.language||"Unknown",a.srclang=n.language||n.label||"en";const l=n.source==="opensub",c=l?"":Et,f=l?"&scrape=1":"",A=n.encoding?`&enc=${encodeURIComponent(n.encoding)}`:"",k=`/api/subtitle-proxy?url=${encodeURIComponent(n.url)}&referer=${encodeURIComponent(c)}${f}${A}`;a.src=k,a.addEventListener("load",()=>{const Y=fe.current.indexOf(a),_=a.track;if(_&&Y>=0){const B=Y===xt.current;_.mode=B&&!Un.current?"showing":"hidden"}}),e.appendChild(a),fe.current.push(a)}),de.length>0)))try{const n=ke.current;n&&typeof n.subtitleTrack=="number"&&n.subtitleTrack!==-1&&(n.subtitleTrack=-1)}catch{}},[de,Et,R,T,H,h]),C(()=>{const e=h.current;if(!e||R)return;const n=ke.current;fe.current.length>0&&n&&typeof n.subtitleTrack=="number"&&Array.isArray(n.subtitleTracks)&&n.subtitleTracks.length>0&&(n.subtitleTrack=-1);const a=()=>{const f=ps(m.state.subtitleFontSize,e.clientHeight||720),A=Math.max(0,Math.min(100,100-m.state.subtitlePosition)),k=()=>{const q=f*16,U=e.videoHeight||e.clientHeight||720,O=e.videoWidth||e.clientWidth||1280;return{step:q*1.3/U*100,chars:Math.max(20,Math.floor(O/(q*.55)))}},Y=(q,U)=>{const O=q;O.snapToLines=!1,O.line=U},_=q=>{if(!q.cues)return;Array.from(q.cues).forEach(me=>Y(me,A));const U=Array.from(q.activeCues??[]);if(U.length<=1){U.forEach(me=>Y(me,A));return}const{step:O,chars:x}=k();let we=A;for(let me=U.length-1;me>=0;me--){const nt=String(U[me].text??"").replace(/<[^>]*>/g,"").split(`
3
- `).reduce((In,sn)=>In+Math.max(1,Math.ceil(sn.length/x)),0);we=Math.max(0,we-nt*O),Y(U[me],we),we-=O*.4}},B=fe.current;if(B.length>0){B.forEach((q,U)=>{const O=q.track;if(!O)return;const x=U===ve;O.mode=x&&!Ne?"showing":"hidden",x&&!Ne&&_(O)});return}const G=Array.from(e.textTracks);G.length!==0&&G.forEach((q,U)=>{const O=U===ve;q.mode=O&&!Ne?"showing":"hidden",O&&!Ne&&_(q)})};a();const l=()=>a();e.textTracks.addEventListener("addtrack",l),e.addEventListener("loadedmetadata",a,{once:!0});const c=window.setTimeout(a,600);return()=>{e.textTracks.removeEventListener("addtrack",l),e.removeEventListener("loadedmetadata",a),window.clearTimeout(c)}},[ve,de,R,T,h,Ne,m.state.subtitleFontSize,m.state.subtitlePosition]),C(()=>{if(!Ne)return;const e=h.current,n=un.current;if(!e||!n)return;const a=Pt/1e3,l=Dn/1e3,c=new Set;let f=[],A=-1,k=-1,Y=-1,_=-1,B=0,G=0,q=!1;const U=()=>{const j=xt.current;if(j<0)return null;const st=fe.current;return st.length>0?st[j]?.track??null:Array.from(e.textTracks)[j]??null},O=(j,st)=>{const ge=j.cues;if(!ge||ge.length===0)return Array.from(j.activeCues??[]);let yt=0,_t=ge.length;for(;yt<_t;){const $e=yt+_t>>>1;ge[$e].endTime+a<st?yt=$e+1:_t=$e}const rn=[];for(let $e=yt;$e<ge.length;$e++){const An=ge[$e];if(An.startTime+a>st)break;An.endTime+a>=st&&rn.push(An)}return rn},x=()=>{const j=U(),st=e.currentTime-l,ge=j?O(j,st):[],yt=e.clientWidth,_t=e.clientHeight,rn=e.videoWidth,$e=e.videoHeight;if(ge.length===f.length&&ge.every((ls,cs)=>ls===f[cs])&&yt===A&&_t===k&&rn===Y&&$e===_||(f=ge,A=yt,k=_t,Y=rn,_=$e,n.textContent="",ge.length===0))return;const qs={fontSize:ps(m.state.subtitleFontSize,_t),position:m.state.subtitlePosition,bgOpacity:m.state.subtitleBgOpacity,bgColor:m.state.subtitleBgColor,textColor:m.state.subtitleTextColor,edge:m.state.subtitleEdge,bold:m.state.subtitleBold},Ur=So(qs),Wr=Co(e,qs.position);ge.forEach((ls,cs)=>{const Ks=String(ls.text??"");if(!To(Ks).trim())return;const ds=document.createElement("div"),Hr=(ge.length-1-cs)*1.7;ds.style.cssText=`${Ur}
4
- bottom: calc(${Wr}px + ${Hr}em);`,ds.innerHTML=ko(Ks),n.appendChild(ds)})},we=()=>{Array.from(e.textTracks).forEach(j=>{c.has(j)||(c.add(j),j.addEventListener("cuechange",x))})},me=()=>{we(),x()},is=()=>{if(q||G)return;const j=()=>{G=0,!(q||e.paused||e.ended)&&(x(),is())};G=window.requestAnimationFrame(j)},nt=e,In=()=>{B=0,x(),!q&&nt.requestVideoFrameCallback&&(B=nt.requestVideoFrameCallback(In))},sn=()=>{x(),nt.requestVideoFrameCallback?B||(B=nt.requestVideoFrameCallback(In)):is()};we(),e.textTracks.addEventListener("addtrack",me),e.textTracks.addEventListener("removetrack",me),e.addEventListener("timeupdate",x),e.addEventListener("seeked",x),e.addEventListener("loadedmetadata",x),e.addEventListener("play",sn);const Ws=Array.from(e.querySelectorAll("track"));Ws.forEach(j=>j.addEventListener("load",x));const Hs=typeof ResizeObserver>"u"?null:new ResizeObserver(()=>x());return Hs?.observe(e),x(),sn(),()=>{q=!0,c.forEach(j=>j.removeEventListener("cuechange",x)),e.textTracks.removeEventListener("addtrack",me),e.textTracks.removeEventListener("removetrack",me),e.removeEventListener("timeupdate",x),e.removeEventListener("seeked",x),e.removeEventListener("loadedmetadata",x),e.removeEventListener("play",sn),Ws.forEach(j=>j.removeEventListener("load",x)),Hs?.disconnect(),G&&window.cancelAnimationFrame(G),B&&nt.cancelVideoFrameCallback&&nt.cancelVideoFrameCallback(B),n.textContent=""}},[Ne,Pt,ve,de,Dn,h,m.state.subtitleFontSize,m.state.subtitlePosition,m.state.subtitleBgOpacity,m.state.subtitleBgColor,m.state.subtitleTextColor,m.state.subtitleEdge,m.state.subtitleBold]);const as=()=>{M(null),se([]),mt(""),$(-1)},Mr=N(e=>{i||(Be(e),pe(1),Re(e,1))},[Re,i]),wn=!p&&s?.seasons&&s.seasons.length>1?t("label",{className:S.sidebarSeason,children:[t("span",{children:"Season"}),t("select",{disabled:i,value:u,onChange:e=>Mr(parseInt(e.currentTarget.value,10)||1),className:S.select,children:s.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,gt=N(e=>{if(i)return;const n=parseInt(e,10);if(!isNaN(n)){try{h.current?.pause()}catch{}pe(n),Re(u,n)}jn(!1)},[u,Re,h,i]);C(()=>{if(p)return;const e=n=>{n.target.closest('input, textarea, button, select, a, [role="button"], [contenteditable="true"]')||n.key.toLowerCase()==="n"&&(L!=null?gt(String(L)):Ys.error("No next episode available"))};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[p,L,gt]);const Br=e=>{ze(e);try{const a=dt[e];a&&F.setItem("tvLastAudio",Pn(a))}catch{}const n=ke.current;n&&n.audioTrack!==void 0&&(n.audioTrack=e)},Or=e=>e.startsWith("[Open Subs]")?e:`[Open Subs] ${e}`,Us=N((e,n)=>{const a={language:e.language||"en",label:Or(e.label||e.language||"Subtitles"),url:e.url,source:"opensub",encoding:e.encoding};Tt(l=>{const f=[...l.filter(k=>k.source!=="opensub"),a],A=f.length-1;return bt.current===n&&(Fe(A),nn(A,f)),f})},[nn]),Dr=N(async()=>{Ve(null),Ft([]),Vt([]),ut(!0);const e={provider:T,type:p?"movie":"tv",tmdbId:String(r),season:u,episode:v,title:s?.title||"",year:s?.year||"",imdbId:s?.imdb_id||"",totalSeasons:String(s?.number_of_seasons||1)};try{const n=await rt.tv.openSubtitleLanguages.query(e);Ft(n.languages||[]),(n.languages||[]).length||Ve("No languages found")}catch(n){Ve(n instanceof Error?n.message:"Failed to load languages")}finally{ut(!1)}},[r,p,T,u,v,s]),zr=N(async e=>{Ve(null),Vt([]),ut(!0);const n={provider:T,type:p?"movie":"tv",tmdbId:String(r),season:u,episode:v,lang:e,title:s?.title||"",year:s?.year||"",imdbId:s?.imdb_id||"",totalSeasons:String(s?.number_of_seasons||1)};try{const a=await rt.tv.openSubtitleFiles.query(n);Vt(a.files||[]),(a.files||[]).length||Ve("No files found")}catch(a){Ve(a instanceof Error?a.message:"Failed to load files")}finally{ut(!1)}},[r,p,T,u,v,s]),Fr=N(e=>{Us(e,bt.current)},[Us]),Vr=e=>{Fe(e);try{if(e===-1)F.setItem("tvSubtitlesEnabled","false");else{F.setItem("tvSubtitlesEnabled","true"),F.setItem("tvSelectedSubtitle",String(e));const c=de[e];c&&F.setItem("tvLastSubtitle",Pn(c))}}catch{}const n=h.current,a=ke.current;if(a&&typeof a.subtitleTrack=="number"&&Array.isArray(a.subtitleTracks)&&a.subtitleTracks.length>0&&(a.subtitleTrack=fe.current.length>0||e<0?-1:e),!n)return;const l=fe.current;if(l.length>0){l.forEach((c,f)=>{const A=c.track;if(!A)return;const k=f===e;A.mode=k&&!Ne?"showing":"hidden"});return}Array.from(n.textTracks).forEach((c,f)=>{const A=f===e;c.mode=A&&!Ne?"showing":"hidden"})};return C(()=>{if(!s){document.title="TV & Movies - dango";return}document.title=p?`${s.title} - dango`:`${s.title} - Season ${u} Episode ${v} - dango`},[s,p,u,v]),C(()=>{if(!s||p)return;const e=new URLSearchParams(g),n=e.get("s"),a=e.get("e"),l=String(u),c=String(v);n===l&&a===c||(e.set("type",g.get("type")||"tv"),e.set("s",l),e.set("e",c),$(`${window.location.pathname}?${e.toString()}`,{replace:!0}))},[s,p,u,v,g,$]),t("div",{className:`${Me.playerPageLayout} ${He?Me.theaterMode:""} ${p?Me.noSidebar:""}`,onClick:br,children:[He&&t(No,{videoRef:h,active:Vn.enabled&&!R&&V.length>0&&!y&&!(s?.adult&&!Qt),settings:Vn}),!He&&!p&&t("aside",{className:Me.episodeSidebar,children:s?t(Eo,{episodes:zs,currentEpisode:String(v),watchedEpisodes:Ds,onEpisodeClick:gt,header:wn}):t(wo,{variant:"sidebar"})}),t("div",{className:Me.playerMain,children:[s&&t("div",{className:S.playerSection,onContextMenu:e=>e.preventDefault(),style:s.adult&&!Qt?{filter:"blur(14px)",pointerEvents:"none",userSelect:"none"}:void 0,children:R&&Wt&&!d?t("iframe",{src:Wt,className:S.videoIframe,allow:"autoplay; fullscreen",allowFullScreen:!0}):!R&&ue&&!d?t("iframe",{src:ue,className:S.videoIframe,allow:"autoplay; fullscreen",allowFullScreen:!0}):!R&&(V.length>0||ce)?t(Ie,{children:[y&&t(Xs,{error:y,onRetry:En}),t(za,{player:m,title:s.title,episodeLabel:p?void 0:`S${u} E${v}`,server:St||X?.label||T,audioTracks:dt,selectedAudioTrack:De,onAudioTrackChange:Br,subtitles:de,selectedSubtitle:ve,onSubtitleChange:Vr,streams:V,resolutionIdx:Pe,onResolutionChange:e=>{os(),Nt(e);try{const n=V[e]?.quality;n&&F.setItem("tvLastQuality",n)}catch{}},onBack:as,videoDelayEnabled:Bn,onVideoDelayToggle:Js,videoDelayMs:vs,onVideoDelayChange:fs,onCalibrateAvSync:d?void 0:tr,subtitleDelayMs:Pt,onSubtitleDelayChange:ar,showNextEpisodeButton:!i&&mr,onNextEpisode:L!=null?()=>gt(String(L)):void 0,isTheaterMode:He,onTheaterModeToggle:Zn,ambientSettings:Vn,onAmbientChange:ir,hideChrome:Ze||Je,onOpenSubtitles:Dr,openSubLanguages:$n,openSubFiles:ln,openSubLoading:kt,openSubError:Ut,onOpenSubLangSelect:zr,onOpenSubFileSelect:Fr,children:t(Ie,{children:[t(oo,{autoPlay:!d&&Zt&&!en,playsInline:!0,disablePictureInPicture:!0,className:`${S.video} ${Fn?S.videoHidden:""}`,onTimeUpdate:()=>{Ee||(wr(),Nn())},onEnded:()=>{Ee||Nn(!0)},onPlay:Ar,onPause:xr,onSeeked:()=>{Ee||(tn(),Nn())},onLoadedMetadata:()=>{Pr(),Ls(),Nn()},onDurationChange:()=>{Ls()},onContextMenu:e=>e.preventDefault(),onError:()=>{I("Video failed to load. Try another server or reload."),Ce(!1)}}),t("canvas",{ref:dn,className:`${S.delayCanvas} ${Fn?S.delayCanvasActive:""}`}),Ne&&t("div",{ref:un,className:S.subtitleOverlay}),t(Io,{isOpen:er,ms:vs,onChange:fs,onApply:sr,onClose:nr,testClipActive:Ee,onTestClip:rr}),(Ze||Je)&&t("div",{className:S.watchedOverlay,children:[t(he,{name:"check-circle",size:48,style:{color:"var(--accent-lighter)"}}),t("p",{className:S.watchedTitle,children:Je||ht?J!=null?"Season Complete!":p?"Movie Completed!":"Show Completed!":p?"Movie watched":`S${u} E${v} watched`}),t("p",{className:S.watchedSubtext,children:Je||ht?J!=null?`You finished Season ${u}.`:p?"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:`${S.watchedActions} ${Je?S.watchedActionsCentered:""}`,children:[t("div",{children:Le>5&&!Je&&t(_e,{variant:Ss?void 0:"secondary",onClick:xs,children:`Resume ${an(Le)}`})}),t("div",{children:L!=null?t(_e,{onClick:$s,children:`Watch EP ${L}`}):J!=null?t(_e,{onClick:ts,children:`Start Season ${J}`}):null}),t("div",{children:[t(_e,{variant:"secondary",onClick:As,children:"Replay"}),ht&&t(_e,{onClick:ns,disabled:je.isPending||Ge.isPending,children:je.isPending||Ge.isPending?"Saving...":"Move to Completed"})]})]})]})]})})]}):y&&!R?t(Xs,{error:y,onRetry:En}):null}),t(Zo,{playback:pn?{selection:pn,position:h.current?.currentTime||0,playing:!1,rate:m.engine.getState().playbackRate}:null,onCreate:()=>{On(),m.engine.pause()},needsPlayback:bs.needsPlayback,onEnablePlayback:bs.enablePlayback}),d&&!ce&&s&&!pn&&t("p",{role:"alert",children:"The host's direct HLS source is unavailable here. Retry or leave the room to use another source."}),!He&&s&&t(Ao,{}),!He&&wn&&t("div",{className:S.mobileSeasonRow,children:wn}),!He&&s&&t("div",{className:te.streamPanel,children:[t("div",{className:S.providerRow,children:[t("label",{className:S.controlLabel,children:["Provider",t("select",{value:T,onChange:e=>$r(e.currentTarget.value),className:S.select,disabled:i||le.length===0,children:Dt?t("option",{value:"",children:"Loading..."}):le.length===0?t("option",{value:"",children:"No providers available"}):t(Ie,{children:[ct.length>0&&t("optgroup",{label:"Direct HLS",children:ct.map(e=>t("option",{value:e.id,children:e.label},e.id))}),Oe.length>0&&t("optgroup",{label:"Embeds",children:Oe.map(e=>t("option",{value:e.id,children:e.label},e.id))})]})})]}),!p&&Nr(S.providerActions)]}),!i&&!R&&(ce?t("div",{className:S.sourceLoader,children:t("div",{className:S.ringSpinner})}):t(Va,{servers:z,selectedServer:Kt?"Embed":H,onServerSelect:Rr}))]}),!He&&s&&t("div",{className:Me.playerInfoContainer,children:[t("div",{className:Me.playerInfoHeader,children:[t("div",{className:Me.playerAnimeCard,children:s.poster&&t(Jr,{src:`https://image.tmdb.org/t/p/w342${s.poster}`,alt:s.title,loading:"lazy",decoding:"async"})}),t("div",{className:Me.videoTitleSection,children:[t("div",{className:te.titleContainer,children:[t("h1",{children:s.title}),t("div",{className:S.meta,children:[t("span",{className:S.year,children:s.year}),s.vote_average!=null&&s.vote_average>0&&t("span",{className:S.rating,children:[t(he,{name:"star",size:12}),Number(s.vote_average).toFixed(1)]}),t("span",{className:`${S.typeBadge} ${S[p?"movie":"tv"]}`,children:p?"Movie":"TV Show"})]}),Fs.length>0&&t("div",{className:S.genreRow,children:Fs.map(e=>t("span",{className:S.genreChip,children:e},e))}),rs.length>0&&t("div",{className:S.metaRow,children:rs.map((e,n)=>t("span",{children:[e,n<rs.length-1?" · ":""]},`${e}-${n}`))})]}),t("div",{className:te.controls,children:t("button",{className:`${te.watchlistBtn} ${jt?te.inList:""}`,onClick:ur,disabled:dr,type:"button",children:[jt?t(he,{name:"check",size:14}):t(he,{name:"plus",size:14}),jt?"In Watchlist":"Add to Watchlist"]})})]})]}),t("div",{className:Me.infoColumns,children:[t("div",{className:`${te.descriptionSection} ${te.synopsisFlat}`,children:[t("h3",{children:"Synopsis"}),t(Xo,{text:s.overview,emptyText:"No description available."}),t("button",{className:te.detailsToggleBtn,onClick:()=>vr(!yn),type:"button",children:[yn?t(he,{name:"chevron-up"}):t(he,{name:"chevron-down"}),yn?"Hide Details":"Show Details"]})]}),yn&&t("div",{className:S.detailGrid,children:[s.first_air_date&&t("div",{className:S.detailItem,children:[t("strong",{children:p?"Release Date":"First Air Date"}),t("span",{children:s.first_air_date})]}),s.last_air_date&&t("div",{className:S.detailItem,children:[t("strong",{children:"Last Air Date"}),t("span",{children:s.last_air_date})]}),s.networks&&s.networks.length>0&&t("div",{className:S.detailItem,children:[t("strong",{children:"Networks"}),t("span",{children:s.networks.map(e=>e.name).join(", ")})]}),s.created_by&&s.created_by.length>0&&t("div",{className:S.detailItem,children:[t("strong",{children:"Created By"}),t("span",{children:s.created_by.map(e=>e.name).join(", ")})]}),s.episode_run_time&&s.episode_run_time.length>0&&t("div",{className:S.detailItem,children:[t("strong",{children:"Episode Runtime"}),t("span",{children:[s.episode_run_time[0]," min"]})]}),s.imdb_id&&t("div",{className:S.detailItem,children:[t("strong",{children:"IMDb"}),t("a",{href:`https://www.imdb.com/title/${s.imdb_id}`,target:"_blank",rel:"noopener noreferrer",className:S.imdbLink,children:"View on IMDb"})]})]})]})]}),!p&&t(xo,{isOpen:fr,onClose:()=>jn(!1),episodes:zs,currentEpisode:String(v),watchedEpisodes:Ds,onEpisodeClick:gt,header:wn}),s?.adult&&!Qt&&t(Bo,{isOpen:!0,onClose:as,onGrant:lr}),t(Po,{isOpen:!d&&pt&&!qn&&bn.current===`${Z}:${u}:${v}`&&Xe?.completed!==1&&!on(Le,Xe?.duration??0),onClose:Rs,title:"Resume Watching",message:t(Ie,{children:["You were at ",t("strong",{children:an(Lt)})]}),restartLabel:"Start from Beginning",onResume:Lr,onRestart:Rs}),t(Qs,{isOpen:ft,onClose:()=>ws(!0),title:ht?p?"Movie Completed!":"Show Completed!":"Episode Completed",heading:p?s?.title??"Movie":`S${u} E${v}`,message:ht?p?"You finished this movie!":"Congratulations! You finished all available episodes.":p?"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(_e,{variant:Ss?void 0:"secondary",onClick:xs,children:`Resume ${an(Le)}`}),t(_e,{variant:"secondary",onClick:As,children:"Replay"}),L!=null?t(_e,{onClick:$s,children:["Watch EP ",L]}):J!=null?t(_e,{onClick:ts,children:["Start Season ",J]}):ht?t(_e,{onClick:ns,disabled:je.isPending||Ge.isPending,children:je.isPending||Ge.isPending?"Saving...":"Move to Completed"}):null]}),t(Qs,{isOpen:Sr,onClose:()=>vt(!1),title:p?"Movie Completed!":J!=null?"Season Complete!":"Show Completed!",heading:hr,message:p?"You finished this movie!":J!=null?`You finished Season ${u}.`:"Congratulations! You finished all available episodes.",children:J!=null?t(_e,{onClick:ts,children:["Start Season ",J]}):t(Ie,{children:[t(_e,{onClick:()=>{vt(!1),as()},children:"Back to Details"}),t(_e,{onClick:ns,disabled:je.isPending||Ge.isPending,children:je.isPending||Ge.isPending?"Saving...":"Move to Completed"})]})}),!s&&t("div",{className:S.statusMsg,children:[t(he,{name:"spinner",className:S.spinner})," Loading..."]})]})]})};export{Yi as default};
1
+ import{u as t,d as b,A as K,h as C,S as Ie,g as qr,q as N,o as Kr,p as Yr,a as Qr,T as ye}from"./vendor-core-DfaOB3Rn.js";import{i as an,p as F,t as rt,ab as jr,a7 as Gr,e as Xr,V as us,g as Zr,ai as Jr,L as Ys,B as _e,F as eo}from"./index-hrS3r0UE.js";import{P as to,a as no,b as so,F as ro,d as oo,c as ao}from"./PlayerProvider-C6humJW5.js";import{u as io}from"./vendor-query-BBT5_sHx.js";import{I as he}from"./vendor-icons-C1Pj_eSX.js";import{C as lo,P as co}from"./PlayerSurface-C0SuP9xJ.js";import{p as hs,M as uo,x as Zs,f as ps,b as mo,C as ho,a as xn,u as po,h as vo,i as fo,m as bo,g as go,j as yo,l as _o,k as So,s as Pn,c as Co,d as To,e as ko,r as No,n as Me,A as Eo,q as wo,E as Io,v as Ao,P as xo,t as te,w as Po,R as Lo,o as Qs}from"./useWatchAlongPlayer-BNJCb3D5.js";import{S as Ro}from"./SettingsShell-ByVlsU3X.js";import{O as Ln,S as $o,A as Mo,a as Bo}from"./OptionListMenu-BdiwBX1S.js";import{M as Oo}from"./MatureConsentModal-CBGHgiBA.js";import{e as Do,b as zo,f as Fo,g as Vo,d as Uo,c as Wo,h as Ho,i as qo}from"./useTvLibrary-7zDxMjFz.js";import{b as Ko,i as on,l as Yo,a as Qo,c as jo,h as js}from"./playbackCompletion-DzRc-CrM.js";import{u as Go}from"./useIsMobile-Dvx1uJ82.js";import{S as Xo}from"./SynopsisText-B3Sa5pRv.js";import{W as Zo}from"./WatchAlongPanel-BtiB_ErQ.js";import"./libraryInvalidation-DWCCaTbI.js";const Jo="_fullscreenFlat_n2elb_1",ea="_timeDisplay_n2elb_12",ta="_bottomControls_n2elb_16",na="_leftControls_n2elb_20",sa="_rightControls_n2elb_21",ra="_controlBtn_n2elb_25",oa="_controlsOverlay_n2elb_32",aa="_hidden_n2elb_52",ia="_topControls_n2elb_58",la="_backBtn_n2elb_78",ca="_videoTitleInfo_n2elb_98",da="_animeTitle_n2elb_104",ua="_episodeLabel_n2elb_112",ma="_speedBoostBadge_n2elb_119",ha="_progressBarContainer_n2elb_165",pa="_progressBar_n2elb_165",va="_thumb_n2elb_184",fa="_bufferedBar_n2elb_202",ba="_watchedBar_n2elb_212",ga="_scrubbing_n2elb_237",ya="_timeBubble_n2elb_241",_a="_bottomControlsRow_n2elb_255",Sa="_nextEpisodeBtn_n2elb_278",Ca="_active_n2elb_340",Ta="_settingsPanel_n2elb_352",ka="_settingsHeader_n2elb_371",Na="_settingsBackBtn_n2elb_379",Ea="_settingsTitle_n2elb_397",wa="_settingsContent_n2elb_408",Ia="_currentValue_n2elb_417",Aa="_menuItem_n2elb_423",xa="_menuNote_n2elb_456",Pa="_loadingOverlay_n2elb_465",La="_loadingDots_n2elb_476",Ra="_dot_n2elb_481",$a="_bufferingOverlay_n2elb_510",Ma="_bufferingSpinner_n2elb_519",o={fullscreenFlat:Jo,timeDisplay:ea,bottomControls:ta,leftControls:na,rightControls:sa,controlBtn:ra,controlsOverlay:oa,hidden:aa,topControls:ia,backBtn:la,videoTitleInfo:ca,animeTitle:da,episodeLabel:ua,speedBoostBadge:ma,progressBarContainer:ha,progressBar:pa,thumb:va,bufferedBar:fa,watchedBar:ba,scrubbing:ga,timeBubble:ya,bottomControlsRow:_a,nextEpisodeBtn:Sa,active:Ca,settingsPanel:Ta,settingsHeader:ka,settingsBackBtn:Na,settingsTitle:Ea,settingsContent:wa,currentValue:Ia,menuItem:Aa,menuNote:xa,loadingOverlay:Pa,loadingDots:La,dot:Ra,bufferingOverlay:$a,bufferingSpinner:Ma},Ba=({player:r,visible:g,settingsOpen:W,onOpenSettings:$,onCloseSettings:D,hasSubtitles:w,isSubtitleActive:P,subtitles:d,onSubtitleChange:i,showNextEpisodeButton:E,onNextEpisode:s,isTheaterMode:M,onTheaterModeToggle:oe,timeLabelRef:ae})=>{const{state:Ae,actions:ot}=r,xe=()=>{if(P){i(-1);return}let Se=null;try{Se=F.getItem("tvLastSubtitle")}catch{}i(hs(d,{lastKey:Se,enabled:!0}))};return t("div",{className:`${o.controlsOverlay} ${g?"":o.hidden}`,"data-speed-boost-ignore":"true",style:{pointerEvents:"none",background:"none",justifyContent:"flex-end"},children:t("div",{className:o.bottomControls,onClick:Se=>Se.stopPropagation(),children:[t(to,{classes:{container:o.progressBarContainer,scrubbing:o.scrubbing,timeBubble:o.timeBubble,bar:o.progressBar,buffered:o.bufferedBar,watched:o.watchedBar,thumb:o.thumb},timeLabelRef:ae}),t("div",{className:o.bottomControlsRow,children:[t("div",{className:o.leftControls,children:[t(no,{className:o.controlBtn}),t(so,{buttonClassName:o.controlBtn,onExpandedChange:ot.setShowVolumeSlider}),t("span",{className:o.timeDisplay,ref:ae,children:[an(0)," / ",an(Ae.duration)]})]}),t("div",{className:o.rightControls,children:[E&&t("button",{className:o.nextEpisodeBtn,onClick:s,title:"Play next episode",children:"Next EP"}),w&&t("button",{className:`${o.controlBtn} ${P?o.active:""}`,onClick:xe,"aria-label":P?"Turn subtitles off":"Turn subtitles on",children:t(he,{name:"closed-captioning"})}),t("button",{className:`${o.controlBtn} ${W?o.active:""}`,onClick:()=>W?D():$(),"aria-label":"Settings",children:t(he,{name:"cog"})}),t("button",{className:`${o.controlBtn} ${M?o.active:""}`,onClick:Se=>{Se.stopPropagation(),oe()},title:M?"Exit Theater Mode":"Theater Mode","aria-label":M?"Exit Theater Mode":"Theater Mode",children:t(he,{name:"tv"})}),t(ro,{className:o.controlBtn})]})]})]})})},Rn=-6e4,ms=6e4,Gs=500,Oa=({classes:r,delayMs:g,onDelayChange:W})=>{const[$,D]=b(null),w=$??g,P=K(W);P.current=W;const d=K(g);d.current=g;const i=K(null);i.current=$,C(()=>{D(null)},[g]),C(()=>()=>{const M=i.current;M!==null&&M!==d.current&&P.current(M)},[]);const E=M=>{d.current=M,i.current=null,P.current(M),D(null)},s=M=>{const oe=i.current??d.current,ae=Math.max(Rn,Math.min(ms,oe+M));E(ae)};return t(Ie,{children:[t("div",{style:{display:"flex",gap:6,padding:"0.5rem 0.75rem 0.25rem"},children:[t("button",{type:"button",className:r.item,onClick:()=>s(-Gs),"aria-label":"Show subtitles 0.5 seconds earlier",style:{flex:1,justifyContent:"center"},children:t("span",{children:"-0.5s"})}),t("button",{type:"button",className:r.item,onClick:()=>s(Gs),"aria-label":"Show subtitles 0.5 seconds later",style:{flex:1,justifyContent:"center"},children:t("span",{children:"+0.5s"})}),t("button",{type:"button",className:r.item,onClick:()=>E(0),disabled:w===0,"aria-label":"Reset subtitle timing",style:{flex:1,justifyContent:"center"},children:t("span",{children:"Reset"})})]}),t(uo,{label:"Subtitle timing",display:Zs(w),min:Rn,max:ms,step:100,value:w,percent:(w-Rn)/(ms-Rn)*100,onChange:M=>{const oe=Math.round(M);i.current=oe,D(oe)},onCommit:()=>{const M=i.current;M!==null&&E(M)}}),t("div",{className:r.note,children:"Positive delays subtitles (show later). Negative shows them earlier. 0.0s is default."})]})},Da=({view:r,onSelectView:g,onClose:W,player:$,onSubtitleStyleChange:D,streams:w,resolutionIdx:P,onResolutionChange:d,hasSubtitles:i,subtitles:E,selectedSubtitle:s,isSubtitleActive:M,onSubtitleChange:oe,audioTracks:ae,selectedAudioTrack:Ae,onAudioTrackChange:ot,videoDelayEnabled:xe,onVideoDelayToggle:Se,videoDelayMs:Be,onVideoDelayChange:u,onCalibrate:Ke,subtitleDelayMs:at,onSubtitleDelayChange:Mt,ambientSettings:pe,onAmbientChange:v,onOpenSubtitles:it,openSubLanguages:Ye,openSubFiles:T,openSubLoading:V,openSubError:se,onOpenSubLangSelect:St,onOpenSubFileSelect:Bt})=>{const{state:ne}=$,lt=()=>t(Ie,{children:[w.length>1&&t("button",{className:o.menuItem,onClick:()=>g("resolution"),children:[t("span",{children:"Resolution"}),t("span",{className:o.currentValue,children:w[P]?.quality||"Auto"})]}),(i||it)&&t("button",{className:o.menuItem,onClick:()=>g("subtitles"),children:[t("span",{children:"Subtitles"}),t("span",{className:o.currentValue,children:M?E[s]?.label||E[s]?.language:"Off"})]}),i&&t("button",{className:o.menuItem,onClick:()=>g("subtitle-style"),children:[t("span",{children:"Subtitle Style"}),t("span",{className:o.currentValue,children:[ne.subtitleFontSize.toFixed(1),"x · ",ne.subtitlePosition]})]}),i&&t("button",{className:o.menuItem,onClick:()=>g("subtitle-timing"),children:[t("span",{children:"Subtitle Timing"}),t("span",{className:o.currentValue,children:Zs(at)})]}),ae.length>0&&t("button",{className:o.menuItem,onClick:()=>g("audio"),children:[t("span",{children:"Audio Track"}),t("span",{className:o.currentValue,children:ae[Ae]?.label||ae[Ae]?.language})]}),t("button",{className:o.menuItem,onClick:()=>g("av-sync"),children:[t("span",{children:"A/V Sync"}),t("span",{className:o.currentValue,children:xe?`${Be}ms`:"Off"})]}),pe&&v&&t("button",{className:o.menuItem,onClick:()=>g("ambient"),children:[t("span",{children:"Ambient Light"}),t("span",{className:o.currentValue,children:pe.enabled?"On":"Off"})]})]}),Ct=()=>t(Ln,{classes:{item:o.menuItem,active:o.active},options:w.map((y,I)=>({key:String(I),label:y.quality,selected:I===P})),onSelect:y=>d(Number(y))}),Ot=()=>t(Ie,{children:[t("button",{type:"button",className:`${o.menuItem} ${M?"":o.active}`,onClick:()=>oe(-1),children:t("span",{children:"Off"})}),it&&t("button",{type:"button",className:o.menuItem,onClick:it,children:t("span",{children:"Open Subtitles..."})}),E.map((y,I)=>t("button",{type:"button",className:`${o.menuItem} ${I===s?o.active:""}`,onClick:()=>oe(I),children:t("span",{children:y.label||y.language})},I))]}),Dt=()=>t(Ie,{children:[V&&t("div",{className:o.menuNote,children:"Loading languages..."}),!V&&se&&t("div",{className:o.menuNote,children:se}),!V&&!se&&(Ye?.length??0)===0&&t("div",{className:o.menuNote,children:"No languages found"}),!V&&(Ye?.length??0)>0&&t(Ln,{classes:{item:o.menuItem,active:o.active},options:(Ye||[]).map((y,I)=>({key:String(y.id||y.language||I),label:`${y.label||y.language||y.id}${y.count?` (${y.count})`:""}`,selected:!1})),onSelect:y=>St?.(y)})]}),ie=()=>t(Ie,{children:[V&&t("div",{className:o.menuNote,children:"Loading files..."}),!V&&se&&t("div",{className:o.menuNote,children:se}),!V&&!se&&(T?.length??0)===0&&t("div",{className:o.menuNote,children:"No files found"}),!V&&(T?.length??0)>0&&t(Ln,{classes:{item:o.menuItem,active:o.active},options:(T||[]).map(y=>({key:y.id,label:y.label,selected:!1})),onSelect:y=>{const I=(T||[]).find(dt=>String(dt.id)===y);I&&Bt?.({...I,language:I.language||"en"})}})]}),le=()=>t($o,{classes:{item:o.menuItem,active:o.active},values:{fontSize:ne.subtitleFontSize,position:ne.subtitlePosition,bgOpacity:ne.subtitleBgOpacity,bgColor:ne.subtitleBgColor,textColor:ne.subtitleTextColor,edge:ne.subtitleEdge,bold:ne.subtitleBold},onChange:D}),ct=()=>t(Oa,{classes:{item:o.menuItem,active:o.active,note:o.menuNote},delayMs:at,onDelayChange:y=>Mt?.(y)}),Oe=()=>t(Ln,{classes:{item:o.menuItem,active:o.active},options:ae.map((y,I)=>({key:String(I),label:y.label||y.language,selected:I===Ae})),onSelect:y=>ot(Number(y))}),ce=()=>t(Mo,{classes:{item:o.menuItem,active:o.active,note:o.menuNote},enabled:xe,delayMs:Be,onToggle:y=>Se?.(y),onDelayChange:y=>u?.(y),onCalibrate:Ke}),Ce=()=>pe&&v?t(Bo,{classes:{item:o.menuItem,active:o.active,note:o.menuNote},values:pe,onChange:v}):null;return t("div",{"data-speed-boost-ignore":"true",onClick:y=>y.stopPropagation(),children:t(Ro,{classes:{panel:o.settingsPanel,header:o.settingsHeader,backBtn:o.settingsBackBtn,title:o.settingsTitle,content:o.settingsContent},title:r==="main"?"Settings":r==="subtitle-style"?"Subtitle Style":r==="subtitle-timing"?"Subtitle Timing":r==="audio"?"Audio Track":r==="resolution"?"Resolution":r==="av-sync"?"A/V Sync":r==="ambient"?"Ambient Light":r==="opensub-langs"?"Open Subtitles":r==="opensub-files"?"Select File":r.charAt(0).toUpperCase()+r.slice(1),onBack:()=>{if(r==="main")return W();if(r==="opensub-files")return g("opensub-langs");g("main")},children:[r==="main"&&lt(),r==="resolution"&&Ct(),r==="subtitles"&&Ot(),r==="subtitle-style"&&le(),r==="subtitle-timing"&&ct(),r==="audio"&&Oe(),r==="av-sync"&&ce(),r==="ambient"&&Ce(),r==="opensub-langs"&&Dt(),r==="opensub-files"&&ie()]})})},za=({player:r,title:g,episodeLabel:W,server:$,audioTracks:D,selectedAudioTrack:w,onAudioTrackChange:P,subtitles:d,selectedSubtitle:i,onSubtitleChange:E,streams:s,resolutionIdx:M,onResolutionChange:oe,onBack:ae,children:Ae,videoDelayEnabled:ot=!1,onVideoDelayToggle:xe,videoDelayMs:Se=0,onVideoDelayChange:Be,onCalibrateAvSync:u,subtitleDelayMs:Ke=0,onSubtitleDelayChange:at,showNextEpisodeButton:Mt=!1,onNextEpisode:pe,isLoading:v=!1,isTheaterMode:it,onTheaterModeToggle:Ye,ambientSettings:T,onAmbientChange:V,hideChrome:se=!1,onOpenSubtitles:St,openSubLanguages:Bt,openSubFiles:ne,openSubLoading:lt,openSubError:Ct,onOpenSubLangSelect:Ot,onOpenSubFileSelect:Dt})=>{const{state:ie,refs:le,actions:ct}=r,Oe=le.videoRef,{subtitleFontSize:ce,subtitlePosition:Ce,subtitleBgOpacity:y,subtitleBgColor:I,subtitleTextColor:dt,subtitleEdge:zt,subtitleBold:De}=ie,[ze,de]=b(null),Tt=K(null),[ve,Fe]=b(0);C(()=>{const re=Oe.current;if(!re)return;const Te=()=>Fe(re.clientHeight||0);Te();const H=new ResizeObserver(Te);return H.observe(re),()=>H.disconnect()},[Oe]);const $n=ct.setSubtitleStyle;C(()=>{const re="tv-player-subtitle-style";let Te=document.getElementById(re);Te||(Te=document.createElement("style"),Te.id=re,document.head.appendChild(Te));const H={fontSize:ce,position:Ce,bgOpacity:y,bgColor:I,textColor:dt,edge:zt,bold:De},X=Oe.current,R=ps(ce,ve||X?.clientHeight||720);if(Te.textContent=mo({...H,fontSize:R}),X){const wt=()=>{const z=Number(Ce);return isNaN(z)?0:Math.max(0,Math.min(100,z))},It=(z,Q)=>{try{const ue=z;ue.snapToLines=!1,ue.line=Q}catch{}},Ue=()=>{const z=R*16,Q=X.videoHeight||X.clientHeight||720,ue=X.videoWidth||X.clientWidth||1280;return{step:z*1.3/Q*100,chars:Math.max(20,Math.floor(ue/(z*.55)))}},Ht=z=>{const Q=Math.max(0,Math.min(100,100-wt())),ue=Array.from(z.activeCues??[]);if(ue.length<=1){ue.forEach(m=>It(m,Q));return}const{step:Yt,chars:cn}=Ue();let xt=Q;for(let m=ue.length-1;m>=0;m--){const ke=String(ue[m].text??"").replace(/<[^>]*>/g,"").split(`
2
+ `).reduce((dn,un)=>dn+Math.max(1,Math.ceil(un.length/cn)),0),fe=xt-ke*Yt;It(ue[m],Math.max(0,fe)),xt=fe-Yt*.4}},qt=()=>{const z=Math.max(0,Math.min(100,100-wt()));Array.from(X.textTracks).forEach(Q=>{Q.cues&&(Array.from(Q.cues).forEach(ue=>It(ue,z)),Q.mode==="showing"&&Ht(Q))})};qt();const Qe=z=>{const Q=z.target;Q.mode==="showing"&&Ht(Q)},Kt=()=>{Array.from(X.textTracks).forEach(z=>{z.removeEventListener("cuechange",Qe),z.addEventListener("cuechange",Qe)}),qt()};Array.from(X.textTracks).forEach(z=>{z.addEventListener("cuechange",Qe)}),X.textTracks.addEventListener("addtrack",Kt);const At=Array.from(X.querySelectorAll("track")),be=()=>qt();return At.forEach(z=>z.addEventListener("load",be)),()=>{Array.from(X.textTracks).forEach(z=>{z.removeEventListener("cuechange",Qe)}),X.textTracks.removeEventListener("addtrack",Kt),At.forEach(z=>z.removeEventListener("load",be))}}},[ce,Ce,y,I,dt,zt,De,i,d,Oe,ve]);const Ft=d.length>0||!!St,ln=i>=0,Vt=()=>{de("main"),ct.setShowControls(!0)},kt=()=>{de(null)},ut=ie.showControls||!!ze,Ut=oo(r.engine),Ve=Ut.audioTracks.find(re=>re.id===Ut.activeAudioTrack)??D[w],Pe=i>=0?d[i]??Ut.subtitleTracks.find(re=>re.id===i):void 0,Nt=t(ho,{visible:ut,title:g,episode:W,server:v?void 0:$,audio:v?void 0:Ve?.label||Ve?.language,subtitles:v?void 0:Pe?.label||Pe?.language,onBack:ae,classes:{overlay:o.controlsOverlay,hidden:o.hidden,top:o.topControls,backBtn:o.backBtn,titleInfo:o.videoTitleInfo,title:o.animeTitle,episode:o.episodeLabel}}),Et=!v&&!ie.isBuffering&&ie.duration>0?t(lo,{}):null,Mn=t(Ba,{player:r,visible:ut,settingsOpen:!!ze,onOpenSettings:Vt,onCloseSettings:kt,hasSubtitles:Ft,isSubtitleActive:ln,subtitles:d,onSubtitleChange:E,showNextEpisodeButton:Mt,onNextEpisode:pe,isTheaterMode:it,onTheaterModeToggle:Ye,timeLabelRef:Tt}),Wt=ze?t(Da,{view:ze,onSelectView:de,onClose:kt,player:r,onSubtitleStyleChange:$n,streams:s,resolutionIdx:M,onResolutionChange:oe,hasSubtitles:Ft,subtitles:d,selectedSubtitle:i,isSubtitleActive:ln,onSubtitleChange:E,audioTracks:D,selectedAudioTrack:w,onAudioTrackChange:P,videoDelayEnabled:ot,onVideoDelayToggle:xe,videoDelayMs:Se,onVideoDelayChange:Be,onCalibrate:()=>{de(null),u?.()},subtitleDelayMs:Ke,onSubtitleDelayChange:at,ambientSettings:T,onAmbientChange:V,onOpenSubtitles:()=>{St?.(),de("opensub-langs")},openSubLanguages:Bt,openSubFiles:ne,openSubLoading:lt,openSubError:Ct,onOpenSubLangSelect:re=>{Ot?.(re),de("opensub-files")},onOpenSubFileSelect:re=>{Dt?.(re),kt()}}):null,mt=t(Ie,{children:[v&&t("div",{className:o.loadingOverlay,"aria-hidden":"true",children:t("div",{className:o.loadingDots,children:[t("div",{className:o.dot}),t("div",{className:o.dot}),t("div",{className:o.dot})]})}),ie.isBuffering&&!v&&t("div",{className:o.bufferingOverlay,"aria-hidden":"true",children:t("div",{className:o.bufferingSpinner})}),ie.isSpeedBoostActive&&t("div",{className:o.speedBoostBadge,"aria-hidden":"true",children:[t("span",{children:"2x"}),t(he,{name:"forward",size:12})]})]});return t(co,{engine:r.engine,topBar:Nt,centerControls:Et,bottomBar:!v&&ie.duration>0?Mn:null,settingsPanel:Wt,overlays:mt,isInteracting:!!ze||ie.showVolumeSlider,nativeControls:ie.useNativeControls,onStageClick:kt,className:ie.isFullscreen?o.fullscreenFlat:"",chromeDisabled:se,children:Ae})},Fa=({servers:r,selectedServer:g,onServerSelect:W})=>r.length===0?null:t("div",{className:xn.sourceSelectionContainer,children:[t("h4",{children:"Source"}),t("div",{className:xn.sourceButtons,children:r.map($=>t("button",{className:`${xn.sourceButton} ${g===$?xn.active:""}`,onClick:()=>W($),children:$},$))})]}),Va=qr.memo(Fa);function Ua({details:r,isMovie:g,season:W,episode:$,videoRef:D,active:w}){const P=K("");P.current||(P.current=`tv-${Date.now()}-${Math.random().toString(36).slice(2)}`);const d=N(()=>{if(!r)return;const i=D.current,E=g?"":`S${String(W).padStart(2,"0")}E${String($).padStart(2,"0")}`;rt.discord.tvPresence.mutate({title:r.title,episodeLabel:E,isPlaying:i?!i.paused&&!i.ended:!0,thumbnail:r.poster,currentTime:i?i.currentTime:0,duration:i&&i.duration||0,isAdult:r.adult===!0,sessionId:P.current}).catch(()=>{}),rt.discord.heartbeat.mutate({sessionId:P.current}).catch(()=>{})},[r,g,W,$,D]);return C(()=>{if(!r)return;d();const i=window.setInterval(()=>{const E=D.current;(!E||!E.paused)&&d()},15e3);return()=>window.clearInterval(i)},[d,r,D]),C(()=>{if(!r||!w)return;const i=D.current;if(!i)return;const E=()=>d();return i.addEventListener("play",E),i.addEventListener("pause",E),i.addEventListener("seeked",E),()=>{i.removeEventListener("play",E),i.removeEventListener("pause",E),i.removeEventListener("seeked",E)}},[r,w,d,D]),C(()=>{const i=P.current,E=()=>jr(i),s=()=>E();return window.addEventListener("pagehide",s),window.addEventListener("beforeunload",s),()=>{window.removeEventListener("pagehide",s),window.removeEventListener("beforeunload",s),E()}},[]),{sendPresence:d}}function Wa(r,g,W){const $=()=>{const w=Array.isArray(r.audioTracks)?r.audioTracks.length:0,P=W.getWant(),d=w>0?Math.min(Math.max(0,P),w-1):P;r.audioTrack=d,d!==P&&W.onResolve(d)},D=(w,P)=>{const d=W.getWant(),i=Array.isArray(r.audioTracks)?r.audioTracks.length:0;if(P.id!==d&&d>=0&&d<i){r.audioTrack!==d&&(r.audioTrack=d);return}W.onResolve(P.id)};return r.on(g.MANIFEST_PARSED,$),r.on(g.AUDIO_TRACK_SWITCHED,D),()=>{r.off(g.MANIFEST_PARSED,$),r.off(g.AUDIO_TRACK_SWITCHED,D)}}const Ha=/\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 qa(){try{if(Ha.test(navigator.userAgent||""))return!0;const r=navigator.deviceMemory;if(typeof r=="number"&&r>0&&r<2)return!0}catch{}return!1}const Ka="_statusMsg_vmhzm_1",Ya="_error_vmhzm_7",Qa="_spinner_vmhzm_11",ja="_spin_vmhzm_11",Ga="_sourceLoader_vmhzm_16",Xa="_ringSpinner_vmhzm_22",Za="_meta_vmhzm_40",Ja="_year_vmhzm_48",ei="_rating_vmhzm_53",ti="_typeBadge_vmhzm_62",ni="_tv_vmhzm_70",si="_movie_vmhzm_75",ri="_controlLabel_vmhzm_80",oi="_select_vmhzm_90",ai="_playerSection_vmhzm_102",ii="_video_vmhzm_106",li="_videoHidden_vmhzm_128",ci="_delayCanvas_vmhzm_133",di="_delayCanvasActive_vmhzm_146",ui="_subtitleOverlay_vmhzm_150",mi="_videoIframe_vmhzm_169",hi="_retryButton_vmhzm_177",pi="_sidebarSeason_vmhzm_192",vi="_mobileSeasonRow_vmhzm_208",fi="_providerActions_vmhzm_221",bi="_providerRow_vmhzm_228",gi="_autoplayActive_vmhzm_247",yi="_genreRow_vmhzm_258",_i="_genreChip_vmhzm_265",Si="_metaRow_vmhzm_275",Ci="_detailGrid_vmhzm_284",Ti="_detailItem_vmhzm_292",ki="_imdbLink_vmhzm_314",Ni="_watchedOverlay_vmhzm_324",Ei="_watchedTitle_vmhzm_346",wi="_watchedSubtext_vmhzm_352",Ii="_watchedActions_vmhzm_358",Ai="_watchedActionsCentered_vmhzm_376",S={statusMsg:Ka,error:Ya,spinner:Qa,spin:ja,sourceLoader:Ga,ringSpinner:Xa,meta:Za,year:Ja,rating:ei,typeBadge:ti,tv:ni,movie:si,controlLabel:ri,select:oi,playerSection:ai,video:ii,videoHidden:li,delayCanvas:ci,delayCanvasActive:di,subtitleOverlay:ui,videoIframe:mi,retryButton:hi,sidebarSeason:pi,mobileSeasonRow:vi,providerActions:fi,providerRow:bi,autoplayActive:gi,genreRow:yi,genreChip:_i,metaRow:Si,detailGrid:Ci,detailItem:Ti,imdbLink:ki,watchedOverlay:Ni,watchedTitle:Ei,watchedSubtext:wi,watchedActions:Ii,watchedActionsCentered:Ai},xi=[],Pi=[];function Xs({error:r,onRetry:g}){return t("div",{className:`${S.statusMsg} ${S.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:r}),t("button",{className:S.retryButton,onClick:g,children:"Retry"})]})})}const Qi=()=>{const{id:r}=Kr(),[g]=Yr(),W=K(g);W.current=g;const $=Qr(),D=io(),w=g.get("type"),P=Gr(),d=!!P.session,i=d&&!P.session?.host,E=i&&["tv","movie"].includes(P.room?.selection.kind||"")?P.room?.selection:null,[s,M]=b(null),[oe,ae]=b(null),[Ae,ot]=b(()=>Date.now()),xe=(oe??s?.next_episode_to_air??null)?.air_timestamp;C(()=>{if(typeof xe!="number"||xe<=Date.now())return;const e=setInterval(()=>ot(Date.now()),1e3);return()=>clearInterval(e)},[xe]);const[Se,Be]=b(()=>parseInt(g.get("s")||"1",10)||1),u=E?.season??Se,[Ke,at]=b([]),[Mt,pe]=b(()=>parseInt(g.get("e")||"1",10)||1),v=E?Number(E.episode):Mt,[it,Ye]=b(()=>{try{return F.getItem("tvProvider")||""}catch{return""}}),T=E?.provider??it,[V,se]=b([]),[St,Bt]=b(""),[ne,lt]=b(""),{options:Ct,isFallback:Ot,isLoading:Dt}=Xr(),ie=ye(()=>Ct.filter(e=>(e.kind??"tv")==="tv").map(e=>({id:e.id,label:e.label,tier:e.tier==="embed"?"embed":"direct",servers:e.servers})),[Ct]),le=Ot||ie.length===0?xi:ie,ct=le.filter(e=>e.tier==="direct"),Oe=le.filter(e=>e.tier==="embed"),[ce,Ce]=b(!1),[y,I]=b(""),[dt,zt]=b([]),[De,ze]=b(0),[de,Tt]=b([]),[ve,Fe]=b(-1),[$n,Ft]=b([]),[ln,Vt]=b([]),[kt,ut]=b(!1),[Ut,Ve]=b(null),[Pe,Nt]=b(0),[Et,Mn]=b(""),[Wt,mt]=b(""),[re,Te]=b(()=>{try{return F.getItem("tvServer")||""}catch{return""}}),H=E?.source??re,X=ye(()=>le.find(e=>e.id===T),[le,T]),R=X?.tier==="embed",[wt,It]=b([]),[Ue,Ht]=b(""),[qt,Qe]=b(""),[Kt,At]=b(!1),be=ye(()=>wt.length>0?wt:X?.servers??[],[wt,X]),z=ye(()=>Ue&&!d?["Embed",...be]:be,[be,Ue,d]),Q=Kt&&!!Ue,ue=Q?qt||Ue:"";C(()=>{if(!Ue){Qe("");return}let e=!1;return us(`/api/resolve?url=${encodeURIComponent(Ue)}`).then(n=>{!e&&n.finalUrl&&Qe(n.finalUrl)}).catch(()=>{}),()=>{e=!0}},[Ue]);const Yt=K([]);C(()=>{Yt.current=V},[V]);const cn=K(De);C(()=>{cn.current=De},[De]);const xt=K(ve);C(()=>{xt.current=ve},[ve]);const m=po({skipIntervals:Pi}),h=m.refs.videoRef,ke=K(null),fe=K([]),dn=K(null),un=K(null),{videoDelayMs:vs,videoDelayEnabled:Bn,setDelayEnabled:Js,handleVideoDelayChange:fs,isCalibrating:er,testClipActive:Ee,stopCalibration:On,openAvSyncCalibrator:tr,cancelAvSyncCalibrator:nr,applyAvSyncCalibrator:sr,toggleTestClip:rr,calibReturnRef:mn,effectiveVideoDelayMs:Dn}=vo(h),[Pt,or]=b(()=>{try{const e=Number(F.getItem("tvSubtitleDelayMs"));if(Number.isFinite(e)&&e>=-6e4&&e<=6e4)return Math.round(e)}catch{}return 0}),zn=K(Pt);zn.current=Pt;const ar=N(e=>{const n=Math.max(-6e4,Math.min(6e4,Math.round(e)));if(zn.current!==n){zn.current=n,or(n);try{F.setItem("tvSubtitleDelayMs",String(n))}catch{}}},[]);fo({videoRef:h,canvasRef:dn,delayMs:Dn,enabled:Bn});const Fn=Bn,Ne=Fn||Pt!==0,{settings:Vn,update:ir}=bo(),Un=K(Ne);Un.current=Ne;const Wn=N(()=>{if(!Un.current)return;const e=h.current;e&&Array.from(e.textTracks).forEach(n=>{n.mode!=="hidden"&&(n.mode="hidden")})},[h]),{hasConsent:Qt,grant:lr}=Zr(),p=w==="movie";Ua({details:s,isMovie:p,season:u,episode:v,videoRef:h,active:!R&&!ce&&!y&&V.length>0});const hn=r?Jr(w||"tv",r):"",Z=hn,We=`${Z}:${u}:${v}:${T}:${H}`,pn=ye(()=>!r||!s||R||Q||ce||ne!==We||V[Pe]?.type!=="hls"?null:{kind:p?"movie":"tv",...p?{}:{season:u},showId:r,episode:String(p?1:v),provider:T,source:H,mode:"sub",title:s.title},[r,s,R,Q,ce,ne,We,V,Pe,p,u,v,T,H]),bs=go(m.engine,pn,ce||!s),gs=Do(),Hn=zo(),je=Fo(),Ge=Vo(),{toggle:ys,bookmarkedIds:cr,pending:dr}=Uo(),{data:_s}=Wo(s?hn:void 0),jt=_s?!!_s.inLibrary:hn?cr.has(hn):!1,ur=N(()=>{!s||!r||ys({tmdbId:Number(r),mediaType:w||"tv",title:s.title,poster:s.poster,year:s.year,adult:s.adult})},[s,r,w,ys]),{data:Xe,isFetched:Gt,isFetching:qn}=Ho(Z||void 0,u,v),vn=ye(()=>Ke.map(e=>e.episode_number).sort((e,n)=>e-n),[Ke]),Xt=vn.indexOf(v),Kn=Xt>0?vn[Xt-1]:null,L=Xt>=0&&Xt<vn.length-1?vn[Xt+1]:null,fn=ye(()=>(s?.seasons??[]).map(e=>e.season_number).filter(e=>Number.isFinite(e)).sort((e,n)=>e-n),[s]),J=ye(()=>{if(p||L!=null)return null;const e=fn.indexOf(u);return e>=0&&e<fn.length-1?fn[e+1]:(s?.number_of_seasons??0)>u?u+1:null},[p,L,fn,u,s?.number_of_seasons]),Yn=Ko(s?.status),ht=p||L==null&&J==null&&Yn,Ss=L==null&&J==null&&!ht,Le=Xe?.currentTime??0,bn=K(null),[pt,gn]=b(!1),[Lt,Cs]=b(0),[Zt,Ts]=b(!1),[Rt,vt]=b(!1),[mr,Qn]=b(!1),[hr,pr]=b(""),[yn,vr]=b(!1),[fr,jn]=b(!1),[Gn,Xn]=b(!1),{isTheaterMode:He,toggleTheaterMode:Zn,handleLayoutClick:br}=yo(),ks=Xe?.duration??0,Ns=Xe?.completed===1,Jt=`${Z}:${u}:${v}`,[Es,gr]=b(null);C(()=>{Gt&&gr(e=>e?.key===Jt?e:{key:Jt,watched:Ns||on(Le,ks)})},[Gt,Jt,Ns,Le,ks]);const yr=Gt&&Es?.key===Jt&&Es.watched,[_n]=b(Yo),[_r,ws]=b(!1);C(()=>{ws(!1)},[Jt]);const Is=!d&&!Ee&&yr&&!Gn,Ze=Is&&_n,ft=Is&&!_n&&!_r,Je=Rt&&_n,Sr=Rt&&!_n,As=N(()=>{Xn(!0),vt(!1)},[]);C(()=>{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"&&Zn()};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[Zn]),_o(m,(V.length>0||Wt!=="")&&!He&&!pt&&!Rt&&!Ze&&!ft);const Cr=Go(),[$t,Tr]=b(Qo),kr=N(e=>{Tr(e),jo(e)},[]),Nr=e=>t("div",{className:e,children:[t("button",{className:`${te.episodeNavBtn} ${te.secondary} ${$t?S.autoplayActive:""}`,onClick:()=>kr(!$t),type:"button","aria-pressed":$t,children:$t?"AUTOPLAY: ON":"AUTOPLAY: OFF"}),t("button",{className:`${te.episodeNavBtn} ${te.secondary}`,onClick:()=>Hn.mutate({mediaId:Z??"",season:u,episode:v}),disabled:Hn.isPending,type:"button",children:[t(he,{name:"undo",size:14}),Hn.isPending?"Resetting...":"Reset Progress"]}),t("button",{className:`${te.episodeNavBtn} ${te.secondary}`,onClick:()=>Kn!=null&&gt(String(Kn)),disabled:i||Kn==null,type:"button",children:[t(he,{name:"chevron-left",size:12}),"Prev EP"]}),t("button",{className:`${te.episodeNavBtn} ${te.primary}`,onClick:()=>L!=null&&gt(String(L)),disabled:i||L==null,type:"button",children:["Next EP",t(he,{name:"chevron-right",size:12})]}),Cr&&t("button",{className:`${te.episodeNavBtn} ${te.episodePickerBtn}`,onClick:()=>jn(!0),type:"button",children:[t(he,{name:"list-ul",size:12}),"Episodes"]})]}),et=K(!1),qe=K(null),Jn=K(0),ee=K(null),xs=N(()=>{ee.current=Le,Xn(!0),vt(!1)},[Le]),bt=K(""),Er=js(Le),en=!d&&!et.current&&!Gn&&(pt||Rt||Er||Ze||ft),Sn=K(en);Sn.current=en;const Cn=K(!1);C(()=>{Cn.current=Zt},[Zt]);const tt=N((e,n)=>{if(!Z||!n||n<30)return;const a=on(e,n);Math.abs(e-Jn.current)<10&&!a||(Jn.current=e,gs.mutate({mediaId:Z,season:u,episode:v,currentTime:Math.floor(e),duration:Math.floor(n),completed:a,title:s?.title??null,poster:s?.poster??null,backdrop:s?.backdrop??null,year:s?.year??null,overview:s?.overview??null,tmdbId:s?.id??null,mediaType:w||"tv",adult:s?.adult?1:0}))},[Z,u,v,gs,s,w]),Re=N((e,n)=>{On();const a=new URLSearchParams(g);a.set("type",g.get("type")||"tv"),a.set("s",String(e)),a.set("e",String(n)),$(`${window.location.pathname}?${a.toString()}`)},[g,$,On]),tn=N(()=>{const e=h.current;if(!e||p||L==null){Qn(!1);return}const n=e.duration||0,a=e.currentTime||0;Qn(n>0&&a/n>=.8)},[p,L,h]),Tn=N((e,n)=>["tv-sources",T,p?"movie":"tv",r,e,n,H],[T,p,r,H]),kn=N(async(e,n)=>{if(!s||!r||!T)return{valid:!1,sources:[]};const a=p?"movie":"tv",l=await rt.tv.sources.query({provider:T,type:a,tmdbId:String(r),season:e,episode:n,title:s.title||"",year:s.year||"",totalSeasons:String(s.number_of_seasons||1),imdbId:s.imdb_id||"",...H?{server:H}:{}});return{valid:"valid"in l?l.valid:!1,error:"error"in l?l.error:void 0,sources:l.sources,referer:"referer"in l?l.referer:void 0,audioTracks:l.audioTracks,subtitles:"subtitles"in l?l.subtitles:void 0,servers:"servers"in l?l.servers:void 0,server:"server"in l?l.server:void 0,embedUrl:"embedUrl"in l?l.embedUrl:void 0}},[s,r,T,p,H]),Ps=N(()=>{if(p||!s||!r||!T||R||L==null)return;const e=Tn(u,L);D.getQueryState(e)?.status!=="success"&&D.prefetchQuery({queryKey:e,queryFn:()=>kn(u,L),staleTime:300*1e3,gcTime:1800*1e3})},[p,s,r,T,R,L,u,D,Tn,kn]),wr=N(()=>{if(Ee)return;tn();const e=h.current;!e||e.paused||e.ended||(e.duration>0&&e.duration-e.currentTime<=60&&Ps(),!qe.current&&(qe.current=setTimeout(()=>{qe.current=null,tt(e.currentTime,e.duration||0)},5e3)))},[tt,h,Ee,tn,Ps]),Ir=N(()=>{const e=h.current;if(!(!e||!s)&&(qe.current&&clearTimeout(qe.current),qe.current=null,tt(e.currentTime,e.duration||0),!i)){if(L!=null){$t&&(pe(L),Re(u,L));return}!p&&J==null&&!Yn||(pr(p?s.title:`${s.title} - Season ${u}`),vt(!0),et.current=!0)}},[p,s,u,L,J,Yn,$t,tt,Re,h,i]),{checkEnd:Nn,logDuration:Ls}=So({videoRef:h,sourceType:R?"iframe":void 0,resetKey:`${Z}:${u}:${v}:${Gn}`,onEnd:Ir}),Ar=N(()=>{m.actions.onPlay()},[m.actions]),xr=N(()=>{m.actions.onPause();const e=h.current;e&&!e.ended&&tt(e.currentTime,e.duration||0)},[m.actions,tt,h]),Pr=N(()=>{const e=h.current;if(e){try{const n=parseFloat(F.getItem("playerVolume")||"");isNaN(n)||(e.volume=Math.max(0,Math.min(1,n))),e.muted=F.getItem("playerMuted")==="true"}catch{}if(ee.current!=null&&ee.current>0){try{e.currentTime=ee.current}catch{}ee.current=null}tn()}},[h,tn]),es=N(()=>{const e=h.current;if(e&&ee.current!=null&&ee.current>0){try{e.currentTime=ee.current}catch{}ee.current=null}},[h]),Lr=N(()=>{Lt>0&&(ee.current=Lt);const e=h.current;if(e&&Lt>0){try{e.currentTime=Lt,ee.current=null}catch{}e.play().catch(()=>{})}gn(!1),et.current=!0},[Lt,h]),Rs=N(()=>{ee.current=null;const e=h.current;e&&(e.currentTime=0,e.play().catch(()=>{})),gn(!1),et.current=!0},[h]),$s=N(()=>{L!=null&&(et.current=!0,pe(L),Re(u,L))},[L,u,Re]),ts=N(()=>{J!=null&&(vt(!1),et.current=!0,Be(J),pe(1),Re(J,1))},[J,Re]),ns=N(async()=>{if(Z)try{jt?await je.mutateAsync({id:Z,status:"Completed"}):s&&r&&(await Ge.mutateAsync({tmdbId:Number(r),mediaType:w||"tv",title:s.title,poster:s.poster,backdrop:s.backdrop,year:s.year,overview:s.overview,adult:s.adult,status:"Completed",silent:!0}),Ys.success("Moved to Completed")),vt(!1),$("/")}catch{}},[Z,jt,je,Ge,s,r,w,$]);C(()=>{et.current=!1,bn.current=null,gn(!1),Qn(!1),Cs(0),Ts(!1),Xn(!1),Cn.current=!1,ee.current=null,Jn.current=0},[Z,u,v]),C(()=>{bt.current=We},[We]),C(()=>{Gt&&(Ts(!0),Cn.current=!0)},[Gt,Z,u,v]),C(()=>{if(d||qn||!Xe||et.current)return;const e=`${Z}:${u}:${v}`;if(bn.current===e)return;bn.current=e;const n=Xe,a=n.currentTime??0;js(a)&&n.completed!==1&&!on(a,n.duration??0)&&(Cs(a),gn(!0))},[Xe,qn,Z,u,v,d]),C(()=>{!d&&pt&&h.current&&h.current.pause()},[pt,h,d]),C(()=>{!d&&ft&&h.current&&h.current.pause()},[ft,h,d]),C(()=>{(Ze||ft||Je)&&m.state.isFullscreen&&m.actions.toggleFullscreen()},[Ze,ft,Je,m.state.isFullscreen,m.actions]),C(()=>{const e=h.current;return()=>{qe.current&&clearTimeout(qe.current),qe.current=null,!e?.ended&&m.engine.getState().duration>0&&tt(m.engine.getTimeline().currentTime,m.engine.getState().duration)}},[m.engine,tt,h]);const ss=N(e=>{let n=null,a=!0;try{n=F.getItem("tvLastSubtitle"),a=F.getItem("tvSubtitlesEnabled")!=="false"}catch{}return hs(e,{lastKey:n,enabled:a})},[]),nn=N((e,n)=>{if(!(e<0))try{F.setItem("tvSubtitlesEnabled","true"),F.setItem("tvSelectedSubtitle",String(e));const a=n?.[e];a&&F.setItem("tvLastSubtitle",Pn(a))}catch{}},[]),Ms=N(e=>{if(e.length===0)return 0;let n=null;try{n=F.getItem("tvLastAudio")}catch{}if(n){const a=e.findIndex(k=>Pn(k)===n);if(a>=0)return a;const l=n.indexOf("|||"),c=l>=0?n.slice(0,l):n,f=l>=0?n.slice(l+3):n,A=e.findIndex(k=>k.language===c||k.label===f);if(A>=0)return A}return hs(e,{lastKey:null,enabled:!0})},[]),Bs=N(e=>{let n=null;try{n=F.getItem("tvLastQuality")}catch{}if(!n||e.length===0)return 0;const a=e.findIndex(k=>(k.quality||"")===n);if(a>=0)return a;const l=k=>{const Y=/(\d{3,4})/.exec(k||"");return Y?parseInt(Y[1],10):0},c=l(n);if(!c)return 0;let f=0,A=1/0;return e.forEach((k,Y)=>{const _=l(k.quality),B=Math.abs(_-c);_>0&&B<A&&(A=B,f=Y)}),f},[]),{data:Os}=qo(Z||void 0),Ds=ye(()=>(Os?.progress??[]).filter(n=>n.season===u&&(n.completed===1||on(n.currentTime,n.duration))).map(n=>String(n.episode)),[Os,u]),zs=ye(()=>Ke.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})),[Ke]),Fs=ye(()=>(s?.genres??[]).map(e=>e.name).slice(0,5),[s]),Vs=ye(()=>{const e=oe??s?.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 a=n.toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"}),l=`Next episode: S${e.season_number} E${e.episode_number} · ${a}`,c=e.air_timestamp;if(typeof c!="number"||c<=0)return l;let f=Math.floor((c-Ae)/1e3);if(f<=0)return null;const A=Math.floor(f/86400);f%=86400;const k=Math.floor(f/3600);f%=3600;const Y=Math.floor(f/60),_=f%60,B=`${A}d ${k}h ${String(Y).padStart(2,"0")}m ${String(_).padStart(2,"0")}s`;return`${l} · in ${B}`},[oe,s,Ae]),rs=ye(()=>[s?.year,s?.status,s?.number_of_seasons?`${s.number_of_seasons} Season${s.number_of_seasons>1?"s":""}`:null,s?.number_of_episodes?`${s.number_of_episodes} Episodes`:null,Vs].filter(Boolean),[s,Vs]);C(()=>{if(!i&&le.length!==0&&!le.some(e=>e.id===T)){const e=le.find(n=>n.tier==="direct")?.id??le[0].id;Ye(e);try{F.setItem("tvProvider",e)}catch{}}},[le,T,i]),C(()=>{It([]),Ht(""),Qe(""),At(!1)},[T]),C(()=>{if(!i&&be.length!==0&&!be.includes(H)){Te(be[0]);try{F.setItem("tvServer",be[0])}catch{}}},[be,H,i]),C(()=>{if(!r){M(null),se([]),lt(""),I(""),mt("");return}const e=Number(r),n=w||"tv";M(null),se([]),lt(""),I(""),mt("");const a=parseInt(W.current.get("s")||"",10),l=parseInt(W.current.get("e")||"",10);Be(isNaN(a)?1:a),pe(isNaN(l)?1:l),Nt(0),rt.tv.details.query({type:n,id:String(e)}).then(c=>{const f={id:c.id,title:c.title||"",overview:c.overview||"",vote_average:c.vote_average,year:c.year,poster:c.poster,backdrop:c.backdrop,imdb_id:c.imdb_id||void 0,adult:c.adult,status:c.status,in_production:c.in_production,seasons:c.seasons,number_of_seasons:c.number_of_seasons,number_of_episodes:c.number_of_episodes,first_air_date:c.first_air_date,last_air_date:c.last_air_date,next_episode_to_air:c.next_episode_to_air,last_episode_to_air:c.last_episode_to_air};if(M(f),ae(null),f.seasons&&f.seasons.length>0&&isNaN(a)){const A=f.seasons.find(k=>k.season_number===1)?.season_number??f.seasons[0].season_number;Be(A)}}).catch(()=>{})},[r,w]),C(()=>{if(!s||!r)return;if(!(s.seasons!==void 0||s.number_of_seasons!==void 0)){at([]);return}const n=parseInt(g.get("e")||"",10);ae(null),rt.tv.episodes.query({id:String(r),season:String(u)}).then(a=>{const l=(a.episodes||[]).map(c=>({episode_number:c.episode_number,name:c.name||"",vote_average:c.vote_average,overview:c.overview||"",still_path:c.still_path||""}));at(l),ae(a.nextAiring??null),l.length!==0&&pe(c=>!isNaN(n)&&l.some(f=>f.episode_number===n)?n:l.some(f=>f.episode_number===c)?c:l[0].episode_number)}).catch(()=>{})},[s,r,u,g]),C(()=>{if(!R||!s||!r)return;us(`/api/tv/embed/${T}/${p?"movie":"tv"}/${r}?season=${u}&episode=${v}`).then(n=>{if(n.url)return mt(n.url),us(`/api/resolve?url=${encodeURIComponent(n.url)}`).then(a=>{a.finalUrl&&mt(a.finalUrl)})}).catch(()=>{})},[T,s,r,u,v,p,R]);const En=N(async()=>{if(!s||!r||!T||R||s.adult&&!Qt)return;const e=We;Ce(!0),I(""),Yt.current.length===0&&(se([]),Nt(0),zt([]),Tt([]));try{const n=await D.fetchQuery({queryKey:Tn(u,v),queryFn:()=>kn(u,v),staleTime:3e5,gcTime:18e5});if(bt.current!==e)return;if(Ce(!1),!n.valid||!n.sources?.length){I(n.error?`${n.error}`:be.length>0?`No streams from ${H}. Try another server.`:"No streams available.");return}if(d&&H&&n.server&&n.server!==H){se([]),I("The host's selected server is unavailable. Automatic source switching is disabled in watch-along rooms.");return}!i&&!H&&n.server&&Te(n.server);const a=d?n.sources.filter(k=>k.type==="hls"):n.sources;if(d&&a.length===0){se([]),I("The room requires a direct HLS source. No compatible stream is available here.");return}se(a),Bt(n.server||H),lt(e),n.servers?.length&&It(n.servers),n.embedUrl&&Ht(n.embedUrl),Nt(Bs(a)),n.referer&&Mn(n.referer);const l=n.audioTracks||[];zt(l),ze(l.length>0?Ms(l):0);const c=(n.subtitles||[]).map(k=>({...k,source:"provider"}));if(Tt(c),c.length>0){const k=ss(c);Fe(k),k>=0&&nn(k,c)}else Fe(-1);const f=p?"movie":"tv",A=r;rt.tv.subtitles.query({type:f,tmdbId:String(A),season:String(u),episode:String(v)}).then(k=>{if(bt.current!==e)return;const Y=(Array.isArray(k.subtitles)?k.subtitles:[]).map(_=>({..._,source:"provider"}));Y.length!==0&&Tt(_=>{const B=[..._,...Y.filter(G=>!_.some(q=>q.url===G.url))];return _.length===0&&B.length>0&&Promise.resolve().then(()=>{if(bt.current!==e)return;const G=ss(B);G>=0&&(Fe(G),nn(G,B))}),B})}).catch(()=>{}),I("")}catch(n){if(bt.current!==e)return;Ce(!1),I(n instanceof Error?n.message:"Failed to load streams.")}},[s,r,T,u,v,p,R,Qt,be,H,ss,nn,Ms,Bs,D,Tn,kn,We,d,i]),os=N(()=>{const e=h.current;e&&!isNaN(e.currentTime)&&(ee.current=e.currentTime)},[h]),Rr=N(e=>{if(!(i||d&&e==="Embed")){if(e==="Embed"){At(!0);return}os(),At(!1),Te(e);try{F.setItem("tvServer",e)}catch{}I("")}},[os,i,d]),$r=N(e=>{Ye(e);try{F.setItem("tvProvider",e)}catch{}},[]);C(()=>{T&&s&&!R&&En()},[T,s,En,R]),C(()=>{if(Ze){m.engine.unload();return}if(!h.current)return;if(ke.current=null,R||Q||d&&V[Pe]?.type!=="hls"){m.engine.unload();return}if(Ee&&!d)return m.engine.loadSource({url:"/av-sync-test.mp4"},{autoPlay:!Sn.current});if(mn.current!=null&&(ee.current=mn.current,mn.current=null),ne===We&&ee.current==null&&!Sn.current)try{const _=h.current;_&&!_.ended&&_.currentTime>1&&(ee.current=_.currentTime)}catch{}const n=ee.current??0,a=!ce&&ne===We?Q?"":V[Pe]?.url||"":"";if(!a){try{h.current?.pause(),h.current?.removeAttribute("src"),h.current?.load()}catch{}return}const l=h.current;l.pause(),l.removeAttribute("src"),l.load(),m.actions.resetMediaState();const c=`/api/tv/stream-proxy?url=${encodeURIComponent(a)}&referer=${encodeURIComponent(Et)}&provider=${encodeURIComponent(T)}`,f=qa()||document.body.classList.contains("low-end"),A=f?60:180,k=m.engine.loadSource({url:c,hls:V[Pe]?.type==="hls"},{hlsConfig:{enableWorker:!0,lowLatencyMode:!1,startPosition:n>0?n:-1,maxBufferLength:A,maxMaxBufferLength:A+(f?30:60),backBufferLength:f?30:60,maxBufferSize:(f?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:(_,B)=>{ke.current=_;const G=()=>{let U=!1,O=0;try{U=F.getItem("tvSubtitlesEnabled")==="true";const x=parseInt(F.getItem("tvSelectedSubtitle")||"0",10);!isNaN(x)&&x>=0&&(O=x)}catch{}return{enabled:U,index:O}},q=()=>{if(typeof _.subtitleTrack!="number")return;if(fe.current.length>0){_.subtitleTrack=-1;return}const U=Array.isArray(_.subtitleTracks)?_.subtitleTracks:[];if(U.length===0){_.subtitleTrack=-1;return}const O=G();if(O.enabled){const x=O.index<U.length?O.index:0;_.subtitleTrack=x,Fe(x),Wn()}else _.subtitleTrack=-1};Wa(_,B.Events,{getWant:()=>cn.current,onResolve:U=>ze(U)}),_.on(B.Events.MANIFEST_PARSED,q),_.on(B.Events.SUBTITLE_TRACKS_UPDATED,()=>{q()}),_.on(B.Events.SUBTITLE_TRACK_SWITCH,(U,O)=>{if(fe.current.length>0){if(O.id!==-1)try{_.subtitleTrack=-1}catch{}return}const x=Array.isArray(_.subtitleTracks)?_.subtitleTracks:[];if(x.length!==0){if(O.id===-1){const we=G();if(we.enabled){const me=we.index<x.length?we.index:0;_.subtitleTrack=me;return}}Fe(O.id),Wn()}})},onReady:()=>{(n>0||!Sn.current&&Cn.current)&&m.engine.play()},onError:_=>{I(_.message),Ce(!1),ke.current=null}}),Y=()=>{const G=l.error?.code===4?"Video source not supported or not found":"Failed to load video stream";I(`${G}. The source may be invalid or expired. Try switching source or reloading.`),Ce(!1)};return l.addEventListener("error",Y),()=>{k(),ke.current=null,l.removeEventListener("error",Y)}},[V,ne,ce,Pe,T,Et,R,Q,h,mn,Ee,Z,u,v,es,Wn,m.actions,m.engine,We,d,Ze]),C(()=>{if(i||!Zt||pt||Rt||en||R||Ee)return;const e=h.current;!e||!e.paused||e.ended||e.readyState<1||(es(),m.engine.play())},[Zt,pt,Rt,en,R,Ee,es,h,i,m.engine]),C(()=>{const e=ke.current;!e||typeof e.audioTrack!="number"||(e.audioTrack=De)},[De]),C(()=>{const e=ke.current;!e||typeof e.subtitleTrack!="number"||!Array.isArray(e.subtitleTracks)||e.subtitleTracks.length===0||fe.current.length>0||(ve>=0?e.subtitleTrack=ve:e.subtitleTrack=-1)},[ve]),C(()=>{const e=h.current;if(!(!e||R)&&(e.querySelectorAll("track").forEach(n=>n.remove()),fe.current=[],de.length!==0&&(de.forEach(n=>{const a=document.createElement("track");a.kind="subtitles",a.label=n.label||n.language||"Unknown",a.srclang=n.language||n.label||"en";const l=n.source==="opensub",c=l?"":Et,f=l?"&scrape=1":"",A=n.encoding?`&enc=${encodeURIComponent(n.encoding)}`:"",k=`/api/subtitle-proxy?url=${encodeURIComponent(n.url)}&referer=${encodeURIComponent(c)}${f}${A}`;a.src=k,a.addEventListener("load",()=>{const Y=fe.current.indexOf(a),_=a.track;if(_&&Y>=0){const B=Y===xt.current;_.mode=B&&!Un.current?"showing":"hidden"}}),e.appendChild(a),fe.current.push(a)}),de.length>0)))try{const n=ke.current;n&&typeof n.subtitleTrack=="number"&&n.subtitleTrack!==-1&&(n.subtitleTrack=-1)}catch{}},[de,Et,R,T,H,h]),C(()=>{const e=h.current;if(!e||R)return;const n=ke.current;fe.current.length>0&&n&&typeof n.subtitleTrack=="number"&&Array.isArray(n.subtitleTracks)&&n.subtitleTracks.length>0&&(n.subtitleTrack=-1);const a=()=>{const f=ps(m.state.subtitleFontSize,e.clientHeight||720),A=Math.max(0,Math.min(100,100-m.state.subtitlePosition)),k=()=>{const q=f*16,U=e.videoHeight||e.clientHeight||720,O=e.videoWidth||e.clientWidth||1280;return{step:q*1.3/U*100,chars:Math.max(20,Math.floor(O/(q*.55)))}},Y=(q,U)=>{const O=q;O.snapToLines=!1,O.line=U},_=q=>{if(!q.cues)return;Array.from(q.cues).forEach(me=>Y(me,A));const U=Array.from(q.activeCues??[]);if(U.length<=1){U.forEach(me=>Y(me,A));return}const{step:O,chars:x}=k();let we=A;for(let me=U.length-1;me>=0;me--){const nt=String(U[me].text??"").replace(/<[^>]*>/g,"").split(`
3
+ `).reduce((In,sn)=>In+Math.max(1,Math.ceil(sn.length/x)),0);we=Math.max(0,we-nt*O),Y(U[me],we),we-=O*.4}},B=fe.current;if(B.length>0){B.forEach((q,U)=>{const O=q.track;if(!O)return;const x=U===ve;O.mode=x&&!Ne?"showing":"hidden",x&&!Ne&&_(O)});return}const G=Array.from(e.textTracks);G.length!==0&&G.forEach((q,U)=>{const O=U===ve;q.mode=O&&!Ne?"showing":"hidden",O&&!Ne&&_(q)})};a();const l=()=>a();e.textTracks.addEventListener("addtrack",l),e.addEventListener("loadedmetadata",a,{once:!0});const c=window.setTimeout(a,600);return()=>{e.textTracks.removeEventListener("addtrack",l),e.removeEventListener("loadedmetadata",a),window.clearTimeout(c)}},[ve,de,R,T,h,Ne,m.state.subtitleFontSize,m.state.subtitlePosition]),C(()=>{if(!Ne)return;const e=h.current,n=un.current;if(!e||!n)return;const a=Pt/1e3,l=Dn/1e3,c=new Set;let f=[],A=-1,k=-1,Y=-1,_=-1,B=0,G=0,q=!1;const U=()=>{const j=xt.current;if(j<0)return null;const st=fe.current;return st.length>0?st[j]?.track??null:Array.from(e.textTracks)[j]??null},O=(j,st)=>{const ge=j.cues;if(!ge||ge.length===0)return Array.from(j.activeCues??[]);let yt=0,_t=ge.length;for(;yt<_t;){const $e=yt+_t>>>1;ge[$e].endTime+a<st?yt=$e+1:_t=$e}const rn=[];for(let $e=yt;$e<ge.length;$e++){const An=ge[$e];if(An.startTime+a>st)break;An.endTime+a>=st&&rn.push(An)}return rn},x=()=>{const j=U(),st=e.currentTime-l,ge=j?O(j,st):[],yt=e.clientWidth,_t=e.clientHeight,rn=e.videoWidth,$e=e.videoHeight;if(ge.length===f.length&&ge.every((ls,cs)=>ls===f[cs])&&yt===A&&_t===k&&rn===Y&&$e===_||(f=ge,A=yt,k=_t,Y=rn,_=$e,n.textContent="",ge.length===0))return;const qs={fontSize:ps(m.state.subtitleFontSize,_t),position:m.state.subtitlePosition,bgOpacity:m.state.subtitleBgOpacity,bgColor:m.state.subtitleBgColor,textColor:m.state.subtitleTextColor,edge:m.state.subtitleEdge,bold:m.state.subtitleBold},Ur=Co(qs),Wr=To(e,qs.position);ge.forEach((ls,cs)=>{const Ks=String(ls.text??"");if(!ko(Ks).trim())return;const ds=document.createElement("div"),Hr=(ge.length-1-cs)*1.7;ds.style.cssText=`${Ur}
4
+ bottom: calc(${Wr}px + ${Hr}em);`,ds.innerHTML=No(Ks),n.appendChild(ds)})},we=()=>{Array.from(e.textTracks).forEach(j=>{c.has(j)||(c.add(j),j.addEventListener("cuechange",x))})},me=()=>{we(),x()},is=()=>{if(q||G)return;const j=()=>{G=0,!(q||e.paused||e.ended)&&(x(),is())};G=window.requestAnimationFrame(j)},nt=e,In=()=>{B=0,x(),!q&&nt.requestVideoFrameCallback&&(B=nt.requestVideoFrameCallback(In))},sn=()=>{x(),nt.requestVideoFrameCallback?B||(B=nt.requestVideoFrameCallback(In)):is()};we(),e.textTracks.addEventListener("addtrack",me),e.textTracks.addEventListener("removetrack",me),e.addEventListener("timeupdate",x),e.addEventListener("seeked",x),e.addEventListener("loadedmetadata",x),e.addEventListener("play",sn);const Ws=Array.from(e.querySelectorAll("track"));Ws.forEach(j=>j.addEventListener("load",x));const Hs=typeof ResizeObserver>"u"?null:new ResizeObserver(()=>x());return Hs?.observe(e),x(),sn(),()=>{q=!0,c.forEach(j=>j.removeEventListener("cuechange",x)),e.textTracks.removeEventListener("addtrack",me),e.textTracks.removeEventListener("removetrack",me),e.removeEventListener("timeupdate",x),e.removeEventListener("seeked",x),e.removeEventListener("loadedmetadata",x),e.removeEventListener("play",sn),Ws.forEach(j=>j.removeEventListener("load",x)),Hs?.disconnect(),G&&window.cancelAnimationFrame(G),B&&nt.cancelVideoFrameCallback&&nt.cancelVideoFrameCallback(B),n.textContent=""}},[Ne,Pt,ve,de,Dn,h,m.state.subtitleFontSize,m.state.subtitlePosition,m.state.subtitleBgOpacity,m.state.subtitleBgColor,m.state.subtitleTextColor,m.state.subtitleEdge,m.state.subtitleBold]);const as=()=>{M(null),se([]),mt(""),$(-1)},Mr=N(e=>{i||(Be(e),pe(1),Re(e,1))},[Re,i]),wn=!p&&s?.seasons&&s.seasons.length>1?t("label",{className:S.sidebarSeason,children:[t("span",{children:"Season"}),t("select",{disabled:i,value:u,onChange:e=>Mr(parseInt(e.currentTarget.value,10)||1),className:S.select,children:s.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,gt=N(e=>{if(i)return;const n=parseInt(e,10);if(!isNaN(n)){try{h.current?.pause()}catch{}pe(n),Re(u,n)}jn(!1)},[u,Re,h,i]);C(()=>{if(p)return;const e=n=>{n.target.closest('input, textarea, button, select, a, [role="button"], [contenteditable="true"]')||n.key.toLowerCase()==="n"&&(L!=null?gt(String(L)):Ys.error("No next episode available"))};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[p,L,gt]);const Br=e=>{ze(e);try{const a=dt[e];a&&F.setItem("tvLastAudio",Pn(a))}catch{}const n=ke.current;n&&n.audioTrack!==void 0&&(n.audioTrack=e)},Or=e=>e.startsWith("[Open Subs]")?e:`[Open Subs] ${e}`,Us=N((e,n)=>{const a={language:e.language||"en",label:Or(e.label||e.language||"Subtitles"),url:e.url,source:"opensub",encoding:e.encoding};Tt(l=>{const f=[...l.filter(k=>k.source!=="opensub"),a],A=f.length-1;return bt.current===n&&(Fe(A),nn(A,f)),f})},[nn]),Dr=N(async()=>{Ve(null),Ft([]),Vt([]),ut(!0);const e={provider:T,type:p?"movie":"tv",tmdbId:String(r),season:u,episode:v,title:s?.title||"",year:s?.year||"",imdbId:s?.imdb_id||"",totalSeasons:String(s?.number_of_seasons||1)};try{const n=await rt.tv.openSubtitleLanguages.query(e);Ft(n.languages||[]),(n.languages||[]).length||Ve("No languages found")}catch(n){Ve(n instanceof Error?n.message:"Failed to load languages")}finally{ut(!1)}},[r,p,T,u,v,s]),zr=N(async e=>{Ve(null),Vt([]),ut(!0);const n={provider:T,type:p?"movie":"tv",tmdbId:String(r),season:u,episode:v,lang:e,title:s?.title||"",year:s?.year||"",imdbId:s?.imdb_id||"",totalSeasons:String(s?.number_of_seasons||1)};try{const a=await rt.tv.openSubtitleFiles.query(n);Vt(a.files||[]),(a.files||[]).length||Ve("No files found")}catch(a){Ve(a instanceof Error?a.message:"Failed to load files")}finally{ut(!1)}},[r,p,T,u,v,s]),Fr=N(e=>{Us(e,bt.current)},[Us]),Vr=e=>{Fe(e);try{if(e===-1)F.setItem("tvSubtitlesEnabled","false");else{F.setItem("tvSubtitlesEnabled","true"),F.setItem("tvSelectedSubtitle",String(e));const c=de[e];c&&F.setItem("tvLastSubtitle",Pn(c))}}catch{}const n=h.current,a=ke.current;if(a&&typeof a.subtitleTrack=="number"&&Array.isArray(a.subtitleTracks)&&a.subtitleTracks.length>0&&(a.subtitleTrack=fe.current.length>0||e<0?-1:e),!n)return;const l=fe.current;if(l.length>0){l.forEach((c,f)=>{const A=c.track;if(!A)return;const k=f===e;A.mode=k&&!Ne?"showing":"hidden"});return}Array.from(n.textTracks).forEach((c,f)=>{const A=f===e;c.mode=A&&!Ne?"showing":"hidden"})};return C(()=>{if(!s){document.title="TV & Movies - dango";return}document.title=p?`${s.title} - dango`:`${s.title} - Season ${u} Episode ${v} - dango`},[s,p,u,v]),C(()=>{if(!s||p)return;const e=new URLSearchParams(g),n=e.get("s"),a=e.get("e"),l=String(u),c=String(v);n===l&&a===c||(e.set("type",g.get("type")||"tv"),e.set("s",l),e.set("e",c),$(`${window.location.pathname}?${e.toString()}`,{replace:!0}))},[s,p,u,v,g,$]),t("div",{className:`${Me.playerPageLayout} ${He?Me.theaterMode:""} ${p?Me.noSidebar:""}`,onClick:br,children:[He&&t(Eo,{videoRef:h,active:Vn.enabled&&!R&&V.length>0&&!y&&!(s?.adult&&!Qt),settings:Vn}),!He&&!p&&t("aside",{className:Me.episodeSidebar,children:s?t(wo,{episodes:zs,currentEpisode:String(v),watchedEpisodes:Ds,onEpisodeClick:gt,header:wn}):t(Io,{variant:"sidebar"})}),t("div",{className:Me.playerMain,children:[s&&t("div",{className:S.playerSection,onContextMenu:e=>e.preventDefault(),style:s.adult&&!Qt?{filter:"blur(14px)",pointerEvents:"none",userSelect:"none"}:void 0,children:R&&Wt&&!d?t("iframe",{src:Wt,className:S.videoIframe,allow:"autoplay; fullscreen",allowFullScreen:!0}):!R&&ue&&!d?t("iframe",{src:ue,className:S.videoIframe,allow:"autoplay; fullscreen",allowFullScreen:!0}):!R&&(V.length>0||ce)?t(Ie,{children:[y&&t(Xs,{error:y,onRetry:En}),t(za,{player:m,title:s.title,episodeLabel:p?void 0:`S${u} E${v}`,server:St||X?.label||T,audioTracks:dt,selectedAudioTrack:De,onAudioTrackChange:Br,subtitles:de,selectedSubtitle:ve,onSubtitleChange:Vr,streams:V,resolutionIdx:Pe,onResolutionChange:e=>{os(),Nt(e);try{const n=V[e]?.quality;n&&F.setItem("tvLastQuality",n)}catch{}},onBack:as,videoDelayEnabled:Bn,onVideoDelayToggle:Js,videoDelayMs:vs,onVideoDelayChange:fs,onCalibrateAvSync:d?void 0:tr,subtitleDelayMs:Pt,onSubtitleDelayChange:ar,showNextEpisodeButton:!i&&mr,onNextEpisode:L!=null?()=>gt(String(L)):void 0,isTheaterMode:He,onTheaterModeToggle:Zn,ambientSettings:Vn,onAmbientChange:ir,hideChrome:Ze||Je,onOpenSubtitles:Dr,openSubLanguages:$n,openSubFiles:ln,openSubLoading:kt,openSubError:Ut,onOpenSubLangSelect:zr,onOpenSubFileSelect:Fr,children:t(Ie,{children:[t(ao,{autoPlay:!d&&Zt&&!en,playsInline:!0,disablePictureInPicture:!0,className:`${S.video} ${Fn?S.videoHidden:""}`,onTimeUpdate:()=>{Ee||(wr(),Nn())},onEnded:()=>{Ee||Nn(!0)},onPlay:Ar,onPause:xr,onSeeked:()=>{Ee||(tn(),Nn())},onLoadedMetadata:()=>{Pr(),Ls(),Nn()},onDurationChange:()=>{Ls()},onContextMenu:e=>e.preventDefault(),onError:()=>{I("Video failed to load. Try another server or reload."),Ce(!1)}}),t("canvas",{ref:dn,className:`${S.delayCanvas} ${Fn?S.delayCanvasActive:""}`}),Ne&&t("div",{ref:un,className:S.subtitleOverlay}),t(Ao,{isOpen:er,ms:vs,onChange:fs,onApply:sr,onClose:nr,testClipActive:Ee,onTestClip:rr}),(Ze||Je)&&t("div",{className:S.watchedOverlay,children:[t(he,{name:"check-circle",size:48,style:{color:"var(--accent-lighter)"}}),t("p",{className:S.watchedTitle,children:Je||ht?J!=null?"Season Complete!":p?"Movie Completed!":"Show Completed!":p?"Movie watched":`S${u} E${v} watched`}),t("p",{className:S.watchedSubtext,children:Je||ht?J!=null?`You finished Season ${u}.`:p?"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:`${S.watchedActions} ${Je?S.watchedActionsCentered:""}`,children:[t("div",{children:Le>5&&!Je&&t(_e,{variant:Ss?void 0:"secondary",onClick:xs,children:`Resume ${an(Le)}`})}),t("div",{children:L!=null?t(_e,{onClick:$s,children:`Watch EP ${L}`}):J!=null?t(_e,{onClick:ts,children:`Start Season ${J}`}):null}),t("div",{children:[t(_e,{variant:"secondary",onClick:As,children:"Replay"}),ht&&t(_e,{onClick:ns,disabled:je.isPending||Ge.isPending,children:je.isPending||Ge.isPending?"Saving...":"Move to Completed"})]})]})]})]})})]}):y&&!R?t(Xs,{error:y,onRetry:En}):null}),t(Zo,{playback:pn?{selection:pn,position:h.current?.currentTime||0,playing:!1,rate:m.engine.getState().playbackRate}:null,onCreate:()=>{On(),m.engine.pause()},needsPlayback:bs.needsPlayback,onEnablePlayback:bs.enablePlayback}),d&&!ce&&s&&!pn&&t("p",{role:"alert",children:"The host's direct HLS source is unavailable here. Retry or leave the room to use another source."}),!He&&s&&t(xo,{}),!He&&wn&&t("div",{className:S.mobileSeasonRow,children:wn}),!He&&s&&t("div",{className:te.streamPanel,children:[t("div",{className:S.providerRow,children:[t("label",{className:S.controlLabel,children:["Provider",t("select",{value:T,onChange:e=>$r(e.currentTarget.value),className:S.select,disabled:i||le.length===0,children:Dt?t("option",{value:"",children:"Loading..."}):le.length===0?t("option",{value:"",children:"No providers available"}):t(Ie,{children:[ct.length>0&&t("optgroup",{label:"Direct HLS",children:ct.map(e=>t("option",{value:e.id,children:e.label},e.id))}),Oe.length>0&&t("optgroup",{label:"Embeds",children:Oe.map(e=>t("option",{value:e.id,children:e.label},e.id))})]})})]}),!p&&Nr(S.providerActions)]}),!i&&!R&&(ce?t("div",{className:S.sourceLoader,children:t("div",{className:S.ringSpinner})}):t(Va,{servers:z,selectedServer:Kt?"Embed":H,onServerSelect:Rr}))]}),!He&&s&&t("div",{className:Me.playerInfoContainer,children:[t("div",{className:Me.playerInfoHeader,children:[t("div",{className:Me.playerAnimeCard,children:s.poster&&t(eo,{src:`https://image.tmdb.org/t/p/w342${s.poster}`,alt:s.title,loading:"lazy",decoding:"async"})}),t("div",{className:Me.videoTitleSection,children:[t("div",{className:te.titleContainer,children:[t("h1",{children:s.title}),t("div",{className:S.meta,children:[t("span",{className:S.year,children:s.year}),s.vote_average!=null&&s.vote_average>0&&t("span",{className:S.rating,children:[t(he,{name:"star",size:12}),Number(s.vote_average).toFixed(1)]}),t("span",{className:`${S.typeBadge} ${S[p?"movie":"tv"]}`,children:p?"Movie":"TV Show"})]}),Fs.length>0&&t("div",{className:S.genreRow,children:Fs.map(e=>t("span",{className:S.genreChip,children:e},e))}),rs.length>0&&t("div",{className:S.metaRow,children:rs.map((e,n)=>t("span",{children:[e,n<rs.length-1?" · ":""]},`${e}-${n}`))})]}),t("div",{className:te.controls,children:t("button",{className:`${te.watchlistBtn} ${jt?te.inList:""}`,onClick:ur,disabled:dr,type:"button",children:[jt?t(he,{name:"check",size:14}):t(he,{name:"plus",size:14}),jt?"In Watchlist":"Add to Watchlist"]})})]})]}),t("div",{className:Me.infoColumns,children:[t("div",{className:`${te.descriptionSection} ${te.synopsisFlat}`,children:[t("h3",{children:"Synopsis"}),t(Xo,{text:s.overview,emptyText:"No description available."}),t("button",{className:te.detailsToggleBtn,onClick:()=>vr(!yn),type:"button",children:[yn?t(he,{name:"chevron-up"}):t(he,{name:"chevron-down"}),yn?"Hide Details":"Show Details"]})]}),yn&&t("div",{className:S.detailGrid,children:[s.first_air_date&&t("div",{className:S.detailItem,children:[t("strong",{children:p?"Release Date":"First Air Date"}),t("span",{children:s.first_air_date})]}),s.last_air_date&&t("div",{className:S.detailItem,children:[t("strong",{children:"Last Air Date"}),t("span",{children:s.last_air_date})]}),s.networks&&s.networks.length>0&&t("div",{className:S.detailItem,children:[t("strong",{children:"Networks"}),t("span",{children:s.networks.map(e=>e.name).join(", ")})]}),s.created_by&&s.created_by.length>0&&t("div",{className:S.detailItem,children:[t("strong",{children:"Created By"}),t("span",{children:s.created_by.map(e=>e.name).join(", ")})]}),s.episode_run_time&&s.episode_run_time.length>0&&t("div",{className:S.detailItem,children:[t("strong",{children:"Episode Runtime"}),t("span",{children:[s.episode_run_time[0]," min"]})]}),s.imdb_id&&t("div",{className:S.detailItem,children:[t("strong",{children:"IMDb"}),t("a",{href:`https://www.imdb.com/title/${s.imdb_id}`,target:"_blank",rel:"noopener noreferrer",className:S.imdbLink,children:"View on IMDb"})]})]})]})]}),!p&&t(Po,{isOpen:fr,onClose:()=>jn(!1),episodes:zs,currentEpisode:String(v),watchedEpisodes:Ds,onEpisodeClick:gt,header:wn}),s?.adult&&!Qt&&t(Oo,{isOpen:!0,onClose:as,onGrant:lr}),t(Lo,{isOpen:!d&&pt&&!qn&&bn.current===`${Z}:${u}:${v}`&&Xe?.completed!==1&&!on(Le,Xe?.duration??0),onClose:Rs,title:"Resume Watching",message:t(Ie,{children:["You were at ",t("strong",{children:an(Lt)})]}),restartLabel:"Start from Beginning",onResume:Lr,onRestart:Rs}),t(Qs,{isOpen:ft,onClose:()=>ws(!0),title:ht?p?"Movie Completed!":"Show Completed!":"Episode Completed",heading:p?s?.title??"Movie":`S${u} E${v}`,message:ht?p?"You finished this movie!":"Congratulations! You finished all available episodes.":p?"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(_e,{variant:Ss?void 0:"secondary",onClick:xs,children:`Resume ${an(Le)}`}),t(_e,{variant:"secondary",onClick:As,children:"Replay"}),L!=null?t(_e,{onClick:$s,children:["Watch EP ",L]}):J!=null?t(_e,{onClick:ts,children:["Start Season ",J]}):ht?t(_e,{onClick:ns,disabled:je.isPending||Ge.isPending,children:je.isPending||Ge.isPending?"Saving...":"Move to Completed"}):null]}),t(Qs,{isOpen:Sr,onClose:()=>vt(!1),title:p?"Movie Completed!":J!=null?"Season Complete!":"Show Completed!",heading:hr,message:p?"You finished this movie!":J!=null?`You finished Season ${u}.`:"Congratulations! You finished all available episodes.",children:J!=null?t(_e,{onClick:ts,children:["Start Season ",J]}):t(Ie,{children:[t(_e,{onClick:()=>{vt(!1),as()},children:"Back to Details"}),t(_e,{onClick:ns,disabled:je.isPending||Ge.isPending,children:je.isPending||Ge.isPending?"Saving...":"Move to Completed"})]})}),!s&&t("div",{className:S.statusMsg,children:[t(he,{name:"spinner",className:S.spinner})," Loading..."]})]})]})};export{Qi as default};
@@ -1 +1 @@
1
- import{o as F,a as R,p as q,d as c,h as C,T,u as e,g as E}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,F as K,i as I}from"./index-CkZCduQZ.js";import{c as Q,d as X}from"./useTvLibrary-BCgO-d_K.js";import"./vendor-query-BBT5_sHx.js";import"./libraryInvalidation-Cv-7EfU1.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",Fe="_errorState_198yg_413",Re="_matureOverlay_198yg_434",qe="_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:Fe,matureOverlay:Re,matureContent:qe};function Qe(){const{id:o}=F(),d=R(),[B]=q(),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(E.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
+ import{o as F,a as R,p as q,d as c,h as C,T,u as e,g as E}from"./vendor-core-DfaOB3Rn.js";import{I as a}from"./vendor-icons-C1Pj_eSX.js";import{ah as j,g as U,ai as H,t as J,B as w,F as K,j as I}from"./index-hrS3r0UE.js";import{c as Q,d as X}from"./useTvLibrary-7zDxMjFz.js";import"./vendor-query-BBT5_sHx.js";import"./libraryInvalidation-DWCCaTbI.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",Fe="_errorState_198yg_413",Re="_matureOverlay_198yg_434",qe="_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:Fe,matureOverlay:Re,matureContent:qe};function Qe(){const{id:o}=F(),d=R(),[B]=q(),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(E.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};
@@ -0,0 +1 @@
1
+ import{d as n,h as b,T,u as _}from"./vendor-core-DfaOB3Rn.js";import{ai as k,t as m,l as w,j as I,n as P}from"./index-hrS3r0UE.js";import{d as D}from"./useTvLibrary-7zDxMjFz.js";import{a as W}from"./MediaCard-Bd24Icus.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=k(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=T(()=>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}),_(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-FQr72c16.js";import{a as ne,T as se}from"./useTv-Dl0TYap6.js";import{S as le}from"./SkeletonGrid-xUVpcN5T.js";import{u as ie,T as W,M as Q,aa as oe,B as x}from"./index-CkZCduQZ.js";import{E as ce}from"./ErrorMessage-hMt90aG4.js";import{s as r}from"./Search.module-C_qwCdHS.js";import"./MediaPopupShell-BewMMT93.js";import"./vendor-ui-3qrARCPr.js";import"./useIsMobile-Dvx1uJ82.js";import"./MatureConsentModal-BuJjdQ5N.js";import"./TvPopup-CaXs4L6B.js";import"./useTvLibrary-BCgO-d_K.js";import"./vendor-query-BBT5_sHx.js";import"./libraryInvalidation-Cv-7EfU1.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 Ae(){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{Ae as default};
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-Bd24Icus.js";import{a as ne,T as se}from"./useTv-Daayom0r.js";import{S as le}from"./SkeletonGrid-CKVHMLEB.js";import{u as ie,T as W,M as Q,a9 as oe,B as x}from"./index-hrS3r0UE.js";import{E as ce}from"./ErrorMessage-hMt90aG4.js";import{s as r}from"./Search.module-DjQZ0jox.js";import"./MediaPopupShell-BewMMT93.js";import"./vendor-ui-3qrARCPr.js";import"./useIsMobile-Dvx1uJ82.js";import"./MatureConsentModal-CBGHgiBA.js";import"./TvPopup-C_TEPZqV.js";import"./useTvLibrary-7zDxMjFz.js";import"./vendor-query-BBT5_sHx.js";import"./libraryInvalidation-DWCCaTbI.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 Ae(){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{Ae 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-FQr72c16.js";import{L as F}from"./LibraryListPage-y1J_sbu3.js";import{R as N}from"./ResetProgressModal-DIn1j8Qp.js";import{T as _}from"./TvPopup-CaXs4L6B.js";import{i as y,h as u,j as R}from"./index-CkZCduQZ.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-BCgO-d_K.js";import"./vendor-icons-C1Pj_eSX.js";import"./MediaPopupShell-BewMMT93.js";import"./vendor-ui-3qrARCPr.js";import"./useIsMobile-Dvx1uJ82.js";import"./MatureConsentModal-BuJjdQ5N.js";import"./SkeletonGrid-xUVpcN5T.js";import"./ErrorMessage-hMt90aG4.js";import"./LibraryListPage.module-r6k9nyT9.js";import"./vendor-query-BBT5_sHx.js";import"./libraryInvalidation-Cv-7EfU1.js";const Z=["All","Continue Watching",...I],S=24;function mt(){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{mt as default};
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-Bd24Icus.js";import{L as F}from"./LibraryListPage-L4Lyt1BV.js";import{R as N}from"./ResetProgressModal-udBYaYWc.js";import{T as _}from"./TvPopup-C_TEPZqV.js";import{j as y,i as u,k as R}from"./index-hrS3r0UE.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-7zDxMjFz.js";import"./vendor-icons-C1Pj_eSX.js";import"./MediaPopupShell-BewMMT93.js";import"./vendor-ui-3qrARCPr.js";import"./useIsMobile-Dvx1uJ82.js";import"./MatureConsentModal-CBGHgiBA.js";import"./SkeletonGrid-CKVHMLEB.js";import"./ErrorMessage-hMt90aG4.js";import"./LibraryListPage.module-r6k9nyT9.js";import"./vendor-query-BBT5_sHx.js";import"./libraryInvalidation-DWCCaTbI.js";const Z=["All","Continue Watching",...I],S=24;function mt(){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{mt 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-CkZCduQZ.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
+ 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-hrS3r0UE.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{a7 as d,B as m}from"./index-CkZCduQZ.js";import{W as u,s as p,a as g}from"./WatchAlongPanel-DLuYT4hH.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
+ import{c as h,d as s,u as e}from"./vendor-core-DfaOB3Rn.js";import{a7 as d,B as m}from"./index-hrS3r0UE.js";import{W as u,s as p,a as g}from"./WatchAlongPanel-BtiB_ErQ.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{a7 as g,B as r}from"./index-CkZCduQZ.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
+ import{d as h,A as _,h as z,u as s,L as C}from"./vendor-core-DfaOB3Rn.js";import{a7 as g,B as r}from"./index-hrS3r0UE.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};