@serifpersia/dango 3.7.5 → 3.7.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/README.md +1 -1
  2. package/client/dist/assets/{AnimeCard-BxhPLWBG.js → AnimeCard-a7KkMGQv.js} +1 -1
  3. package/client/dist/assets/{AnimeInfo-DcpKPBLS.js → AnimeInfo-De3gudGy.js} +1 -1
  4. package/client/dist/assets/{AnimeInfoPage-jKNSPHbX.js → AnimeInfoPage-adJHjnqz.js} +2 -2
  5. package/client/dist/assets/{AnimeMetaDetails-D8WIiO4b.js → AnimeMetaDetails-B3-A7O5H.js} +1 -1
  6. package/client/dist/assets/Asmr-BH3j9n5n.js +2 -0
  7. package/client/dist/assets/{AsmrResetProgressModal-DPHPLqPo.js → AsmrResetProgressModal-CZGzmnlI.js} +1 -1
  8. package/client/dist/assets/Home-4lO9InFx.js +1 -0
  9. package/client/dist/assets/Home-DHAkZuDf.css +1 -0
  10. package/client/dist/assets/{Insights-C9HufjGJ.js → Insights-Co9pEzWb.js} +1 -1
  11. package/client/dist/assets/{LibraryListPage-BT_xDjEq.js → LibraryListPage-CgZiYRmp.js} +1 -1
  12. package/client/dist/assets/{ListeningList-DL1rdCRi.js → ListeningList-DX_Imiie.js} +1 -1
  13. package/client/dist/assets/{Manga-BfFRq7eK.js → Manga-tDOa59vQ.js} +1 -1
  14. package/client/dist/assets/{MangaInfoPage-wBJjn2FL.js → MangaInfoPage-D_3Rx6rr.js} +1 -1
  15. package/client/dist/assets/{MangaReadPage-BAgsRqxt.js → MangaReadPage-D0satiXp.js} +1 -1
  16. package/client/dist/assets/{MangaResetProgressModal-Br5zqZ-U.js → MangaResetProgressModal-Bd_lIuFo.js} +1 -1
  17. package/client/dist/assets/{Mature-MO7ZwJVT.js → Mature-DhozU6BP.js} +1 -1
  18. package/client/dist/assets/{MatureConsentModal-Beq4JL0b.js → MatureConsentModal-RZ_j_2BD.js} +1 -1
  19. package/client/dist/assets/{MediaCard-lz7FdOe_.js → MediaCard-BODgA6ir.js} +1 -1
  20. package/client/dist/assets/{OptionListMenu-BSUcso28.js → OptionListMenu-CGazCg0C.js} +1 -1
  21. package/client/dist/assets/Player-M3yMiFzg.js +56 -0
  22. package/client/dist/assets/PlayerProvider-N2pT5gty.css +1 -0
  23. package/client/dist/assets/PlayerProvider-pi0at080.js +1 -0
  24. package/client/dist/assets/PlayerSettings-k4bqwbns.js +1 -0
  25. package/client/dist/assets/{QueueOptionsButton-B8xuoYlH.js → QueueOptionsButton-C-y5QFrT.js} +1 -1
  26. package/client/dist/assets/{QueueRail-D1FmM-GR.js → QueueRail-DGFI6xTM.js} +1 -1
  27. package/client/dist/assets/{ReadingList-D8ZiOnWi.js → ReadingList-BB_fA_j0.js} +1 -1
  28. package/client/dist/assets/{ResetProgressModal-0PvvM2XJ.js → ResetProgressModal-DEnbScHS.js} +1 -1
  29. package/client/dist/assets/{Search-D1T-PrGX.js → Search-Dikasx2q.js} +1 -1
  30. package/client/dist/assets/{Settings-DALBQcFc.js → Settings-CCoAhBc0.js} +1 -1
  31. package/client/dist/assets/{SkeletonGrid-pA-dcLBM.js → SkeletonGrid-w6TsxWu7.js} +1 -1
  32. package/client/dist/assets/{Trackers-D68sJf1y.js → Trackers-CoM-8Hz9.js} +1 -1
  33. package/client/dist/assets/Tv-BLUeZ2n8.js +4 -0
  34. package/client/dist/assets/{TvInfo-CpPIymn8.js → TvInfo-BjFZ57fG.js} +1 -1
  35. package/client/dist/assets/{TvPopup-BwGJ1Tjg.js → TvPopup-D6UvGI7M.js} +1 -1
  36. package/client/dist/assets/{TvSearch-D9SrfJjK.js → TvSearch-BDNZjbZo.js} +1 -1
  37. package/client/dist/assets/{TvWatchlist-25tpA8ln.js → TvWatchlist-er5RKLmv.js} +1 -1
  38. package/client/dist/assets/{Watchlist-mlZQTcqR.js → Watchlist-BiJ1SCAH.js} +1 -1
  39. package/client/dist/assets/{index-ZssheiHa.css → index-5x1mF1nD.css} +1 -1
  40. package/client/dist/assets/index-BP1z44Uk.js +178 -0
  41. package/client/dist/assets/{libraryInvalidation-DdnIPcOQ.js → libraryInvalidation-CVK2SYUR.js} +1 -1
  42. package/client/dist/assets/{useAnimeInfoData-tcGkDs2b.js → useAnimeInfoData-8RI9qMzw.js} +1 -1
  43. package/client/dist/assets/{useAsmr-B-FYJW2L.js → useAsmr-ClAcWwjW.js} +1 -1
  44. package/client/dist/assets/{useAsmrPopup-Ct9jC6X6.js → useAsmrPopup-CDcDqi0C.js} +1 -1
  45. package/client/dist/assets/useMangaLibrary-D3Foz2m_.js +1 -0
  46. package/client/dist/assets/{useMangaPopup-B_wRaMyP.js → useMangaPopup-kZzwoCN6.js} +1 -1
  47. package/client/dist/assets/usePlaybackEnd-BMf_H2dw.css +1 -0
  48. package/client/dist/assets/usePlaybackEnd-DmvZ__Ut.js +10 -0
  49. package/client/dist/assets/{useProviders-D0XOHCsj.js → useProviders-OKWPunZg.js} +1 -1
  50. package/client/dist/assets/{useTv-IidbSQU4.js → useTv-BgO7EV-p.js} +1 -1
  51. package/client/dist/assets/{useTvLibrary-DiCSdUOj.js → useTvLibrary-C6rSJQi_.js} +1 -1
  52. package/client/dist/index.html +2 -2
  53. package/package.json +2 -2
  54. package/server/dist/server.js +1 -1
  55. package/server/package.json +1 -1
  56. package/client/dist/assets/Asmr-DlKBykO-.js +0 -2
  57. package/client/dist/assets/Home-C5eTe3jP.css +0 -1
  58. package/client/dist/assets/Home-D7-FNOmo.js +0 -1
  59. package/client/dist/assets/Player-CnLC-x2S.js +0 -56
  60. package/client/dist/assets/PlayerSettings-kqYmlLDl.js +0 -1
  61. package/client/dist/assets/Tv-DO-WeaMv.js +0 -4
  62. package/client/dist/assets/hls-qvAoYTJt.js +0 -1
  63. package/client/dist/assets/index-DlcgJVM6.js +0 -178
  64. package/client/dist/assets/useMangaLibrary-BacTdrw2.js +0 -1
  65. package/client/dist/assets/usePlaybackEnd-DLFOYx3Q.css +0 -1
  66. package/client/dist/assets/usePlaybackEnd-DuEfjKb8.js +0 -10
@@ -0,0 +1,10 @@
1
+ import{u as t,A as S,q as B,h as j,d as k,T as X,$ as nt}from"./vendor-core-DfaOB3Rn.js";import{M as Fe,B as V,S as ee,i as st,Y as $e,q as G,W as at,t as ot,g as it}from"./index-BP1z44Uk.js";import{I as K}from"./vendor-icons-DrybRNxP.js";import{S as Ie,a as ct,f as Re,m as lt,h as dt,d as ut,s as Y,k as pt,u as ft,n as ae}from"./PlayerProvider-pi0at080.js";import{u as ht}from"./vendor-query-BBT5_sHx.js";import{a as mt}from"./playbackCompletion-IPHm9fp5.js";const bt="_controls_pcbjf_1",gt="_titleContainer_pcbjf_9",yt="_scheduleInfo_pcbjf_15",_t="_status_pcbjf_23",vt="_nextEpisode_pcbjf_35",St="_watchlistBtn_pcbjf_45",wt="_inList_pcbjf_72",Ct="_queueBtn_pcbjf_83",kt="_queueActive_pcbjf_95",xt="_modeToggleBtn_pcbjf_101",Tt="_modeToggleActive_pcbjf_108",Nt="_markWatchedBtn_pcbjf_129",Lt="_markWatchedDone_pcbjf_143",Bt="_streamPanel_pcbjf_154",Et="_desktopEpisodeActions_pcbjf_168",At="_sourceLoader_pcbjf_174",Pt="_episodeActions_pcbjf_187",$t="_mobileEpisodeActions_pcbjf_201",It="_episodeNavBtn_pcbjf_205",Mt="_primary_pcbjf_235",jt="_secondary_pcbjf_245",Ft="_episodePickerBtn_pcbjf_249",Rt="_queueCountdown_pcbjf_253",Dt="_speedBoostBadge_pcbjf_268",Ot="_videoContainer_pcbjf_299",Ht="_loadingOverlay_pcbjf_312",qt="_loadingDots_pcbjf_326",Wt="_dot_pcbjf_331",zt="_bounce_pcbjf_1",Vt="_bufferingOverlay_pcbjf_348",Kt="_bufferingSpinner_pcbjf_357",Ut="_spin_pcbjf_444",Qt="_videoIframe_pcbjf_366",Gt="_videoElementHidden_pcbjf_389",Yt="_upscalerCanvas_pcbjf_394",Xt="_upscalerActive_pcbjf_407",Jt="_upscalerStatusBadge_pcbjf_411",Zt="_subtitleOverlay_pcbjf_426",er="_spinner_pcbjf_444",tr="_errorOverlay_pcbjf_505",rr="_retryButton_pcbjf_515",nr="_detailsToggleBtn_pcbjf_528",sr="_descriptionSection_pcbjf_551",ar="_synopsisFlat_pcbjf_559",or="_fullscreenActive_pcbjf_593",ir="_errorSubtext_pcbjf_636",qn={controls:bt,titleContainer:gt,scheduleInfo:yt,status:_t,nextEpisode:vt,watchlistBtn:St,inList:wt,queueBtn:Ct,queueActive:kt,modeToggleBtn:xt,modeToggleActive:Tt,markWatchedBtn:Nt,markWatchedDone:Lt,streamPanel:Bt,desktopEpisodeActions:Et,sourceLoader:At,episodeActions:Pt,mobileEpisodeActions:$t,episodeNavBtn:It,primary:Mt,secondary:jt,episodePickerBtn:Ft,queueCountdown:Rt,speedBoostBadge:Dt,videoContainer:Ot,loadingOverlay:Ht,loadingDots:qt,dot:Wt,bounce:zt,bufferingOverlay:Vt,bufferingSpinner:Kt,spin:Ut,videoIframe:Qt,videoElementHidden:Gt,upscalerCanvas:Yt,upscalerActive:Xt,upscalerStatusBadge:Jt,subtitleOverlay:Zt,spinner:er,errorOverlay:tr,retryButton:rr,detailsToggleBtn:nr,descriptionSection:sr,synopsisFlat:ar,fullscreenActive:or,errorSubtext:ir},cr="_playerPageLayout_13s1u_1",lr="_noSidebar_13s1u_15",dr="_episodeSidebar_13s1u_19",ur="_playerMain_13s1u_32",pr="_videoPlayerWrapper_13s1u_40",fr="_playerInfoHeader_13s1u_56",hr="_playerAnimeCard_13s1u_62",mr="_playerInfoContainer_13s1u_74",br="_infoColumns_13s1u_86",gr="_videoTitleSection_13s1u_114",yr="_theaterMode_13s1u_288",Wn={playerPageLayout:cr,noSidebar:lr,episodeSidebar:dr,playerMain:ur,videoPlayerWrapper:pr,playerInfoHeader:fr,playerAnimeCard:hr,playerInfoContainer:mr,infoColumns:br,videoTitleSection:gr,theaterMode:yr},_r={fontSize:"subtitleFontSize",position:"subtitlePosition",bgOpacity:"subtitleBgOpacity",bgColor:"subtitleBgColor",textColor:"subtitleTextColor",edge:"subtitleEdge",bold:"subtitleBold"},q={fontSize:1.8,position:0,bgOpacity:.5,bgColor:"#000000",textColor:"#ffffff",edge:"shadow",bold:!1},de=(e,n,s)=>Math.max(n,Math.min(s,e)),ue=e=>typeof e=="string"&&/^#[0-9a-fA-F]{6}$/.test(e),oe=(e,n,s,i)=>{try{const r=localStorage.getItem(e);if(r===null)return n;const o=parseFloat(r);return Number.isFinite(o)?de(o,s,i):n}catch{return n}};function vr(){let e=q.edge,n=q.bgColor,s=q.textColor,i=q.bold;try{const r=localStorage.getItem("subtitleEdge");(r==="shadow"||r==="outline"||r==="none")&&(e=r);const o=localStorage.getItem("subtitleBgColor");ue(o)&&(n=o);const c=localStorage.getItem("subtitleTextColor");ue(c)&&(s=c);const u=localStorage.getItem("subtitleBold");u!==null&&(i=u==="true")}catch{}return{fontSize:oe("subtitleFontSize",q.fontSize,.5,10),position:oe("subtitlePosition",q.position,0,100),bgOpacity:oe("subtitleBgOpacity",q.bgOpacity,0,1),bgColor:n,textColor:s,edge:e,bold:i}}function De(e,n){const s=`rgba(0, 0, 0, ${de(n,0,1)})`;if(!ue(e))return s;const i=parseInt(e.slice(1,3),16),r=parseInt(e.slice(3,5),16),o=parseInt(e.slice(5,7),16);return`rgba(${i}, ${r}, ${o}, ${de(n,0,1)})`}function Oe(e,n){return e==="none"?n<=0?"0 1px 3px rgba(0, 0, 0, 0.9)":"none":e==="outline"?["-1px 0 0 black","1px 0 0 black","0 -1px 0 black","0 1px 0 black","-1px -1px 0 black","1px -1px 0 black","-1px 1px 0 black","1px 1px 0 black","0 0 6px rgba(0, 0, 0, 0.9)"].join(", "):"0 0 4px black, 0 1px 2px rgba(0, 0, 0, 0.8)"}function zn(e){return`
2
+ video::cue {
3
+ font-size: ${e.fontSize}rem !important;
4
+ color: ${e.textColor} !important;
5
+ background-color: ${De(e.bgColor,e.bgOpacity)} !important;
6
+ font-weight: ${e.bold?"bold":"normal"} !important;
7
+ text-shadow: ${Oe(e.edge,e.bgOpacity)} !important;
8
+ }
9
+ `}function Vn(e){return[`font-size: ${e.fontSize}rem`,`color: ${e.textColor}`,`background-color: ${De(e.bgColor,e.bgOpacity)}`,`font-weight: ${e.bold?"700":"400"}`,`text-shadow: ${Oe(e.edge,e.bgOpacity)}`,"padding: 0.2em 0.5em","border-radius: 0.25em","text-align: center","position: absolute","left: 50%","transform: translateX(-50%)","max-width: 92%","white-space: pre-wrap","overflow-wrap: break-word","line-height: 1.4"].join(`;
10
+ `)+";"}const Sr=new Set(["b","i","u","strong","em"]);function Kn(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/&lt;(\/?)([a-zA-Z]+)&gt;/g,(s,i,r)=>Sr.has(r.toLowerCase())?`<${i}${r.toLowerCase()}>`:s)}function Un(e){return e.replace(/<[^>]*>/g,"")}const Qn=["#ffffff","#ffff00","#7CFC00","#00e5ff","#ff9ff3","#ffa502"],Gn=["#000000","#1e272e","#2f3542","#3d0c02","#0c3d2e","#ffffff"];function Yn(e,n){const s=Number.isFinite(e)?e*16:q.fontSize*16;return!Number.isFinite(n)||n<=0?s/16:Math.min(s,Math.max(13,n*.07))/16}function Xn(e){const n=Math.abs(e/1e3).toFixed(1);return e>0?`+${n}s`:e<0?`-${n}s`:"0.0s"}function Jn(e,n){const s=e.clientWidth||0,i=e.clientHeight||0,r=e.videoWidth>0&&e.videoHeight>0?e.videoWidth/e.videoHeight:0;let o=i;r>0&&s>0&&i>0&&(o=s/i>r?i:s/r);const c=Math.max(0,(i-o)/2),u=Math.max(0,Math.min(100,Number(n)||0))/100*o;return c+u}const Zn=({isOpen:e,onClose:n,title:s,heading:i,message:r,children:o})=>t(Fe,{isOpen:e,onClose:n,title:s,width:"sm",children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t(K,{name:"check-circle",size:48,style:{color:"var(--accent-lighter)",marginBottom:"0.5rem"}}),t("p",{style:{fontSize:"1.1rem",fontWeight:600},children:i}),t("p",{style:{color:"var(--text-secondary)"},children:r}),o&&t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center",flexWrap:"wrap"},children:o})]})}),es=({isOpen:e,onClose:n,title:s,message:i,resumeLabel:r="Resume",restartLabel:o="Start Over",onResume:c,onRestart:u})=>t(Fe,{isOpen:e,onClose:n,title:s,width:"sm",children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t("p",{children:i}),t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center"},children:[t(V,{variant:"secondary",onClick:u,children:o}),t(V,{onClick:c,children:r})]})]})}),wr="_centerControls_bxt8c_1",Cr="_centerSkipBtn_bxt8c_15",kr="_centerPlayPause_bxt8c_37",te={centerControls:wr,centerSkipBtn:Cr,centerPlayPause:kr},ts=()=>t("div",{className:te.centerControls,onClick:e=>e.stopPropagation(),children:[t(Ie,{seconds:-10,className:te.centerSkipBtn}),t(ct,{className:te.centerPlayPause,"data-speed-boost-ignore":"true"}),t(Ie,{seconds:10,className:te.centerSkipBtn})]}),rs=({visible:e,title:n,episode:s,onBack:i,classes:r})=>t("div",{className:`${r.overlay} ${e?"":r.hidden} `,"data-speed-boost-ignore":"true",style:{pointerEvents:"none",background:"none"},children:t("div",{className:r.top,onClick:o=>o.stopPropagation(),children:[t("button",{className:r.backBtn,onClick:o=>{o.stopPropagation(),i()},title:"Back","aria-label":"Back",children:t(K,{name:"chevron-left"})}),t("div",{className:r.titleInfo,children:[t("span",{className:r.title,children:n}),s&&t("span",{className:r.episode,children:s})]})]})});function xr(e){return e instanceof Element&&!!e.closest('button, input, select, textarea, a, [role="button"], [role="slider"], [data-player-ui="true"]')}function ns({engine:e,topBar:n,centerControls:s,bottomBar:i,settingsPanel:r,overlays:o,isInteracting:c=!1,nativeControls:u=!1,chromeDisabled:a=!1,className:l,onStageClick:g,children:C}){const y=Re(e),E=lt(),p=S(void 0),d=S(void 0),N=S(0),f=S(c);f.current=c;const w=B(()=>{clearTimeout(p.current),p.current=void 0},[]),h=B(()=>{w();const x=e.getState();!x.isPlaying||x.isScrubbing||f.current||u||(p.current=setTimeout(()=>{const P=e.getState();f.current||P.isScrubbing||!P.isPlaying||e.setShowControls(!1)},E?5e3:3e3))},[e,E,u,w]),L=B(()=>{e.setShowControls(!0),h()},[e,h]);dt(e,L,!u&&!a),j(()=>(c||y.isScrubbing||!y.isPlaying?(e.setShowControls(!0),w()):h(),w),[e,c,y.isPlaying,y.isScrubbing,y.showControls,w,h]),j(()=>()=>{clearTimeout(d.current)},[]);const A=x=>{if(xr(x.target)||u||a)return;g?.();const P=Date.now();if(P-N.current<280){clearTimeout(d.current),d.current=void 0,N.current=0,e.toggleFullscreen();return}N.current=P,clearTimeout(d.current),d.current=setTimeout(()=>{d.current=void 0,e.setShowControls(!e.getState().showControls),h()},280)},F=y.showControls||y.isScrubbing||c||!y.isPlaying;return t(ut,{engine:e,children:t("div",{ref:e.containerRef,"data-player-root":"true",className:`${Y.shell} ${y.isFullscreen?Y.shellFullscreen:""} ${l??""}`,style:{cursor:!F&&y.isFullscreen?"none":"default"},onContextMenu:x=>x.preventDefault(),onPointerMove:x=>{x.pointerType==="mouse"&&L()},onFocusIn:L,onMouseLeave:()=>{window.matchMedia?.("(hover: hover) and (pointer: fine)").matches&&e.getState().isPlaying&&!f.current&&e.setShowControls(!1)},children:[t("div",{className:Y.stage,onClick:A,children:C}),o,(y.error||y.playBlocked)&&t("div",{className:Y.engineStatus,"data-player-ui":"true",children:t(pt,{})}),!a&&!u&&t("div",{className:Y.uiLayer,children:[t("div",{"data-player-ui":"true",children:n}),F&&s&&t("div",{"data-player-ui":"true",children:s}),t("div",{"data-player-ui":"true",children:i}),r&&t("div",{"data-player-ui":"true",children:r})]})]})})}const Tr=e=>(e.language??e.lang??"").toLowerCase(),Nr=e=>(e.label??"").toLowerCase(),Lr=e=>`${e.language??e.lang??""}|||${e.label??""}`,Br=e=>Tr(e).startsWith("en")||Nr(e).includes("english");function ss(e,n){if(e.length===0||n?.enabled===!1)return-1;const s=n?.lastKey??null;if(s){const r=e.findIndex(o=>Lr(o)===s);if(r>=0)return r}const i=e.findIndex(Br);return i>=0?i:0}const Er="_statusArea_1xccu_1",Ar="_toggleBtn_1xccu_20",Pr="_shortcuts_1xccu_46",$r="_shortcutGroup_1xccu_56",Ir="_shortcut_1xccu_46",Mr="_key_1xccu_70",jr="_label_1xccu_91",_={statusArea:Er,toggleBtn:Ar,shortcuts:Pr,shortcutGroup:$r,shortcut:Ir,key:Mr,label:jr},as=({showTheater:e=!0})=>{const[n,s]=k(!1);return t("div",{className:_.statusArea,children:[t("button",{type:"button",className:_.toggleBtn,onClick:()=>s(i=>!i),"aria-expanded":n,"aria-controls":"player-shortcuts",children:[t(K,{name:"keyboard",size:14}),t("span",{children:"Keyboard Shortcuts"}),n?t(K,{name:"chevron-up",size:12}):t(K,{name:"chevron-down",size:12})]}),n&&t("div",{id:"player-shortcuts",className:_.shortcuts,children:[t("div",{className:_.shortcutGroup,children:[t("div",{className:_.shortcut,children:[t("span",{className:_.key,children:"↑"}),t("span",{className:_.key,children:"↓"}),t("span",{className:_.label,children:"Volume"})]}),t("div",{className:_.shortcut,children:[t("span",{className:_.key,children:"←"}),t("span",{className:_.key,children:"→"}),t("span",{className:_.label,children:"Seek"})]})]}),t("div",{className:_.shortcutGroup,children:[t("div",{className:_.shortcut,children:[t("span",{className:_.key,children:"Space"}),t("span",{className:_.label,children:"Play/Pause"})]}),t("div",{className:_.shortcut,children:[t("span",{className:_.key,children:"F"}),t("span",{className:_.label,children:"Fullscreen"})]}),t("div",{className:_.shortcut,children:[t("span",{className:_.key,children:"M"}),t("span",{className:_.label,children:"Mute"})]}),e&&t("div",{className:_.shortcut,children:[t("span",{className:_.key,children:"T"}),t("span",{className:_.label,children:"Theater"})]}),t("div",{className:_.shortcut,children:[t("span",{className:_.key,children:"N"}),t("span",{className:_.label,children:"Next"})]})]})]})]})},Fr="_episodeListContainer_9tyin_1",Rr="_drawerContainer_9tyin_9",Dr="_episodeListHeader_9tyin_14",Or="_drawerHeader_9tyin_20",Hr="_episodeListTitle_9tyin_29",qr="_rangeSelector_9tyin_41",Wr="_rangeButton_9tyin_47",zr="_active_9tyin_70",Vr="_episodeList_9tyin_1",Kr="_drawerList_9tyin_89",Ur="_episodeItem_9tyin_118",Qr="_watched_9tyin_145",Gr="_episodeThumb_9tyin_167",Yr="_episodeText_9tyin_176",Xr="_episodeLabel_9tyin_184",Jr="_episodeSub_9tyin_189",v={episodeListContainer:Fr,drawerContainer:Rr,episodeListHeader:Dr,drawerHeader:Or,episodeListTitle:Hr,rangeSelector:qr,rangeButton:Wr,active:zr,episodeList:Vr,drawerList:Kr,episodeItem:Ur,watched:Qr,episodeThumb:Gr,episodeText:Yr,episodeLabel:Xr,episodeSub:Jr},Zr=({episodes:e,currentEpisode:n,watchedEpisodes:s=[],onEpisodeClick:i,variant:r="sidebar",title:o="Episodes",header:c})=>{const[u,a]=k(0),l=S(null),g=X(()=>e.map(p=>typeof p=="string"?{id:p,label:`Episode ${p}`}:p),[e]),C=X(()=>new Set(s),[s]);j(()=>{const p=l.current;if(!p)return;let d=p.parentElement;for(;d;){const w=window.getComputedStyle(d);if((w.overflowY==="auto"||w.overflowY==="scroll")&&d.scrollHeight>d.clientHeight)break;d=d.parentElement}if(!d)return;const N=d.getBoundingClientRect(),f=p.getBoundingClientRect();d.scrollTop+=f.top+f.height/2-(N.top+d.clientHeight/2)},[n,u]);const y=X(()=>{if(g.length<=100)return[];const p=[];for(let d=0;d<g.length;d+=100){const N=d+1,f=Math.min(d+100,g.length);p.push(`${N}-${f}`)}return p},[g]),E=X(()=>{if(y.length===0)return g;const p=y[u];if(!p)return g;const[d,N]=p.split("-"),f=parseInt(d,10),w=parseInt(N,10);return g.slice(f-1,w)},[g,y,u]);return t("div",{className:`${v.episodeListContainer} ${r==="drawer"?v.drawerContainer:""}`,children:[t("div",{className:`${v.episodeListHeader} ${r==="drawer"?v.drawerHeader:""}`,children:[c,t("h3",{className:v.episodeListTitle,children:o}),y.length>0&&t("div",{className:v.rangeSelector,children:y.map((p,d)=>t("button",{className:`${v.rangeButton} ${u===d?v.active:""}`,onClick:()=>a(d),children:p},p))})]}),t("div",{className:`${v.episodeList} ${r==="drawer"?v.drawerList:""}`,children:E.map(p=>{const d=p.id===n,N=C.has(p.id)||p.watched===!0;return t("div",{ref:d?l:void 0,className:`${v.episodeItem} ${N?v.watched:""} ${d?v.active:""}`,onClick:()=>i(p.id),children:[p.thumbnail&&t("img",{src:p.thumbnail,alt:"",loading:"lazy",decoding:"async",className:v.episodeThumb}),t("span",{className:v.episodeText,children:[t("span",{className:v.episodeLabel,children:p.label??`Episode ${p.id}`}),p.sublabel&&t("span",{className:v.episodeSub,children:p.sublabel})]})]},p.id)})})]})},os=({variant:e="sidebar",count:n=12})=>t("div",{className:`${v.episodeListContainer} ${e==="drawer"?v.drawerContainer:""}`,children:[t("div",{className:`${v.episodeListHeader} ${e==="drawer"?v.drawerHeader:""}`,children:[t("h3",{className:v.episodeListTitle,children:"Episodes"}),t("div",{className:v.rangeSelector,children:[t(ee,{width:"60px",height:"28px",variant:"rectangular"}),t(ee,{width:"60px",height:"28px",variant:"rectangular"}),t(ee,{width:"60px",height:"28px",variant:"rectangular"})]})]}),t("div",{className:`${v.episodeList} ${e==="drawer"?v.drawerList:""}`,children:Array.from({length:n}).map((s,i)=>t("div",{className:v.episodeItem,style:{border:"none",background:"transparent"},children:t(ee,{width:"120px",height:"1.2rem",variant:"text"})},i))})]}),en="_shell_cys6s_1",tn="_overlay_cys6s_10",rn="_drawer_cys6s_21",nn="_handle_cys6s_56",sn="_header_cys6s_64",an="_headerCopy_cys6s_73",on="_kicker_cys6s_79",cn="_title_cys6s_87",ln="_closeBtn_cys6s_94",dn="_body_cys6s_116",H={shell:en,overlay:tn,drawer:rn,handle:nn,header:sn,headerCopy:an,kicker:on,title:cn,closeBtn:ln,body:dn};function is({isOpen:e,onClose:n,episodes:s,currentEpisode:i,watchedEpisodes:r=[],onEpisodeClick:o,title:c,header:u}){return j(()=>{if(!e)return;const a=g=>{g.key==="Escape"&&n()},l=document.body.style.overflow;return document.body.style.overflow="hidden",document.addEventListener("keydown",a),()=>{document.body.style.overflow=l,document.removeEventListener("keydown",a)}},[e,n]),e?nt(t("div",{className:H.shell,role:"dialog","aria-modal":"true","aria-label":"Episode picker",children:[t("button",{className:H.overlay,type:"button",onClick:n,"aria-label":"Close episodes"}),t("aside",{className:H.drawer,children:[t("div",{className:H.handle}),t("div",{className:H.header,children:[t("div",{className:H.headerCopy,children:[t("span",{className:H.kicker,children:"Episode picker"}),t("h3",{className:H.title,children:"Choose an episode"})]}),t("button",{className:H.closeBtn,type:"button",onClick:n,"aria-label":"Close",children:t(K,{name:"times"})})]}),t("div",{className:H.body,children:t(Zr,{episodes:s,currentEpisode:i,watchedEpisodes:r,onEpisodeClick:o,variant:"drawer",title:c,header:u})})]})]}),document.body):null}const un="_sourceSelectionContainer_1am19_1",pn="_providerSelectContainer_1am19_14",fn="_providerSelect_1am19_14",hn="_sourceSelect_1am19_1",mn="_sourceButtons_1am19_70",bn="_sourceButton_1am19_70",gn="_active_1am19_95",cs={sourceSelectionContainer:un,providerSelectContainer:pn,providerSelect:fn,sourceSelect:hn,sourceButtons:mn,sourceButton:bn,active:gn},ls=({skipIntervals:e,showId:n,episodeNumber:s,episodeCount:i,sourceType:r,showMeta:o})=>{const c=ht(),u=st(),{engine:a,mediaRef:l}=ft({volumeKey:"playerVolume",mutedKey:"playerMuted"}),{isPlaying:g,isMuted:C,volume:y,duration:E,isScrubbing:p,isBuffering:d,isFullscreen:N,isSpeedBoostActive:f,showControls:w}=Re(a),h=a.containerRef,L=S(null),A=S(0),F=S(Math.random().toString(36).substring(2)),x=a.setShowControls,[P,O]=k(localStorage.getItem("autoSkipEnabled")==="true"),[ne,W]=k(null),[T]=k(vr),[J,fe]=k(T.fontSize),[He,he]=k(T.position),[qe,me]=k(T.bgOpacity),[We,be]=k(T.bgColor),[ze,ge]=k(T.textColor),[Ve,ye]=k(T.edge),[Ke,_e]=k(T.bold),ve=B((b,I)=>{if({fontSize:m=>typeof m!="number"?!1:(fe(m),!0),position:m=>typeof m!="number"?!1:(he(m),!0),bgOpacity:m=>typeof m!="number"?!1:(me(m),!0),bgColor:m=>typeof m!="string"?!1:(be(m),!0),textColor:m=>typeof m!="string"?!1:(ge(m),!0),edge:m=>m!=="shadow"&&m!=="outline"&&m!=="none"?!1:(ye(m),!0),bold:m=>typeof m!="boolean"?!1:(_e(m),!0)}[b](I))try{localStorage.setItem(_r[b],String(I))}catch{}},[]),[Ue,Qe]=k([]),[Ge,Ye]=k(null),[Xe,Je]=k(!1),[Ze,et]=k(!1),[tt,Se]=k(()=>{try{return localStorage.getItem("playerUseNativeControls")==="true"}catch{return!1}}),U=S(!1),se=S(-1),Z=B(()=>{const b=l.current;return!n||!s||!o?.name?null:{showId:n,episodeNumber:s,episodeCount:i,currentTime:a.getTimeline().currentTime,duration:a.getState().duration,showName:o.name,showThumbnail:o.thumbnail,nativeName:o.names?.native,englishName:o.names?.english,genres:Array.isArray(o.genres)?o.genres.map(I=>typeof I=="string"?I:I?.name).filter(Boolean):void 0,popularityScore:o.score,type:o.type,isPlaying:b?!b.paused:r==="iframe",sessionId:F.current,isAdult:o.isAdult}},[a,l,n,s,i,o,r]),$=B((b=!1,I=!1)=>{if(U.current)return!1;const R=Z();if(!R)return!1;const m=l.current;if(!m&&!b&&r!=="iframe"||r!=="iframe"&&R.duration<=0)return!1;const D=a.getTimeline().currentTime;if(!I){if(D===0)return!1;const Q=m?Math.abs(D-se.current):0;if(!b&&m&&D!==m.duration&&Q<5)return!1}return R.currentTime=D,se.current=D,b?(async()=>{try{await $e("progress.updateProgress",R),c.invalidateQueries({queryKey:[G.videoSources,n,s]}),c.invalidateQueries({queryKey:[G.continueWatching]}),c.invalidateQueries({queryKey:[G.thisWeekSchedule]}),c.invalidateQueries(u.continueWatching.pathFilter())}catch(Q){console.error("Failed to update progress:",Q)}})():$e("progress.updateProgress",R).catch(Q=>console.error("Failed to update progress:",Q)),!0},[a,Z,r,c,n,s,u.continueWatching,l]);j(()=>{const b=()=>{U.current||$(!0)};window.addEventListener("beforeunload",b),window.addEventListener("pagehide",b);const I=()=>{document.visibilityState==="hidden"&&b()};document.addEventListener("visibilitychange",I);const R=L;return()=>{window.removeEventListener("beforeunload",b),window.removeEventListener("pagehide",b),document.removeEventListener("visibilitychange",I),U.current||$(!0),R.current&&clearTimeout(R.current)}},[$]);const we=B(()=>a.setShowControls(!0),[a]),Ce=a.toggleFullscreen,ke=B(()=>{a.togglePlay(),x(!0)},[a,x]),xe=B(()=>{a.toggleMute(),x(!0)},[a,x]),Te=B(b=>{a.seekRelative(b),L.current&&clearTimeout(L.current),L.current=setTimeout(()=>$(!1,!0),1500),x(!0)},[a,$,x]),Ne=B(()=>{U.current=!1,$(!1,!0)},[$]),Le=B(()=>{x(!0),$(!1,!0)},[$,x]);j(()=>{U.current=!1,se.current=-1,A.current=0,F.current=Math.random().toString(36).substring(2),a.reset()},[a,n,s]);const Be=a.reset;j(()=>{const b=F.current;return()=>{at(b)}},[a,n,s]),j(()=>{if(r!=="iframe")return;$(!1,!0);const b=setInterval(()=>{$(!1,!0)},6e4);return()=>clearInterval(b)},[r,$]);const Ee=B(()=>{const b=l.current;if(!b)return;const I=b.currentTime||0,R=Date.now();R-A.current>6e4&&$()&&(A.current=R);const m=e.find(D=>I>=D.start_time&&I<D.end_time)||null;W(D=>D?.skip_id!==m?.skip_id?m:D),P&&m&&!b.paused&&(b.currentTime=m.end_time,W(null))},[l,e,P,$]),Ae=B(()=>{const b=Z();b&&(b.currentTime=b.duration,ot.progress.updateProgress.mutate(b).then(()=>{c.invalidateQueries({queryKey:[G.videoSources,n,s]}),c.invalidateQueries({queryKey:[G.continueWatching]})}).catch(I=>console.error("Failed to send final progress:",I)))},[Z,c,n,s]),Pe=B(()=>{U.current=!0,Ae()},[Ae]),rt=X(()=>({togglePlay:ke,seek:Te,toggleMute:xe,toggleFullscreen:Ce,onPlay:Ne,onPause:Le,formatTime:it,onTimeUpdate:Ee,onEnded:Pe,setShowControls:x,setIsAutoSkipEnabled:O,setCurrentSkipInterval:W,setSubtitleFontSize:fe,setSubtitlePosition:he,setSubtitleBgOpacity:me,setSubtitleBgColor:be,setSubtitleTextColor:ge,setSubtitleEdge:ye,setSubtitleBold:_e,setSubtitleStyle:ve,setAvailableSubtitles:Qe,setActiveSubtitleTrack:Ye,setShowSettings:Je,setShowVolumeSlider:et,flashControls:we,sendProgressUpdate:$,setUseNativeControls:Se,resetMediaState:Be}),[ke,Te,xe,Ce,Ne,Le,Ee,Pe,$,Se,Be,we,ve,x]);return{engine:a,refs:{videoRef:l,playerContainerRef:h},state:{isPlaying:g,isMuted:C,volume:y,isFullscreen:N,duration:E,showControls:w,isScrubbing:p,isAutoSkipEnabled:P,currentSkipInterval:ne,subtitleFontSize:J,subtitlePosition:He,subtitleBgOpacity:qe,subtitleBgColor:We,subtitleTextColor:ze,subtitleEdge:Ve,subtitleBold:Ke,availableSubtitles:Ue,activeSubtitleTrack:Ge,showSettings:Xe,showVolumeSlider:Ze,isBuffering:d,isSpeedBoostActive:f,useNativeControls:tt},actions:rt}};function yn(){try{return typeof navigator<"u"&&/android/i.test(navigator.userAgent)}catch{return!1}}function ds(e,n){const{refs:s,actions:i}=e,r=S(n);r.current=n;const o=S(!1),c=S(!1),u=a=>{try{if(a)return a.matches}catch{}try{return window.innerWidth>window.innerHeight}catch{return!1}};j(()=>{if(!yn())return;let a=null;const l=()=>{const g=s.playerContainerRef.current;if(u(a)){if(!r.current||!g||ae(s.videoRef.current)||c.current)return;o.current=!0,i.toggleFullscreen()}else c.current=!1,o.current&&(o.current=!1,ae(s.videoRef.current)&&i.toggleFullscreen())};try{a=window.matchMedia("(orientation: landscape)"),a.addEventListener?a.addEventListener("change",l):a.addListener(l)}catch{}return l(),()=>{try{a&&(a.removeEventListener?a.removeEventListener("change",l):a.removeListener(l))}catch{}}},[i,s.playerContainerRef,s.videoRef,n]),j(()=>{const a=()=>{if(!ae(s.videoRef.current)){o.current=!1;try{window.matchMedia("(orientation: landscape)").matches&&(c.current=!0)}catch{c.current=!0}}};return document.addEventListener("fullscreenchange",a),document.addEventListener("webkitfullscreenchange",a),()=>{document.removeEventListener("fullscreenchange",a),document.removeEventListener("webkitfullscreenchange",a)}},[s.videoRef])}const _n=e=>Math.max(8,Math.min(40,Math.ceil(e/16.7)+4));function us({videoRef:e,canvasRef:n,delayMs:s,enabled:i}){const r=S(s);r.current=s;const o=S([]),c=S(-1),u=S(-1),a=S(!1),l=S(0),g=S(null);j(()=>{const C=f=>{if(f)try{f.close()}catch{}},y=()=>{for(const f of o.current)C(f.bitmap);o.current=[]};if(!i){y(),c.current=-1,u.current=-1,a.current=!1,l.current=0;return}let E=!1;const p=()=>{g.current!==null&&(cancelAnimationFrame(g.current),g.current=null)},d=()=>{E||(p(),g.current=requestAnimationFrame(()=>{N()}))};async function N(){if(E)return;const f=e.current,w=n.current;if(!f||!w||f.videoWidth===0){d();return}if(f.paused||f.ended||document.hidden||f.readyState<HTMLMediaElement.HAVE_CURRENT_DATA){d();return}const h=f.getVideoPlaybackQuality().totalVideoFrames;if(h===c.current){d();return}(f.seeking||u.current>=0&&Math.abs(f.currentTime-u.current)>.5)&&(y(),a.current=!1,l.current=0,c.current=-1),u.current=f.currentTime,(w.width!==f.videoWidth||w.height!==f.videoHeight)&&(w.width=f.videoWidth,w.height=f.videoHeight);const L=Math.max(0,r.current||0);L>l.current&&(a.current=!1);try{const A=await createImageBitmap(f);if(E){C(A);return}c.current=h;const F=performance.now(),x=w.getContext("2d"),P=T=>{x&&x.drawImage(T,0,0,w.width,w.height)};if(L<=0){y(),a.current=!1,l.current=0,P(A),C(A),d();return}const O=o.current;O.push({bitmap:A,capture:F});const ne=_n(L);for(;O.length>ne;)C(O.shift()?.bitmap);let W=-1;for(let T=O.length-1;T>=0;T--)if(F-O[T].capture>=L){W=T;break}if(W!==-1){for(let J=0;J<W;J++)C(O.shift()?.bitmap);const T=O.shift();T?(P(T.bitmap),C(T.bitmap),a.current=!0,l.current=L):P(A)}else if(!a.current)P(A);else{const T=O.shift();T?(P(T.bitmap),C(T.bitmap)):P(A)}}catch{}d()}return d(),()=>{E=!0,p();for(const f of o.current)try{f.bitmap.close()}catch{}o.current=[]}},[i,e,n])}const Me=(e,n)=>{try{localStorage.setItem("playerVideoDelayMs",String(e)),localStorage.setItem("playerVideoDelayEnabled",String(n))}catch{}},je=e=>{try{localStorage.setItem("playerVideoDelayEnabled",String(e))}catch{}};function ps(e,n){const[s,i]=k(()=>{try{const h=Number(localStorage.getItem("playerVideoDelayMs"));if(Number.isFinite(h)&&h>=0&&h<=500)return Math.round(h)}catch{}return 180}),[r,o]=k(()=>{try{return localStorage.getItem("playerVideoDelayEnabled")==="true"}catch{return!1}}),[c,u]=k(!1),[a,l]=k(!1),g=S(null),C=S(null),y=h=>{const L=Math.max(0,Math.min(500,Math.round(h)));i(L);try{localStorage.setItem("playerVideoDelayMs",String(L))}catch{}},E=h=>{o(h),je(h)},p=B(()=>{l(!1),u(!1)},[]);return{videoDelayMs:s,videoDelayEnabled:r,setDelayEnabled:E,handleVideoDelayChange:y,isCalibrating:c,testClipActive:a,stopCalibration:p,openAvSyncCalibrator:()=>{g.current={enabled:r,ms:s},o(!0),je(!0),n?.(),u(!0)},cancelAvSyncCalibrator:()=>{const h=g.current;g.current=null,h&&(i(h.ms),o(h.enabled),Me(h.ms,h.enabled)),l(!1),u(!1)},applyAvSyncCalibrator:()=>{g.current=null,o(!0),Me(s,!0),l(!1),u(!1)},toggleTestClip:()=>{if(a){l(!1);return}const h=e.current;h&&!isNaN(h.currentTime)&&(C.current=h.currentTime),l(!0)},calibReturnRef:C,effectiveVideoDelayMs:r?s:0}}function fs(){const[e,n]=k(()=>{try{return localStorage.getItem("playerTheaterMode")==="true"}catch{return!1}});j(()=>{try{e?document.body.classList.add("theater-mode"):document.body.classList.remove("theater-mode")}catch(r){console.error(r)}return()=>{try{document.body.classList.remove("theater-mode")}catch(r){console.error(r)}}},[e]);const s=B(()=>{n(r=>{const o=!r;try{localStorage.setItem("playerTheaterMode",o.toString())}catch{}return o})},[]),i=B(r=>{if(e&&r.target===r.currentTarget){n(!1);try{localStorage.setItem("playerTheaterMode","false")}catch{}}},[e]);return{isTheaterMode:e,toggleTheaterMode:s,handleLayoutClick:i}}const z={enabled:!0,blur:60,saturation:150,brightness:70,opacity:60};function vn(){try{const e=localStorage.getItem("playerAmbientLight");if(!e)return z;const n=JSON.parse(e),s=(i,r,o,c)=>{const u=Number(i);return Number.isFinite(u)?Math.max(o,Math.min(c,u)):r};return{enabled:n.enabled??z.enabled,blur:s(n.blur,z.blur,0,120),saturation:s(n.saturation,z.saturation,0,200),brightness:s(n.brightness,z.brightness,20,120),opacity:s(n.opacity,z.opacity,10,100)}}catch{return z}}function hs(){const[e,n]=k(vn),s=B(i=>{n(r=>{const o={...r,...i};try{localStorage.setItem("playerAmbientLight",JSON.stringify(o))}catch{}return o})},[]);return{settings:e,update:s}}const Sn="_theaterAmbient_x9t0o_1",wn={theaterAmbient:Sn},ie=160,ce=90,Cn=120,ms=({videoRef:e,active:n,settings:s,className:i})=>{const r=S(null);return j(()=>{if(!n)return;const o=r.current,c=e.current;if(!o||!c)return;const u=o.getContext("2d",{alpha:!1});if(!u)return;let a=0,l=0,g=!1;const C=()=>{if(!(c.readyState<2||!c.videoWidth))try{const d=c.videoWidth,N=c.videoHeight,f=ie/ce,w=d/N;let h=d,L=N,A=0,F=0;w>f?(h=N*f,A=(d-h)/2):(L=d/f,F=(N-L)/2),u.drawImage(c,A,F,h,L,0,0,ie,ce)}catch{}},y=d=>{g||c.paused||(a=requestAnimationFrame(y),!(d-l<Cn)&&(l=d,C()))},E=()=>{g||(cancelAnimationFrame(a),l=0,a=requestAnimationFrame(y))},p=()=>cancelAnimationFrame(a);return c.addEventListener("play",E),c.addEventListener("pause",p),c.addEventListener("seeked",C),c.addEventListener("loadeddata",C),a=requestAnimationFrame(y),()=>{g=!0,cancelAnimationFrame(a),c.removeEventListener("play",E),c.removeEventListener("pause",p),c.removeEventListener("seeked",C),c.removeEventListener("loadeddata",C)}},[n,e]),n?t("canvas",{ref:r,width:ie,height:ce,"aria-hidden":"true",className:i??wn.theaterAmbient,style:{filter:`blur(${s.blur}px) saturate(${s.saturation}%) brightness(${s.brightness}%)`,opacity:s.opacity/100}}):null},kn="_row_1fq55_1",xn="_rowHeader_1fq55_9",Tn="_rowLabel_1fq55_17",Nn="_rowValue_1fq55_28",Ln="_slider_1fq55_36",Bn="_swatches_1fq55_99",En="_swatch_1fq55_99",An="_swatchPicked_1fq55_114",Pn="_colorInput_1fq55_120",$n="_segmented_1fq55_131",M={row:kn,rowHeader:xn,rowLabel:Tn,rowValue:Nn,slider:Ln,swatches:Bn,swatch:En,swatchPicked:An,colorInput:Pn,segmented:$n},In=({label:e,display:n,min:s,max:i,step:r,value:o,percent:c,onChange:u,onCommit:a})=>t("div",{className:M.row,children:[t("div",{className:M.rowHeader,children:[t("span",{className:M.rowLabel,children:e}),t("span",{className:M.rowValue,children:n})]}),t("input",{type:"range",className:M.slider,min:s,max:i,step:r,value:o,"aria-label":e,"data-speed-boost-ignore":"true",onInput:l=>u(Number(l.target.value)),onMouseDown:l=>l.stopPropagation(),onPointerDown:l=>l.stopPropagation(),onTouchStart:l=>l.stopPropagation(),onPointerUp:a,onPointerCancel:a,onTouchEnd:a,onKeyUp:a,onBlur:a,style:{"--slider-percent":`${c}%`}})]}),bs=({label:e,colors:n,value:s,onChange:i})=>t("div",{className:M.row,children:[t("div",{className:M.rowHeader,children:t("span",{className:M.rowLabel,children:e})}),t("div",{className:M.swatches,children:[n.map(r=>t("button",{type:"button","aria-label":`${e} ${r}`,"aria-pressed":s.toLowerCase()===r.toLowerCase(),onClick:()=>i(r),className:`${M.swatch} ${s.toLowerCase()===r.toLowerCase()?M.swatchPicked:""}`,style:{backgroundColor:r}},r)),t("input",{type:"color","aria-label":`Custom ${e.toLowerCase()}`,className:M.colorInput,value:s,"data-speed-boost-ignore":"true",onInput:r=>i(r.target.value),onMouseDown:r=>r.stopPropagation(),onPointerDown:r=>r.stopPropagation(),onTouchStart:r=>r.stopPropagation()})]})]});function gs({label:e,options:n,value:s,onChange:i}){return t("div",{className:M.row,children:[t("div",{className:M.rowHeader,children:t("span",{className:M.rowLabel,children:e})}),t("div",{className:M.segmented,role:"group","aria-label":e,children:n.map(r=>t("button",{type:"button","aria-pressed":s===r,onClick:()=>i(r),children:[t("span",{children:r}),s===r&&t(K,{name:"check",size:10})]},r))})]})}const re=10,pe=500,le=e=>Math.max(0,Math.min(pe,Math.round(e))),ys=({isOpen:e,ms:n,onChange:s,onApply:i,onClose:r,testClipActive:o,onTestClip:c})=>e?t("div",{role:"dialog","aria-label":"Calibrate audio video sync","data-speed-boost-ignore":"true",onClick:u=>u.stopPropagation(),style:{position:"absolute",right:8,bottom:112,width:"min(260px, calc(100% - 16px))",maxHeight:"calc(100% - 124px)",overflowY:"auto",overflowX:"hidden",zIndex:60,display:"flex",flexDirection:"column",alignItems:"center",gap:8,padding:12,borderRadius:"var(--radius-lg)",border:"1px solid var(--glass-border)",background:"rgba(18, 18, 22, 0.95)",boxShadow:"var(--glass-shadow)",backdropFilter:"blur(14px)",WebkitBackdropFilter:"blur(14px)",boxSizing:"border-box"},children:[t("div",{style:{fontSize:"0.8rem",fontWeight:800,color:"var(--text-primary)"},children:"A/V sync"}),t("div",{children:t(V,{size:"sm",variant:"secondary",onClick:c,children:o?"Back to video":"Preview test clip"})}),t("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",gap:6,flexWrap:"wrap"},children:[t(V,{size:"sm",onClick:()=>s(le(n-re)),"aria-label":"Decrease delay by 10 milliseconds",children:["− ",re,"ms"]}),t("div",{style:{fontSize:"1.1rem",fontWeight:800,minWidth:64,textAlign:"center"},children:[n,"ms"]}),t(V,{size:"sm",onClick:()=>s(le(n+re)),"aria-label":"Increase delay by 10 milliseconds",children:["+ ",re,"ms"]})]}),t(In,{label:"Video delay",display:`${n}ms`,min:0,max:pe,step:5,value:n,percent:n/pe*100,onChange:u=>s(le(u))}),t("div",{style:{display:"flex",gap:8,justifyContent:"center",flexWrap:"wrap"},children:[t(V,{size:"sm",variant:"secondary",onClick:r,children:"Cancel"}),t(V,{size:"sm",onClick:i,children:["Apply ",n,"ms"]})]})]}):null;function _s({videoRef:e,sourceType:n,resetKey:s,onEnd:i}){const r=S(!1),o=S(i);o.current=i,j(()=>{r.current=!1},[s]);const c=B(()=>{const a=e.current?.duration;!a||!Number.isFinite(a)||console.info(`[playback] duration ${a.toFixed(2)}s`)},[e]);return{checkEnd:B((a=!1)=>{const l=e.current;!l||n==="iframe"||r.current||!a&&!mt(l.currentTime,l.duration)||(r.current=!0,console.info(`[playback] end reached at ${l.currentTime.toFixed(2)}s / ${l.duration.toFixed(2)}s`),o.current())},[n,e]),logDuration:c}}export{ms as A,Gn as B,ts as C,q as D,os as E,z as F,In as M,ns as P,es as R,bs as S,Qn as T,rs as a,cs as b,zn as c,Vn as d,Jn as e,Yn as f,Un as g,ps as h,us as i,fs as j,_s as k,ds as l,hs as m,Wn as n,Zn as o,ss as p,Zr as q,Kn as r,Lr as s,qn as t,ls as u,ys as v,as as w,is as x,Xn as y,gs as z};
@@ -1 +1 @@
1
- import{T as o}from"./vendor-core-DfaOB3Rn.js";import{b as a}from"./vendor-query-BBT5_sHx.js";import{q as i,J as n}from"./index-DlcgJVM6.js";const l=300*1e3,c=()=>{const e=a({queryKey:[i.providers],queryFn:()=>n("/api/providers"),staleTime:l,retry:1}),r=Array.isArray(e.data)?e.data:null,s=o(()=>r&&r.length>0?r.filter(t=>t.loaded):[],[r]);return{...e,options:s,isFallback:!r||r.length===0}};export{c as u};
1
+ import{T as o}from"./vendor-core-DfaOB3Rn.js";import{b as a}from"./vendor-query-BBT5_sHx.js";import{q as i,J as n}from"./index-BP1z44Uk.js";const l=300*1e3,c=()=>{const e=a({queryKey:[i.providers],queryFn:()=>n("/api/providers"),staleTime:l,retry:1}),r=Array.isArray(e.data)?e.data:null,s=o(()=>r&&r.length>0?r.filter(t=>t.loaded):[],[r]);return{...e,options:s,isFallback:!r||r.length===0}};export{c as u};
@@ -1 +1 @@
1
- import{N as l,u as o,S as d}from"./vendor-core-DfaOB3Rn.js";import{I as v}from"./vendor-icons-DrybRNxP.js";import{M as T}from"./MediaCard-lz7FdOe_.js";import{T as g}from"./TvPopup-BwGJ1Tjg.js";import{c as m,i as f}from"./useTvLibrary-DiCSdUOj.js";import{b as i}from"./vendor-query-BBT5_sHx.js";import{i as p}from"./index-DlcgJVM6.js";const _=l(({item:e})=>{const a=e.type==="tv"||e.type==="tvSeries"||e.type==="tvMiniSeries",s=m(e.type,e.id);return o(T,{item:{id:String(e.id),title:e.title,thumbnail:e.image,typeBadge:a?"TV":"Movie",isAdult:f(e)},linkTo:s,hoverIcon:"info",showInfoButton:!0,metaRow:o(d,{children:[e.year&&o("span",{style:{opacity:.75},children:e.year}),e.vote_average!=null&&o("span",{style:{display:"inline-flex",alignItems:"center",gap:3},children:[o(v,{name:"star",size:10}),Number(e.vote_average).toFixed(1)]})]}),renderPopup:(n,t)=>o(g,{item:e,anchorRect:n,onMouseEnter:t.onMouseEnter,onMouseLeave:t.onMouseLeave,onRequestClose:t.close})})}),u=1e3*60*5,b=e=>{const a=p(),{query:s,type:n,genre:t,year:r,sort_by:y,page:c}=e;return i({...a.tv.search.queryOptions({q:s?.trim()||"",type:n||"multi",genre:t||"",year:r&&r!=="ALL"?r:"",sortBy:y||"popularity.desc",page:c||1}),staleTime:u,retry:1})},A=(e="all",a="week",s=1,n=!0)=>{const t=p(),r=i({...t.tv.trending.queryOptions({mediaType:e,timeWindow:a,page:s}),enabled:n,staleTime:u,retry:1});return{...r,data:r.data}};export{_ as T,b as a,A as u};
1
+ import{N as l,u as o,S as d}from"./vendor-core-DfaOB3Rn.js";import{I as v}from"./vendor-icons-DrybRNxP.js";import{M as T}from"./MediaCard-BODgA6ir.js";import{T as g}from"./TvPopup-D6UvGI7M.js";import{c as m,i as f}from"./useTvLibrary-C6rSJQi_.js";import{b as i}from"./vendor-query-BBT5_sHx.js";import{i as p}from"./index-BP1z44Uk.js";const _=l(({item:e})=>{const a=e.type==="tv"||e.type==="tvSeries"||e.type==="tvMiniSeries",s=m(e.type,e.id);return o(T,{item:{id:String(e.id),title:e.title,thumbnail:e.image,typeBadge:a?"TV":"Movie",isAdult:f(e)},linkTo:s,hoverIcon:"info",showInfoButton:!0,metaRow:o(d,{children:[e.year&&o("span",{style:{opacity:.75},children:e.year}),e.vote_average!=null&&o("span",{style:{display:"inline-flex",alignItems:"center",gap:3},children:[o(v,{name:"star",size:10}),Number(e.vote_average).toFixed(1)]})]}),renderPopup:(n,t)=>o(g,{item:e,anchorRect:n,onMouseEnter:t.onMouseEnter,onMouseLeave:t.onMouseLeave,onRequestClose:t.close})})}),u=1e3*60*5,b=e=>{const a=p(),{query:s,type:n,genre:t,year:r,sort_by:y,page:c}=e;return i({...a.tv.search.queryOptions({q:s?.trim()||"",type:n||"multi",genre:t||"",year:r&&r!=="ALL"?r:"",sortBy:y||"popularity.desc",page:c||1}),staleTime:u,retry:1})},A=(e="all",a="week",s=1,n=!0)=>{const t=p(),r=i({...t.tv.trending.queryOptions({mediaType:e,timeWindow:a,page:s}),enabled:n,staleTime:u,retry:1});return{...r,data:r.data}};export{_ as T,b as a,A as u};
@@ -1 +1 @@
1
- import{T as p}from"./vendor-core-DfaOB3Rn.js";import{b as v,u as i,a as n}from"./vendor-query-BBT5_sHx.js";import{i as a,A as o,q as y,t as g}from"./index-DlcgJVM6.js";import{i as u}from"./libraryInvalidation-DdnIPcOQ.js";const l=t=>String(t).toLowerCase()==="movie"?"movie":"tv",h=(t,e)=>`${l(t)}:${e}`,Q=(t,e)=>{const r=l(t);return`/tv/${e}?type=${r}`},$=(t,e,r,s)=>{const c=new URLSearchParams;return c.set("type",l(t)),r!==void 0&&c.set("s",String(r)),s!==void 0&&c.set("e",String(s)),`/tv/${e}/watch?${c.toString()}`},O=t=>t.adult===!0||t.adult===1,R={10759:"Action & Adventure",16:"Animation",35:"Comedy",80:"Crime",99:"Documentary",18:"Drama",10751:"Family",10762:"Kids",9648:"Mystery",10765:"Sci-Fi & Fantasy",37:"Western"},f={28:"Action",12:"Adventure",16:"Animation",35:"Comedy",80:"Crime",99:"Documentary",18:"Drama",10751:"Family",14:"Fantasy",36:"History",27:"Horror",9648:"Mystery",10749:"Romance",878:"Sci-Fi",53:"Thriller",10752:"War",37:"Western"},A=["Watching","Completed","On-Hold","Dropped","Planned"],T=(t,e)=>h(t,e),E=(t="All",e=1,r=24)=>{const s=a();return v(s.tvLibrary.list.queryOptions({status:t,page:e,limit:r}))},b=()=>{const t=a();return v({...t.tvLibrary.ids.queryOptions(),staleTime:1e3*60})},k=t=>{const e=a();return v({...e.tvLibrary.check.queryOptions({id:t||""}),enabled:!!t,staleTime:1e3*60})},M=(t=24)=>{const e=a();return v(e.tvProgress.continueWatching.queryOptions({limit:t}))},B=t=>{const e=a();return v({...e.tvProgress.getByMedia.queryOptions({mediaId:t||""}),enabled:!!t})},I=(t,e,r)=>{const s=a();return v({...s.tvProgress.latest.queryOptions({mediaId:t||"",season:e,episode:r}),enabled:!!t,staleTime:0})},F=()=>{const t=a(),e=i();return n({mutationFn:async r=>{const{silent:s,...c}=r;return g.tvLibrary.add.mutate(c)},onSuccess:(r,s)=>{s.silent||o.success("Added to TV watchlist"),e.invalidateQueries({queryKey:[y.tvLibrary]}),e.invalidateQueries(t.tvLibrary.pathFilter())},onError:r=>{o.error(`Failed to add: ${r.message}`)}})},S=()=>{const t=a(),e=i();return n(t.tvLibrary.remove.mutationOptions({onSuccess:()=>{o.success("Removed from TV watchlist"),u(e,"tv"),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())},onError:r=>{o.error(`Failed to remove: ${r.message}`)}}))},w=()=>{const t=a(),e=i();return n(t.tvLibrary.setStatus.mutationOptions({onSuccess:()=>{o.success("Status updated"),u(e,"tv"),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())},onError:r=>{o.error(`Failed to update status: ${r.message}`)}}))},D=()=>{const t=a(),e=i();return n(t.tvProgress.save.mutationOptions({onSuccess:()=>{u(e,"tv",!0),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())}}))},W=()=>{const t=a(),e=i();return n(t.tvProgress.remove.mutationOptions({onSuccess:()=>{o.success("Progress reset"),u(e,"tv",!0),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())},onError:r=>{o.error(`Failed to reset progress: ${r.message}`)}}))},V=()=>{const t=a(),e=i();return n(t.tvLibrary.batchStatus.mutationOptions({onSuccess:r=>{o.success(`Status updated for ${r.updated??0} items`),u(e,"tv"),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())},onError:r=>{o.error(`Failed to update statuses: ${r.message}`)}}))},_=()=>{const t=a(),e=i();return n(t.tvLibrary.removeMany.mutationOptions({onSuccess:r=>{const s=r.removed??0;o.success(`Removed ${s} ${s===1?"item":"items"} from TV watchlist`),u(e,"tv"),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())},onError:r=>{o.error(`Failed to remove: ${r.message}`)}}))},U=()=>{const t=a(),e=i();return n(t.tvProgress.removeMany.mutationOptions({onSuccess:r=>{const s=r.removed??0;o.success(`Reset progress for ${s} ${s===1?"item":"items"}`),u(e,"tv",!0),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())},onError:r=>{o.error(`Failed to reset progress: ${r.message}`)}}))},H=()=>{const t=F(),e=S(),{data:r}=b(),s=p(()=>new Set(r?.ids||[]),[r]);return{toggle:d=>{const m=T(d.mediaType,d.tmdbId);s.has(m)?e.mutate(m):t.mutate({...d,poster:d.poster||""})},bookmarkedIds:s,pending:t.isPending||e.isPending}};export{f as M,R as T,S as a,W as b,Q as c,h as d,k as e,H as f,D as g,w as h,O as i,F as j,I as k,B as l,E as m,l as n,V as o,_ as p,U as q,A as r,$ as t,M as u};
1
+ import{T as p}from"./vendor-core-DfaOB3Rn.js";import{b as v,u as i,a as n}from"./vendor-query-BBT5_sHx.js";import{i as a,A as o,q as y,t as g}from"./index-BP1z44Uk.js";import{i as u}from"./libraryInvalidation-CVK2SYUR.js";const l=t=>String(t).toLowerCase()==="movie"?"movie":"tv",h=(t,e)=>`${l(t)}:${e}`,Q=(t,e)=>{const r=l(t);return`/tv/${e}?type=${r}`},$=(t,e,r,s)=>{const c=new URLSearchParams;return c.set("type",l(t)),r!==void 0&&c.set("s",String(r)),s!==void 0&&c.set("e",String(s)),`/tv/${e}/watch?${c.toString()}`},O=t=>t.adult===!0||t.adult===1,R={10759:"Action & Adventure",16:"Animation",35:"Comedy",80:"Crime",99:"Documentary",18:"Drama",10751:"Family",10762:"Kids",9648:"Mystery",10765:"Sci-Fi & Fantasy",37:"Western"},f={28:"Action",12:"Adventure",16:"Animation",35:"Comedy",80:"Crime",99:"Documentary",18:"Drama",10751:"Family",14:"Fantasy",36:"History",27:"Horror",9648:"Mystery",10749:"Romance",878:"Sci-Fi",53:"Thriller",10752:"War",37:"Western"},A=["Watching","Completed","On-Hold","Dropped","Planned"],T=(t,e)=>h(t,e),E=(t="All",e=1,r=24)=>{const s=a();return v(s.tvLibrary.list.queryOptions({status:t,page:e,limit:r}))},b=()=>{const t=a();return v({...t.tvLibrary.ids.queryOptions(),staleTime:1e3*60})},k=t=>{const e=a();return v({...e.tvLibrary.check.queryOptions({id:t||""}),enabled:!!t,staleTime:1e3*60})},M=(t=24)=>{const e=a();return v(e.tvProgress.continueWatching.queryOptions({limit:t}))},B=t=>{const e=a();return v({...e.tvProgress.getByMedia.queryOptions({mediaId:t||""}),enabled:!!t})},I=(t,e,r)=>{const s=a();return v({...s.tvProgress.latest.queryOptions({mediaId:t||"",season:e,episode:r}),enabled:!!t,staleTime:0})},F=()=>{const t=a(),e=i();return n({mutationFn:async r=>{const{silent:s,...c}=r;return g.tvLibrary.add.mutate(c)},onSuccess:(r,s)=>{s.silent||o.success("Added to TV watchlist"),e.invalidateQueries({queryKey:[y.tvLibrary]}),e.invalidateQueries(t.tvLibrary.pathFilter())},onError:r=>{o.error(`Failed to add: ${r.message}`)}})},S=()=>{const t=a(),e=i();return n(t.tvLibrary.remove.mutationOptions({onSuccess:()=>{o.success("Removed from TV watchlist"),u(e,"tv"),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())},onError:r=>{o.error(`Failed to remove: ${r.message}`)}}))},w=()=>{const t=a(),e=i();return n(t.tvLibrary.setStatus.mutationOptions({onSuccess:()=>{o.success("Status updated"),u(e,"tv"),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())},onError:r=>{o.error(`Failed to update status: ${r.message}`)}}))},D=()=>{const t=a(),e=i();return n(t.tvProgress.save.mutationOptions({onSuccess:()=>{u(e,"tv",!0),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())}}))},W=()=>{const t=a(),e=i();return n(t.tvProgress.remove.mutationOptions({onSuccess:()=>{o.success("Progress reset"),u(e,"tv",!0),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())},onError:r=>{o.error(`Failed to reset progress: ${r.message}`)}}))},V=()=>{const t=a(),e=i();return n(t.tvLibrary.batchStatus.mutationOptions({onSuccess:r=>{o.success(`Status updated for ${r.updated??0} items`),u(e,"tv"),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())},onError:r=>{o.error(`Failed to update statuses: ${r.message}`)}}))},_=()=>{const t=a(),e=i();return n(t.tvLibrary.removeMany.mutationOptions({onSuccess:r=>{const s=r.removed??0;o.success(`Removed ${s} ${s===1?"item":"items"} from TV watchlist`),u(e,"tv"),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())},onError:r=>{o.error(`Failed to remove: ${r.message}`)}}))},U=()=>{const t=a(),e=i();return n(t.tvProgress.removeMany.mutationOptions({onSuccess:r=>{const s=r.removed??0;o.success(`Reset progress for ${s} ${s===1?"item":"items"}`),u(e,"tv",!0),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())},onError:r=>{o.error(`Failed to reset progress: ${r.message}`)}}))},H=()=>{const t=F(),e=S(),{data:r}=b(),s=p(()=>new Set(r?.ids||[]),[r]);return{toggle:d=>{const m=T(d.mediaType,d.tmdbId);s.has(m)?e.mutate(m):t.mutate({...d,poster:d.poster||""})},bookmarkedIds:s,pending:t.isPending||e.isPending}};export{f as M,R as T,S as a,W as b,Q as c,h as d,k as e,H as f,D as g,w as h,O as i,F as j,I as k,B as l,E as m,l as n,V as o,_ as p,U as q,A as r,$ as t,M as u};
@@ -33,11 +33,11 @@
33
33
  background-color: #0c0d12;
34
34
  }
35
35
  </style>
36
- <script type="module" crossorigin src="/assets/index-DlcgJVM6.js"></script>
36
+ <script type="module" crossorigin src="/assets/index-BP1z44Uk.js"></script>
37
37
  <link rel="modulepreload" crossorigin href="/assets/vendor-core-DfaOB3Rn.js">
38
38
  <link rel="modulepreload" crossorigin href="/assets/vendor-query-BBT5_sHx.js">
39
39
  <link rel="modulepreload" crossorigin href="/assets/vendor-icons-DrybRNxP.js">
40
- <link rel="stylesheet" crossorigin href="/assets/index-ZssheiHa.css">
40
+ <link rel="stylesheet" crossorigin href="/assets/index-5x1mF1nD.css">
41
41
  </head>
42
42
 
43
43
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@serifpersia/dango",
3
- "version": "3.7.5",
3
+ "version": "3.7.6",
4
4
  "description": "A web application for watching anime.",
5
5
  "main": "orchestrator.js",
6
6
  "repository": {
@@ -69,5 +69,5 @@
69
69
  "allowScripts": {
70
70
  "esbuild@0.28.2": true
71
71
  },
72
- "versionDate": "2026-10-23T13:12:10.347Z"
72
+ "versionDate": "2026-10-23T19:40:16.958Z"
73
73
  }
@@ -296,7 +296,7 @@ Error details:`),console.error(t),!1}}function mW(e,t){let r=e.map(({field:n,cod
296
296
  const { selection } = this;`);for(let c of o)A.push(` ${c}`);if(s)if(t){A.push(" const row = rows[0];"),A.push(" if (!row) return undefined;");for(let c of a.bodyStmts)A.push(` ${c}`);A.push(` return ${a.literal};`)}else{A.push(" const { length } = rows;"),A.push(" const mapped = Array.from({ length });"),A.push(" for (let i = 0; i < length; ++i) {"),A.push(" const row = rows[i];");for(let c of a.bodyStmts)A.push(` ${c}`);A.push(` mapped[i] = ${a.literal};`),A.push(" }"),A.push(" return mapped;")}else if(!a.hasWork)A.push(t?" return rows[0];":" return rows;");else if(t){A.push(" const row = rows[0];"),A.push(" if (!row) return undefined;");for(let c of a.bodyStmts)A.push(` ${c}`);A.push(` rows[0] = ${a.literal};`),A.push(" return rows[0];")}else{A.push(" for (let i = 0; i < rows.length; ++i) {"),A.push(" const row = rows[i];");for(let c of a.bodyStmts)A.push(` ${c}`);A.push(` rows[i] = ${a.literal};`),A.push(" }"),A.push(" return rows;")}A.push(" //# sourceURL=drizzle:jit-relational-query-mapper");let u=A.join(`
297
297
  `);return Object.assign(new Rb("rows",u).bind({selection:e}),{body:`function jitRqbMapper (rows) {
298
298
  ${u}
299
- }`})}var ubt=class{static[K]="RelationsBuilderTable";_;constructor(e,t){this._={name:t,table:e}}},cbt=class{static[K]="RelationsBuilderColumn";_;constructor(e,t,r){this._={tableName:t,column:e,key:r}}through(e){return new Wve(this._.column,this._.tableName,this._.key,e)}},Wve=class{static[K]="RelationsBuilderColumn";_;constructor(e,t,r,n){this._={tableName:t,column:e,through:n,key:r}}},lbt=class{static[K]="RelationsHelperStatic";_;constructor(e){this._={tables:e};let t={},r={};for(let[n,i]of Object.entries(e))t[n]=s=>new pM(e,i,n,s),r[n]=s=>new Hve(e,i,n,s);this.one=t,this.many=r}one;many;aggs={count(){return new Yve}}};function sJ(e,t){let r=e[vA][t];return r?oe(r,vt)?r:oe(r,ve.Aliased)?b`${e}.${b.identifier(r.fieldAlias)}`:b`${e}.${b.identifier(t)}`:b`${e}.${b.identifier(t)}`}function nw(e,t){if(typeof t!="object"||oe(t,Ha))return Tt(e,t);let r=Object.entries(t);if(!r.length)return;let n=[];for(let[i,s]of r)if(s!==void 0)switch(i){case"NOT":{let o=nw(e,s);if(!o)continue;n.push(t0(o));continue}case"OR":if(!s.length)continue;n.push(e0(...s.map(o=>nw(e,o))));continue;case"AND":if(!s.length)continue;n.push(zr(...s.map(o=>nw(e,o))));continue;case"isNotNull":case"isNull":if(!s)continue;n.push(r0[i](e));continue;case"in":n.push(r0.inArray(e,s));continue;case"notIn":n.push(r0.notInArray(e,s));continue;default:n.push(r0[i](e,s));continue}if(n.length)return zr(...n)}function Wu(e,t,r={},n={},i=0){let s=Object.entries(t);if(!s.length)return;let o=[];for(let[a,A]of s)if(A!==void 0)switch(a){case"RAW":{let u=typeof A=="function"?A(e,r0):A.getSQL();o.push(u);continue}case"OR":if(!A?.length)continue;o.push(e0(...A.map(u=>Wu(e,u,r,n,i))));continue;case"AND":if(!A?.length)continue;o.push(zr(...A.map(u=>Wu(e,u,r,n,i))));continue;case"NOT":{if(A===void 0)continue;let u=Wu(e,A,r,n,i);if(!u)continue;o.push(t0(u));continue}default:{if(e[vA][a]){let m=nw(sJ(e,a),A);m&&o.push(m);continue}let u=r[a];if(!u)throw new Xg({message:`Unknown relational filter field: "${a}"`});let c=Cl(u.targetTable,`f${i}`),l=u.throughTable?Cl(u.throughTable,`ft${i}`):void 0,d=n[u.targetTableName],{filter:h,joinCondition:f}=mM(u,e,c,l),g=zr(h,typeof A=="boolean"?void 0:Wu(c,A,d.relations,n,i+1)),E=l?b`(select * from ${dh(c)} inner join ${dh(l)} on ${f}${b` where ${g}`.if(g)} limit 1)`:b`(select * from ${dh(c)}${b` where ${g}`.if(g)} limit 1)`;g&&o.push((A?oI:aI)(E))}}return zr(...o)}function oJ(e,t){if(typeof t=="function"){let n=t(e,Vve);return oe(n,ve)?n:Array.isArray(n)?n.length?b.join(n.map(i=>oe(i,ve)?i:AI(i)),b`, `):void 0:oe(n,vt)?AI(n):void 0}let r=Object.entries(t).filter(([n,i])=>i);if(r.length)return b.join(r.map(([n,i])=>(i==="asc"?AI:gM)(sJ(e,n))),b`, `)}function aJ(e,t,r,n){let i=[],s=[];for(let[o,a]of Object.entries(t)){if(!a)continue;let A=(typeof a=="function"?a(e,{sql:r0.sql}):a).getSQL(),u=r?rI(A):void 0,c=u&&(!n||!u.jsonSelectIdentifier)?b`${r.apply(u,n?"castInJson":"cast",b`(${A})`)} as ${b.identifier(o)}`:b`(${A}) as ${b.identifier(o)}`;c.decoder=A.decoder,i.push(c),s.push(u&&(!n||!u.mapFromJsonValue)?{key:o,field:c,codec:r.get(u,n?"normalizeInJson":"normalize"),arrayDimensions:u.dimensions}:{key:o,field:c})}return{sql:i.length?b.join(i,b`, `):void 0,selection:s}}function mM(e,t,r,n){if(e.through){let i=e.sourceColumns.map((o,a)=>{let A=e.through.source[a];return Tt(b`${t}.${b.identifier(o.name)}`,b`${n}.${b.identifier(oe(A._.column,vt)?A._.column.name:A._.key)}`)}),s=e.targetColumns.map((o,a)=>{let A=e.through.target[a];return Tt(b`${n}.${b.identifier(oe(A._.column,vt)?A._.column.name:A._.key)}`,b`${r}.${b.identifier(o.name)}`)});return{filter:zr(e.where?Wu(e.isReversed?t:r,e.where):void 0,...i),joinCondition:zr(...s)}}return{filter:zr(...e.sourceColumns.map((i,s)=>{let o=e.targetColumns[s];return Tt(b`${t}.${b.identifier(i.name)}`,b`${r}.${b.identifier(o.name)}`)}),e.where?Wu(e.isReversed?t:r,e.where):void 0)}}function dh(e){return b`${e[ml]?b`${b`${b.identifier(e[pl]??"")}.`.if(e[pl])}${b.identifier(e[ch])} as ${e}`:e}`}var n0=class{static[K]="SQLiteDialect";mapperGenerators;constructor(e){this.mapperGenerators=e?.useJitMappers?{rows:EW,relationalRows:iJ}:{rows:mW,relationalRows:nJ}}escapeName(e){return`"${e.replace(/"/g,'""')}"`}escapeParam(e){return"?"}escapeString(e){return`'${e.replace(/'/g,"''")}'`}buildWithCTE(e){if(!e?.length)return;let t=[b`with `];for(let[r,n]of e.entries())t.push(b`${b.identifier(n._.alias)} as (${n._.sql})`),r<e.length-1&&t.push(b`, `);return t.push(b` `),b.join(t)}buildDeleteQuery({table:e,where:t,returning:r,withList:n,limit:i,orderBy:s}){let o=this.buildWithCTE(n),a=r?b` returning ${this.buildSelection(r,{isSingleTable:!0})}`:void 0;return b`${o}delete from ${e}${t?b` where ${t}`:void 0}${a}${this.buildOrderBy(s)}${this.buildLimit(i)}`}buildUpdateSet(e,t){let r=e[ke.Symbol.Columns],n=Object.keys(r).filter(s=>t[s]!==void 0||r[s]?.onUpdateFn!==void 0),i=n.length;return b.join(n.flatMap((s,o)=>{let a=r[s],A=a.onUpdateFn?.(),u=t[s]??(oe(A,ve)?A:b.param(A,a)),c=b`${b.identifier(a.name)} = ${u}`;return o<i-1?[c,b.raw(", ")]:[c]}))}buildUpdateQuery({table:e,set:t,where:r,returning:n,withList:i,joins:s,from:o,limit:a,orderBy:A}){let u=this.buildWithCTE(i),c=this.buildUpdateSet(e,t),l=o&&b.join([b.raw(" from "),this.buildFromTable(o)]),d=this.buildJoins(s),h=n?b` returning ${this.buildSelection(n,{isSingleTable:!0})}`:void 0;return b`${u}update ${e} set ${c}${l}${d}${r?b` where ${r}`:void 0}${h}${this.buildOrderBy(A)}${this.buildLimit(a)}`}buildSelection(e,{isSingleTable:t=!1}={}){let r=e.length,n=e.flatMap(({field:i},s)=>{let o=[];if(oe(i,ve.Aliased))if(i.isSelectionField)!t&&i.origin!==void 0&&o.push(b.identifier(i.origin),b.raw(".")),o.push(b.identifier(i.fieldAlias));else{let a=i.sql;if(t){let A=new ve(a.queryChunks.map(u=>oe(u,vt)?b.identifier(u.name):u));o.push(a.shouldInlineParams?A.inlineParams():A)}else o.push(a);o.push(b` as ${b.identifier(i.fieldAlias)}`)}else if(oe(i,ve)){let a=i;if(t){let A=new ve(a.queryChunks.map(u=>oe(u,vt)?b.identifier(u.name):u));o.push(a.shouldInlineParams?A.inlineParams():A)}else o.push(a)}else oe(i,vt)?i.columnType==="SQLiteNumericBigInt"||i.columnType==="SQLiteNumeric"?t?o.push(i.isAlias?b`cast(${b.identifier(sI(i).name)} as text) as ${i}`:b`cast(${b.identifier(i.name)} as text)`):o.push(i.isAlias?b`cast(${sI(i)} as text) as ${i}`:b`cast(${i} as text)`):t?o.push(i.isAlias?b`${b.identifier(sI(i).name)} as ${i}`:b.identifier(i.name)):o.push(i.isAlias?b`${sI(i)} as ${i}`:i):oe(i,kr)&&(i._.isWith?o.push(i):o.push(b`(${i._.sql}) ${b.identifier(i._.alias)}`));return s<r-1&&o.push(b`, `),o});return b.join(n)}buildJoins(e){if(!e||e.length===0)return;let t=[];if(e)for(let[r,n]of e.entries()){r===0&&t.push(b` `);let i=n.table,s=n.on?b` on ${n.on}`:void 0;if(oe(i,Dn)){let o=i[Dn.Symbol.Name],a=i[Dn.Symbol.Schema],A=i[Dn.Symbol.OriginalName],u=o===A?void 0:n.alias;t.push(b`${b.raw(n.joinType)} join ${a?b`${b.identifier(a)}.`:void 0}${b.identifier(A)}${u&&b` ${b.identifier(u)}`}${s}`)}else t.push(b`${b.raw(n.joinType)} join ${i}${s}`);r<e.length-1&&t.push(b` `)}return b.join(t)}buildLimit(e){return typeof e=="object"||typeof e=="number"&&e>=0?b` limit ${e}`:void 0}buildOrderBy(e){let t=[];if(e)for(let[r,n]of e.entries())t.push(n),r<e.length-1&&t.push(b`, `);return t.length>0?b` order by ${b.join(t)}`:void 0}buildFromTable(e){if(oe(e,ke)&&e[ke.Symbol.IsAlias])return b`${b`${b.identifier(e[ke.Symbol.Schema]??"")}.`.if(e[ke.Symbol.Schema])}${b.identifier(e[ke.Symbol.OriginalName])} ${b.identifier(e[ke.Symbol.Name])}`;if(oe(e,on)&&e[kt].isAlias){let t=b`${b.identifier(e[kt].originalName)}`;return e[kt].schema&&(t=b`${b.identifier(e[kt].schema)}.${t}`),b`${t} ${b.identifier(e[kt].name)}`}return e}buildSelectQuery({withList:e,fields:t,fieldsFlat:r,where:n,having:i,table:s,joins:o,orderBy:a,groupBy:A,limit:u,offset:c,distinct:l,setOperators:d}){let h=r??Po(t);for(let S of h)if(oe(S.field,vt)&&Vu(S.field.table)!==(oe(s,kr)?s._.alias:oe(s,Zg)?s[kt].name:oe(s,ve)?void 0:Vu(s))&&!(y=>o?.some(({alias:x})=>x===(y[ke.Symbol.IsAlias]?Vu(y):y[ke.Symbol.BaseName])))(S.field.table)){let y=Vu(S.field.table);throw new Error(`Your "${S.path.join("->")}" field references a column "${y}"."${S.field.name}", but the table "${y}" is not part of the query! Did you forget to join it?`)}let f=!o||o.length===0,g=this.buildWithCTE(e),E=l?b` distinct`:void 0,m=this.buildSelection(h,{isSingleTable:f}),C=this.buildFromTable(s),I=this.buildJoins(o),B=n?b` where ${n}`:void 0,Q=i?b` having ${i}`:void 0,D=[];if(A)for(let[S,y]of A.entries())D.push(y),S<A.length-1&&D.push(b`, `);let N=b`${g}select${E} ${m} from ${C}${I}${B}${D.length>0?b` group by ${b.join(D)}`:void 0}${Q}${this.buildOrderBy(a)}${this.buildLimit(u)}${c?b` offset ${c}`:void 0}`;return d.length>0?this.buildSetOperations(N,d):N}buildSetOperations(e,t){let[r,...n]=t;if(!r)throw new Error("Cannot pass undefined values to any set operator");return n.length===0?this.buildSetOperationQuery({leftSelect:e,setOperator:r}):this.buildSetOperations(this.buildSetOperationQuery({leftSelect:e,setOperator:r}),n)}buildSetOperationQuery({leftSelect:e,setOperator:{type:t,isAll:r,rightSelect:n,limit:i,orderBy:s,offset:o}}){let a=b`${e.getSQL()} `,A=b`${n.getSQL()}`,u;if(s&&s.length>0){let h=[];for(let f of s)if(oe(f,an))h.push(b.identifier(f.name));else if(oe(f,ve)){for(let g=0;g<f.queryChunks.length;g++){let E=f.queryChunks[g];oe(E,an)&&(f.queryChunks[g]=b.identifier(E.name))}h.push(b`${f}`)}else h.push(b`${f}`);u=b` order by ${b.join(h,b`, `)}`}let c=typeof i=="object"||typeof i=="number"&&i>=0?b` limit ${i}`:void 0,l=b.raw(`${t} ${r?"all ":""}`),d=o?b` offset ${o}`:void 0;return b`${a}${l}${A}${u}${c}${d}`}buildInsertQuery({table:e,values:t,onConflict:r,returning:n,withList:i,select:s}){let o=[],a=e[ke.Symbol.Columns],A=Object.entries(a),u=s&&!oe(t,ve)?Object.keys(t.getSelectedFields()).map(f=>[f,a[f]]):A.filter(([f,g])=>!g.shouldDisableInsert()),c=u.map(([,f])=>b.identifier(f.name));if(s){let f=t;oe(f,ve)?o.push(f):o.push(f.getSQL())}else{let f=t;o.push(b.raw("values "));for(let[g,E]of f.entries()){let m=[];for(let[C,I]of u){let B=E[C];if(B===void 0||oe(B,ri)&&B.value===void 0){let Q;if(I.default!==null&&I.default!==void 0)Q=oe(I.default,ve)?I.default:b.param(I.default,I);else if(I.defaultFn!==void 0){let D=I.defaultFn();Q=oe(D,ve)?D:b.param(D,I)}else if(!I.default&&I.onUpdateFn!==void 0){let D=I.onUpdateFn();Q=oe(D,ve)?D:b.param(D,I)}else Q=b`null`;m.push(Q)}else m.push(B)}o.push(m),g<f.length-1&&o.push(b`, `)}}let l=this.buildWithCTE(i),d=b.join(o),h=n?b` returning ${this.buildSelection(n,{isSingleTable:!0})}`:void 0;return b`${l}insert into ${e} ${c} ${d}${r?.length?b.join(r):void 0}${h}`}sqlToQuery(e,t){return e.toQuery({escapeName:this.escapeName,escapeParam:this.escapeParam,escapeString:this.escapeString,invokeSource:t})}nestedSelectionerror(){throw new Xg({message:"Views with nested selections are not supported by the relational query builder"})}buildRqbColumn(e,t,r,n){if(oe(t,vt)){let i=b`${e}.${b.identifier(t.name)}`;switch(t.columnType){case"SQLiteBigInt":case"SQLiteBlobJson":case"SQLiteBlobBuffer":return n?b`hex(${i}) as ${b.identifier(r)}`:b`${i} as ${b.identifier(r)}`;case"SQLiteNumeric":case"SQLiteNumericNumber":case"SQLiteNumericBigInt":return b`cast(${i} as text) as ${b.identifier(r)}`;case"SQLiteCustomColumn":return n?b`${t.jsonSelectIdentifier(i,b)} as ${b.identifier(r)}`:b`${i} as ${b.identifier(r)}`;default:return b`${i} as ${b.identifier(r)}`}}return b`${e}.${oe(t,ve.Aliased)?b.identifier(t.fieldAlias):qu(t)?b.identifier(r):this.nestedSelectionerror()} as ${b.identifier(r)}`}unwrapAllColumns=(e,t,r)=>b.join(Object.entries(e[vA]).map(([n,i])=>(t.push({key:n,field:i}),this.buildRqbColumn(e,i,n,r))),b`, `);getSelectedTableColumns=(e,t)=>{let r=[],n=e[vA],i=Object.entries(t),s;for(let[o,a]of i)if(a!==void 0&&(s=s||a,a)){let A=n[o];r.push({column:A,tsName:o})}if(s===!1)for(let[o,a]of Object.entries(n))t[o]!==!1&&r.push({column:a,tsName:o});return r};buildColumns=(e,t,r,n)=>n?.columns?(()=>{let i=[],s=this.getSelectedTableColumns(e,n?.columns);for(let{column:o,tsName:a}of s)i.push(this.buildRqbColumn(e,o,a,r)),t.push({key:a,field:o});return i.length?b.join(i,b`, `):void 0})():this.unwrapAllColumns(e,t,r);buildRelationalQuery({schema:e,table:t,tableConfig:r,queryConfig:n,relationWhere:i,mode:s,isNested:o,errorPath:a,depth:A,throughJoin:u,jsonb:c}){let l=[],d=s==="first",h=n===!0?void 0:n,f=a??"",g=A??0;g||(t=Cl(t,`d${g}`));let E=d?1:h?.limit,m=h?.offset,C=this.buildColumns(t,l,!!o,h),I=h?.where&&i?zr(Wu(t,h.where,r.relations,e),i):h?.where?Wu(t,h.where,r.relations,e):i,B=h?.orderBy?oJ(t,h.orderBy):void 0,Q=h?.extras?aJ(t,h.extras):void 0;Q&&l.push(...Q.selection);let D=h?(()=>{let{with:S}=h;if(!S)return;let y=Object.entries(S).filter(([x,F])=>F);if(y.length)return b.join(y.map(([x,F])=>{let P=r.relations[x],q=oe(P,pM),re=Cl(P.targetTable,`d${g+1}`),ue=P.throughTable?Cl(P.throughTable,`tr${g}`):void 0,{filter:Ee,joinCondition:ye}=mM(P,t,re,ue),Ne=ue?b` inner join ${dh(ue)} on ${ye}`:void 0,ee=this.buildRelationalQuery({table:re,mode:q?"first":"many",schema:e,queryConfig:F,tableConfig:e[P.targetTableName],relationWhere:Ee,isNested:!0,errorPath:`${f.length?`${f}.`:""}${x}`,depth:g+1,throughJoin:Ne,jsonb:c});l.push({field:re,key:x,selection:ee.selection,isArray:!q,isOptional:(P.optional??!1)||F!==!0&&!!F.where});let $=b.join(ee.selection.map(Ie=>b`${b.raw(this.escapeString(Ie.key))}, ${Ie.selection?b`${c}(${b.identifier(Ie.key)})`:b.identifier(Ie.key)}`),b`, `),z=o?c:b`json`;return q?b`(select ${z}_object(${$}) as ${b.identifier("r")} from (${ee.sql}) as ${b.identifier("t")}) as ${b.identifier(x)}`:b`coalesce((select ${z}_group_array(json_object(${$})) as ${b.identifier("r")} from (${ee.sql}) as ${b.identifier("t")}), ${c}_array()) as ${b.identifier(x)}`}),b`, `)})():void 0,N=[C,Q?.sql,D].filter(S=>S!==void 0);if(!N.length)throw new Xg({message:`No fields selected for table "${r.name}"${f?` ("${f}")`:""}`});return{sql:b`select ${b.join(N,b`, `)} from ${dh(t)}${u}${b` where ${I}`.if(I)}${b` order by ${B}`.if(B)}${b` limit ${E}`.if(E!==void 0)}${b` offset ${m}`.if(m!==void 0)}`,selection:l}}};var cI=class{static[K]="SQLiteQueryBuilder";dialect;dialectConfig;constructor(e){this.dialect=oe(e,n0)?e:void 0,this.dialectConfig=oe(e,n0)?void 0:e}$with=(e,t)=>{let r=this;return{as:i=>(typeof i=="function"&&(i=i(r)),new Proxy(new Db(i.getSQL(),t??("getSelectedFields"in i?i.getSelectedFields()??{}:{}),e,!0),new Mn({alias:e,sqlAliasedBehavior:"alias",sqlBehavior:"error"})))}};with(...e){let t=this;function r(i){return new Ya({fields:i??void 0,session:void 0,dialect:t.getDialect(),withList:e})}function n(i){return new Ya({fields:i??void 0,session:void 0,dialect:t.getDialect(),withList:e,distinct:!0})}return{select:r,selectDistinct:n}}select(e){return new Ya({fields:e??void 0,session:void 0,dialect:this.getDialect()})}selectDistinct(e){return new Ya({fields:e??void 0,session:void 0,dialect:this.getDialect(),distinct:!0})}getDialect(){return this.dialect||(this.dialect=new n0(this.dialectConfig)),this.dialect}};var iw=class{static[K]="SQLiteInsertBuilder";constructor(e,t,r,n,i=sw){this.table=e,this.session=t,this.dialect=r,this.withList=n,this.builder=i}values(e){if(e=Array.isArray(e)?e:[e],e.length===0)throw new Error("values() must be called with at least one value");let t=e.map(r=>{let n={},i=this.table[ke.Symbol.Columns];for(let s of Object.keys(r)){let o=r[s];n[s]=oe(o,ve)?o:new ri(o,i[s])}return n});return new this.builder(this.table,t,this.session,this.dialect,this.withList)}select(e){let t=typeof e=="function"?e(new cI):e;if(!oe(t,ve)){let r=Object.keys(this.table[ke.Symbol.Columns]),n=Object.keys(t._.selectedFields);for(let i of n)if(!r.includes(i))throw new Error(`Insert select error: column "${i}" does not exist in table "${this.table[ke.Symbol.Name]}"`)}return new this.builder(this.table,t,this.session,this.dialect,this.withList,!0)}},sw=class{static[K]="SQLiteInsert";config;constructor(e,t,r,n,i,s){this.session=r,this.dialect=n,this.config={table:e,values:t,withList:i,select:s}}returning(e=this.config.table[Dn.Symbol.Columns]){return this.config.returning=Po(e),this}onConflictDoNothing(e={}){if(this.config.onConflict||(this.config.onConflict=[]),e.target===void 0)this.config.onConflict.push(b` on conflict do nothing`);else{let t=Array.isArray(e.target)?b`${e.target}`:b`${[e.target]}`,r=e.where?b` where ${e.where}`:b``;this.config.onConflict.push(b` on conflict ${t} do nothing${r}`)}return this}onConflictDoUpdate(e){if(e.where&&(e.targetWhere||e.setWhere))throw new Error('You cannot use both "where" and "targetWhere"/"setWhere" at the same time - "where" is deprecated, use "targetWhere" or "setWhere" instead.');this.config.onConflict||(this.config.onConflict=[]);let t=e.where?b` where ${e.where}`:void 0,r=e.targetWhere?b` where ${e.targetWhere}`:void 0,n=e.setWhere?b` where ${e.setWhere}`:void 0,i=Array.isArray(e.target)?b`${e.target}`:b`${[e.target]}`,s=this.dialect.buildUpdateSet(this.config.table,xb(this.config.table,e.set));return this.config.onConflict.push(b` on conflict ${i}${r} do update set ${s}${t}${n}`),this}getSQL(){return this.dialect.buildInsertQuery(this.config)}toSQL(){return this.dialect.sqlToQuery(this.getSQL())}$dynamic(){return this}};var ow=class extends sw{static[K]="SQLiteAsyncInsert";_prepare(e=!1){return this.session.prepareQuery(this.dialect.sqlToQuery(this.getSQL()),"arrays",e,this.config.returning?"all":"run",this.config.returning?this.dialect.mapperGenerators.rows(this.config.returning,void 0):void 0,{type:"insert",tables:Ga(this.config.table)})}prepare(){return this._prepare(!0)}run=e=>this._prepare().run(e);all=e=>this._prepare().all(e);get=e=>this._prepare().get(e);values=e=>this._prepare().values(e);async execute(){return this._prepare().execute()}};gs(ow,[pi]);var AJ=class{static[K]="SQLiteRaw";constructor(e,t,r){this.prepared=e,this.sql=t,this.query=r}getSQL(){return this.sql}getQuery(){return this.query}_prepare(){return this.prepared}};var i0=class extends AJ{static[K]="SQLiteAsyncRaw";constructor(e,t,r){super(e,t,r)}execute(e){return this.prepared.execute(e)}};gs(i0,[pi]);var s0=class extends _b{static[K]="SQLiteAsyncSelect";_prepare(e=!1){let t=this.dialect.sqlToQuery(this.getSQL()),r=this.config.fieldsFlat,n=this.dialect.mapperGenerators.rows(r,this.joinsNotNullableMap);return this.session.prepareQuery(t,"arrays",e,"all",n,{type:"select",tables:[...this.usedTables]},this.cacheConfig)}prepare(){return this._prepare(!0)}run=e=>this._prepare().run(e);all=e=>this._prepare().all(e);get=e=>this._prepare().get(e);values=e=>this._prepare().values(e);async execute(){return this._prepare().execute()}};gs(s0,[pi]);var aw=class{static[K]="SQLiteUpdateBuilder";constructor(e,t,r,n,i=Aw){this.table=e,this.session=t,this.dialect=r,this.withList=n,this.builder=i}set(e){return new this.builder(this.table,xb(this.table,e),this.session,this.dialect,this.withList)}},Aw=class{static[K]="SQLiteUpdate";config;constructor(e,t,r,n,i){this.session=r,this.dialect=n,this.config={set:t,table:e,withList:i,joins:[]}}from(e){return this.config.from=e,this}createJoin(e){return((t,r)=>{let n=nI(t);if(typeof n=="string"&&this.config.joins.some(i=>i.alias===n))throw new Error(`Alias "${n}" is already used in this query`);if(typeof r=="function"){let i=this.config.from?oe(t,Dn)?t[ke.Symbol.Columns]:oe(t,kr)?t._.selectedFields:oe(t,Zg)?t[kt].selectedFields:void 0:void 0;r=r(new Proxy(this.config.table[ke.Symbol.Columns],new Mn({sqlAliasedBehavior:"sql",sqlBehavior:"sql"})),i&&new Proxy(i,new Mn({sqlAliasedBehavior:"sql",sqlBehavior:"sql"})))}return this.config.joins.push({on:r,table:t,joinType:e,alias:n}),this})}leftJoin=this.createJoin("left");rightJoin=this.createJoin("right");innerJoin=this.createJoin("inner");fullJoin=this.createJoin("full");where(e){return this.config.where=e,this}orderBy(...e){if(typeof e[0]=="function"){let t=e[0](new Proxy(this.config.table[ke.Symbol.Columns],new Mn({sqlAliasedBehavior:"alias",sqlBehavior:"sql"}))),r=Array.isArray(t)?t:[t];this.config.orderBy=r}else{let t=e;this.config.orderBy=t}return this}limit(e){return this.config.limit=e,this}returning(e=this.config.table[Dn.Symbol.Columns]){return this.config.returning=Po(e),this}getSQL(){return this.dialect.buildUpdateQuery(this.config)}toSQL(){return this.dialect.sqlToQuery(this.getSQL())}$dynamic(){return this}};var uw=class extends Aw{static[K]="SQLiteAsyncUpdate";_prepare(e=!1){return this.session.prepareQuery(this.dialect.sqlToQuery(this.getSQL()),"arrays",e,this.config.returning?"all":"run",this.config.returning?this.dialect.mapperGenerators.rows(this.config.returning,void 0):void 0,{type:"update",tables:Ga(this.config.table)})}prepare(){return this._prepare(!0)}run=e=>this._prepare().run(e);all=e=>this._prepare().all(e);get=e=>this._prepare().get(e);values=e=>this._prepare().values(e);async execute(){return this.config.returning?this.all():this.run()}};gs(uw,[pi]);var cw=class{static[K]="BaseSQLiteDatabase";query;constructor(e,t,r,n,i){this.resultKind=e,this.dialect=t,this.session=r,this.forbidJsonb=i,this._={relations:n,session:r,resultKind:e},this.query={};for(let[s,o]of Object.entries(n))this.query[s]=new QW(e,n,n[o.name].table,o,t,r,i,e==="sync"?bW:kb);this.$cache={invalidate:async s=>{}}}$with=(e,t)=>{let r=this;return{as:i=>(typeof i=="function"&&(i=i(new cI(r.dialect))),new Proxy(new Db(i.getSQL(),t??("getSelectedFields"in i?i.getSelectedFields()??{}:{}),e,!0),new Mn({alias:e,sqlAliasedBehavior:"alias",sqlBehavior:"error"})))}};$count(e,t){return this.resultKind==="async"?new vb({source:e,filters:t,session:this.session,dialect:this.dialect}):new yW({source:e,filters:t,session:this.session,dialect:this.dialect})}with(...e){let t=this;function r(a){return new Ya({fields:a??void 0,session:t.session,dialect:t.dialect,withList:e},s0)}function n(a){return new Ya({fields:a??void 0,session:t.session,dialect:t.dialect,withList:e,distinct:!0},s0)}function i(a){return new aw(a,t.session,t.dialect,e,uw)}function s(a){return new iw(a,t.session,t.dialect,e,ow)}function o(a){return new Ub(a,t.session,t.dialect,e)}return{select:r,selectDistinct:n,update:i,insert:s,delete:o}}select(e){return new Ya({fields:e??void 0,session:this.session,dialect:this.dialect},s0)}selectDistinct(e){return new Ya({fields:e??void 0,session:this.session,dialect:this.dialect,distinct:!0},s0)}update(e){return new aw(e,this.session,this.dialect,void 0,uw)}$cache;insert(e){return new iw(e,this.session,this.dialect,void 0,ow)}delete(e){return new Ub(e,this.session,this.dialect)}run(e){let t=typeof e=="string"?b.raw(e):e.getSQL(),r=this.dialect.sqlToQuery(t),n=this.session.prepareQuery(r,"raw",!1,"run");return this.resultKind==="async"?new i0(n,t,r):this.session.run(t)}all(e){let t=typeof e=="string"?b.raw(e):e.getSQL(),r=this.dialect.sqlToQuery(t),n=this.session.prepareQuery(r,"objects",!1,"all");return this.resultKind==="async"?new i0(n,t,r):this.session.objects(t)}get(e){let t=typeof e=="string"?b.raw(e):e.getSQL(),r=this.dialect.sqlToQuery(t),n=this.session.prepareQuery(r,"objects",!1,"get");return this.resultKind==="async"?new i0(n,t,r):this.session.object(t)}values(e){let t=typeof e=="string"?b.raw(e):e.getSQL(),r=this.dialect.sqlToQuery(t),n=this.session.prepareQuery(r,"objects",!1,"values");return this.resultKind==="async"?new i0(n,t,r):this.session.arrays(t)}transaction(e,t){return this.session.transaction(e,t)}};var Jve=class{static[K]="Cache"},IM=class extends Jve{static[K]="NoopCache";strategy(){return"all"}async get(e){}async put(e,t,r,n){}async onMutate(e){}},uJ=async(e,t,r,n)=>{if(!r)return{type:"skip"};let{type:i,tables:s}=r;return(i==="insert"||i==="update"||i==="delete")&&s.length>0?{type:"invalidate",tables:s}:n?n.enabled?i==="select"?{type:"try",key:n.tag??await jve(e,t),isTag:typeof n.tag<"u",autoInvalidate:n.autoInvalidate,tables:r.tables,config:n.config}:{type:"skip"}:{type:"skip"}:{type:"skip"}};async function jve(e,t){let r=`${e}-${JSON.stringify(t,(s,o)=>typeof o=="bigint"?`${o}n`:o)}`,n=new TextEncoder().encode(r),i=await crypto.subtle.digest("SHA-256",n);return[...new Uint8Array(i)].map(s=>s.toString(16).padStart(2,"0")).join("")}var cJ=class{static[K]="SQLiteBasePreparedQuery";mapper;executeMethod;constructor(e,t,r,n){this.query=t,this.mode=n,this.mapper=r,this.executeMethod=e}getQuery(){return this.query}},lJ=class{static[K]="SQLiteSession";constructor(e){this.dialect=e}};var $ve=class extends pi{static[K]="ExecuteResultSync";constructor(e){super(),this.resultCb=e}async execute(){return this.resultCb()}sync(){return this.resultCb()}},dJ=class extends cJ{static[K]="SQLiteAsyncPreparedQuery";fastPath;constructor(e,t="all",r,n,i,s,o,a,A,u){super(t,n,i,s),this.resultKind=e,this.executors=r,this.logger=o,this.cache=a,this.queryMetadata=A,this.cacheConfig=u,a&&a.strategy()==="all"&&u===void 0&&(this.cacheConfig={enabled:!0,autoInvalidate:!0}),this.cacheConfig?.enabled||(this.cacheConfig=void 0),this.fastPath=u===void 0&&(a===void 0||oe(a,IM))}async queryWithCache(e,t,r,n){let i=this.cache!==void 0&&!oe(this.cache,IM)?await uJ(e,t,this.queryMetadata,this.cacheConfig):{type:"skip"};if(i.type==="skip")return n().catch(o=>{throw new fs(e,t,o)});let s=this.cache;if(i.type==="invalidate")return Promise.all([n(),s.onMutate({tables:i.tables})]).then(o=>o[0]).catch(o=>{throw new fs(e,t,o)});if(i.type==="try"){let{tables:o,key:a,isTag:A,autoInvalidate:u,config:c}=i,l=`${r}_${a}`,d=await s.get(l,o,A,u);if(d===void 0){let h=await n().catch(f=>{throw new fs(e,t,f)});return await s.put(l,h,u?o:[],A,c),h}return d}CW(i)}run(e={}){let{query:t,logger:r,executors:n,fastPath:i,resultKind:s}=this,o=t._sql?t._sql.join(" "):t.sql,a=t.params.length===0?t.params:lh(t.params,e);if(r.logQuery(o,a),s==="sync")try{return n.run(a)}catch(A){throw new fs(o,a,A)}return i?n.run(a).catch(A=>{throw new fs(o,a,A)}):this.queryWithCache(o,a,"run",()=>n.run(a))}all(e={}){let{query:t,logger:r,executors:n,mapper:i,fastPath:s,resultKind:o}=this,a=t._sql?t._sql.join(" "):t.sql,A=t.params.length===0?t.params:lh(t.params,e);if(r.logQuery(a,A),o==="sync"){let c;try{c=n.all(A)}catch(l){throw new fs(a,A,l)}return i?i(c):c}let u=s?n.all(A).catch(c=>{throw new fs(a,A,c)}):this.queryWithCache(a,A,"all",()=>n.all(A));return i?u.then(c=>i(c)):u}get(e={}){let{query:t,logger:r,executors:n,mapper:i,fastPath:s,resultKind:o}=this,a=t._sql?t._sql.join(" "):t.sql,A=t.params.length===0?t.params:lh(t.params,e);if(r.logQuery(a,A),o==="sync"){let c;try{c=n.get(A)}catch(l){throw new fs(a,A,l)}return c?i?i([c])[0]:c:void 0}let u=s?n.get(A).catch(c=>{throw new fs(a,A,c)}):this.queryWithCache(a,A,"get",()=>n.get(A));return i?u.then(c=>c?i([c])[0]:void 0):u.then(c=>c||void 0)}values(e={}){let{query:t,logger:r,executors:n,fastPath:i,resultKind:s}=this,o=t._sql?t._sql.join(" "):t.sql,a=t.params.length===0?t.params:lh(t.params,e);if(r.logQuery(o,a),s==="sync")try{return n.values(a)}catch(A){throw new fs(o,a,A)}return i?n.values(a).catch(A=>{throw new fs(o,a,A)}):this.queryWithCache(o,a,"values",()=>n.values(a))}execute(e){return this.resultKind==="async"?this[this.executeMethod](e):new $ve(()=>this[this.executeMethod](e))}},hJ=class extends lJ{static[K]="SQLiteAsyncSession";constructor(e,t){super(e),this.resultKind=t}run(e){return this.prepareQuery(this.dialect.sqlToQuery(e),"raw",!1).run()}objects(e){return this.prepareQuery(this.dialect.sqlToQuery(e),"objects",!1).all()}object(e){return this.prepareQuery(this.dialect.sqlToQuery(e),"objects",!1).get()}arrays(e){return this.prepareQuery(this.dialect.sqlToQuery(e),"arrays",!1).all()}array(e){return this.prepareQuery(this.dialect.sqlToQuery(e),"arrays",!1).get()}},fJ=class extends cw{static[K]="SQLiteAsyncTransaction";constructor(e,t,r,n,i=0,s){super(e,t,r,n,s),this.nestedIndex=i}rollback(){throw new hW}};var gJ=class extends hJ{static[K]="SQLJsSession";logger;constructor(e,t,r,n={}){super(t,"sync"),this.client=e,this.relations=r,this.options=n,this.logger=n.logger??new gW}prepareQuery(e,t,r,n,i,s){let o;try{o=this.client.prepare(e.sql)}catch(a){throw new fs(e.sql,e.params,a)}return new dJ("sync",n,{all:a=>{o.setReturnArrays(t==="arrays");let A=o.all(...a);return t==="objects"?A.map(u=>({...u})):A},get:a=>{o.setReturnArrays(t==="arrays");let A=o.get(...a);return A&&t==="objects"?{...A}:A},run:a=>(o.setReturnArrays(!1),o.run(...a)),values:a=>(o.setReturnArrays(!0),o.all(...a))},e,i,t,this.logger,void 0,s,void 0)}transaction(e,t={}){let r=new Kve("sync",this.dialect,this,this.relations);this.run(b.raw(`begin${t.behavior?` ${t.behavior}`:""}`));try{let n=e(r);return this.run(b`commit`),n}catch(n){throw this.run(b`rollback`),n}}},Kve=class EJ extends fJ{static[K]="SQLJsTransaction";transaction(t){let r=`sp${this.nestedIndex+1}`,n=new EJ("sync",this.dialect,this.session,this._.relations,this.nestedIndex+1);n.run(b.raw(`savepoint ${r}`));try{let i=t(n);return n.run(b.raw(`release savepoint ${r}`)),i}catch(i){throw n.run(b.raw(`rollback to savepoint ${r}`)),i}}};import{DatabaseSync as lw}from"node:sqlite";var pJ=class extends cw{static[K]="NodeSQLiteDatabase"};function lI(e,t={}){let r=new n0({useJitMappers:pW(t.jit)}),n;t.logger===!0?n=new fW:t.logger!==!1&&(n=t.logger);let i=t.relations??{},s=new pJ("sync",r,new gJ(e,r,i,{logger:n}),i);return s.$client=e,s}function dI(...e){if(e[0]===void 0||typeof e[0]=="string")return lI(e[0]===void 0?new lw(":memory:"):new lw(e[0]),e[1]);let{connection:t,client:r,...n}=e[0];if(r)return lI(r,n);if(typeof t=="object"){let{path:i,...s}=t;return lI(new lw(i??":memory:",s),n)}return lI(new lw(t??":memory:"),n)}(function(e){function t(r){return lI({},r)}e.mock=t})(dI||(dI={}));function Xve(e){return dI({client:e.getClient()})}var mJ=new WeakMap;function te(e){let t=mJ.get(e);return t||(t=Xve(e),mJ.set(e,t)),t}async function IJ(e,t){await e.transact(t)}vn();async function BJ(e=ae.LOCAL_MANIFEST_PATH){if(zve(e))try{let t=await CJ.readFile(e,"utf-8");return JSON.parse(t).version||0}catch{return 0}return 0}async function o0(e,t=ae.LOCAL_MANIFEST_PATH){await CJ.writeFile(t,JSON.stringify({version:e}))}async function Pe(e,t,r=n=>o0(n)){await IJ(e,async s=>{await t(s),s.run("UPDATE sync_metadata SET value = value + 1 WHERE key = 'db_version'")});let i=Ei(e,"SELECT value FROM sync_metadata WHERE key = 'db_version'")?.value??1;await r(i)}async function Es(e,t){await Pe(e,t,r=>o0(r,ae.MANGA_LOCAL_MANIFEST_PATH))}async function hh(e,t){await Pe(e,t,r=>o0(r,ae.TV_LOCAL_MANIFEST_PATH))}async function fh(e,t){await Pe(e,t,r=>o0(r,ae.ASMR_LOCAL_MANIFEST_PATH))}var mi=_.child({module:"Sync"}),ni={anime:{rcloneLabel:"rclone",manifestPath:ae.LOCAL_MANIFEST_PATH,rcloneFile:ae.RCLONE_SYNC_FILENAME},manga:{rcloneLabel:"rclone manga",manifestPath:ae.MANGA_LOCAL_MANIFEST_PATH,rcloneFile:ae.MANGA_RCLONE_SYNC_FILENAME},tv:{rcloneLabel:"rclone tv",manifestPath:ae.TV_LOCAL_MANIFEST_PATH,rcloneFile:ae.TV_RCLONE_SYNC_FILENAME},asmr:{rcloneLabel:"rclone asmr",manifestPath:ae.ASMR_LOCAL_MANIFEST_PATH,rcloneFile:ae.ASMR_RCLONE_SYNC_FILENAME}};function CM(e){return e.length===0?e:e[0].toUpperCase()+e.slice(1)}async function Zve(e,t){if(!await Gi.fileExists(e,t))return 0;let n=QM.join(ae.ROOT,`temp_${Date.now()}_rclone_sync.json`);try{await Gi.downloadFile(e,t,n);let i=await Ju.readFile(n,"utf-8"),s=JSON.parse(i);return Oa(s)}catch{return 0}finally{yM(n)&&await Ju.unlink(n)}}async function eke(e,t,r){let n=Pa(e,Sn[t].tables),i=QM.join(ae.ROOT,`temp_${Date.now()}_rclone_${t}_up.json`);try{await Ju.writeFile(i,JSON.stringify(n,null,2)),await Gi.uploadFile(i,r,ni[t].rcloneFile)}finally{yM(i)&&await Ju.unlink(i).catch(()=>{})}}async function tke(e,t,r){let n=Sn[t],i=QM.join(ae.ROOT,`temp_${Date.now()}_rclone_${t}_down.json`);try{await Gi.downloadFile(r,ni[t].rcloneFile,i);let s=await Ju.readFile(i,"utf-8"),o=gl(JSON.parse(s),n.tables,ni[t].rcloneLabel);return El(e,n.tables,o,{libraryTables:n.libraryTables,backupName:n.backupName}),Oa(o)}finally{yM(i)&&await Ju.unlink(i).catch(()=>{})}}var rke={name:"rclone",label:"Rclone",isAuthenticated:()=>Gi.isActive(),version:(e,{remoteFolder:t})=>Zve(t,ni[e].rcloneFile),up:(e,t,{remoteFolder:r})=>eke(t,e,r),down:(e,t,{remoteFolder:r})=>tke(t,e,r)},BM=class{_locked=!1;_waiting=[];async lock(){return new Promise(t=>{this._locked?this._waiting.push(t):(this._locked=!0,t())})}unlock(){let t=this._waiting.shift();t?t():this._locked=!1}},hw={},gh={};for(let e of Object.keys(ni))hw[e]=new BM,gh[e]=!1;var Ks="none";function bM(){return Ks==="github"?hs:Ks==="google"?Hi:Ks==="rclone"?rke:null}async function QJ(){await Promise.all(Object.values(hw).map(async e=>{await e.lock(),e.unlock()}))}function wM(){return Ks}async function a0(e){let t=e||process.env.SYNC_PROVIDER;if(t==="github"&&hs.isAuthenticated()){Ks="github",mi.info("Sync Provider: GitHub (Selected)");return}if(t==="google"&&Hi.isAuthenticated()){Ks="google",mi.info("Sync Provider: Google Drive API (Selected)");return}if(t==="rclone"&&await Gi.init()){Ks="rclone",mi.info(`Sync Provider: Rclone (${Gi.getRemoteName()}) (Selected)`);return}if(t==="none"){Ks="none",mi.info("Sync Provider: None (Forced)");return}if(hs.isAuthenticated()){Ks="github",mi.info("Sync Provider: GitHub (Fallback)");return}if(Hi.isAuthenticated()){Ks="google",mi.info("Sync Provider: Google Drive API (Fallback)");return}if(await Gi.init()){Ks="rclone",mi.info(`Sync Provider: Rclone (${Gi.getRemoteName()}) (Fallback)`);return}Ks="none",mi.info("No sync provider available.")}function bJ(e){return BJ(ni[e].manifestPath)}function dw(e,t){return o0(t,ni[e].manifestPath)}async function wJ(e,t="anime"){let r=bM();if(!r)return{version:0};try{return r.isAuthenticated()?{version:await r.version(t,{remoteFolder:e})}:{version:0}}catch(n){mi.warn({err:n},`Could not read remote ${ti(Sn[t].label,"manifest")}.`)}return{version:0}}async function yJ(e,t,r){let n=Sn[t].label,i=await bJ(t);i===0&&e&&(i=Ei(e,"SELECT value FROM sync_metadata WHERE key = 'db_version'")?.value??0,i>0&&await dw(t,i));let s=bM();if(!s)return-1;let o=hw[t];if(await o.lock(),gh[t])return o.unlock(),-1;gh[t]=!0;try{gb(`Initial ${ti(n,"sync check")} (${Ks})`);let{version:a}=await wJ(r,t);if(Yg(),mi.info(`${ti(n,"Sync Check")}: Local v${i} vs Remote v${a}`),a>i){gb(`Importing ${s.label} ${ti(n,"sync data")} (Remote v${a})`);let A=await s.down(t,e,{remoteFolder:r});return await dw(t,A||a),Yg(),mi.info(`${s.label} ${ti(n,"sync down complete.")}`),a}return mi.info(`Local ${ti(n,"DB is up to date.")}`),a}catch(a){return Yg(),mi.error({err:a},`${CM(ti(n,"sync"))} boot error.`),-1}finally{gh[t]=!1,o.unlock()}}async function hI(e,t,r,n){let i=Sn[t].label,s=bM();if(!s)return;let o=hw[t];if(await o.lock(),gh[t]){o.unlock();return}gh[t]=!0;try{let a=await bJ(t),A=n!==void 0&&n>=0?n:(await wJ(r,t)).version;if(a>A){if(!s.isAuthenticated())return;gb(`Syncing ${ti(i,"up")} (Local v${a})`),await s.up(t,e,{remoteFolder:r}),Yg(),mi.info(`${CM(ti(i,"sync up complete."))}`)}else mi.info(`No ${ti(i,"changes to sync up or remote is newer.")}`)}catch(a){Yg(),mi.error({err:a},`${CM(ti(i,"sync up failed."))}`)}finally{gh[t]=!1,o.unlock()}}async function fw(e,t){if(await a0(t.preferredProvider),wM()==="github"&&hs.isAuthenticated())try{await hs.migrateFromAniWebSync()}catch(i){_.error({err:i},"GitHub sync migration from ani-web failed")}let r=await yJ(e.db,"anime",t.remoteFolder).catch(i=>(_.error({err:i},"Sync down on boot failed"),-1));await hI(e.db,"anime",t.remoteFolder,r).catch(i=>_.error({err:i},"Sync up on boot failed"));let n=[{kind:"manga",db:e.mangaDb},{kind:"tv",db:e.tvDb},{kind:"asmr",db:e.asmrDb}];await Promise.allSettled(n.map(async({kind:i,db:s})=>{let o=Sn[i].label,a=await yJ(s,i,t.remoteFolder).catch(A=>(_.error({err:A},`${ti(o,"sync down on boot failed")}`),-1));await hI(s,i,t.remoteFolder,a).catch(A=>_.error({err:A},`${ti(o,"sync up on boot failed")}`))}))}import{DatabaseSync as nke}from"node:sqlite";import{AsyncLocalStorage as ike}from"node:async_hooks";import gw from"fs";import ske from"path";var SM=new ike,A0=class e{db;isClosed=!1;statementCache=new Map;txDepth=0;txQueue=Promise.resolve();constructor(t,r){this.db=r}static async create(t){try{let r=ske.dirname(t);gw.existsSync(r)||gw.mkdirSync(r,{recursive:!0});let n=new nke(t);return new e(t,n)}catch(r){throw _.error({err:r},`Failed to initialize database at ${t}`),r}}getClient(){return this.db}configure(t,r){t==="busyTimeout"&&this.db.exec(`PRAGMA busy_timeout = ${r}`)}serialize(t){let r=this.txDepth===0,n=this.txDepth;this.run(r?"BEGIN IMMEDIATE":`SAVEPOINT dango_sp_${n}`),this.txDepth=n+1;try{SM.run(this,t)}catch(i){this.txDepth=n;try{this.run(r?"ROLLBACK":`ROLLBACK TO SAVEPOINT dango_sp_${n}`)}catch{}throw i}this.txDepth=n,this.run(r?"COMMIT":`RELEASE SAVEPOINT dango_sp_${n}`)}acquireTxQueue(){let t=this.txQueue,r,n=new Promise(i=>{r=i});return this.txQueue=t.then(()=>n),t.then(()=>r)}async transact(t){if(SM.getStore()===this){let n=this.txDepth;this.run(`SAVEPOINT dango_sp_${n}`),this.txDepth=n+1;try{await t(this)}catch(i){this.txDepth=n;try{this.run(`ROLLBACK TO SAVEPOINT dango_sp_${n}`)}catch{}throw i}this.txDepth=n,this.run(`RELEASE SAVEPOINT dango_sp_${n}`);return}let r=await this.acquireTxQueue();try{await SM.run(this,async()=>{this.run("BEGIN IMMEDIATE"),this.txDepth=1;try{await t(this)}catch(n){this.txDepth=0;try{this.run("ROLLBACK")}catch{}throw n}this.txDepth=0,this.run("COMMIT")})}finally{r()}}close(t){if(this.isClosed){t&&t(null);return}try{this.isClosed=!0,this.statementCache.clear(),this.db.close(),t&&t(null)}catch(r){_.error({err:r},"Error during database close"),t&&t(r)}}isClosedCheck(){return this.isClosed}getPreparedStatement(t){let r=this.statementCache.get(t);return r||(this.statementCache.size>100&&this.statementCache.clear(),r=this.db.prepare(t),this.statementCache.set(t,r)),r}run(t,r=[]){if(this.isClosed)throw new Error("Database is closed");let n=this.getPreparedStatement(t);r.length>0?n.run(...r):n.run()}get(t,r=[]){if(this.isClosed)throw new Error("Database is closed");let n=this.getPreparedStatement(t);return r.length>0?n.get(...r):n.get()}all(t,r=[]){if(this.isClosed)throw new Error("Database is closed");let n=this.getPreparedStatement(t);return r.length>0?n.all(...r):n.all()}prepare(t){let r=this.getPreparedStatement(t);return{run:(...n)=>{r.run(...n)},all:()=>r.all(),get:()=>r.get(),finalize:()=>{}}}backup(t){try{gw.existsSync(t)&&gw.rmSync(t,{force:!0}),this.db.exec(`VACUUM INTO '${t}'`)}catch(r){throw _.error({err:r,backupPath:t},"Database backup failed via VACUUM INTO"),r}}checkpoint(){try{this.db.exec("PRAGMA wal_checkpoint(TRUNCATE)")}catch(t){throw _.error({err:t},"Database WAL checkpoint failed"),t}}};var Eh=$s("watched_episodes",{showId:Oe("showId").notNull(),episodeNumber:Oe("episodeNumber").notNull(),watchedAt:Oe("watchedAt"),currentTime:zg("currentTime"),duration:zg("duration")},e=>[Ho({columns:[e.showId,e.episodeNumber]})]),Xs=$s("watchlist",{id:Oe("id").notNull(),name:Oe("name"),thumbnail:Oe("thumbnail"),status:Oe("status"),nativeName:Oe("nativeName"),englishName:Oe("englishName"),type:Oe("type")},e=>[Ho({columns:[e.id]})]),dr=$s("shows_meta",{id:Oe("id").notNull(),name:Oe("name"),thumbnail:Oe("thumbnail"),nativeName:Oe("nativeName"),englishName:Oe("englishName"),episodeCount:Tn("episodeCount"),status:Oe("status"),genres:Oe("genres"),popularityScore:Tn("popularityScore"),type:Oe("type"),anilistId:Tn("anilistId"),isAdult:Tn("isAdult"),episodeDuration:Tn("episodeDuration")},e=>[Ho({columns:[e.id]})]),fI=$s("settings",{key:Oe("key").notNull(),value:Oe("value")},e=>[Ho({columns:[e.key]})]),Va=$s("queue",{id:Tn("id"),showId:Oe("showId").notNull(),episodeNumber:Oe("episodeNumber").notNull(),queueOrder:Tn("queue_order").notNull()}),ph=$s("discovered_notifications",{showId:Oe("showId").notNull(),episodeNumber:Oe("episodeNumber").notNull(),discoveredAt:Oe("discoveredAt").default(b`CURRENT_TIMESTAMP`)},e=>[Ho({columns:[e.showId,e.episodeNumber]})]),mh=$s("dismissed_notifications",{showId:Oe("showId").notNull(),episodeNumber:Oe("episodeNumber").notNull(),dismissedAt:Oe("dismissedAt").default(b`CURRENT_TIMESTAMP`)},e=>[Ho({columns:[e.showId,e.episodeNumber]})]),TM=$s("temp_show_ids",{id:Oe("id").notNull(),provider:Oe("provider").notNull(),nativeId:Oe("nativeId").notNull(),title:Oe("title").notNull(),thumbnail:Oe("thumbnail"),createdAt:Tn("createdAt").notNull()},e=>[Ho({columns:[e.id]})]);var Go={getById:async(e,t)=>(await te(e).all(b`SELECT * FROM temp_show_ids WHERE id = ${t}`))[0],getByProviderNative:async(e,t,r)=>(await te(e).all(b`SELECT * FROM temp_show_ids WHERE provider = ${t} AND nativeId = ${r}`))[0],count:async e=>(await te(e).all(b`SELECT COUNT(*) as total FROM temp_show_ids`))[0]?.total||0,allocate:async(e,t)=>{let r=await Go.getByProviderNative(e,t.provider,t.nativeId);if(r)return r;let n=qg.length+1,s=((await te(e).all(b`
299
+ }`})}var ubt=class{static[K]="RelationsBuilderTable";_;constructor(e,t){this._={name:t,table:e}}},cbt=class{static[K]="RelationsBuilderColumn";_;constructor(e,t,r){this._={tableName:t,column:e,key:r}}through(e){return new Wve(this._.column,this._.tableName,this._.key,e)}},Wve=class{static[K]="RelationsBuilderColumn";_;constructor(e,t,r,n){this._={tableName:t,column:e,through:n,key:r}}},lbt=class{static[K]="RelationsHelperStatic";_;constructor(e){this._={tables:e};let t={},r={};for(let[n,i]of Object.entries(e))t[n]=s=>new pM(e,i,n,s),r[n]=s=>new Hve(e,i,n,s);this.one=t,this.many=r}one;many;aggs={count(){return new Yve}}};function sJ(e,t){let r=e[vA][t];return r?oe(r,vt)?r:oe(r,ve.Aliased)?b`${e}.${b.identifier(r.fieldAlias)}`:b`${e}.${b.identifier(t)}`:b`${e}.${b.identifier(t)}`}function nw(e,t){if(typeof t!="object"||oe(t,Ha))return Tt(e,t);let r=Object.entries(t);if(!r.length)return;let n=[];for(let[i,s]of r)if(s!==void 0)switch(i){case"NOT":{let o=nw(e,s);if(!o)continue;n.push(t0(o));continue}case"OR":if(!s.length)continue;n.push(e0(...s.map(o=>nw(e,o))));continue;case"AND":if(!s.length)continue;n.push(zr(...s.map(o=>nw(e,o))));continue;case"isNotNull":case"isNull":if(!s)continue;n.push(r0[i](e));continue;case"in":n.push(r0.inArray(e,s));continue;case"notIn":n.push(r0.notInArray(e,s));continue;default:n.push(r0[i](e,s));continue}if(n.length)return zr(...n)}function Wu(e,t,r={},n={},i=0){let s=Object.entries(t);if(!s.length)return;let o=[];for(let[a,A]of s)if(A!==void 0)switch(a){case"RAW":{let u=typeof A=="function"?A(e,r0):A.getSQL();o.push(u);continue}case"OR":if(!A?.length)continue;o.push(e0(...A.map(u=>Wu(e,u,r,n,i))));continue;case"AND":if(!A?.length)continue;o.push(zr(...A.map(u=>Wu(e,u,r,n,i))));continue;case"NOT":{if(A===void 0)continue;let u=Wu(e,A,r,n,i);if(!u)continue;o.push(t0(u));continue}default:{if(e[vA][a]){let m=nw(sJ(e,a),A);m&&o.push(m);continue}let u=r[a];if(!u)throw new Xg({message:`Unknown relational filter field: "${a}"`});let c=Cl(u.targetTable,`f${i}`),l=u.throughTable?Cl(u.throughTable,`ft${i}`):void 0,d=n[u.targetTableName],{filter:h,joinCondition:f}=mM(u,e,c,l),g=zr(h,typeof A=="boolean"?void 0:Wu(c,A,d.relations,n,i+1)),E=l?b`(select * from ${dh(c)} inner join ${dh(l)} on ${f}${b` where ${g}`.if(g)} limit 1)`:b`(select * from ${dh(c)}${b` where ${g}`.if(g)} limit 1)`;g&&o.push((A?oI:aI)(E))}}return zr(...o)}function oJ(e,t){if(typeof t=="function"){let n=t(e,Vve);return oe(n,ve)?n:Array.isArray(n)?n.length?b.join(n.map(i=>oe(i,ve)?i:AI(i)),b`, `):void 0:oe(n,vt)?AI(n):void 0}let r=Object.entries(t).filter(([n,i])=>i);if(r.length)return b.join(r.map(([n,i])=>(i==="asc"?AI:gM)(sJ(e,n))),b`, `)}function aJ(e,t,r,n){let i=[],s=[];for(let[o,a]of Object.entries(t)){if(!a)continue;let A=(typeof a=="function"?a(e,{sql:r0.sql}):a).getSQL(),u=r?rI(A):void 0,c=u&&(!n||!u.jsonSelectIdentifier)?b`${r.apply(u,n?"castInJson":"cast",b`(${A})`)} as ${b.identifier(o)}`:b`(${A}) as ${b.identifier(o)}`;c.decoder=A.decoder,i.push(c),s.push(u&&(!n||!u.mapFromJsonValue)?{key:o,field:c,codec:r.get(u,n?"normalizeInJson":"normalize"),arrayDimensions:u.dimensions}:{key:o,field:c})}return{sql:i.length?b.join(i,b`, `):void 0,selection:s}}function mM(e,t,r,n){if(e.through){let i=e.sourceColumns.map((o,a)=>{let A=e.through.source[a];return Tt(b`${t}.${b.identifier(o.name)}`,b`${n}.${b.identifier(oe(A._.column,vt)?A._.column.name:A._.key)}`)}),s=e.targetColumns.map((o,a)=>{let A=e.through.target[a];return Tt(b`${n}.${b.identifier(oe(A._.column,vt)?A._.column.name:A._.key)}`,b`${r}.${b.identifier(o.name)}`)});return{filter:zr(e.where?Wu(e.isReversed?t:r,e.where):void 0,...i),joinCondition:zr(...s)}}return{filter:zr(...e.sourceColumns.map((i,s)=>{let o=e.targetColumns[s];return Tt(b`${t}.${b.identifier(i.name)}`,b`${r}.${b.identifier(o.name)}`)}),e.where?Wu(e.isReversed?t:r,e.where):void 0)}}function dh(e){return b`${e[ml]?b`${b`${b.identifier(e[pl]??"")}.`.if(e[pl])}${b.identifier(e[ch])} as ${e}`:e}`}var n0=class{static[K]="SQLiteDialect";mapperGenerators;constructor(e){this.mapperGenerators=e?.useJitMappers?{rows:EW,relationalRows:iJ}:{rows:mW,relationalRows:nJ}}escapeName(e){return`"${e.replace(/"/g,'""')}"`}escapeParam(e){return"?"}escapeString(e){return`'${e.replace(/'/g,"''")}'`}buildWithCTE(e){if(!e?.length)return;let t=[b`with `];for(let[r,n]of e.entries())t.push(b`${b.identifier(n._.alias)} as (${n._.sql})`),r<e.length-1&&t.push(b`, `);return t.push(b` `),b.join(t)}buildDeleteQuery({table:e,where:t,returning:r,withList:n,limit:i,orderBy:s}){let o=this.buildWithCTE(n),a=r?b` returning ${this.buildSelection(r,{isSingleTable:!0})}`:void 0;return b`${o}delete from ${e}${t?b` where ${t}`:void 0}${a}${this.buildOrderBy(s)}${this.buildLimit(i)}`}buildUpdateSet(e,t){let r=e[ke.Symbol.Columns],n=Object.keys(r).filter(s=>t[s]!==void 0||r[s]?.onUpdateFn!==void 0),i=n.length;return b.join(n.flatMap((s,o)=>{let a=r[s],A=a.onUpdateFn?.(),u=t[s]??(oe(A,ve)?A:b.param(A,a)),c=b`${b.identifier(a.name)} = ${u}`;return o<i-1?[c,b.raw(", ")]:[c]}))}buildUpdateQuery({table:e,set:t,where:r,returning:n,withList:i,joins:s,from:o,limit:a,orderBy:A}){let u=this.buildWithCTE(i),c=this.buildUpdateSet(e,t),l=o&&b.join([b.raw(" from "),this.buildFromTable(o)]),d=this.buildJoins(s),h=n?b` returning ${this.buildSelection(n,{isSingleTable:!0})}`:void 0;return b`${u}update ${e} set ${c}${l}${d}${r?b` where ${r}`:void 0}${h}${this.buildOrderBy(A)}${this.buildLimit(a)}`}buildSelection(e,{isSingleTable:t=!1}={}){let r=e.length,n=e.flatMap(({field:i},s)=>{let o=[];if(oe(i,ve.Aliased))if(i.isSelectionField)!t&&i.origin!==void 0&&o.push(b.identifier(i.origin),b.raw(".")),o.push(b.identifier(i.fieldAlias));else{let a=i.sql;if(t){let A=new ve(a.queryChunks.map(u=>oe(u,vt)?b.identifier(u.name):u));o.push(a.shouldInlineParams?A.inlineParams():A)}else o.push(a);o.push(b` as ${b.identifier(i.fieldAlias)}`)}else if(oe(i,ve)){let a=i;if(t){let A=new ve(a.queryChunks.map(u=>oe(u,vt)?b.identifier(u.name):u));o.push(a.shouldInlineParams?A.inlineParams():A)}else o.push(a)}else oe(i,vt)?i.columnType==="SQLiteNumericBigInt"||i.columnType==="SQLiteNumeric"?t?o.push(i.isAlias?b`cast(${b.identifier(sI(i).name)} as text) as ${i}`:b`cast(${b.identifier(i.name)} as text)`):o.push(i.isAlias?b`cast(${sI(i)} as text) as ${i}`:b`cast(${i} as text)`):t?o.push(i.isAlias?b`${b.identifier(sI(i).name)} as ${i}`:b.identifier(i.name)):o.push(i.isAlias?b`${sI(i)} as ${i}`:i):oe(i,kr)&&(i._.isWith?o.push(i):o.push(b`(${i._.sql}) ${b.identifier(i._.alias)}`));return s<r-1&&o.push(b`, `),o});return b.join(n)}buildJoins(e){if(!e||e.length===0)return;let t=[];if(e)for(let[r,n]of e.entries()){r===0&&t.push(b` `);let i=n.table,s=n.on?b` on ${n.on}`:void 0;if(oe(i,Dn)){let o=i[Dn.Symbol.Name],a=i[Dn.Symbol.Schema],A=i[Dn.Symbol.OriginalName],u=o===A?void 0:n.alias;t.push(b`${b.raw(n.joinType)} join ${a?b`${b.identifier(a)}.`:void 0}${b.identifier(A)}${u&&b` ${b.identifier(u)}`}${s}`)}else t.push(b`${b.raw(n.joinType)} join ${i}${s}`);r<e.length-1&&t.push(b` `)}return b.join(t)}buildLimit(e){return typeof e=="object"||typeof e=="number"&&e>=0?b` limit ${e}`:void 0}buildOrderBy(e){let t=[];if(e)for(let[r,n]of e.entries())t.push(n),r<e.length-1&&t.push(b`, `);return t.length>0?b` order by ${b.join(t)}`:void 0}buildFromTable(e){if(oe(e,ke)&&e[ke.Symbol.IsAlias])return b`${b`${b.identifier(e[ke.Symbol.Schema]??"")}.`.if(e[ke.Symbol.Schema])}${b.identifier(e[ke.Symbol.OriginalName])} ${b.identifier(e[ke.Symbol.Name])}`;if(oe(e,on)&&e[kt].isAlias){let t=b`${b.identifier(e[kt].originalName)}`;return e[kt].schema&&(t=b`${b.identifier(e[kt].schema)}.${t}`),b`${t} ${b.identifier(e[kt].name)}`}return e}buildSelectQuery({withList:e,fields:t,fieldsFlat:r,where:n,having:i,table:s,joins:o,orderBy:a,groupBy:A,limit:u,offset:c,distinct:l,setOperators:d}){let h=r??Po(t);for(let S of h)if(oe(S.field,vt)&&Vu(S.field.table)!==(oe(s,kr)?s._.alias:oe(s,Zg)?s[kt].name:oe(s,ve)?void 0:Vu(s))&&!(y=>o?.some(({alias:x})=>x===(y[ke.Symbol.IsAlias]?Vu(y):y[ke.Symbol.BaseName])))(S.field.table)){let y=Vu(S.field.table);throw new Error(`Your "${S.path.join("->")}" field references a column "${y}"."${S.field.name}", but the table "${y}" is not part of the query! Did you forget to join it?`)}let f=!o||o.length===0,g=this.buildWithCTE(e),E=l?b` distinct`:void 0,m=this.buildSelection(h,{isSingleTable:f}),C=this.buildFromTable(s),I=this.buildJoins(o),B=n?b` where ${n}`:void 0,Q=i?b` having ${i}`:void 0,D=[];if(A)for(let[S,y]of A.entries())D.push(y),S<A.length-1&&D.push(b`, `);let N=b`${g}select${E} ${m} from ${C}${I}${B}${D.length>0?b` group by ${b.join(D)}`:void 0}${Q}${this.buildOrderBy(a)}${this.buildLimit(u)}${c?b` offset ${c}`:void 0}`;return d.length>0?this.buildSetOperations(N,d):N}buildSetOperations(e,t){let[r,...n]=t;if(!r)throw new Error("Cannot pass undefined values to any set operator");return n.length===0?this.buildSetOperationQuery({leftSelect:e,setOperator:r}):this.buildSetOperations(this.buildSetOperationQuery({leftSelect:e,setOperator:r}),n)}buildSetOperationQuery({leftSelect:e,setOperator:{type:t,isAll:r,rightSelect:n,limit:i,orderBy:s,offset:o}}){let a=b`${e.getSQL()} `,A=b`${n.getSQL()}`,u;if(s&&s.length>0){let h=[];for(let f of s)if(oe(f,an))h.push(b.identifier(f.name));else if(oe(f,ve)){for(let g=0;g<f.queryChunks.length;g++){let E=f.queryChunks[g];oe(E,an)&&(f.queryChunks[g]=b.identifier(E.name))}h.push(b`${f}`)}else h.push(b`${f}`);u=b` order by ${b.join(h,b`, `)}`}let c=typeof i=="object"||typeof i=="number"&&i>=0?b` limit ${i}`:void 0,l=b.raw(`${t} ${r?"all ":""}`),d=o?b` offset ${o}`:void 0;return b`${a}${l}${A}${u}${c}${d}`}buildInsertQuery({table:e,values:t,onConflict:r,returning:n,withList:i,select:s}){let o=[],a=e[ke.Symbol.Columns],A=Object.entries(a),u=s&&!oe(t,ve)?Object.keys(t.getSelectedFields()).map(f=>[f,a[f]]):A.filter(([f,g])=>!g.shouldDisableInsert()),c=u.map(([,f])=>b.identifier(f.name));if(s){let f=t;oe(f,ve)?o.push(f):o.push(f.getSQL())}else{let f=t;o.push(b.raw("values "));for(let[g,E]of f.entries()){let m=[];for(let[C,I]of u){let B=E[C];if(B===void 0||oe(B,ri)&&B.value===void 0){let Q;if(I.default!==null&&I.default!==void 0)Q=oe(I.default,ve)?I.default:b.param(I.default,I);else if(I.defaultFn!==void 0){let D=I.defaultFn();Q=oe(D,ve)?D:b.param(D,I)}else if(!I.default&&I.onUpdateFn!==void 0){let D=I.onUpdateFn();Q=oe(D,ve)?D:b.param(D,I)}else Q=b`null`;m.push(Q)}else m.push(B)}o.push(m),g<f.length-1&&o.push(b`, `)}}let l=this.buildWithCTE(i),d=b.join(o),h=n?b` returning ${this.buildSelection(n,{isSingleTable:!0})}`:void 0;return b`${l}insert into ${e} ${c} ${d}${r?.length?b.join(r):void 0}${h}`}sqlToQuery(e,t){return e.toQuery({escapeName:this.escapeName,escapeParam:this.escapeParam,escapeString:this.escapeString,invokeSource:t})}nestedSelectionerror(){throw new Xg({message:"Views with nested selections are not supported by the relational query builder"})}buildRqbColumn(e,t,r,n){if(oe(t,vt)){let i=b`${e}.${b.identifier(t.name)}`;switch(t.columnType){case"SQLiteBigInt":case"SQLiteBlobJson":case"SQLiteBlobBuffer":return n?b`hex(${i}) as ${b.identifier(r)}`:b`${i} as ${b.identifier(r)}`;case"SQLiteNumeric":case"SQLiteNumericNumber":case"SQLiteNumericBigInt":return b`cast(${i} as text) as ${b.identifier(r)}`;case"SQLiteCustomColumn":return n?b`${t.jsonSelectIdentifier(i,b)} as ${b.identifier(r)}`:b`${i} as ${b.identifier(r)}`;default:return b`${i} as ${b.identifier(r)}`}}return b`${e}.${oe(t,ve.Aliased)?b.identifier(t.fieldAlias):qu(t)?b.identifier(r):this.nestedSelectionerror()} as ${b.identifier(r)}`}unwrapAllColumns=(e,t,r)=>b.join(Object.entries(e[vA]).map(([n,i])=>(t.push({key:n,field:i}),this.buildRqbColumn(e,i,n,r))),b`, `);getSelectedTableColumns=(e,t)=>{let r=[],n=e[vA],i=Object.entries(t),s;for(let[o,a]of i)if(a!==void 0&&(s=s||a,a)){let A=n[o];r.push({column:A,tsName:o})}if(s===!1)for(let[o,a]of Object.entries(n))t[o]!==!1&&r.push({column:a,tsName:o});return r};buildColumns=(e,t,r,n)=>n?.columns?(()=>{let i=[],s=this.getSelectedTableColumns(e,n?.columns);for(let{column:o,tsName:a}of s)i.push(this.buildRqbColumn(e,o,a,r)),t.push({key:a,field:o});return i.length?b.join(i,b`, `):void 0})():this.unwrapAllColumns(e,t,r);buildRelationalQuery({schema:e,table:t,tableConfig:r,queryConfig:n,relationWhere:i,mode:s,isNested:o,errorPath:a,depth:A,throughJoin:u,jsonb:c}){let l=[],d=s==="first",h=n===!0?void 0:n,f=a??"",g=A??0;g||(t=Cl(t,`d${g}`));let E=d?1:h?.limit,m=h?.offset,C=this.buildColumns(t,l,!!o,h),I=h?.where&&i?zr(Wu(t,h.where,r.relations,e),i):h?.where?Wu(t,h.where,r.relations,e):i,B=h?.orderBy?oJ(t,h.orderBy):void 0,Q=h?.extras?aJ(t,h.extras):void 0;Q&&l.push(...Q.selection);let D=h?(()=>{let{with:S}=h;if(!S)return;let y=Object.entries(S).filter(([x,F])=>F);if(y.length)return b.join(y.map(([x,F])=>{let P=r.relations[x],q=oe(P,pM),re=Cl(P.targetTable,`d${g+1}`),ue=P.throughTable?Cl(P.throughTable,`tr${g}`):void 0,{filter:Ee,joinCondition:ye}=mM(P,t,re,ue),Ne=ue?b` inner join ${dh(ue)} on ${ye}`:void 0,ee=this.buildRelationalQuery({table:re,mode:q?"first":"many",schema:e,queryConfig:F,tableConfig:e[P.targetTableName],relationWhere:Ee,isNested:!0,errorPath:`${f.length?`${f}.`:""}${x}`,depth:g+1,throughJoin:Ne,jsonb:c});l.push({field:re,key:x,selection:ee.selection,isArray:!q,isOptional:(P.optional??!1)||F!==!0&&!!F.where});let $=b.join(ee.selection.map(Ie=>b`${b.raw(this.escapeString(Ie.key))}, ${Ie.selection?b`${c}(${b.identifier(Ie.key)})`:b.identifier(Ie.key)}`),b`, `),z=o?c:b`json`;return q?b`(select ${z}_object(${$}) as ${b.identifier("r")} from (${ee.sql}) as ${b.identifier("t")}) as ${b.identifier(x)}`:b`coalesce((select ${z}_group_array(json_object(${$})) as ${b.identifier("r")} from (${ee.sql}) as ${b.identifier("t")}), ${c}_array()) as ${b.identifier(x)}`}),b`, `)})():void 0,N=[C,Q?.sql,D].filter(S=>S!==void 0);if(!N.length)throw new Xg({message:`No fields selected for table "${r.name}"${f?` ("${f}")`:""}`});return{sql:b`select ${b.join(N,b`, `)} from ${dh(t)}${u}${b` where ${I}`.if(I)}${b` order by ${B}`.if(B)}${b` limit ${E}`.if(E!==void 0)}${b` offset ${m}`.if(m!==void 0)}`,selection:l}}};var cI=class{static[K]="SQLiteQueryBuilder";dialect;dialectConfig;constructor(e){this.dialect=oe(e,n0)?e:void 0,this.dialectConfig=oe(e,n0)?void 0:e}$with=(e,t)=>{let r=this;return{as:i=>(typeof i=="function"&&(i=i(r)),new Proxy(new Db(i.getSQL(),t??("getSelectedFields"in i?i.getSelectedFields()??{}:{}),e,!0),new Mn({alias:e,sqlAliasedBehavior:"alias",sqlBehavior:"error"})))}};with(...e){let t=this;function r(i){return new Ya({fields:i??void 0,session:void 0,dialect:t.getDialect(),withList:e})}function n(i){return new Ya({fields:i??void 0,session:void 0,dialect:t.getDialect(),withList:e,distinct:!0})}return{select:r,selectDistinct:n}}select(e){return new Ya({fields:e??void 0,session:void 0,dialect:this.getDialect()})}selectDistinct(e){return new Ya({fields:e??void 0,session:void 0,dialect:this.getDialect(),distinct:!0})}getDialect(){return this.dialect||(this.dialect=new n0(this.dialectConfig)),this.dialect}};var iw=class{static[K]="SQLiteInsertBuilder";constructor(e,t,r,n,i=sw){this.table=e,this.session=t,this.dialect=r,this.withList=n,this.builder=i}values(e){if(e=Array.isArray(e)?e:[e],e.length===0)throw new Error("values() must be called with at least one value");let t=e.map(r=>{let n={},i=this.table[ke.Symbol.Columns];for(let s of Object.keys(r)){let o=r[s];n[s]=oe(o,ve)?o:new ri(o,i[s])}return n});return new this.builder(this.table,t,this.session,this.dialect,this.withList)}select(e){let t=typeof e=="function"?e(new cI):e;if(!oe(t,ve)){let r=Object.keys(this.table[ke.Symbol.Columns]),n=Object.keys(t._.selectedFields);for(let i of n)if(!r.includes(i))throw new Error(`Insert select error: column "${i}" does not exist in table "${this.table[ke.Symbol.Name]}"`)}return new this.builder(this.table,t,this.session,this.dialect,this.withList,!0)}},sw=class{static[K]="SQLiteInsert";config;constructor(e,t,r,n,i,s){this.session=r,this.dialect=n,this.config={table:e,values:t,withList:i,select:s}}returning(e=this.config.table[Dn.Symbol.Columns]){return this.config.returning=Po(e),this}onConflictDoNothing(e={}){if(this.config.onConflict||(this.config.onConflict=[]),e.target===void 0)this.config.onConflict.push(b` on conflict do nothing`);else{let t=Array.isArray(e.target)?b`${e.target}`:b`${[e.target]}`,r=e.where?b` where ${e.where}`:b``;this.config.onConflict.push(b` on conflict ${t} do nothing${r}`)}return this}onConflictDoUpdate(e){if(e.where&&(e.targetWhere||e.setWhere))throw new Error('You cannot use both "where" and "targetWhere"/"setWhere" at the same time - "where" is deprecated, use "targetWhere" or "setWhere" instead.');this.config.onConflict||(this.config.onConflict=[]);let t=e.where?b` where ${e.where}`:void 0,r=e.targetWhere?b` where ${e.targetWhere}`:void 0,n=e.setWhere?b` where ${e.setWhere}`:void 0,i=Array.isArray(e.target)?b`${e.target}`:b`${[e.target]}`,s=this.dialect.buildUpdateSet(this.config.table,xb(this.config.table,e.set));return this.config.onConflict.push(b` on conflict ${i}${r} do update set ${s}${t}${n}`),this}getSQL(){return this.dialect.buildInsertQuery(this.config)}toSQL(){return this.dialect.sqlToQuery(this.getSQL())}$dynamic(){return this}};var ow=class extends sw{static[K]="SQLiteAsyncInsert";_prepare(e=!1){return this.session.prepareQuery(this.dialect.sqlToQuery(this.getSQL()),"arrays",e,this.config.returning?"all":"run",this.config.returning?this.dialect.mapperGenerators.rows(this.config.returning,void 0):void 0,{type:"insert",tables:Ga(this.config.table)})}prepare(){return this._prepare(!0)}run=e=>this._prepare().run(e);all=e=>this._prepare().all(e);get=e=>this._prepare().get(e);values=e=>this._prepare().values(e);async execute(){return this._prepare().execute()}};gs(ow,[pi]);var AJ=class{static[K]="SQLiteRaw";constructor(e,t,r){this.prepared=e,this.sql=t,this.query=r}getSQL(){return this.sql}getQuery(){return this.query}_prepare(){return this.prepared}};var i0=class extends AJ{static[K]="SQLiteAsyncRaw";constructor(e,t,r){super(e,t,r)}execute(e){return this.prepared.execute(e)}};gs(i0,[pi]);var s0=class extends _b{static[K]="SQLiteAsyncSelect";_prepare(e=!1){let t=this.dialect.sqlToQuery(this.getSQL()),r=this.config.fieldsFlat,n=this.dialect.mapperGenerators.rows(r,this.joinsNotNullableMap);return this.session.prepareQuery(t,"arrays",e,"all",n,{type:"select",tables:[...this.usedTables]},this.cacheConfig)}prepare(){return this._prepare(!0)}run=e=>this._prepare().run(e);all=e=>this._prepare().all(e);get=e=>this._prepare().get(e);values=e=>this._prepare().values(e);async execute(){return this._prepare().execute()}};gs(s0,[pi]);var aw=class{static[K]="SQLiteUpdateBuilder";constructor(e,t,r,n,i=Aw){this.table=e,this.session=t,this.dialect=r,this.withList=n,this.builder=i}set(e){return new this.builder(this.table,xb(this.table,e),this.session,this.dialect,this.withList)}},Aw=class{static[K]="SQLiteUpdate";config;constructor(e,t,r,n,i){this.session=r,this.dialect=n,this.config={set:t,table:e,withList:i,joins:[]}}from(e){return this.config.from=e,this}createJoin(e){return((t,r)=>{let n=nI(t);if(typeof n=="string"&&this.config.joins.some(i=>i.alias===n))throw new Error(`Alias "${n}" is already used in this query`);if(typeof r=="function"){let i=this.config.from?oe(t,Dn)?t[ke.Symbol.Columns]:oe(t,kr)?t._.selectedFields:oe(t,Zg)?t[kt].selectedFields:void 0:void 0;r=r(new Proxy(this.config.table[ke.Symbol.Columns],new Mn({sqlAliasedBehavior:"sql",sqlBehavior:"sql"})),i&&new Proxy(i,new Mn({sqlAliasedBehavior:"sql",sqlBehavior:"sql"})))}return this.config.joins.push({on:r,table:t,joinType:e,alias:n}),this})}leftJoin=this.createJoin("left");rightJoin=this.createJoin("right");innerJoin=this.createJoin("inner");fullJoin=this.createJoin("full");where(e){return this.config.where=e,this}orderBy(...e){if(typeof e[0]=="function"){let t=e[0](new Proxy(this.config.table[ke.Symbol.Columns],new Mn({sqlAliasedBehavior:"alias",sqlBehavior:"sql"}))),r=Array.isArray(t)?t:[t];this.config.orderBy=r}else{let t=e;this.config.orderBy=t}return this}limit(e){return this.config.limit=e,this}returning(e=this.config.table[Dn.Symbol.Columns]){return this.config.returning=Po(e),this}getSQL(){return this.dialect.buildUpdateQuery(this.config)}toSQL(){return this.dialect.sqlToQuery(this.getSQL())}$dynamic(){return this}};var uw=class extends Aw{static[K]="SQLiteAsyncUpdate";_prepare(e=!1){return this.session.prepareQuery(this.dialect.sqlToQuery(this.getSQL()),"arrays",e,this.config.returning?"all":"run",this.config.returning?this.dialect.mapperGenerators.rows(this.config.returning,void 0):void 0,{type:"update",tables:Ga(this.config.table)})}prepare(){return this._prepare(!0)}run=e=>this._prepare().run(e);all=e=>this._prepare().all(e);get=e=>this._prepare().get(e);values=e=>this._prepare().values(e);async execute(){return this.config.returning?this.all():this.run()}};gs(uw,[pi]);var cw=class{static[K]="BaseSQLiteDatabase";query;constructor(e,t,r,n,i){this.resultKind=e,this.dialect=t,this.session=r,this.forbidJsonb=i,this._={relations:n,session:r,resultKind:e},this.query={};for(let[s,o]of Object.entries(n))this.query[s]=new QW(e,n,n[o.name].table,o,t,r,i,e==="sync"?bW:kb);this.$cache={invalidate:async s=>{}}}$with=(e,t)=>{let r=this;return{as:i=>(typeof i=="function"&&(i=i(new cI(r.dialect))),new Proxy(new Db(i.getSQL(),t??("getSelectedFields"in i?i.getSelectedFields()??{}:{}),e,!0),new Mn({alias:e,sqlAliasedBehavior:"alias",sqlBehavior:"error"})))}};$count(e,t){return this.resultKind==="async"?new vb({source:e,filters:t,session:this.session,dialect:this.dialect}):new yW({source:e,filters:t,session:this.session,dialect:this.dialect})}with(...e){let t=this;function r(a){return new Ya({fields:a??void 0,session:t.session,dialect:t.dialect,withList:e},s0)}function n(a){return new Ya({fields:a??void 0,session:t.session,dialect:t.dialect,withList:e,distinct:!0},s0)}function i(a){return new aw(a,t.session,t.dialect,e,uw)}function s(a){return new iw(a,t.session,t.dialect,e,ow)}function o(a){return new Ub(a,t.session,t.dialect,e)}return{select:r,selectDistinct:n,update:i,insert:s,delete:o}}select(e){return new Ya({fields:e??void 0,session:this.session,dialect:this.dialect},s0)}selectDistinct(e){return new Ya({fields:e??void 0,session:this.session,dialect:this.dialect,distinct:!0},s0)}update(e){return new aw(e,this.session,this.dialect,void 0,uw)}$cache;insert(e){return new iw(e,this.session,this.dialect,void 0,ow)}delete(e){return new Ub(e,this.session,this.dialect)}run(e){let t=typeof e=="string"?b.raw(e):e.getSQL(),r=this.dialect.sqlToQuery(t),n=this.session.prepareQuery(r,"raw",!1,"run");return this.resultKind==="async"?new i0(n,t,r):this.session.run(t)}all(e){let t=typeof e=="string"?b.raw(e):e.getSQL(),r=this.dialect.sqlToQuery(t),n=this.session.prepareQuery(r,"objects",!1,"all");return this.resultKind==="async"?new i0(n,t,r):this.session.objects(t)}get(e){let t=typeof e=="string"?b.raw(e):e.getSQL(),r=this.dialect.sqlToQuery(t),n=this.session.prepareQuery(r,"objects",!1,"get");return this.resultKind==="async"?new i0(n,t,r):this.session.object(t)}values(e){let t=typeof e=="string"?b.raw(e):e.getSQL(),r=this.dialect.sqlToQuery(t),n=this.session.prepareQuery(r,"objects",!1,"values");return this.resultKind==="async"?new i0(n,t,r):this.session.arrays(t)}transaction(e,t){return this.session.transaction(e,t)}};var Jve=class{static[K]="Cache"},IM=class extends Jve{static[K]="NoopCache";strategy(){return"all"}async get(e){}async put(e,t,r,n){}async onMutate(e){}},uJ=async(e,t,r,n)=>{if(!r)return{type:"skip"};let{type:i,tables:s}=r;return(i==="insert"||i==="update"||i==="delete")&&s.length>0?{type:"invalidate",tables:s}:n?n.enabled?i==="select"?{type:"try",key:n.tag??await jve(e,t),isTag:typeof n.tag<"u",autoInvalidate:n.autoInvalidate,tables:r.tables,config:n.config}:{type:"skip"}:{type:"skip"}:{type:"skip"}};async function jve(e,t){let r=`${e}-${JSON.stringify(t,(s,o)=>typeof o=="bigint"?`${o}n`:o)}`,n=new TextEncoder().encode(r),i=await crypto.subtle.digest("SHA-256",n);return[...new Uint8Array(i)].map(s=>s.toString(16).padStart(2,"0")).join("")}var cJ=class{static[K]="SQLiteBasePreparedQuery";mapper;executeMethod;constructor(e,t,r,n){this.query=t,this.mode=n,this.mapper=r,this.executeMethod=e}getQuery(){return this.query}},lJ=class{static[K]="SQLiteSession";constructor(e){this.dialect=e}};var $ve=class extends pi{static[K]="ExecuteResultSync";constructor(e){super(),this.resultCb=e}async execute(){return this.resultCb()}sync(){return this.resultCb()}},dJ=class extends cJ{static[K]="SQLiteAsyncPreparedQuery";fastPath;constructor(e,t="all",r,n,i,s,o,a,A,u){super(t,n,i,s),this.resultKind=e,this.executors=r,this.logger=o,this.cache=a,this.queryMetadata=A,this.cacheConfig=u,a&&a.strategy()==="all"&&u===void 0&&(this.cacheConfig={enabled:!0,autoInvalidate:!0}),this.cacheConfig?.enabled||(this.cacheConfig=void 0),this.fastPath=u===void 0&&(a===void 0||oe(a,IM))}async queryWithCache(e,t,r,n){let i=this.cache!==void 0&&!oe(this.cache,IM)?await uJ(e,t,this.queryMetadata,this.cacheConfig):{type:"skip"};if(i.type==="skip")return n().catch(o=>{throw new fs(e,t,o)});let s=this.cache;if(i.type==="invalidate")return Promise.all([n(),s.onMutate({tables:i.tables})]).then(o=>o[0]).catch(o=>{throw new fs(e,t,o)});if(i.type==="try"){let{tables:o,key:a,isTag:A,autoInvalidate:u,config:c}=i,l=`${r}_${a}`,d=await s.get(l,o,A,u);if(d===void 0){let h=await n().catch(f=>{throw new fs(e,t,f)});return await s.put(l,h,u?o:[],A,c),h}return d}CW(i)}run(e={}){let{query:t,logger:r,executors:n,fastPath:i,resultKind:s}=this,o=t._sql?t._sql.join(" "):t.sql,a=t.params.length===0?t.params:lh(t.params,e);if(r.logQuery(o,a),s==="sync")try{return n.run(a)}catch(A){throw new fs(o,a,A)}return i?n.run(a).catch(A=>{throw new fs(o,a,A)}):this.queryWithCache(o,a,"run",()=>n.run(a))}all(e={}){let{query:t,logger:r,executors:n,mapper:i,fastPath:s,resultKind:o}=this,a=t._sql?t._sql.join(" "):t.sql,A=t.params.length===0?t.params:lh(t.params,e);if(r.logQuery(a,A),o==="sync"){let c;try{c=n.all(A)}catch(l){throw new fs(a,A,l)}return i?i(c):c}let u=s?n.all(A).catch(c=>{throw new fs(a,A,c)}):this.queryWithCache(a,A,"all",()=>n.all(A));return i?u.then(c=>i(c)):u}get(e={}){let{query:t,logger:r,executors:n,mapper:i,fastPath:s,resultKind:o}=this,a=t._sql?t._sql.join(" "):t.sql,A=t.params.length===0?t.params:lh(t.params,e);if(r.logQuery(a,A),o==="sync"){let c;try{c=n.get(A)}catch(l){throw new fs(a,A,l)}return c?i?i([c])[0]:c:void 0}let u=s?n.get(A).catch(c=>{throw new fs(a,A,c)}):this.queryWithCache(a,A,"get",()=>n.get(A));return i?u.then(c=>c?i([c])[0]:void 0):u.then(c=>c||void 0)}values(e={}){let{query:t,logger:r,executors:n,fastPath:i,resultKind:s}=this,o=t._sql?t._sql.join(" "):t.sql,a=t.params.length===0?t.params:lh(t.params,e);if(r.logQuery(o,a),s==="sync")try{return n.values(a)}catch(A){throw new fs(o,a,A)}return i?n.values(a).catch(A=>{throw new fs(o,a,A)}):this.queryWithCache(o,a,"values",()=>n.values(a))}execute(e){return this.resultKind==="async"?this[this.executeMethod](e):new $ve(()=>this[this.executeMethod](e))}},hJ=class extends lJ{static[K]="SQLiteAsyncSession";constructor(e,t){super(e),this.resultKind=t}run(e){return this.prepareQuery(this.dialect.sqlToQuery(e),"raw",!1).run()}objects(e){return this.prepareQuery(this.dialect.sqlToQuery(e),"objects",!1).all()}object(e){return this.prepareQuery(this.dialect.sqlToQuery(e),"objects",!1).get()}arrays(e){return this.prepareQuery(this.dialect.sqlToQuery(e),"arrays",!1).all()}array(e){return this.prepareQuery(this.dialect.sqlToQuery(e),"arrays",!1).get()}},fJ=class extends cw{static[K]="SQLiteAsyncTransaction";constructor(e,t,r,n,i=0,s){super(e,t,r,n,s),this.nestedIndex=i}rollback(){throw new hW}};var gJ=class extends hJ{static[K]="SQLJsSession";logger;constructor(e,t,r,n={}){super(t,"sync"),this.client=e,this.relations=r,this.options=n,this.logger=n.logger??new gW}prepareQuery(e,t,r,n,i,s){let o;try{o=this.client.prepare(e.sql)}catch(a){throw new fs(e.sql,e.params,a)}return new dJ("sync",n,{all:a=>{o.setReturnArrays(t==="arrays");let A=o.all(...a);return t==="objects"?A.map(u=>({...u})):A},get:a=>{o.setReturnArrays(t==="arrays");let A=o.get(...a);return A&&t==="objects"?{...A}:A},run:a=>(o.setReturnArrays(!1),o.run(...a)),values:a=>(o.setReturnArrays(!0),o.all(...a))},e,i,t,this.logger,void 0,s,void 0)}transaction(e,t={}){let r=new Kve("sync",this.dialect,this,this.relations);this.run(b.raw(`begin${t.behavior?` ${t.behavior}`:""}`));try{let n=e(r);return this.run(b`commit`),n}catch(n){throw this.run(b`rollback`),n}}},Kve=class EJ extends fJ{static[K]="SQLJsTransaction";transaction(t){let r=`sp${this.nestedIndex+1}`,n=new EJ("sync",this.dialect,this.session,this._.relations,this.nestedIndex+1);n.run(b.raw(`savepoint ${r}`));try{let i=t(n);return n.run(b.raw(`release savepoint ${r}`)),i}catch(i){throw n.run(b.raw(`rollback to savepoint ${r}`)),i}}};import{DatabaseSync as lw}from"node:sqlite";var pJ=class extends cw{static[K]="NodeSQLiteDatabase"};function lI(e,t={}){let r=new n0({useJitMappers:pW(t.jit)}),n;t.logger===!0?n=new fW:t.logger!==!1&&(n=t.logger);let i=t.relations??{},s=new pJ("sync",r,new gJ(e,r,i,{logger:n}),i);return s.$client=e,s}function dI(...e){if(e[0]===void 0||typeof e[0]=="string")return lI(e[0]===void 0?new lw(":memory:"):new lw(e[0]),e[1]);let{connection:t,client:r,...n}=e[0];if(r)return lI(r,n);if(typeof t=="object"){let{path:i,...s}=t;return lI(new lw(i??":memory:",s),n)}return lI(new lw(t??":memory:"),n)}(function(e){function t(r){return lI({},r)}e.mock=t})(dI||(dI={}));function Xve(e){return dI({client:e.getClient()})}var mJ=new WeakMap;function te(e){let t=mJ.get(e);return t||(t=Xve(e),mJ.set(e,t)),t}async function IJ(e,t){await e.transact(t)}vn();async function BJ(e=ae.LOCAL_MANIFEST_PATH){if(zve(e))try{let t=await CJ.readFile(e,"utf-8");return JSON.parse(t).version||0}catch{return 0}return 0}async function o0(e,t=ae.LOCAL_MANIFEST_PATH){await CJ.writeFile(t,JSON.stringify({version:e}))}async function Pe(e,t,r=n=>o0(n)){await IJ(e,async s=>{await t(s),s.run("UPDATE sync_metadata SET value = value + 1 WHERE key = 'db_version'")});let i=Ei(e,"SELECT value FROM sync_metadata WHERE key = 'db_version'")?.value??1;await r(i)}async function Es(e,t){await Pe(e,t,r=>o0(r,ae.MANGA_LOCAL_MANIFEST_PATH))}async function hh(e,t){await Pe(e,t,r=>o0(r,ae.TV_LOCAL_MANIFEST_PATH))}async function fh(e,t){await Pe(e,t,r=>o0(r,ae.ASMR_LOCAL_MANIFEST_PATH))}var mi=_.child({module:"Sync"}),ni={anime:{rcloneLabel:"rclone",manifestPath:ae.LOCAL_MANIFEST_PATH,rcloneFile:ae.RCLONE_SYNC_FILENAME},manga:{rcloneLabel:"rclone manga",manifestPath:ae.MANGA_LOCAL_MANIFEST_PATH,rcloneFile:ae.MANGA_RCLONE_SYNC_FILENAME},tv:{rcloneLabel:"rclone tv",manifestPath:ae.TV_LOCAL_MANIFEST_PATH,rcloneFile:ae.TV_RCLONE_SYNC_FILENAME},asmr:{rcloneLabel:"rclone asmr",manifestPath:ae.ASMR_LOCAL_MANIFEST_PATH,rcloneFile:ae.ASMR_RCLONE_SYNC_FILENAME}};function CM(e){return e.length===0?e:e[0].toUpperCase()+e.slice(1)}async function Zve(e,t){if(!await Gi.fileExists(e,t))return 0;let n=QM.join(ae.ROOT,`temp_${Date.now()}_rclone_sync.json`);try{await Gi.downloadFile(e,t,n);let i=await Ju.readFile(n,"utf-8"),s=JSON.parse(i);return Oa(s)}catch{return 0}finally{yM(n)&&await Ju.unlink(n)}}async function eke(e,t,r){let n=Pa(e,Sn[t].tables),i=QM.join(ae.ROOT,`temp_${Date.now()}_rclone_${t}_up.json`);try{await Ju.writeFile(i,JSON.stringify(n,null,2)),await Gi.uploadFile(i,r,ni[t].rcloneFile)}finally{yM(i)&&await Ju.unlink(i).catch(()=>{})}}async function tke(e,t,r){let n=Sn[t],i=QM.join(ae.ROOT,`temp_${Date.now()}_rclone_${t}_down.json`);try{await Gi.downloadFile(r,ni[t].rcloneFile,i);let s=await Ju.readFile(i,"utf-8"),o=gl(JSON.parse(s),n.tables,ni[t].rcloneLabel);return El(e,n.tables,o,{libraryTables:n.libraryTables,backupName:n.backupName}),Oa(o)}finally{yM(i)&&await Ju.unlink(i).catch(()=>{})}}var rke={name:"rclone",label:"Rclone",isAuthenticated:()=>Gi.isActive(),version:(e,{remoteFolder:t})=>Zve(t,ni[e].rcloneFile),up:(e,t,{remoteFolder:r})=>eke(t,e,r),down:(e,t,{remoteFolder:r})=>tke(t,e,r)},BM=class{_locked=!1;_waiting=[];async lock(){return new Promise(t=>{this._locked?this._waiting.push(t):(this._locked=!0,t())})}unlock(){let t=this._waiting.shift();t?t():this._locked=!1}},hw={},gh={};for(let e of Object.keys(ni))hw[e]=new BM,gh[e]=!1;var Ks="none";function bM(){return Ks==="github"?hs:Ks==="google"?Hi:Ks==="rclone"?rke:null}async function QJ(){await Promise.all(Object.values(hw).map(async e=>{await e.lock(),e.unlock()}))}function wM(){return Ks}async function a0(e){let t=e||process.env.SYNC_PROVIDER;if(t==="github"&&hs.isAuthenticated()){Ks="github",mi.info("Sync Provider: GitHub (Selected)");return}if(t==="google"&&Hi.isAuthenticated()){Ks="google",mi.info("Sync Provider: Google Drive API (Selected)");return}if(t==="rclone"&&await Gi.init()){Ks="rclone",mi.info(`Sync Provider: Rclone (${Gi.getRemoteName()}) (Selected)`);return}if(t==="none"){Ks="none",mi.info("Sync Provider: None (Forced)");return}if(hs.isAuthenticated()){Ks="github",mi.info("Sync Provider: GitHub (Fallback)");return}if(Hi.isAuthenticated()){Ks="google",mi.info("Sync Provider: Google Drive API (Fallback)");return}if(await Gi.init()){Ks="rclone",mi.info(`Sync Provider: Rclone (${Gi.getRemoteName()}) (Fallback)`);return}Ks="none",mi.info("No sync provider available.")}function bJ(e){return BJ(ni[e].manifestPath)}function dw(e,t){return o0(t,ni[e].manifestPath)}async function wJ(e,t="anime"){let r=bM();if(!r)return{version:0};try{return r.isAuthenticated()?{version:await r.version(t,{remoteFolder:e})}:{version:0}}catch(n){mi.warn({err:n},`Could not read remote ${ti(Sn[t].label,"manifest")}.`)}return{version:0}}async function yJ(e,t,r){let n=Sn[t].label,i=await bJ(t);i===0&&e&&(i=Ei(e,"SELECT value FROM sync_metadata WHERE key = 'db_version'")?.value??0,i>0&&await dw(t,i));let s=bM();if(!s)return-1;let o=hw[t];if(await o.lock(),gh[t])return o.unlock(),-1;gh[t]=!0;try{gb(`Initial ${ti(n,"sync check")} (${Ks})`);let{version:a}=await wJ(r,t);if(Yg(),mi.info(`${ti(n,"Sync Check")}: Local v${i} vs Remote v${a}`),a>i){gb(`Importing ${s.label} ${ti(n,"sync data")} (Remote v${a})`);let A=await s.down(t,e,{remoteFolder:r});return await dw(t,A||a),Yg(),mi.info(`${s.label} ${ti(n,"sync down complete.")}`),a}return mi.info(`Local ${ti(n,"DB is up to date.")}`),a}catch(a){return Yg(),mi.error({err:a},`${CM(ti(n,"sync"))} boot error.`),-1}finally{gh[t]=!1,o.unlock()}}async function hI(e,t,r,n){let i=Sn[t].label,s=bM();if(!s)return;let o=hw[t];if(await o.lock(),gh[t]){o.unlock();return}gh[t]=!0;try{let a=await bJ(t),A=n!==void 0&&n>=0?n:(await wJ(r,t)).version;if(a>A){if(!s.isAuthenticated())return;gb(`Syncing ${ti(i,"up")} (Local v${a})`),await s.up(t,e,{remoteFolder:r}),Yg(),mi.info(`${CM(ti(i,"sync up complete."))}`)}else mi.info(`No ${ti(i,"changes to sync up or remote is newer.")}`)}catch(a){Yg(),mi.error({err:a},`${CM(ti(i,"sync up failed."))}`)}finally{gh[t]=!1,o.unlock()}}async function fw(e,t){if(await a0(t.preferredProvider),wM()==="github"&&hs.isAuthenticated())try{await hs.migrateFromAniWebSync()}catch(i){_.error({err:i},"GitHub sync migration from ani-web failed")}let r=await yJ(e.db,"anime",t.remoteFolder).catch(i=>(_.error({err:i},"Sync down on boot failed"),-1));await hI(e.db,"anime",t.remoteFolder,r).catch(i=>_.error({err:i},"Sync up on boot failed"));let n=[{kind:"manga",db:e.mangaDb},{kind:"tv",db:e.tvDb},{kind:"asmr",db:e.asmrDb}];await Promise.allSettled(n.map(async({kind:i,db:s})=>{let o=Sn[i].label,a=await yJ(s,i,t.remoteFolder).catch(A=>(_.error({err:A},`${ti(o,"sync down on boot failed")}`),-1));await hI(s,i,t.remoteFolder,a).catch(A=>_.error({err:A},`${ti(o,"sync up on boot failed")}`))}))}import{DatabaseSync as nke}from"node:sqlite";import{AsyncLocalStorage as ike}from"node:async_hooks";import gw from"fs";import ske from"path";var SM=new ike,A0=class e{db;isClosed=!1;statementCache=new Map;txDepth=0;txQueue=Promise.resolve();constructor(t,r){this.db=r}static async create(t){try{let r=ske.dirname(t);gw.existsSync(r)||gw.mkdirSync(r,{recursive:!0});let n=new nke(t);return new e(t,n)}catch(r){throw _.error({err:r},`Failed to initialize database at ${t}`),r}}getClient(){return this.db}configure(t,r){t==="busyTimeout"&&this.db.exec(`PRAGMA busy_timeout = ${r}`)}serialize(t){let r=this.txDepth===0,n=this.txDepth;this.run(r?"BEGIN IMMEDIATE":`SAVEPOINT dango_sp_${n}`),this.txDepth=n+1;try{SM.run(this,t)}catch(i){this.txDepth=n;try{this.run(r?"ROLLBACK":`ROLLBACK TO SAVEPOINT dango_sp_${n}`)}catch{}throw i}this.txDepth=n,this.run(r?"COMMIT":`RELEASE SAVEPOINT dango_sp_${n}`)}acquireTxQueue(){let t=this.txQueue,r,n=new Promise(i=>{r=i});return this.txQueue=t.then(()=>n),t.then(()=>r)}async transact(t){if(SM.getStore()===this){let n=this.txDepth;this.run(`SAVEPOINT dango_sp_${n}`),this.txDepth=n+1;try{await t(this)}catch(i){this.txDepth=n;try{this.run(`ROLLBACK TO SAVEPOINT dango_sp_${n}`)}catch{}throw i}this.txDepth=n,this.run(`RELEASE SAVEPOINT dango_sp_${n}`);return}let r=await this.acquireTxQueue();try{await SM.run(this,async()=>{this.run("BEGIN IMMEDIATE"),this.txDepth=1;try{await t(this)}catch(n){this.txDepth=0;try{this.run("ROLLBACK")}catch{}throw n}this.txDepth=0,this.run("COMMIT")})}finally{r()}}close(t){if(this.isClosed){t&&t(null);return}try{try{this.checkpoint()}finally{this.db.close(),this.isClosed=!0,this.statementCache.clear()}t&&t(null)}catch(r){_.error({err:r},"Error during database close"),t&&t(r)}}isClosedCheck(){return this.isClosed}getPreparedStatement(t){let r=this.statementCache.get(t);return r||(this.statementCache.size>100&&this.statementCache.clear(),r=this.db.prepare(t),this.statementCache.set(t,r)),r}run(t,r=[]){if(this.isClosed)throw new Error("Database is closed");let n=this.getPreparedStatement(t);r.length>0?n.run(...r):n.run()}get(t,r=[]){if(this.isClosed)throw new Error("Database is closed");let n=this.getPreparedStatement(t);return r.length>0?n.get(...r):n.get()}all(t,r=[]){if(this.isClosed)throw new Error("Database is closed");let n=this.getPreparedStatement(t);return r.length>0?n.all(...r):n.all()}prepare(t){let r=this.getPreparedStatement(t);return{run:(...n)=>{r.run(...n)},all:()=>r.all(),get:()=>r.get(),finalize:()=>{}}}backup(t){try{gw.existsSync(t)&&gw.rmSync(t,{force:!0}),this.db.exec(`VACUUM INTO '${t}'`)}catch(r){throw _.error({err:r,backupPath:t},"Database backup failed via VACUUM INTO"),r}}checkpoint(){try{this.db.exec("PRAGMA wal_checkpoint(TRUNCATE)")}catch(t){throw _.error({err:t},"Database WAL checkpoint failed"),t}}};var Eh=$s("watched_episodes",{showId:Oe("showId").notNull(),episodeNumber:Oe("episodeNumber").notNull(),watchedAt:Oe("watchedAt"),currentTime:zg("currentTime"),duration:zg("duration")},e=>[Ho({columns:[e.showId,e.episodeNumber]})]),Xs=$s("watchlist",{id:Oe("id").notNull(),name:Oe("name"),thumbnail:Oe("thumbnail"),status:Oe("status"),nativeName:Oe("nativeName"),englishName:Oe("englishName"),type:Oe("type")},e=>[Ho({columns:[e.id]})]),dr=$s("shows_meta",{id:Oe("id").notNull(),name:Oe("name"),thumbnail:Oe("thumbnail"),nativeName:Oe("nativeName"),englishName:Oe("englishName"),episodeCount:Tn("episodeCount"),status:Oe("status"),genres:Oe("genres"),popularityScore:Tn("popularityScore"),type:Oe("type"),anilistId:Tn("anilistId"),isAdult:Tn("isAdult"),episodeDuration:Tn("episodeDuration")},e=>[Ho({columns:[e.id]})]),fI=$s("settings",{key:Oe("key").notNull(),value:Oe("value")},e=>[Ho({columns:[e.key]})]),Va=$s("queue",{id:Tn("id"),showId:Oe("showId").notNull(),episodeNumber:Oe("episodeNumber").notNull(),queueOrder:Tn("queue_order").notNull()}),ph=$s("discovered_notifications",{showId:Oe("showId").notNull(),episodeNumber:Oe("episodeNumber").notNull(),discoveredAt:Oe("discoveredAt").default(b`CURRENT_TIMESTAMP`)},e=>[Ho({columns:[e.showId,e.episodeNumber]})]),mh=$s("dismissed_notifications",{showId:Oe("showId").notNull(),episodeNumber:Oe("episodeNumber").notNull(),dismissedAt:Oe("dismissedAt").default(b`CURRENT_TIMESTAMP`)},e=>[Ho({columns:[e.showId,e.episodeNumber]})]),TM=$s("temp_show_ids",{id:Oe("id").notNull(),provider:Oe("provider").notNull(),nativeId:Oe("nativeId").notNull(),title:Oe("title").notNull(),thumbnail:Oe("thumbnail"),createdAt:Tn("createdAt").notNull()},e=>[Ho({columns:[e.id]})]);var Go={getById:async(e,t)=>(await te(e).all(b`SELECT * FROM temp_show_ids WHERE id = ${t}`))[0],getByProviderNative:async(e,t,r)=>(await te(e).all(b`SELECT * FROM temp_show_ids WHERE provider = ${t} AND nativeId = ${r}`))[0],count:async e=>(await te(e).all(b`SELECT COUNT(*) as total FROM temp_show_ids`))[0]?.total||0,allocate:async(e,t)=>{let r=await Go.getByProviderNative(e,t.provider,t.nativeId);if(r)return r;let n=qg.length+1,s=((await te(e).all(b`
300
300
  SELECT MAX(CAST(SUBSTR(id, ${n}) AS INTEGER)) as maxId FROM temp_show_ids WHERE id LIKE ${`${qg}%`}`))[0]?.maxId||0)+1,o=`${qg}${s}`;try{await te(e).insert(TM).values({id:o,provider:t.provider,nativeId:t.nativeId,title:t.title,thumbnail:t.thumbnail||"",createdAt:Date.now()})}catch{let a=await Go.getByProviderNative(e,t.provider,t.nativeId);if(a)return a;throw new Error("temp id allocation failed")}return await Go.getById(e,o)},purge:async e=>{let t=await Go.count(e);if(t===0)return 0;let r=`${qg}%`;return await te(e).run(b`DELETE FROM watchlist WHERE id LIKE ${r}`),await te(e).run(b`DELETE FROM watched_episodes WHERE showId LIKE ${r}`),await te(e).run(b`DELETE FROM queue WHERE showId LIKE ${r}`),await te(e).run(b`DELETE FROM shows_meta WHERE id LIKE ${r}`),await te(e).run(b`DELETE FROM dismissed_notifications WHERE showId LIKE ${r}`),await te(e).run(b`DELETE FROM discovered_notifications WHERE showId LIKE ${r}`),await te(e).run(b`
301
301
  DELETE FROM legacy_id_mapping WHERE legacyId LIKE ${r} OR numericId LIKE ${r}`),await te(e).delete(TM),t}};vn();import{DatabaseSync as oke}from"node:sqlite";import ake from"fs";import SJ from"path";var DM=5e3,Ake=6*3600;function uke(){return process.env.DANGO_MAL_CACHE_PATH??SJ.join(ae.ROOT,ae.IS_DEV?"mal-cache.dev.db":"mal-cache.db")}var Ew=null;function pw(){if(!Ew){let e=uke();ake.mkdirSync(SJ.dirname(e),{recursive:!0}),Ew=new A0(e,new oke(e)),hl(Ew,"CREATE TABLE IF NOT EXISTS mal_cache (key TEXT PRIMARY KEY, payload TEXT NOT NULL, fetched_at TEXT NOT NULL, expires_at TEXT NOT NULL)")}return Ew}function cke(e){let t=Ei(pw(),"SELECT payload, fetched_at AS fetchedAt, expires_at AS expiresAt FROM mal_cache WHERE key = ?",[e]);return t?{payload:t.payload,fresh:Date.now()<Date.parse(t.expiresAt)}:null}function lke(e,t,r=Ake){let n=pw(),i=new Date;hl(n,"INSERT OR REPLACE INTO mal_cache (key, payload, fetched_at, expires_at) VALUES (?, ?, ?, ?)",[e,t,i.toISOString(),new Date(i.getTime()+r*1e3).toISOString()]),!((Ei(n,"SELECT COUNT(*) AS rows FROM mal_cache")?.rows??0)<DM||(NM(),(Ei(n,"SELECT COUNT(*) AS rows FROM mal_cache")?.rows??0)<DM))&&hl(n,`DELETE FROM mal_cache WHERE key NOT IN (SELECT key FROM mal_cache ORDER BY fetched_at DESC LIMIT ${DM})`)}function NM(){let e=new Date().toISOString(),t=Ei(pw(),"SELECT COUNT(*) AS rows FROM mal_cache WHERE expires_at < ?",[e]);return hl(pw(),"DELETE FROM mal_cache WHERE expires_at < ?",[e]),t?.rows??0}function Yr(){return{get:e=>cke(e),put:(e,t,r)=>lke(e,t,r)}}var Bl=_.child({module:"DB"});async function mw(e){let t=await A0.create(e);return t.configure("busyTimeout",5e3),t.run("PRAGMA journal_mode = WAL;"),t.run("PRAGMA synchronous = NORMAL;"),t.run("PRAGMA cache_size = -20000;"),t.run("PRAGMA temp_store = MEMORY;"),t.run("PRAGMA mmap_size = 268435456;"),t.run("PRAGMA foreign_keys = ON;"),t}async function RM(e){try{let t=await mw(e);t.run("CREATE TABLE IF NOT EXISTS watchlist (id TEXT NOT NULL, name TEXT, thumbnail TEXT, status TEXT, nativeName TEXT, englishName TEXT, type TEXT, PRIMARY KEY (id))"),t.run("CREATE TABLE IF NOT EXISTS watched_episodes (showId TEXT NOT NULL, episodeNumber TEXT NOT NULL, watchedAt DATETIME DEFAULT CURRENT_TIMESTAMP, currentTime REAL DEFAULT 0, duration REAL DEFAULT 0, PRIMARY KEY (showId, episodeNumber))"),t.run("CREATE TABLE IF NOT EXISTS queue (id INTEGER PRIMARY KEY, showId TEXT NOT NULL, episodeNumber TEXT NOT NULL, queue_order INTEGER NOT NULL)"),t.run("CREATE TABLE IF NOT EXISTS settings (key TEXT NOT NULL, value TEXT, PRIMARY KEY (key))"),t.run("CREATE TABLE IF NOT EXISTS shows_meta (id TEXT PRIMARY KEY, name TEXT, thumbnail TEXT, nativeName TEXT, englishName TEXT, episodeCount INTEGER, status TEXT, genres TEXT, popularityScore INTEGER, type TEXT)"),t.run("CREATE TABLE IF NOT EXISTS dismissed_notifications (showId TEXT NOT NULL, episodeNumber TEXT NOT NULL, dismissedAt DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (showId, episodeNumber))"),t.run("CREATE TABLE IF NOT EXISTS discovered_notifications (showId TEXT NOT NULL, episodeNumber TEXT NOT NULL, discoveredAt DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (showId, episodeNumber))"),t.run("CREATE TABLE IF NOT EXISTS sync_metadata (key TEXT PRIMARY KEY, value INTEGER)"),t.run("INSERT OR IGNORE INTO sync_metadata (key, value) VALUES ('db_version', 1)"),t.run("CREATE TABLE IF NOT EXISTS legacy_id_mapping (legacyId TEXT PRIMARY KEY, numericId TEXT)"),t.run("CREATE TABLE IF NOT EXISTS temp_show_ids (id TEXT PRIMARY KEY, provider TEXT NOT NULL, nativeId TEXT NOT NULL, title TEXT NOT NULL, thumbnail TEXT, createdAt INTEGER NOT NULL)"),t.run("CREATE UNIQUE INDEX IF NOT EXISTS idx_temp_show_ids_provider_native ON temp_show_ids(provider, nativeId)");try{let n=await Go.purge(t);n>0&&Bl.info({purged:n},"Purged stale temp show ids on boot")}catch(n){Bl.warn({err:n},"Temp show purge on boot failed")}try{let n=NM();n>0&&Bl.info({pruned:n},"Pruned expired mal cache rows on boot")}catch(n){Bl.warn({err:n},"Mal cache prune on boot failed")}t.run("CREATE INDEX IF NOT EXISTS idx_watched_episodes_showId ON watched_episodes(showId)"),t.run("CREATE INDEX IF NOT EXISTS idx_watched_episodes_showId_episodeNumber ON watched_episodes(showId, episodeNumber)"),t.run("CREATE INDEX IF NOT EXISTS idx_watched_episodes_watchedAt ON watched_episodes(watchedAt)"),t.run("CREATE INDEX IF NOT EXISTS idx_watchlist_status ON watchlist(status)"),t.run("CREATE UNIQUE INDEX IF NOT EXISTS idx_queue_show_episode ON queue(showId, episodeNumber)"),t.run("CREATE INDEX IF NOT EXISTS idx_queue_order ON queue(queue_order)"),t.run("DELETE FROM dismissed_notifications WHERE showId NOT IN (SELECT id FROM watchlist)"),t.run("DELETE FROM discovered_notifications WHERE showId NOT IN (SELECT id FROM watchlist)"),t.run("DELETE FROM legacy_id_mapping WHERE legacyId NOT IN (SELECT id FROM watchlist) AND numericId NOT IN (SELECT id FROM watchlist)"),t.run("DELETE FROM dismissed_notifications WHERE EXISTS (SELECT 1 FROM watched_episodes we WHERE we.showId = dismissed_notifications.showId AND we.episodeNumber = dismissed_notifications.episodeNumber)"),t.run("DELETE FROM discovered_notifications WHERE EXISTS (SELECT 1 FROM watched_episodes we WHERE we.showId = discovered_notifications.showId AND we.episodeNumber = discovered_notifications.episodeNumber)"),t.run("UPDATE discovered_notifications SET discoveredAt = datetime('now') WHERE discoveredAt IS NULL");let r=(n,i,s)=>{t.all(`PRAGMA table_info(${n})`).some(a=>a.name===i)||t.run(`ALTER TABLE ${n} ADD COLUMN ${i} ${s}`)};return r("watchlist","nativeName","TEXT"),r("watchlist","englishName","TEXT"),r("shows_meta","nativeName","TEXT"),r("shows_meta","englishName","TEXT"),r("shows_meta","episodeCount","INTEGER"),r("shows_meta","status","TEXT"),r("shows_meta","genres","TEXT"),r("shows_meta","popularityScore","INTEGER"),r("watchlist","type","TEXT"),r("shows_meta","type","TEXT"),r("shows_meta","anilistId","INTEGER"),r("shows_meta","isAdult","INTEGER"),r("shows_meta","episodeDuration","INTEGER"),t}catch(t){throw Bl.error({err:t},"Database opening error"),t}}async function TJ(e){try{let t=await mw(e);t.run("CREATE TABLE IF NOT EXISTS manga_library (id TEXT PRIMARY KEY, provider TEXT NOT NULL, mangaId TEXT NOT NULL, title TEXT, cover TEXT, status TEXT DEFAULT 'Reading', author TEXT, contentRating TEXT, lastChapterId TEXT, lastChapterNumber TEXT, lastPage INTEGER, updatedAt INTEGER, altTitle TEXT, anilistId INTEGER, anilistIdSource TEXT)"),t.run("CREATE TABLE IF NOT EXISTS manga_progress (mangaId TEXT NOT NULL, chapterId TEXT NOT NULL, chapterNumber TEXT, page INTEGER DEFAULT 0, pageCount INTEGER DEFAULT 0, updatedAt INTEGER, PRIMARY KEY (mangaId, chapterId))"),t.run("CREATE TABLE IF NOT EXISTS sync_metadata (key TEXT PRIMARY KEY, value INTEGER)"),t.run("INSERT OR IGNORE INTO sync_metadata (key, value) VALUES ('db_version', 1)"),t.run("CREATE UNIQUE INDEX IF NOT EXISTS idx_manga_library_provider_manga ON manga_library(provider, mangaId)"),t.run("CREATE INDEX IF NOT EXISTS idx_manga_library_status ON manga_library(status)"),t.run("CREATE INDEX IF NOT EXISTS idx_manga_progress_manga ON manga_progress(mangaId, updatedAt)");let r=t.all("PRAGMA table_info(manga_library)");r.some(i=>i.name==="altTitle")||t.run("ALTER TABLE manga_library ADD COLUMN altTitle TEXT"),r.some(i=>i.name==="anilistId")||t.run("ALTER TABLE manga_library ADD COLUMN anilistId INTEGER"),r.some(i=>i.name==="anilistIdSource")||t.run("ALTER TABLE manga_library ADD COLUMN anilistIdSource TEXT"),t.run("CREATE INDEX IF NOT EXISTS idx_manga_library_anilist ON manga_library(anilistId)");let n=t.all("PRAGMA table_info(manga_progress)");return n.some(i=>i.name==="title")||t.run("ALTER TABLE manga_progress ADD COLUMN title TEXT"),n.some(i=>i.name==="cover")||t.run("ALTER TABLE manga_progress ADD COLUMN cover TEXT"),n.some(i=>i.name==="provider")||t.run("ALTER TABLE manga_progress ADD COLUMN provider TEXT"),n.some(i=>i.name==="altTitle")||t.run("ALTER TABLE manga_progress ADD COLUMN altTitle TEXT"),n.some(i=>i.name==="contentRating")||t.run("ALTER TABLE manga_progress ADD COLUMN contentRating TEXT"),t}catch(t){throw Bl.error({err:t},"Manga database opening error"),t}}async function DJ(e){try{let t=await mw(e);t.run("CREATE TABLE IF NOT EXISTS tv_library (id TEXT PRIMARY KEY, tmdbId INTEGER NOT NULL, mediaType TEXT NOT NULL, title TEXT, poster TEXT, backdrop TEXT, year TEXT, overview TEXT, status TEXT DEFAULT 'Watching', adult INTEGER DEFAULT 0, lastSeason INTEGER, lastEpisode INTEGER, updatedAt INTEGER)"),t.run("CREATE TABLE IF NOT EXISTS tv_progress (mediaId TEXT NOT NULL, season INTEGER NOT NULL, episode INTEGER NOT NULL, currentTime REAL DEFAULT 0, duration REAL DEFAULT 0, completed INTEGER NOT NULL DEFAULT 0, updatedAt INTEGER, PRIMARY KEY (mediaId, season, episode))"),t.run("CREATE TABLE IF NOT EXISTS sync_metadata (key TEXT PRIMARY KEY, value INTEGER)"),t.run("INSERT OR IGNORE INTO sync_metadata (key, value) VALUES ('db_version', 1)"),t.run("CREATE INDEX IF NOT EXISTS idx_tv_library_status ON tv_library(status)"),t.run("CREATE INDEX IF NOT EXISTS idx_tv_library_tmdb ON tv_library(tmdbId, mediaType)"),t.run("CREATE INDEX IF NOT EXISTS idx_tv_progress_media ON tv_progress(mediaId, updatedAt)");let r=t.all("PRAGMA table_info(tv_progress)");return r.some(n=>n.name==="title")||t.run("ALTER TABLE tv_progress ADD COLUMN title TEXT"),r.some(n=>n.name==="poster")||t.run("ALTER TABLE tv_progress ADD COLUMN poster TEXT"),r.some(n=>n.name==="backdrop")||t.run("ALTER TABLE tv_progress ADD COLUMN backdrop TEXT"),r.some(n=>n.name==="year")||t.run("ALTER TABLE tv_progress ADD COLUMN year TEXT"),r.some(n=>n.name==="overview")||t.run("ALTER TABLE tv_progress ADD COLUMN overview TEXT"),r.some(n=>n.name==="tmdbId")||t.run("ALTER TABLE tv_progress ADD COLUMN tmdbId INTEGER"),r.some(n=>n.name==="mediaType")||t.run("ALTER TABLE tv_progress ADD COLUMN mediaType TEXT"),r.some(n=>n.name==="adult")||t.run("ALTER TABLE tv_progress ADD COLUMN adult INTEGER"),r.some(n=>n.name==="completed")||t.run("ALTER TABLE tv_progress ADD COLUMN completed INTEGER NOT NULL DEFAULT 0"),t.run("UPDATE tv_progress SET completed = 1 WHERE completed = 0 AND duration > 0 AND currentTime >= duration * 0.8"),t.run(`CREATE TRIGGER IF NOT EXISTS trg_tv_progress_completed_insert
302
302
  AFTER INSERT ON tv_progress
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dango-server",
3
3
  "private": true,
4
- "version": "3.7.5",
4
+ "version": "3.7.6",
5
5
  "type": "module",
6
6
  "engines": {
7
7
  "node": ">=22.12.0"
@@ -1,2 +0,0 @@
1
- import{T as We,u as e,A as E,d as y,h as w,a as Ye,g as xe,q as Q,S as O,$ as qe,o as gt,p as ft}from"./vendor-core-DfaOB3Rn.js";import{I as _}from"./vendor-icons-DrybRNxP.js";import{u as yt}from"./vendor-query-BBT5_sHx.js";import{T as Ue}from"./ToggleSwitch-CN_ppEc9.js";import{M as _t}from"./MatureConsentModal-Beq4JL0b.js";import{M as bt,P as kt}from"./MediaCard-lz7FdOe_.js";import{c as Ke,a as Qe,d as vt,e as Xe,f as Ze,g as wt,h as Ct,i as Nt,j as Tt,k as Ve,l as Pe}from"./useAsmr-B-FYJW2L.js";import{g as ve,t as $e,W as St,B as Je,M as et,P as I,A as te,e as At,X as Bt,q as ze}from"./index-DlcgJVM6.js";import{u as Lt,A as Rt}from"./useAsmrPopup-Ct9jC6X6.js";import{l as Mt}from"./hls-qvAoYTJt.js";import{p as ae}from"./page.module-C1MlZzf3.js";import"./vendor-ui-3qrARCPr.js";import"./useIsMobile-Dvx1uJ82.js";import"./libraryInvalidation-DdnIPcOQ.js";import"./usePopup-DS9jMzp6.js";const It="_sortSelect_1f2gy_1",Pt="_grid_1f2gy_11",xt="_fetching_1f2gy_25",$t="_thumbPlaceholder_1f2gy_64",Et="_asmrCardWrap_1f2gy_100",jt="_bookmarkBtn_1f2gy_105",Ht="_bookmarked_1f2gy_129",Ft="_statusMsg_1f2gy_152",Ot="_skeletonCard_1f2gy_160",Dt="_skeletonThumb_1f2gy_165",Wt="_skeletonLine_1f2gy_171",qt="_shimmer_1f2gy_178",Ut="_matureToggleWrap_1f2gy_219",Vt="_matureLabel_1f2gy_226",Jt="_translateToggleWrap_1f2gy_232",zt="_filterTogglesGroup_1f2gy_239",Gt="_filterBar_1f2gy_251",Yt="_filterLabel_1f2gy_258",Kt="_detailOverlay_1f2gy_263",Qt="_detailModal_1f2gy_275",Xt="_detailClose_1f2gy_287",Zt="_detailHeader_1f2gy_303",ea="_detailCover_1f2gy_309",ta="_detailInfo_1f2gy_318",aa="_detailTitle_1f2gy_322",na="_detailRj_1f2gy_329",ra="_metaRow_1f2gy_335",sa="_metaLabel_1f2gy_341",la="_tagChips_1f2gy_347",oa="_tagChip_1f2gy_347",ca="_npOverlay_1f2gy_363",ia="_playerBarDocked_1f2gy_378",da="_playerBarDockedHidden_1f2gy_392",ua="_npOverlayControlsHidden_1f2gy_403",ma="_npArrow_1f2gy_403",ha="_npImageCount_1f2gy_404",pa="_npStage_1f2gy_413",ga="_sliderViewport_1f2gy_429",fa="_slide_1f2gy_429",ya="_slideImg_1f2gy_431",_a="_npStageBlank_1f2gy_450",ba="_sliderTrack_1f2gy_469",ka="_slideImgLoaded_1f2gy_502",va="_slideSpinner_1f2gy_507",wa="_npArrowLeft_1f2gy_557",Ca="_npArrowRight_1f2gy_561",Na="_chapterPanel_1f2gy_578",Ta="_chapterRow_1f2gy_593",Sa="_chapterRowActive_1f2gy_612",Aa="_chapterRowTime_1f2gy_616",Ba="_chapterRowLabel_1f2gy_627",La="_npBackdrop_1f2gy_633",Ra="_playerBtn_1f2gy_639",Ma="_playerBtnActive_1f2gy_639",Ia="_tracksSection_1f2gy_645",Pa="_tracksHeading_1f2gy_649",xa="_trackList_1f2gy_655",$a="_trackRow_1f2gy_664",Ea="_trackIcon_1f2gy_682",ja="_trackLabel_1f2gy_687",Ha="_trackType_1f2gy_692",Fa="_noTracks_1f2gy_697",Oa="_playAllBtn_1f2gy_702",Da="_detailActions_1f2gy_715",Wa="_playerBar_1f2gy_378",qa="_playerActions_1f2gy_738",Ua="_playerInfo_1f2gy_744",Va="_playerTitle_1f2gy_749",Ja="_playerTrack_1f2gy_758",za="_playerControls_1f2gy_764",Ga="_seekRow_1f2gy_771",Ya="_playerButtons_1f2gy_779",Ka="_seekBtn_1f2gy_814",Qa="_seekBtnLabel_1f2gy_819",Xa="_playBtn_1f2gy_824",Za="_seekBar_1f2gy_871",en="_volumeBar_1f2gy_872",tn="_timeLabel_1f2gy_964",an="_playerRight_1f2gy_970",nn="_volumeIcon_1f2gy_976",rn="_playerToggle_1f2gy_1020",t={sortSelect:It,grid:Pt,fetching:xt,thumbPlaceholder:$t,asmrCardWrap:Et,bookmarkBtn:jt,bookmarked:Ht,statusMsg:Ft,skeletonCard:Ot,skeletonThumb:Dt,skeletonLine:Wt,shimmer:qt,matureToggleWrap:Ut,matureLabel:Vt,translateToggleWrap:Jt,filterTogglesGroup:zt,filterBar:Gt,filterLabel:Yt,detailOverlay:Kt,detailModal:Qt,detailClose:Xt,detailHeader:Zt,detailCover:ea,detailInfo:ta,detailTitle:aa,detailRj:na,metaRow:ra,metaLabel:sa,tagChips:la,tagChip:oa,npOverlay:ca,playerBarDocked:ia,playerBarDockedHidden:da,npOverlayControlsHidden:ua,npArrow:ma,npImageCount:ha,npStage:pa,sliderViewport:ga,slide:fa,slideImg:ya,npStageBlank:_a,sliderTrack:ba,slideImgLoaded:ka,slideSpinner:va,npArrowLeft:wa,npArrowRight:Ca,chapterPanel:Na,chapterRow:Ta,chapterRowActive:Sa,chapterRowTime:Aa,chapterRowLabel:Ba,npBackdrop:La,playerBtn:Ra,playerBtnActive:Ma,tracksSection:Ia,tracksHeading:Pa,trackList:xa,trackRow:$a,trackIcon:Ea,trackLabel:ja,trackType:Ha,noTracks:Fa,playAllBtn:Oa,detailActions:Da,playerBar:Wa,playerActions:qa,playerInfo:Ua,playerTitle:Va,playerTrack:Ja,playerControls:za,seekRow:Ga,playerButtons:Ya,seekBtn:Ka,seekBtnLabel:Qa,playBtn:Xa,seekBar:Za,volumeBar:en,timeLabel:tn,playerRight:an,volumeIcon:nn,playerToggle:rn},sn=({work:s,onClose:o,onPlay:C,t:g})=>{const{data:i,isLoading:h}=Ke(s.id||null),b=Qe(s),{data:S}=vt(b||void 0),{toggle:k,bookmarkedIds:T}=Xe(),{data:P}=Ze(b||void 0),M=b?T.has(b):!!S?.inLibrary,v=We(()=>(i?.description||s.description||"").split(`
2
- `).map(c=>{const l=c.indexOf(":");return l===-1?null:{label:c.slice(0,l),value:c.slice(l+1).trim()}}).filter(c=>!!c&&!!c.value),[i?.description,s.description]),f=i?.tracks||[],A=s.thumbnail||i?.images?.[0],N=We(()=>{const c=P?.progress??[];return c.length>0?c.reduce((l,B)=>l.updatedAt>=B.updatedAt?l:B):null},[P]),u=N&&N.trackIndex<f.length?N.trackIndex:null;return e("div",{className:t.detailOverlay,onClick:o,children:e("div",{className:t.detailModal,onClick:c=>c.stopPropagation(),children:[e("button",{className:t.detailClose,onClick:o,"aria-label":"Close",children:e(_,{name:"times"})}),e("div",{className:t.detailHeader,children:[A?e("img",{className:t.detailCover,src:A,alt:s.name,decoding:"async"}):e("div",{className:`${t.detailCover} ${t.thumbPlaceholder}`}),e("div",{className:t.detailInfo,children:[e("h2",{className:t.detailTitle,children:g?g(s.name):s.name}),e("p",{className:t.detailRj,children:s.id}),v.map(c=>c.label==="Tags"?e("p",{className:t.metaRow,children:[e("span",{className:t.metaLabel,children:"Tags"}),e("span",{className:t.tagChips,children:c.value.split(", ").map(l=>e("span",{className:t.tagChip,children:l},l))})]},c.label):e("p",{className:t.metaRow,children:[e("span",{className:t.metaLabel,children:c.label}),c.value]},c.label))]})]}),e("div",{className:t.tracksSection,children:[e("h3",{className:t.tracksHeading,children:h?"Loading tracks…":`Tracks (${f.length})`}),!h&&(f.length>0?e("ul",{className:t.trackList,children:f.map((c,l)=>e("li",{children:e("button",{className:t.trackRow,onClick:()=>C(s,f,l),children:[e(_,{name:"play",className:t.trackIcon}),e("span",{className:t.trackLabel,children:c.resolutionStr}),e("span",{className:t.trackType,children:c.hls?"HLS":"MP3"})]})},c.link))}):e("p",{className:t.noTracks,children:"No audio streams available for this work."}))]}),e("div",{className:t.detailActions,children:[!h&&f.length>0&&e("button",{className:t.playAllBtn,onClick:()=>C(s,f,0),children:[e(_,{name:"play"})," Play from start"]}),!h&&u!==null&&N&&e("button",{className:t.playAllBtn,onClick:()=>C(s,f,u),children:[e(_,{name:"history"})," Resume track ",u+1," ·"," ",ve(N.currentTime),N.duration>0?` / ${ve(N.duration)}`:""]}),b&&e("button",{className:t.playAllBtn,onClick:()=>k({rjCode:b,title:s.name,thumbnail:s.thumbnail||"",isAdult:!!s.isAdult}),"aria-pressed":M,children:[e(_,{name:M?"check":"plus"})," ",M?"In listening list":"Add to listening list"]})]})]})})},ln=({title:s,images:o,chapters:C,tracks:g,trackIndex:i,expanded:h,isAdult:b,rjCode:S,t:k,onTrackChange:T,onExpandedChange:P,onClose:M})=>{const v=E(null),f=E(null),[A,N]=y(!1),[u,c]=y(0),[l,B]=y(0),[p,q]=y(0),[L,X]=y(!0),[H,Y]=y(0),[j,ne]=y(new Set),[D,Z]=y(!1),[me,x]=y(!0),ee=E("");ee.current||(ee.current=typeof crypto<"u"&&"randomUUID"in crypto?crypto.randomUUID():`asmr-${Date.now()}-${Math.random().toString(36).slice(2)}`);const[W,we]=y(()=>{const a=parseFloat(localStorage.getItem("asmrVolume")||"");return Number.isFinite(a)?a:1}),he=E(W);w(()=>{he.current=W},[W]);const pe=Ye(),z=xe.useMemo(()=>S?wt(S):"",[S]),Ce=Ct(),re=Nt(),{data:se}=Ze(z||void 0),[Le,le]=y(!1),K=E(""),U=E(null),ge=E(0),G=E(0),oe=E(0),ce=g[i],V=ce?.link,Ne=ce?.hls,fe=ce?.resolutionStr||"",ie=o.length>0,ye=`${z}:${i}`,de=xe.useMemo(()=>(se?.progress??[]).find(r=>r.trackIndex===i)??null,[se,i]),n=E({workId:"",trackIndex:0,trackLabel:""}),d=E(se);d.current=se,n.current={workId:z,trackIndex:i,trackLabel:fe};const R=Q((a,r,m,$=!1)=>{!a.workId||!m||m<10||!$&&Math.abs(r-ge.current)<5||(ge.current=r,Ce.mutate({workId:a.workId,trackIndex:a.trackIndex,trackLabel:a.trackLabel,currentTime:Math.floor(r),duration:Math.floor(m),title:s,thumbnail:o[0]||"",rjCode:a.workId,isAdult:b?1:0}))},[Ce,s,o,b]),ue=Q((a=!1)=>{U.current&&(clearTimeout(U.current),U.current=null),R(n.current,G.current,oe.current,a)},[R]),J=E(ue);J.current=ue;const _e=E(R);_e.current=R;const F=Q(()=>{f.current&&(f.current.destroy(),f.current=null)},[]);w(()=>{const a=v.current;if(!a||!V)return;const r={workId:z,trackIndex:i,trackLabel:fe},m=()=>{U.current&&(clearTimeout(U.current),U.current=null),_e.current(r,G.current,oe.current,!0)};c(0),B(0),q(0),N(!1),G.current=0,oe.current=0,ge.current=0,F();const $=d.current?.progress?.find(Be=>Be.trackIndex===i),Ae=$?.currentTime||0,Re=$?.duration||0,ke=Ae>=10&&Re-Ae>=15;if(Ne){let Be=!1;return(async()=>{const Me=await Mt();if(!Be)if(Me&&Me.isSupported()){const Ie=new Me({enableWorker:!0});f.current=Ie,Ie.loadSource(V),Ie.attachMedia(a),ke||a.play().catch(()=>N(!1))}else a.src=V,a.load(),a.volume=he.current,ke||a.play().catch(()=>N(!1))})(),()=>{Be=!0,F(),a.removeAttribute("src"),m()}}else a.src=V;return a.load(),a.volume=he.current,ke||a.play().catch(()=>N(!1)),()=>{F(),a.removeAttribute("src"),m()}},[V,Ne,F,z,i,fe]),w(()=>()=>F(),[F]),w(()=>{const a=()=>{document.visibilityState==="hidden"&&J.current()},r=()=>J.current();return document.addEventListener("visibilitychange",a),window.addEventListener("pagehide",r),()=>{document.removeEventListener("visibilitychange",a),window.removeEventListener("pagehide",r)}},[]),w(()=>{if(!de||K.current===ye||!(l>0))return;const a=de.currentTime||0,r=de.duration||l;if(K.current=ye,!(a>=10&&r-a>=15&&G.current<a))return;const m=v.current;m&&(m.currentTime=a,G.current=a,c(a),m.play().catch(()=>{}))},[de,l,ye]),w(()=>{const a=v.current;a&&(a.volume=W)},[W]),w(()=>{if(h)return document.body.classList.add("asmr-player-open"),()=>document.body.classList.remove("asmr-player-open")},[h]),w(()=>{Y(0)},[o]),w(()=>{h&&x(!0)},[h]),w(()=>{D&&x(!0)},[D]);const Te=Q(a=>{if(!s||g.length===0)return;const r=g[i],m=r?`${r.resolutionStr} (${i+1}/${g.length})`:"",$=v.current,Ae=$?$.currentTime:0,Re=$&&$.duration||0,ke=o[0]||"";$e.discord.asmrPresence.mutate({title:s,trackLabel:m,isPlaying:a,thumbnail:ke,thumbnails:o,currentTime:Ae,duration:Re,isAdult:!!b,rjCode:S||"",sessionId:ee.current}).catch(()=>{}),$e.discord.heartbeat.mutate({sessionId:ee.current}).catch(()=>{})},[s,g,i,o,b,S]);w(()=>{Te(A)},[Te,A,i,s,h]),w(()=>{if(!A)return;const a=window.setInterval(()=>Te(!0),15e3);return()=>window.clearInterval(a)},[A,Te]),w(()=>{const a=ee.current,r=()=>St(a),m=()=>r(),$=()=>{document.visibilityState==="hidden"&&r()};return window.addEventListener("pagehide",m),window.addEventListener("beforeunload",m),document.addEventListener("visibilitychange",$),()=>{window.removeEventListener("pagehide",m),window.removeEventListener("beforeunload",m),document.removeEventListener("visibilitychange",$),r()}},[]);const Se=Q(a=>{ne(r=>{if(r.has(a))return r;const m=new Set(r);return m.add(a),m})},[]),at=Q((a,r)=>{a&&a.complete&&a.naturalWidth>0&&Se(r)},[Se]);w(()=>{if(!h)return;const a=r=>{if(r.key==="Escape"){D?Z(!1):P(!1);return}!L||o.length<2||(r.key==="ArrowLeft"&&Y(m=>Math.max(0,m-1)),r.key==="ArrowRight"&&Y(m=>Math.min(o.length-1,m+1)))};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[h,L,o.length,D,P]);const nt=()=>{const a=v.current;a&&(a.paused?a.play().catch(()=>{}):a.pause())},rt=a=>{const r=v.current;if(!r||!l)return;const m=parseFloat(a.currentTarget.value);r.currentTime=m,c(m)},st=()=>{ue(!0),i<g.length-1?T(i+1):le(!0)},lt=a=>{const r=a.currentTarget.currentTime;G.current=r,c(r),U.current&&clearTimeout(U.current),U.current=setTimeout(()=>J.current(),5e3)},ot=()=>{N(!1),J.current()},ct=a=>{const r=a.currentTarget.duration;oe.current=Number.isFinite(r)?r:0,B(a.currentTarget.duration)},it=Q(()=>{z&&re.mutate({rjCode:z,title:s,thumbnail:o[0]||"",status:"Completed",isAdult:!!b,silent:!0}),le(!1),M(),pe("/")},[z,re,s,o,b,M,pe]),dt=C.reduce((a,r,m)=>u>=r.time?m:a,-1),ut=a=>{const r=v.current;r&&(r.currentTime=a,c(a))},Ee=a=>{const r=v.current;if(!r)return;const m=Number.isFinite(r.currentTime)?r.currentTime:u,$=Math.max(0,Math.min(l||1/0,m+a));r.currentTime=$,c($),x(!0)},je=l?Math.min(100,u/l*100):0,mt=l?Math.min(100,Math.max(je,p/l*100)):0,ht=e(O,{children:[e("div",{className:t.playerButtons,children:[e("button",{className:t.playerBtn,onClick:()=>T(Math.max(0,i-1)),disabled:i===0,"aria-label":"Previous track",children:e(_,{name:"step-backward"})}),e("button",{className:`${t.playerBtn} ${t.seekBtn}`,onClick:()=>Ee(-10),"aria-label":"Seek back 10 seconds",title:"Back 10s",children:[e(_,{name:"undo"}),e("span",{className:t.seekBtnLabel,children:"10"})]}),e("button",{className:`${t.playerBtn} ${t.playBtn}`,onClick:nt,"aria-label":A?"Pause":"Play",children:A?e(_,{name:"pause"}):e(_,{name:"play"})}),e("button",{className:`${t.playerBtn} ${t.seekBtn}`,onClick:()=>Ee(10),"aria-label":"Seek forward 10 seconds",title:"Forward 10s",children:[e(_,{name:"redo"}),e("span",{className:t.seekBtnLabel,children:"10"})]}),e("button",{className:t.playerBtn,onClick:()=>T(Math.min(g.length-1,i+1)),disabled:i>=g.length-1,"aria-label":"Next track",children:e(_,{name:"step-forward"})})]}),e("div",{className:t.seekRow,children:[e("span",{className:t.timeLabel,children:ve(u)}),e("input",{className:t.seekBar,type:"range",min:0,max:l||0,step:.1,value:Math.min(u,l||0),onChange:rt,style:{"--played-percent":`${je}%`,"--buffered-percent":`${mt}%`},"aria-label":"Seek"}),e("span",{className:t.timeLabel,children:ve(l)})]})]}),He=e(O,{children:[e("button",{className:`${t.playerBtn} ${t.playerToggle}`,onClick:()=>P(!h),"aria-label":h?"Minimize player":"Expand player",title:h?"Minimize to browse":"Expand",children:h?e(_,{name:"chevron-down"}):e(_,{name:"chevron-up"})}),e("div",{className:t.playerInfo,children:[e("p",{className:t.playerTitle,title:s,children:k?k(s):s}),e("p",{className:t.playerTrack,children:[ce?.resolutionStr||"",g.length>1?` (${i+1}/${g.length})`:""]})]}),e("div",{className:t.playerControls,children:ht}),e("div",{className:t.playerRight,children:[W===0?e(_,{name:"volume-mute",className:t.volumeIcon}):W<.5?e(_,{name:"volume-down",className:t.volumeIcon}):e(_,{name:"volume-up",className:t.volumeIcon}),e("input",{className:t.volumeBar,type:"range",min:0,max:1,step:.01,value:W,onChange:a=>{const r=parseFloat(a.currentTarget.value);we(r),localStorage.setItem("asmrVolume",String(r))},style:{"--volume-percent":`${W*100}%`},"aria-label":"Volume"})]}),e("div",{className:t.playerActions,children:[h&&ie&&e("button",{className:t.playerBtn,onClick:()=>X(a=>!a),"aria-label":L?"Hide images":"Show images",title:L?"Hide images":"Show images",children:L?e(_,{name:"eye-slash"}):e(_,{name:"image"})}),h&&C.length>0&&e("button",{className:`${t.playerBtn} ${D?t.playerBtnActive:""}`,onClick:()=>Z(a=>!a),"aria-label":D?"Hide bookmarks":"Show bookmarks",title:"Timestamps",children:e(_,{name:"list-ol"})}),e("button",{className:t.playerBtn,onClick:M,"aria-label":"Close player",children:e(_,{name:"times"})})]})]}),Fe=e("audio",{ref:v,preload:"metadata",onPlay:()=>N(!0),onPause:ot,onTimeUpdate:lt,onLoadedMetadata:ct,onProgress:a=>{const r=a.currentTarget;r.buffered.length>0&&q(r.buffered.end(r.buffered.length-1))},onEnded:st}),Oe=e(et,{isOpen:Le,onClose:()=>le(!1),title:"Finished!",children:e("div",{style:{padding:"1rem",textAlign:"center"},children:[e(_,{name:"check-circle",size:48,style:{color:"var(--accent-lighter)",marginBottom:"0.5rem"}}),e("p",{style:{fontSize:"1.1rem",fontWeight:600},children:k?k(s):s}),e("p",{style:{color:"var(--text-secondary)"},children:"You finished this work!"}),e("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center"},children:[e(Je,{variant:"secondary",onClick:()=>le(!1),children:"Close"}),e(Je,{onClick:it,children:"Mark Completed & Back to Home"})]})]})});if(!h)return qe(e(O,{children:[Fe,e("div",{className:t.playerBar,children:He}),Oe]}),document.body);const be=Math.min(H,Math.max(0,o.length-1)),De=o[be],pt=L&&ie&&!!De&&!j.has(De);return qe(e(O,{children:[Fe,Oe,e("div",{className:`${t.npOverlay} ${me?"":t.npOverlayControlsHidden}`,children:[e("div",{className:`${t.npStage} ${!L||!ie?t.npStageBlank:""}`,onClick:()=>x(a=>!a),children:L&&ie&&e(O,{children:[e("div",{className:t.sliderViewport,children:[e("div",{className:t.sliderTrack,style:{transform:`translateX(-${be*100}%)`},children:o.map(a=>e("div",{className:t.slide,children:e("img",{ref:r=>at(r,a),src:a,alt:`${k?k(s):s} - work image`,loading:"lazy",decoding:"async",draggable:!1,onLoad:()=>Se(a),onError:()=>Se(a),className:`${t.slideImg} ${j.has(a)?t.slideImgLoaded:""}`})},a))}),pt&&e("span",{className:t.slideSpinner,"aria-label":"Loading image"})]}),o.length>1&&e(O,{children:[e("button",{className:`${t.npArrow} ${t.npArrowLeft}`,onClick:a=>{a.stopPropagation(),Y(r=>Math.max(0,r-1)),x(!0)},disabled:be===0,"aria-label":"Previous image",children:e(_,{name:"chevron-left"})}),e("button",{className:`${t.npArrow} ${t.npArrowRight}`,onClick:a=>{a.stopPropagation(),Y(r=>Math.min(o.length-1,r+1)),x(!0)},disabled:be===o.length-1,"aria-label":"Next image",children:e(_,{name:"chevron-right"})}),e("span",{className:t.npImageCount,onClick:a=>a.stopPropagation(),children:[be+1," / ",o.length]})]})]})}),e("div",{className:`${t.playerBar} ${t.playerBarDocked} ${me?"":t.playerBarDockedHidden}`,onClick:a=>a.stopPropagation(),children:[He,D&&e(O,{children:[e("div",{className:t.npBackdrop,onClick:()=>Z(!1)}),e("div",{className:t.chapterPanel,children:C.map((a,r)=>e("button",{className:`${t.chapterRow} ${r===dt?t.chapterRowActive:""}`,title:k?k(a.label):a.label,onClick:()=>{ut(a.time),Z(!1)},children:[e("span",{className:t.chapterRowTime,children:ve(a.time)}),e("span",{className:t.chapterRowLabel,title:k?k(a.label):a.label,children:k?k(a.label):a.label})]},`${a.time}-${r}`))})]})]})]})]}),document.body)},on="https://github.com/serifpersia/dango/releases/latest/download/dango-extension.zip",cn=s=>{try{return JSON.parse(s.detail)}catch{return null}},dn=({isOpen:s,onClose:o,onSuccess:C})=>{const[g,i]=y(1),[h,b]=y(typeof navigator<"u"?navigator.userAgent:""),[S,k]=y(""),[T,P]=y(!1),[M,v]=y(!1),f=E(null),A=typeof navigator<"u"?navigator.userAgent:"",N=/android/i.test(A),u=/firefox|fxios/i.test(A)&&!N,c=!u&&!N&&/chrome|chromium|edg|brave/i.test(A),l=u||c;w(()=>{s&&(i(1),b(typeof navigator<"u"?navigator.userAgent:""),k(""),P(!1),v(!1))},[s]),w(()=>()=>{f.current&&(window.removeEventListener("dango:jasmr-cookie",f.current),f.current=null)},[]);const B=async()=>{localStorage.setItem("jasmr_ua",h),window.open("https://japaneseasmr.com","_blank","noopener,noreferrer"),i(2)},p=()=>{if(M)return;v(!0);const L=`${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`,X=window.setTimeout(()=>{v(!1),f.current&&(window.removeEventListener("dango:jasmr-cookie",f.current),f.current=null),te.error("Helper not detected - install it via about:debugging first.")},3e3),H=Y=>{const j=cn(Y);if(!(!j||j.requestId!==L))if(window.clearTimeout(X),window.removeEventListener("dango:jasmr-cookie",H),f.current=null,v(!1),j?.ok&&j.cookie)k(j.cookie),te.success("Cookie extracted from helper!");else if(j?.error==="NO_COOKIE"){const ne=j.debug?.stores?.length??0,D=j.debug?.names??[];te.error(`Helper found no cf_clearance (checked ${ne} stores, saw: ${D.join(", ")||"none"}) - solve the challenge on the JapaneseASMR tab first.`)}else te.error("Helper request failed - try again.")};f.current=H,window.addEventListener("dango:jasmr-cookie",H),window.dispatchEvent(new CustomEvent("dango:get-jasmr-cookie",{detail:{requestId:L}}))},q=async()=>{if(!S.trim()){te.error("Please enter the cf_clearance cookie");return}P(!0);try{localStorage.setItem("jasmr_cookie",S.trim()),te.success("Cookie updated successfully!"),C?.(),o()}catch{te.error("Failed to save cookie")}finally{P(!1)}};return e(et,{isOpen:s,onClose:o,title:"JapaneseASMR Verification Required",children:e("div",{className:I.container,children:g===1?e(O,{children:[e("p",{children:["JapaneseASMR is protected by a Cloudflare challenge. Solve it once in your browser and paste the ",e("strong",{children:"cf_clearance"})," cookie so the app can load the site for you."]}),e("div",{className:I.field,children:[e("label",{children:"Your User-Agent (must match the browser you solve the challenge with):"}),e("textarea",{value:h,onChange:L=>b(L.currentTarget.value),rows:3,className:I.textarea})]}),e("div",{className:I.actions,children:[e("button",{className:I.secondaryButton,onClick:o,children:"Cancel"}),e("button",{className:I.button,onClick:B,children:"Start Verification (Opens JapaneseASMR)"})]})]}):e(O,{children:[e("p",{children:["1. Solve the challenge on the ",e("strong",{children:"JapaneseASMR tab"})," (keep that tab open).",e("br",{}),"2. Copy the ",e("strong",{children:"cf_clearance"})," cookie value using one of these:",e("br",{}),e("br",{}),e("strong",{children:"Chrome / Edge — DevTools:"})," press ",e("code",{children:"F12"})," →"," ",e("strong",{children:"Application"})," → ",e("strong",{children:"Cookies"})," →"," ",e("code",{children:"https://japaneseasmr.com"}),". Find ",e("strong",{children:"cf_clearance"}),", double-click its ",e("strong",{children:"Value"})," to select it, then copy.",e("br",{}),e("br",{}),e("strong",{children:"Firefox — Storage Inspector:"})," press ",e("code",{children:"F12"})," →"," ",e("strong",{children:"Storage"})," → ",e("strong",{children:"Cookies"})," →"," ",e("code",{children:"https://japaneseasmr.com"}),". Find ",e("strong",{children:"cf_clearance"}),", right-click the value → ",e("strong",{children:"Copy Value"}),".",e("br",{}),e("br",{}),e("strong",{children:"Either browser — extension:"})," open"," ",e("strong",{children:"Cookie Manager"})," while on the JapaneseASMR tab, find"," ",e("strong",{children:"cf_clearance"}),", and copy its value (or use the extension's export).",e("br",{}),e("br",{}),"3. Paste it below. Copy ",e("strong",{children:"only the value"})," — remove any"," ",e("code",{children:"cf_clearance="})," prefix or quotes if they were included."]}),l&&e("div",{className:I.hint,children:[e("strong",{children:"Dango helper (one-time setup):"})," ",u?e(O,{children:["type ",e("code",{children:"about:debugging"})," in the address bar →"," ",e("strong",{children:"This Firefox"})," → ",e("strong",{children:"Load Temporary Add-on"})," ","→ open the ",e("code",{children:"dango-extension/firefox"})," folder and pick"," ",e("code",{children:"manifest.json"}),". (Temporary helpers unload when Firefox closes - repeat after a restart.)"]}):e(O,{children:["type ",e("code",{children:"chrome://extensions"})," in the address bar → enable"," ",e("strong",{children:"Developer mode"})," → ",e("strong",{children:"Load unpacked"})," → open the ",e("code",{children:"dango-extension/chrome"})," folder. (Unpacked helpers show a developer-mode notice - expected.)"]})," ","Use this link to download the extension and extract it:"," ",e("a",{href:on,target:"_blank",rel:"noreferrer",className:I.link,children:"dango-extension.zip"}),". Then click Extract below and the field fills itself.",e("div",{className:I.actions,children:e("button",{className:I.button,onClick:p,disabled:M,type:"button",children:M?"Extracting…":"Extract cookie from helper"})})]}),e("div",{className:I.field,children:[e("label",{children:"cf_clearance cookie value:"}),e("input",{type:"text",value:S,onChange:L=>k(L.currentTarget.value),placeholder:"e.g. xxxxxxxx.xxxxxxxx.xxxxxxx-xxxxxxx",className:I.input})]}),e("div",{className:I.actions,children:[e("button",{className:I.secondaryButton,onClick:o,children:"Cancel"}),e("button",{className:I.secondaryButton,onClick:()=>i(1),children:"Back"}),e("button",{className:I.button,onClick:q,disabled:T,children:T?"Saving...":"Submit"})]})]})})})},tt="asmrTranslateCache",un=10080*60*1e3;function mn(){try{const s=localStorage.getItem(tt);if(!s)return new Map;const o=JSON.parse(s);return new Map(Object.entries(o))}catch{return new Map}}function hn(s){try{const o={};for(const[C,g]of s)o[C]=g;localStorage.setItem(tt,JSON.stringify(o))}catch{}}function Ge(s){return/[\u3040-\u309F\u30A0-\u30FF\u4E00-\u9FAF]/.test(s)}async function pn(s){const o=s.map(i=>i.trim()).filter(Boolean);if(o.length===0)return new Map;const C=await $e.settings.translate.mutate({texts:o,source:"ja",target:"en"}),g=new Map;for(const[i,h]of Object.entries(C.translations||{}))g.set(i,h);for(const i of o)g.has(i)||g.set(i,i);return g}function gn(s,o){const[C,g]=y(new Map),[i,h]=y(!1),b=E(null),S=s.join("");return w(()=>{const T=S?S.split(""):[];if(!o||T.length===0){g(new Map),h(!1);return}const P=Array.from(new Set(T.map(u=>u.trim()).filter(Boolean).filter(Ge)));if(P.length===0){g(new Map);return}b.current||(b.current=mn());const M=Date.now(),v=new Map,f=[];for(const u of P){const c=b.current.get(u);c&&M-c.ts<un?v.set(u,c.t):f.push(u)}if(f.length===0){g(v);return}let A=!1;h(!0);const N=[];for(let u=0;u<f.length;u+=15)N.push(f.slice(u,u+15));return(async()=>{const u=new Map;for(const l of N){try{const B=await pn(l);for(const[p,q]of B)u.set(p,q)}catch{}await new Promise(B=>setTimeout(B,120))}if(A)return;if(b.current){for(const[l,B]of u)b.current.set(l,{t:B,ts:Date.now()});hn(b.current)}const c=new Map([...v,...u]);g(c),h(!1)})(),()=>{A=!0}},[o,S]),{t:T=>!o||!T||!Ge(T)?T:C.get(T.trim())||T,map:C,isTranslating:i}}const fn=[{label:"Date",options:[{value:"latest",label:"Latest"},{value:"oldest",label:"Oldest"}]},{label:"Title",options:[{value:"title_asc",label:"A → Z"},{value:"title_desc",label:"Z → A"}]},{label:"Popular (Views)",options:[{value:"popular_recent",label:"Recent"},{value:"popular_week",label:"Week"},{value:"popular_month",label:"Month"},{value:"popular_6_months",label:"6 Months"},{value:"popular_year",label:"Year"},{value:"popular",label:"All Time"}]},{label:"Most Commented",options:[{value:"comments_week",label:"Week"},{value:"comments_month",label:"Month"},{value:"comments_year",label:"Year"},{value:"comments",label:"All Time"}]},{label:"Other",options:[{value:"random",label:"Random"}]}],yn=[{value:"",label:"All"},{value:"sfw",label:"SFW / 全年齢"},{value:"r-15",label:"R-15"},{value:"r-18",label:"NSFW / R18"},{value:"yuri",label:"Yuri / Girls love / 百合"},{value:"otokonoko",label:"Otoko no ko / 男の娘"},{value:"futanari",label:"Futanari / フタナリ"},{value:"r-18g",label:"R-18G / グロ"}],_n=[{value:"sfw",label:"SFW / 全年齢"}],xn=()=>{const{rj:s}=gt(),o=Ye(),[C,g]=ft(),{hasConsent:i,grant:h}=At(),[b,S]=y(!1),[k,T]=y(()=>C.get("q")||""),[P,M]=y(()=>C.get("q")||""),[v,f]=y("latest"),[A,N]=y("sfw"),[u,c]=y(1),[l,B]=y(null),[p,q]=y(null),[L,X]=y(!0),[H,Y]=y(()=>localStorage.getItem("asmrTranslateEN")==="true"),[j,ne]=y(!1),D=yt(),{toggle:Z,bookmarkedIds:me}=Xe(),{popup:x,openPopup:ee,scheduleClose:W,cancelClose:we,closePopup:he}=Lt();w(()=>Bt("jasmr",()=>ne(!0)),[]),w(()=>{localStorage.setItem("asmrTranslateEN",String(H))},[H]);const pe=i,z=pe?A:"sfw",Ce=pe?yn:_n,{data:re,isLoading:se,isError:Le,isFetching:le}=Tt(P,u,v,z),K=xe.useMemo(()=>re?.shows??[],[re?.shows]),U=re?.hasNext??!1;w(()=>{if(!s){l&&!p&&B(null);return}const n=s.toUpperCase();if(p&&(p.work.id?.toUpperCase()===n||p.work._id?.toUpperCase()===n)){l&&B(null);return}const d=K.find(R=>(R.id||R._id)?.toUpperCase()===n);d?(!l||(l.id||l._id)!==(d.id||d._id))&&B(d):(!l||(l.id||l._id)?.toUpperCase()!==n)&&B({_id:n,id:n,name:n})},[s,K,p,l]);const ge=Q(()=>{o("/asmr")},[o]);w(()=>{!s&&p&&q(null)},[s,p]);const{data:G}=Ke(p&&p.work.id||null),oe=p?[p.work.thumbnail,...G?.images||[]].filter(Boolean):[],ce=[...K.map(n=>n.name),l?.name||"",p?.work.name||"",...G?.chapters?.map(n=>n.label)||[]].filter(Boolean),{t:V}=gn(ce,H);w(()=>{const n=p?p.work.name:l?l.name:s?s.toUpperCase():"",d=n?H?V(n):n:"",R=d?`${d} - dango`:"dango";document.title=R;try{window.history.replaceState(window.history.state,R,window.location.href)}catch{}},[l,p,s,H,V]);const Ne=n=>{n.preventDefault(),M(k),c(1);const d=new URLSearchParams(C);k.trim()?d.set("q",k.trim()):d.delete("q"),d.delete("page"),g(d,{replace:!0})};w(()=>{const n=C.get("q")||"";T(d=>d===n?d:n),M(d=>d===n?d:n),c(1)},[C]);const fe=n=>{n.currentTarget.checked&&!i&&S(!0)},ie=()=>{h(),S(!1),c(1)},ye=()=>{S(!1)},de=Q((n,d,R)=>{B(null),X(!0),q({work:n,tracks:d,index:R})},[]);return e("div",{className:`${ae.page} ${p?ae.pageWithPlayer:""}`,children:[!(p&&L)&&e(O,{children:[e("header",{className:ae.header,children:[e("h1",{className:ae.pageTitle,children:[e(_,{name:"headphones"})," ASMR"]}),e("form",{className:ae.searchForm,onSubmit:Ne,children:[e("input",{className:ae.searchInput,type:"text",value:k,onChange:n=>T(n.currentTarget.value),placeholder:"Search works, circles, CV… (-word excludes)","aria-label":"Search ASMR works"}),e("button",{className:ae.searchBtn,type:"submit","aria-label":"Search",children:e(_,{name:"search"})})]})]}),e("div",{className:t.filterBar,children:[e("label",{className:t.filterLabel,htmlFor:"asmr-sort",children:"Sort"}),e("select",{id:"asmr-sort",className:t.sortSelect,value:v,onChange:n=>{f(n.currentTarget.value),c(1)},children:fn.map(n=>e("optgroup",{label:n.label,children:n.options.map(d=>e("option",{value:d.value,children:d.label},d.value))},n.label))}),e("label",{className:t.filterLabel,htmlFor:"asmr-rating",children:"Type"}),e("select",{id:"asmr-rating",className:t.sortSelect,value:A,onChange:n=>{N(n.currentTarget.value),c(1)},children:Ce.map(n=>e("option",{value:n.value,children:n.label},n.value))}),e("div",{className:t.filterTogglesGroup,children:[e("div",{className:t.translateToggleWrap,children:[e("span",{className:t.filterLabel,children:"JP"}),e(Ue,{id:"asmr-translate-toggle",isChecked:H,onChange:n=>Y(n.currentTarget.checked)}),e("span",{className:t.filterLabel,children:"EN"})]}),!i&&e("div",{className:t.matureToggleWrap,children:[e("label",{className:t.matureLabel,htmlFor:"asmr-mature-toggle",children:"Mature"}),e(Ue,{id:"asmr-mature-toggle",isChecked:!1,onChange:fe})]})]})]}),Le?e("p",{className:t.statusMsg,children:"Failed to load works. Please try again."}):se&&K.length===0?e("div",{className:t.grid,"aria-hidden":!0,children:Array.from({length:12}).map((n,d)=>e("div",{className:t.skeletonCard,children:[e("div",{className:`${t.skeletonThumb} ${t.shimmer}`}),e("div",{className:`${t.skeletonLine} ${t.shimmer}`,style:{width:"88%"}}),e("div",{className:`${t.skeletonLine} ${t.shimmer}`,style:{width:"55%"}})]},d))}):K.length===0?e("p",{className:t.statusMsg,children:"No works found."}):e(O,{children:[e("div",{className:`${t.grid} ${le?t.fetching:""}`,children:K.map(n=>{const d=H?{...n,name:V(n.name)}:n,R=Qe(n),ue=Ve(R),J=me.has(ue),_e=`/asmr/${encodeURIComponent(R)}`;return e("div",{className:t.asmrCardWrap,children:[e(bt,{item:{id:ue,title:d.name,thumbnail:n.thumbnail||"",typeBadge:R||void 0,isAdult:Pe(n)},linkTo:_e,hoverIcon:"info",layout:"horizontal",showInfoButton:!0,display:{elements:{poster:{typeBadge:!0,chapterBadge:!1,adultBadge:!0},info:{title:!0,mobileBadges:!0,progress:!1,meta:!1}}},onOpenDetails:F=>ee(F,{rjCode:R,title:d.name,thumbnail:n.thumbnail||"",isAdult:Pe(n),rating:n.rating,listenTarget:_e}),onPopupHoverIntent:F=>F?we():W(),rawThumbnail:!0}),e("button",{className:`${t.bookmarkBtn} ${J?t.bookmarked:""}`,onClick:F=>{F.preventDefault(),F.stopPropagation(),Z({rjCode:R,title:n.name,thumbnail:n.thumbnail||"",isAdult:Pe(n)})},title:J?"Remove from listening list":"Add to listening list","aria-label":J?"Remove from listening list":"Add to listening list","aria-pressed":J,children:e(_,{name:J?"check":"plus",size:12})})]},n._id||n.id)})}),e(kt,{page:u,canGoNext:U,onChange:n=>c(n),variant:"labeled"})]})]}),l&&e(sn,{work:l,onClose:ge,onPlay:de,t:V}),x&&e(Rt,{data:x.data,anchorRect:x.rect,bookmarked:me.has(Ve(x.data.rjCode)),onToggleBookmark:()=>Z({rjCode:x.data.rjCode,title:x.data.title,thumbnail:x.data.thumbnail||"",isAdult:x.data.isAdult}),onMouseEnter:we,onMouseLeave:W,onRequestClose:he}),j&&e(dn,{isOpen:j,onClose:()=>ne(!1),onSuccess:()=>{D.invalidateQueries({queryKey:[ze.asmrBrowse]}),D.invalidateQueries({queryKey:[ze.asmrWork]})}}),b&&e(_t,{isOpen:!0,scope:"section",showResetHint:!0,onClose:ye,onGrant:ie}),p&&e(ln,{title:p.work.name,images:oe,chapters:G?.chapters||[],tracks:p.tracks,trackIndex:p.index,expanded:L,isAdult:!!p.work.isAdult,rjCode:p.work.id||p.work._id,t:V,onTrackChange:n=>q(d=>d&&{...d,index:n}),onExpandedChange:X,onClose:()=>{q(null),X(!0),s&&o("/asmr")}})]})};export{xn as default};
@@ -1 +0,0 @@
1
- ._section-header_2p2l1_1{display:flex;justify-content:space-between;align-items:flex-end;margin-bottom:var(--space-8);gap:var(--space-4)}._sectionWrapper_2p2l1_9{margin-bottom:2.5rem}._sectionTitleNoMargin_2p2l1_13{margin-bottom:0}._title-wrapper_2p2l1_17{display:flex;align-items:center;gap:var(--space-6);flex:1}._header-controls_2p2l1_24{display:flex;align-items:center;gap:var(--space-2)}._header-select_2p2l1_30{width:auto;min-width:120px;height:34px;padding:0 var(--space-3);padding-right:2rem;background-color:var(--bg-tertiary);border:1px solid var(--border-primary);border-radius:var(--radius-sm);color:var(--text-primary);font-size:var(--font-size-sm);font-weight:700;cursor:pointer;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23a1a1aa' stroke-width='2' viewBox='0 0 12 12'%3E%3Cpolyline points='3 5 6 8 9 5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .5rem center;transition:all var(--transition-base)}._header-select_2p2l1_30:hover{border-color:var(--border-secondary);background-color:var(--bg-elevated)}._header-select_2p2l1_30:focus{outline:none;border-color:var(--accent)}._view-all-link_2p2l1_61{font-size:.85rem;font-weight:700;color:var(--text-secondary);text-decoration:none;white-space:nowrap;padding:8px 12px;border-radius:var(--radius-md);border:1px solid transparent;transition:all var(--transition-base)}._view-all-link_2p2l1_61:hover{color:var(--accent-light);background:var(--accent-subtle);border-color:var(--border-primary)}._collapse-button_2p2l1_79{width:40px;height:40px;border:1px solid var(--border-primary);background:var(--bg-secondary);color:var(--text-secondary);border-radius:var(--radius-md);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:all var(--transition-base)}._collapse-button_2p2l1_79:hover{background:var(--bg-elevated);color:var(--text-primary)}._title-link_2p2l1_98{color:inherit;text-decoration:none;display:inline-flex;align-items:center;transition:all var(--transition-base)}._title-link_2p2l1_98 .section-title{position:relative;font-size:1.5rem;font-weight:800;letter-spacing:-.01em}._title-link_2p2l1_98:hover,._continue-watching_2p2l1_117 ._title-link_2p2l1_98:hover .section-title{color:var(--accent)}@media(max-width:600px){._section-header_2p2l1_1{flex-direction:column;align-items:flex-start;gap:var(--space-4);margin-bottom:var(--space-6)}._title-wrapper_2p2l1_17{width:100%;justify-content:space-between}._title-link_2p2l1_98 .section-title{font-size:1.25rem}}._nav-arrows_2p2l1_139{display:flex;gap:8px;background:var(--bg-tertiary);padding:4px;border-radius:var(--radius-md);border:1px solid var(--border-primary)}._nav-button_2p2l1_148{background:transparent;border:none;color:var(--text-secondary);width:32px;height:32px;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all var(--transition-base)}._nav-button_2p2l1_148:hover{background:var(--bg-elevated);color:var(--accent)}._nav-button_2p2l1_148:active{transform:scale(.9)}@media(hover:none),(pointer:coarse){._nav-button_2p2l1_148{width:44px;height:44px}}._carousel-container_2p2l1_178{position:relative;width:100%}._carousel_2p2l1_178{overflow:hidden}._carousel-inner_2p2l1_187{display:flex;gap:20px}._carousel-card_2p2l1_192{flex:0 0 calc((100% - (6 * 20px)) / 7);min-width:150px}@media(max-width:1400px){._carousel-card_2p2l1_192{flex:0 0 calc((100% - (5 * 20px)) / 6)}}@media(max-width:1200px){._carousel-card_2p2l1_192{flex:0 0 calc((100% - 80px)/5)}}@media(max-width:900px){._carousel-card_2p2l1_192{flex:0 0 calc((100% - 60px)/4);max-width:160px}}@media(max-width:768px){._carousel-inner_2p2l1_187{gap:12px}._carousel-card_2p2l1_192{flex:0 0 calc((100% - (2 * 12px)) / 3);min-width:0;max-width:140px}}@media(max-width:480px){._carousel-card_2p2l1_192{flex:0 0 calc((100% - (1 * 12px)) / 2.2);max-width:140px}}._sectionWrapper_xt8h9_2{margin-bottom:2.5rem}._sectionTitleNoMargin_xt8h9_6{margin-bottom:0}._section-header_xt8h9_10{display:flex;justify-content:space-between;align-items:flex-end;margin-bottom:var(--space-8);gap:var(--space-4)}._title-wrapper_xt8h9_18{display:flex;align-items:center;gap:var(--space-6);flex:1}@media(max-width:600px){._section-header_xt8h9_10{flex-direction:column;align-items:flex-start;gap:var(--space-4);margin-bottom:var(--space-6)}._title-wrapper_xt8h9_18{width:100%;justify-content:space-between}}._nav-arrows_xt8h9_40{display:flex;gap:8px;background:var(--bg-tertiary);padding:4px;border-radius:var(--radius-md);border:1px solid var(--border-primary)}._nav-button_xt8h9_49{background:transparent;border:none;color:var(--text-secondary);width:32px;height:32px;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all var(--transition-base)}._nav-button_xt8h9_49:hover{background:var(--bg-elevated);color:var(--accent)}._nav-button_xt8h9_49:active{transform:scale(.9)}@media(hover:none),(pointer:coarse){._nav-button_xt8h9_49{width:44px;height:44px}}._timeSelect_xt8h9_80{width:120px;height:34px;padding:0 var(--space-3);padding-right:2rem;background-color:var(--bg-tertiary);border:1px solid var(--border-primary);border-radius:var(--radius-sm);color:var(--text-primary);font-size:var(--font-size-sm);font-weight:700;cursor:pointer;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23a1a1aa' stroke-width='2' viewBox='0 0 12 12'%3E%3Cpolyline points='3 5 6 8 9 5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .5rem center;transition:all var(--transition-base)}._timeSelect_xt8h9_80:hover{border-color:var(--border-secondary);background-color:var(--bg-elevated)}._timeSelect_xt8h9_80:focus{outline:none;border-color:var(--accent)}._carouselContainer_xt8h9_111{position:relative;width:100%}._carousel_xt8h9_111{overflow:hidden;padding:10px 0;margin:-10px 0}._carouselInner_xt8h9_122{display:flex;gap:15px}._carouselItem_xt8h9_127{flex:0 0 calc((100% - (6 * 15px)) / 7);min-width:120px;position:relative}@media(max-width:1200px){._carouselItem_xt8h9_127{flex:0 0 calc((100% - (5 * 15px)) / 6)}}@media(max-width:1024px){._carouselItem_xt8h9_127{flex:0 0 calc((100% - 60px)/5)}}@media(max-width:768px){._carouselItem_xt8h9_127{flex:0 0 calc((100% - (2 * 15px)) / 3)}}@media(max-width:480px){._carouselItem_xt8h9_127{flex:0 0 calc((100% - (2 * 10px)) / 3);min-width:100px}._carouselInner_xt8h9_122{gap:10px;align-items:flex-start}}._rankCard_xt8h9_164{width:100%}._rankPill_xt8h9_168{text-align:center;margin-top:4px;font-size:1.6rem;font-weight:900;line-height:1;letter-spacing:-.04em;color:var(--text-tertiary);font-variant-numeric:tabular-nums}._rankPill_xt8h9_168._rankGold_xt8h9_179{color:#d8b56b}._rankPill_xt8h9_168._rankSilver_xt8h9_183{color:#c3c9d1}._rankPill_xt8h9_168._rankBronze_xt8h9_187{color:#c08d5f}@media(max-width:768px){._rankPill_xt8h9_168{font-size:1.3rem}}._skeletonPoster_xt8h9_198,._skeletonText_xt8h9_199{position:relative;overflow:hidden;background-color:var(--bg-tertiary);border-radius:var(--radius-sm)}._skeletonPoster_xt8h9_198:after,._skeletonText_xt8h9_199:after{content:"";position:absolute;inset:0;transform:translate(-100%);background-image:linear-gradient(90deg,#fff0 0,#ffffff0d 20%,#ffffff1f 60%,#fff0);animation:_skeleton-wave_xt8h9_1 1.8s infinite ease-in-out}._skeletonPoster_xt8h9_198{width:100%;aspect-ratio:3 / 4}._skeletonText_xt8h9_199{width:80%;height:12px;margin-top:var(--space-2)}._header-actions_xt8h9_236{width:100%;display:flex;justify-content:flex-end}._scheduleSection_10dfe_1{margin-bottom:2.5rem}._sectionTitleRow_10dfe_5{display:flex;align-items:center;gap:1rem}._sectionTitleNoMargin_10dfe_11{margin-bottom:0}._sectionHeader_10dfe_15{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-6);gap:var(--space-4);flex-wrap:wrap;row-gap:var(--space-3)}._headerActions_10dfe_25{display:flex;align-items:center;gap:var(--space-3)}._timeSelect_10dfe_31{width:120px;height:34px;padding:0 var(--space-3);padding-right:2rem;background-color:var(--bg-tertiary);border:1px solid var(--border-primary);border-radius:var(--radius-sm);color:var(--text-primary);font-size:var(--font-size-sm);font-weight:700;cursor:pointer;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23a1a1aa' stroke-width='2' viewBox='0 0 12 12'%3E%3Cpolyline points='3 5 6 8 9 5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .5rem center;transition:all var(--transition-base)}._timeSelect_10dfe_31:hover{border-color:var(--border-secondary);background-color:var(--bg-elevated)}._timeSelect_10dfe_31:focus{outline:none;border-color:var(--accent)}._daySelectorContainer_10dfe_62{margin-bottom:var(--space-8);width:100%;position:relative}._daySelector_10dfe_62{display:flex;overflow-x:auto;padding:var(--space-2) var(--space-8);scrollbar-width:none;-webkit-overflow-scrolling:touch;width:100%;scroll-behavior:smooth;overscroll-behavior-x:contain}._daySelectorInner_10dfe_79{display:flex;gap:var(--space-2);justify-content:flex-start;margin:0 auto}._daySelector_10dfe_62::-webkit-scrollbar{display:none}._dayBtn_10dfe_90{background:#ffffff08;border:1px solid var(--border-primary);color:var(--text-secondary);padding:var(--space-2) var(--space-4);border-radius:var(--radius-lg);cursor:pointer;transition:all var(--transition-base);min-width:70px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;flex-shrink:0}._dayBtn_10dfe_90:hover{background:#ffffff14;border-color:var(--border-secondary);transform:translateY(-2px)}._dayBtn_10dfe_90._active_10dfe_113{background:var(--accent);border-color:var(--accent);color:var(--accent-text);box-shadow:0 8px 20px var(--accent-glow);transform:translateY(-4px)}._dayMonth_10dfe_121{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;opacity:.8}._dayNum_10dfe_129{font-size:1.25rem;font-weight:800;line-height:1}._dayName_10dfe_135{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.02em}._dayBtn_10dfe_90._active_10dfe_113 ._dayMonth_10dfe_121,._dayBtn_10dfe_90._active_10dfe_113 ._dayName_10dfe_135{opacity:1}._navArrows_10dfe_148{display:flex;gap:8px;background:var(--bg-tertiary);padding:4px;border-radius:var(--radius-md);border:1px solid var(--border-primary)}._navButton_10dfe_157{background:transparent;border:none;color:var(--text-secondary);width:32px;height:32px;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all var(--transition-base)}._navButton_10dfe_157:hover{background:var(--bg-elevated);color:var(--accent)}._navButton_10dfe_157:active{transform:scale(.9)}._carouselContainer_10dfe_181{position:relative;width:100%;min-height:280px}._carousel_10dfe_181{overflow:hidden;padding-bottom:10px;min-height:260px}._carouselInner_10dfe_193{display:flex;gap:15px}._carouselCard_10dfe_198{flex:0 0 calc((100% - (6 * 15px)) / 7);min-width:150px}@media(max-width:1200px){._carouselCard_10dfe_198{flex:0 0 calc((100% - (5 * 15px)) / 6)}}@media(max-width:1024px){._carouselCard_10dfe_198{flex:0 0 calc((100% - 60px)/5)}}@media(max-width:768px){._carouselCard_10dfe_198{flex:0 0 calc((100% - (2 * 15px)) / 3);min-width:0}._daySelector_10dfe_62{justify-content:flex-start;padding-left:var(--space-4);padding-right:var(--space-4)}._dayBtn_10dfe_90{min-width:60px;padding:var(--space-2) var(--space-3)}}@media(max-width:480px){._carouselCard_10dfe_198{flex:0 0 calc((100% - (2 * 10px)) / 3);min-width:0}._carouselInner_10dfe_193{gap:10px;align-items:flex-start}}@media(max-width:600px){._daySelector_10dfe_62{display:flex;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;gap:0;padding:var(--space-1) var(--space-4);scroll-behavior:smooth;overscroll-behavior-x:contain}._daySelectorInner_10dfe_79{gap:0;margin:0;justify-content:flex-start}._dayBtn_10dfe_90{flex:0 0 14.2857%;min-width:0!important;padding:var(--space-1) 0!important;border-radius:var(--radius-md)!important}._dayMonth_10dfe_121{font-size:10px!important}._dayNum_10dfe_129{font-size:1rem!important}._dayName_10dfe_135{font-size:10px!important}._dayBtn_10dfe_90._active_10dfe_113{transform:translateY(-2px)!important}}._bannerContainer_1l49p_1{width:100vw;max-width:100vw;position:relative;left:50%;right:50%;margin-left:-50vw;margin-right:-50vw;margin-top:calc(-1 * var(--header-height));margin-bottom:2.5rem;overflow:hidden;background-color:var(--bg-main);z-index:2}@media(max-width:1024px){._bannerContainer_1l49p_1{margin-top:calc(-1 * (var(--header-height) + 52px))}}@media(max-width:848px){._bannerContainer_1l49p_1{margin-top:-116px}}._hero_1l49p_28{position:relative;width:100%;height:clamp(480px,72svh,660px);overflow:hidden;background-color:var(--bg-main)}._ambient_1l49p_37{position:absolute;inset:-60px;width:calc(100% + 120px);height:calc(100% + 120px);object-fit:cover;object-position:center 22%;filter:blur(55px) brightness(.3) saturate(1.15);opacity:0;transition:opacity .6s ease}._ambientShow_1l49p_49{opacity:1}._scrim_1l49p_53{position:absolute;inset:0;z-index:1;background:linear-gradient(90deg,#050508c7,#0505086b 42%,#0505080f 70%),linear-gradient(0deg,var(--bg-main) 0%,rgba(12,13,18,.82) 16%,transparent 46%),linear-gradient(180deg,transparent 0%,transparent 72px,rgba(5,5,8,.22) 100%)}._progressLine_1l49p_69{position:absolute;left:0;right:0;bottom:0;height:2px;z-index:6;background:#ffffff1a;overflow:hidden}._progressLine_1l49p_69:after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,var(--accent),var(--accent-light));transform-origin:left;animation:_progressFill_1l49p_1 8s linear forwards}._paused_1l49p_89 ._progressLine_1l49p_69:after{animation-play-state:paused}@keyframes _progressFill_1l49p_1{0%{transform:scaleX(0)}to{transform:scaleX(1)}}._dots_1l49p_103{position:absolute;left:50%;transform:translate(-50%);bottom:.6rem;z-index:5;display:flex;align-items:center;gap:.5rem;padding:10px 16px}._dot_1l49p_103{width:10px;height:10px;padding:0;border-radius:var(--radius-full);border:none;background:#ffffff4d;cursor:pointer;transition:all .3s cubic-bezier(.4,0,.2,1)}._dot_1l49p_103:not(._dotActive_1l49p_126):hover{background:#ffffffa6}._dotActive_1l49p_126{width:32px;background:var(--accent);box-shadow:0 0 10px var(--accent-glow)}._viewport_1l49p_137{position:absolute;inset:0;z-index:2;overflow:hidden}._track_1l49p_144{display:flex;height:100%;transition:transform .45s cubic-bezier(.22,1,.36,1)}._slide_1l49p_150{flex:0 0 100%;height:100%;display:flex;align-items:center;justify-content:center}._slideInner_1l49p_158{width:100%;max-width:var(--max-width);margin:0 auto;padding:4rem var(--space-8) 3.5rem;display:flex;align-items:center;gap:3rem}._poster_1l49p_168{width:clamp(110px,18vw,230px);height:auto;aspect-ratio:2 / 3;object-fit:cover;border-radius:var(--radius-lg);flex-shrink:0;border:1px solid rgba(255,255,255,.14);box-shadow:0 30px 80px #0009}._posterLandscape_1l49p_179{width:min(400px,38vw);aspect-ratio:16 / 9;height:auto;object-fit:cover;border-radius:var(--radius-lg);flex-shrink:0;border:1px solid rgba(255,255,255,.14);box-shadow:0 30px 80px #0009}@media(max-width:1024px){._posterLandscape_1l49p_179{width:min(320px,36vw)}}@media(max-width:768px)and (pointer:coarse){._posterLandscape_1l49p_179{width:100%;max-width:420px}}._info_1l49p_203{min-width:0;max-width:620px}._kicker_1l49p_208{display:flex;align-items:center;gap:.75rem;margin-bottom:.9rem}._featureLabel_1l49p_215{padding:.3rem .75rem;background:var(--accent-subtle);border:1px solid var(--border-accent);color:var(--accent-light);font-size:.75rem;font-weight:700;text-transform:uppercase;border-radius:var(--radius-full);letter-spacing:.08em}._scoreChip_1l49p_227{display:inline-flex;align-items:center;gap:.35rem;padding:.3rem .7rem;background:#00000073;border:1px solid var(--border-strong);border-radius:var(--radius-full);color:var(--accent-lighter);font-size:.8rem;font-weight:700;font-variant-numeric:tabular-nums;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}._slide_1l49p_150 ._rise_1l49p_245{opacity:1}._slide_1l49p_150._active_1l49p_249 ._rise_1l49p_245{animation:_riseIn_1l49p_1 .45s cubic-bezier(.22,1,.36,1) both}._slide_1l49p_150._active_1l49p_249 ._rise_1l49p_245:nth-child(1){animation-delay:.03s}._slide_1l49p_150._active_1l49p_249 ._rise_1l49p_245:nth-child(2){animation-delay:.07s}._slide_1l49p_150._active_1l49p_249 ._rise_1l49p_245:nth-child(3){animation-delay:.11s}._slide_1l49p_150._active_1l49p_249 ._rise_1l49p_245:nth-child(4){animation-delay:.15s}._slide_1l49p_150._active_1l49p_249 ._rise_1l49p_245:nth-child(5){animation-delay:.19s}._slide_1l49p_150._active_1l49p_249 ._rise_1l49p_245:nth-child(6){animation-delay:.23s}@keyframes _riseIn_1l49p_1{0%{opacity:0;transform:translateY(26px)}to{opacity:1;transform:none}}._slide_1l49p_150._active_1l49p_249 ._poster_1l49p_168{animation:_posterIn_1l49p_1 .5s cubic-bezier(.22,1,.36,1)}@keyframes _posterIn_1l49p_1{0%{opacity:0;transform:translate(-30px) scale(.97)}to{opacity:1;transform:none}}._metaRow_1l49p_305{display:flex;align-items:center;flex-wrap:wrap;gap:.75rem;color:#ffffffb3;font-size:.9rem;font-weight:600;margin-bottom:.8rem}._metaItem_1l49p_316{display:flex;align-items:center;gap:4px}._metaDivider_1l49p_322{width:4px;height:4px;background:#ffffff4d;border-radius:50%}._title_1l49p_329{display:block;font-size:clamp(1.6rem,4.6vw,3rem);line-height:1.04;cursor:pointer;max-width:800px;margin-bottom:.9rem;text-shadow:0 2px 26px rgba(0,0,0,.75),0 1px 3px rgba(0,0,0,.9)}._title_1l49p_329:hover{color:var(--accent-light)}._genres_1l49p_345{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;margin-bottom:.9rem}._genreTag_1l49p_353{color:#fffc;border:1px solid rgba(255,255,255,.28);padding:.32rem .75rem;border-radius:var(--radius-full);font-size:.7rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase}._summary_1l49p_364{font-size:.96rem;line-height:1.65;margin:0 0 1.6rem;color:#fffc;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;max-width:750px}._actions_1l49p_376{display:flex;align-items:center;gap:.8rem;flex-wrap:wrap}._watchBtn_1l49p_383{display:inline-flex;align-items:center;justify-content:center;gap:.6rem;padding:.85rem 2.1rem;background:linear-gradient(135deg,var(--accent) 0%,var(--accent-dark) 100%);color:var(--accent-text);font-size:.94rem;font-weight:700;border:none;border-radius:var(--radius-md);cursor:pointer;box-shadow:0 6px 24px var(--accent-glow);transition:transform .2s cubic-bezier(.22,1,.36,1);letter-spacing:.02em}._watchBtn_1l49p_383:hover{transform:translateY(-2px)}._detailsBtn_1l49p_405{display:inline-flex;align-items:center;justify-content:center;gap:.6rem;padding:.85rem 1.8rem;background:#ffffff14;color:var(--text-primary);font-size:.94rem;font-weight:600;border:1px solid rgba(255,255,255,.2);border-radius:var(--radius-md);cursor:pointer;transition:background .2s ease}._detailsBtn_1l49p_405:hover{background:#ffffff29;color:#fff}._navArrow_1l49p_426{position:absolute;top:50%;transform:translateY(-50%);z-index:6;width:46px;height:46px;border-radius:50%;background:#0006;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);border:1px solid rgba(255,255,255,.2);color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;opacity:0;transition:opacity .3s ease,border-color .2s ease,color .2s ease}._hero_1l49p_28:hover ._navArrow_1l49p_426{opacity:.9}._navArrow_1l49p_426:hover{border-color:var(--accent);color:var(--accent-light)}._prevArrow_1l49p_459{left:1.2rem}._nextArrow_1l49p_463{right:1.2rem}@media(max-width:768px)and (pointer:coarse){._hero_1l49p_28{min-height:92svh}._scrim_1l49p_53{background:linear-gradient(0deg,#050508e6,#05050859 55%,#05050873)}._slideInner_1l49p_158{flex-direction:column;justify-content:center;text-align:center;gap:1.3rem;padding:4.2rem var(--space-4) 2.4rem}._poster_1l49p_168{width:min(46vw,172px)}._slide_1l49p_150._active_1l49p_249 ._poster_1l49p_168{animation-name:_posterUp_1l49p_1}@keyframes _posterUp_1l49p_1{0%{opacity:0;transform:translateY(24px) scale(.97)}to{opacity:1;transform:none}}._kicker_1l49p_208{justify-content:center}._title_1l49p_329{font-size:1.6rem;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}._metaRow_1l49p_305{justify-content:center;font-size:.8rem}._genres_1l49p_345{justify-content:center}._genreTag_1l49p_353{font-size:.66rem}._summary_1l49p_364{display:none}._actions_1l49p_376{width:100%}._watchBtn_1l49p_383,._detailsBtn_1l49p_405{flex:1;justify-content:center;padding:.85rem .5rem;font-size:.87rem}._navArrow_1l49p_426{display:none}}@media(max-width:1024px){._slideInner_1l49p_158{gap:2rem}}@media(max-height:500px)and (orientation:landscape){._hero_1l49p_28{min-height:360px}._slideInner_1l49p_158{gap:1.5rem;padding:3.5rem var(--space-8) 3rem}._poster_1l49p_168{width:140px}._title_1l49p_329{font-size:1.5rem}._summary_1l49p_364{display:none}}._emptyState_19tmt_1{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--space-16) var(--space-8);background:linear-gradient(to bottom,var(--bg-tertiary),var(--bg-main));border-radius:var(--radius-lg);border:1px solid var(--border-primary);text-align:center;gap:var(--space-4);width:100%;min-height:320px}._emptyStateIcon_19tmt_16{color:var(--accent);opacity:.4;margin-bottom:var(--space-2);filter:drop-shadow(0 0 20px var(--accent-glow))}._emptyStateTitle_19tmt_23{font-size:1.5rem;font-weight:800;margin:0;color:var(--text-primary)}._emptyStateText_19tmt_30{font-size:1rem;color:var(--text-secondary);max-width:340px;line-height:1.6}._select_1dw63_1{height:34px;padding:0 8px;padding-right:1.5rem;background-color:var(--bg-tertiary);border:1px solid var(--border-primary);border-radius:var(--radius-sm);color:var(--text-primary);font-size:var(--font-size-sm);font-weight:700;cursor:pointer;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23a1a1aa' stroke-width='2' viewBox='0 0 12 12'%3E%3Cpolyline points='3 5 6 8 9 5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .5rem center}._tabBar_irwbm_1{display:flex;align-items:center;gap:6px;margin-bottom:2.5rem;padding:6px;background:#ffffff0a;backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border:1px solid var(--border-primary);border-radius:var(--radius-full);width:fit-content;max-width:100%;overflow-x:auto;scrollbar-width:none;box-shadow:0 4px 20px #0003;position:relative}._tabBar_irwbm_1::-webkit-scrollbar{display:none}._tabIndicator_irwbm_24{position:absolute;top:6px;bottom:6px;border-radius:var(--radius-full);background:linear-gradient(135deg,var(--accent) 0%,var(--accent-dark) 100%);box-shadow:0 4px 15px var(--accent-glow);transition:left .22s cubic-bezier(.2,1.2,.3,1),width .22s cubic-bezier(.2,1.2,.3,1);z-index:0;pointer-events:none}._tabButton_irwbm_38{border-radius:var(--radius-full)!important;font-weight:700!important;font-size:.85rem!important;padding:.65rem 1.4rem!important;letter-spacing:.02em;transition:color .25s ease!important;border:none!important;background:transparent!important;color:var(--text-muted)!important;position:relative;z-index:1;flex-shrink:0}._tabButton_irwbm_38:hover:not(:disabled){background:transparent!important;color:var(--text-muted)!important;box-shadow:none!important;transform:none!important}._tabButton_irwbm_38:active{transform:scale(.96)}._tabActive_irwbm_64{color:var(--accent-text)!important}._tabActive_irwbm_64:hover:not(:disabled){color:var(--accent-text)!important;transform:none!important}@media(max-width:600px){._tabBar_irwbm_1{width:100%;justify-content:flex-start}._tabButton_irwbm_38{flex:1;justify-content:center!important;padding:.65rem .5rem!important;text-align:center;font-size:.78rem!important}}._section-header_knq79_1{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-8)}._title-wrapper_knq79_8{display:flex;align-items:center;gap:var(--space-6)}._pagination-controls_knq79_14{display:flex;gap:8px;align-items:center;background:var(--bg-tertiary);padding:4px;border-radius:var(--radius-md);border:1px solid var(--border-primary)}._seasonGrid_knq79_24{display:grid;grid-template-columns:repeat(7,1fr);gap:var(--space-4)}._emptyState_bpz5x_1{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--space-16) var(--space-8);background:linear-gradient(to bottom,var(--bg-tertiary),var(--bg-main));border-radius:var(--radius-lg);border:1px solid var(--border-primary);text-align:center;gap:var(--space-4);width:100%;min-height:320px}