@serifpersia/dango 3.0.3

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 (141) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +247 -0
  3. package/client/dist/assets/AnimeInfo-CMxs0nRH.css +1 -0
  4. package/client/dist/assets/AnimeInfo-DVdaocCl.js +1 -0
  5. package/client/dist/assets/AnimeInfoPage-Bx5EvGt-.js +2 -0
  6. package/client/dist/assets/Asmr-C2i9GKD4.css +1 -0
  7. package/client/dist/assets/Asmr-CIjmFtRH.js +2 -0
  8. package/client/dist/assets/Asmr.module-DPG2JhDJ.js +1 -0
  9. package/client/dist/assets/AvSyncCalibrator-CIYcyon5.css +1 -0
  10. package/client/dist/assets/AvSyncCalibrator-vqErH7Cm.js +10 -0
  11. package/client/dist/assets/ErrorMessage-BwSjzblw.js +1 -0
  12. package/client/dist/assets/ErrorMessage-CXoRbrLN.css +1 -0
  13. package/client/dist/assets/Home-D7YfGBUk.js +1 -0
  14. package/client/dist/assets/Home-DKCfEiwl.css +1 -0
  15. package/client/dist/assets/Insights-BljI64Ua.css +1 -0
  16. package/client/dist/assets/Insights-CLQGrlpX.js +1 -0
  17. package/client/dist/assets/Manga-DQ9HYnpk.js +1 -0
  18. package/client/dist/assets/Manga-H8Wb04w3.css +1 -0
  19. package/client/dist/assets/Map-CXFqXmsZ.css +1 -0
  20. package/client/dist/assets/Map-L_ryVBTq.js +1 -0
  21. package/client/dist/assets/Mature-BeWzAJ7B.js +1 -0
  22. package/client/dist/assets/Mature-DJmUUtlF.css +1 -0
  23. package/client/dist/assets/Player-CYpd__FP.js +30 -0
  24. package/client/dist/assets/Player-DreAhybc.css +1 -0
  25. package/client/dist/assets/PlayerRedirect-fxUAp9JV.js +1 -0
  26. package/client/dist/assets/PlayerSettings-BcsotxP9.js +1 -0
  27. package/client/dist/assets/PlayerSettings-Cqua1CDD.css +1 -0
  28. package/client/dist/assets/QueueRail-B9Pgbqc3.js +1 -0
  29. package/client/dist/assets/QueueRail-BnaltOP8.css +1 -0
  30. package/client/dist/assets/Radio-BvdY5twD.js +1 -0
  31. package/client/dist/assets/Radio-CUuYy3DY.css +1 -0
  32. package/client/dist/assets/Search-BzO-aRP7.css +1 -0
  33. package/client/dist/assets/Search-R9YLAXS1.js +1 -0
  34. package/client/dist/assets/Search.module-D8ZbQAiK.js +1 -0
  35. package/client/dist/assets/Settings-9kYcXdTR.js +21 -0
  36. package/client/dist/assets/Settings-DF8JThUL.css +1 -0
  37. package/client/dist/assets/SkeletonGrid-D5vRvX5q.js +1 -0
  38. package/client/dist/assets/SkeletonGrid-DEbYtO4H.css +1 -0
  39. package/client/dist/assets/SynopsisText-BlFw0R-0.js +1 -0
  40. package/client/dist/assets/SynopsisText-CUgOjOxt.css +1 -0
  41. package/client/dist/assets/Trackers-DfZlnnVq.js +2 -0
  42. package/client/dist/assets/Trackers-Dt9lR_uP.css +1 -0
  43. package/client/dist/assets/Tv-CVKC2YBs.css +1 -0
  44. package/client/dist/assets/Tv-Db1Wx_b7.js +15 -0
  45. package/client/dist/assets/Watchlist-B2nkNZqM.css +1 -0
  46. package/client/dist/assets/Watchlist-a77CYtzu.js +1 -0
  47. package/client/dist/assets/hls-6Owgw2Aj.js +1 -0
  48. package/client/dist/assets/hls-BOLXTnjL.js +42 -0
  49. package/client/dist/assets/index-B6qdXFtl.css +1 -0
  50. package/client/dist/assets/index-B8TPVaIS.js +30354 -0
  51. package/client/dist/assets/index-CpjgU8ou.js +178 -0
  52. package/client/dist/assets/useAnimeInfoData-BOfyi9UJ.js +1 -0
  53. package/client/dist/assets/useIsMobile-CM15uQn8.css +1 -0
  54. package/client/dist/assets/useIsMobile-Cb8HcKRj.js +1 -0
  55. package/client/dist/assets/useMatureConsent-CZMYBVXd.js +1 -0
  56. package/client/dist/assets/vendor-rLNfZm7Y.js +1 -0
  57. package/client/dist/av-sync-test.mp4 +0 -0
  58. package/client/dist/favicon.ico +0 -0
  59. package/client/dist/index.html +31 -0
  60. package/client/dist/logo-mochi.png +0 -0
  61. package/client/dist/logo-sakura.png +0 -0
  62. package/client/dist/logo.png +0 -0
  63. package/client/dist/placeholder.svg +4 -0
  64. package/client/dist/robots.txt +3 -0
  65. package/orchestrator.js +416 -0
  66. package/package.json +89 -0
  67. package/server/dist/app-auth.js +231 -0
  68. package/server/dist/config.js +133 -0
  69. package/server/dist/controllers/auth.controller.js +247 -0
  70. package/server/dist/controllers/data.controller.js +785 -0
  71. package/server/dist/controllers/insights.controller.js +197 -0
  72. package/server/dist/controllers/proxy.controller.js +665 -0
  73. package/server/dist/controllers/settings.controller.js +267 -0
  74. package/server/dist/controllers/watchlist.controller.js +967 -0
  75. package/server/dist/db.js +152 -0
  76. package/server/dist/discord-gateway.js +381 -0
  77. package/server/dist/discord-rpc.js +424 -0
  78. package/server/dist/github-sync.js +403 -0
  79. package/server/dist/google.js +549 -0
  80. package/server/dist/lib/anilist.js +1519 -0
  81. package/server/dist/lib/anischedule.js +202 -0
  82. package/server/dist/lib/ipc.js +32 -0
  83. package/server/dist/lib/kitsu.js +552 -0
  84. package/server/dist/lib/mal.js +886 -0
  85. package/server/dist/lib/migration.js +335 -0
  86. package/server/dist/lib/temp-ids.js +11 -0
  87. package/server/dist/lib/tmdb.js +71 -0
  88. package/server/dist/lib/tracker/anilist-tracker.js +250 -0
  89. package/server/dist/lib/tracker/sync.service.js +312 -0
  90. package/server/dist/logger.js +19 -0
  91. package/server/dist/providers/123anime.provider.js +240 -0
  92. package/server/dist/providers/anilight.provider.js +366 -0
  93. package/server/dist/providers/animepahe.provider.js +531 -0
  94. package/server/dist/providers/animeya.provider.js +746 -0
  95. package/server/dist/providers/base-provider.js +45 -0
  96. package/server/dist/providers/hn.provider.js +473 -0
  97. package/server/dist/providers/ht.provider.js +439 -0
  98. package/server/dist/providers/jasmr.provider.js +504 -0
  99. package/server/dist/providers/kaa.provider.js +388 -0
  100. package/server/dist/providers/manga/manga.types.js +10 -0
  101. package/server/dist/providers/manga/mangadex.provider.js +227 -0
  102. package/server/dist/providers/manga/mangapill.provider.js +232 -0
  103. package/server/dist/providers/megaplay.provider.js +583 -0
  104. package/server/dist/providers/op.provider.js +440 -0
  105. package/server/dist/providers/provider.interface.js +2 -0
  106. package/server/dist/providers/title-matching.js +234 -0
  107. package/server/dist/providers/wh.provider.js +600 -0
  108. package/server/dist/rclone.js +126 -0
  109. package/server/dist/repositories/insights.repository.js +43 -0
  110. package/server/dist/repositories/mal-cache.repository.js +66 -0
  111. package/server/dist/repositories/notifications.repository.js +40 -0
  112. package/server/dist/repositories/queue.repository.js +64 -0
  113. package/server/dist/repositories/settings.repository.js +15 -0
  114. package/server/dist/repositories/shows-meta.repository.js +43 -0
  115. package/server/dist/repositories/temp-show-ids.repository.js +54 -0
  116. package/server/dist/repositories/watched-episodes.repository.js +54 -0
  117. package/server/dist/repositories/watchlist.repository.js +74 -0
  118. package/server/dist/routes/asmr.routes.js +72 -0
  119. package/server/dist/routes/auth.routes.js +28 -0
  120. package/server/dist/routes/data.routes.js +50 -0
  121. package/server/dist/routes/discord-gateway.routes.js +57 -0
  122. package/server/dist/routes/insights.routes.js +12 -0
  123. package/server/dist/routes/lan-auth.routes.js +49 -0
  124. package/server/dist/routes/manga.routes.js +115 -0
  125. package/server/dist/routes/proxy.routes.js +15 -0
  126. package/server/dist/routes/radio.routes.js +143 -0
  127. package/server/dist/routes/settings.routes.js +27 -0
  128. package/server/dist/routes/tracker.routes.js +143 -0
  129. package/server/dist/routes/translate.routes.js +90 -0
  130. package/server/dist/routes/tv.routes.js +843 -0
  131. package/server/dist/routes/watchlist.routes.js +312 -0
  132. package/server/dist/server.js +310 -0
  133. package/server/dist/shipped-defaults.js +8 -0
  134. package/server/dist/sync-config.js +32 -0
  135. package/server/dist/sync.js +506 -0
  136. package/server/dist/utils/cookie.utils.js +17 -0
  137. package/server/dist/utils/db-utils.js +15 -0
  138. package/server/dist/utils/env.utils.js +83 -0
  139. package/server/dist/utils/machine-id.js +46 -0
  140. package/server/dist/utils/request-context.js +5 -0
  141. package/server/dist/utils/security.utils.js +99 -0
@@ -0,0 +1,2 @@
1
+ import{u as se,d as l,h as me,g as X,b as Y,A as ee,a as R,q as _e,e,S as U}from"./vendor-rLNfZm7Y.js";import{C as s,aP as ae,aQ as ge,aR as we,aS as te,aJ as fe,aT as ye,aU as Ne,B as ne,aV as be}from"./index-CpjgU8ou.js";function ve(){const p=se(),[c,g]=l(!1);return me(()=>{const h=new URLSearchParams(window.location.search),a=h.get("anilist");if(a){const i=h.get("user"),m=h.get("reason");window.history.replaceState(null,"",window.location.pathname),a==="success"?(s.success(i?`Connected to AniList as ${decodeURIComponent(i)}`:"Connected to AniList"),p.invalidateQueries({queryKey:["trackerStatus"]})):s.error(m?decodeURIComponent(m):"AniList authentication failed");return}const I=new URLSearchParams(window.location.hash.substring(1)),u=I.get("access_token"),f=h.get("code");if(!u&&!f){const i=I.get("error");i&&(s.error(`AniList error: ${i}`),window.history.replaceState(null,"",window.location.pathname));return}const B=window.location.origin+window.location.pathname;window.history.replaceState(null,"",window.location.pathname),g(!0),s("Connecting to AniList..."),fetch("/api/tracker/anilist/auth",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u?{token:u}:{code:f,redirectUri:B})}).then(async i=>{const m=await i.json().catch(()=>({}));if(!i.ok)throw new Error(m.error||"Authentication failed");s.success(`Connected to AniList as ${m.user?.name??"AniList user"}`),p.invalidateQueries({queryKey:["trackerStatus"]})}).catch(i=>{s.error(i instanceof Error?i.message:"Failed to authenticate with AniList")}).finally(()=>{g(!1)})},[p]),c}function Ie(p){return ae({attr:{role:"img",viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"M14.921 6.479c-.82 0-3.683 0-4.947 3.156-.662 1.652-.986 4.812.876 7.886l1.934-1.41s-.767-1.095-1.083-3.191h2.897l.022 3.19h2.604V8.835h-2.581v2.043l-2.46-.023s.413-2.408 2.877-2.336h2.454l-.572-2.04ZM0 6.528v9.624h2.348v-5.84l2.031 2.664 2.047-2.652v5.828h2.336V6.528H6.437L4.368 9.474 2.31 6.528Zm18.447.022v9.583h5.022L24 14.09h-3.232V6.55Z"},child:[]}]})(p)}function ke(p){return ae({attr:{role:"img",viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"M24 17.53v2.421c0 .71-.391 1.101-1.1 1.101h-5l-.057-.165L11.84 3.736c.106-.502.46-.788 1.053-.788h2.422c.71 0 1.1.391 1.1 1.1v12.38H22.9c.71 0 1.1.392 1.1 1.101zM11.034 2.947l6.337 18.104h-4.918l-1.052-3.131H6.019l-1.077 3.131H0L6.361 2.948h4.673zm-.66 10.96-1.69-5.014-1.541 5.015h3.23z"},child:[]}]})(p)}const Se="_header_9w09i_1",Te="_fadeIn_9w09i_1",Ce="_pageTitle_9w09i_6",Le="_pageSubtitle_9w09i_14",xe="_importCard_9w09i_20",Ae="_slideUpIn_9w09i_1",Be="_cardHeader_9w09i_37",Ee="_uploadArea_9w09i_55",Pe="_fileInputWrapper_9w09i_59",Fe="_fileInput_9w09i_59",De="_fileDisplay_9w09i_87",$e="_fileIcon_9w09i_95",Oe="_fileName_9w09i_100",Me="_browseButton_9w09i_109",Re="_optionsArea_9w09i_120",Ue="_checkboxLabel_9w09i_128",qe="_checkbox_9w09i_128",He="_checkboxCustom_9w09i_141",Qe="_optionText_9w09i_169",Ke="_optionTitle_9w09i_175",We="_optionDesc_9w09i_181",je="_actions_9w09i_187",ze="_importBtn_9w09i_195",Ge="_cancelBtn_9w09i_201",Je="_statusMessage_9w09i_215",Ve="_success_9w09i_225",Ze="_error_9w09i_231",Xe="_progressSection_9w09i_237",Ye="_progressBar_9w09i_242",et="_progressFill_9w09i_250",tt="_progressInfo_9w09i_257",nt="_progressCount_9w09i_264",it="_progressTitle_9w09i_271",st="_sourceBadge_9w09i_289",at="_anilist_9w09i_301",ot="_kitsu_9w09i_307",rt="_skipped_9w09i_313",ct="_cardTitleRow_9w09i_318",lt="_anilistIcon_9w09i_328",dt="_malIcon_9w09i_334",pt="_badgeOnline_9w09i_340",ht="_badgeOffline_9w09i_352",ut="_connectedProfile_9w09i_364",mt="_avatar_9w09i_373",_t="_connectedInfo_9w09i_380",gt="_connectedName_9w09i_388",wt="_connectedHint_9w09i_394",ft="_loginPrompt_9w09i_399",yt="_loginSection_9w09i_407",Nt="_fieldLabel_9w09i_413",bt="_helpText_9w09i_432",vt="_loginText_9w09i_449",It="_primaryBtn_9w09i_458",kt="_secondaryBtn_9w09i_459",St="_syncBtn_9w09i_460",Tt="_divider_9w09i_512",Ct="_actionSection_9w09i_518",Lt="_inputGroup_9w09i_532",xt="_input_9w09i_532",At="_syncSummary_9w09i_553",Bt="_syncErrors_9w09i_559",Et="_spin_9w09i_563",t={header:Se,fadeIn:Te,pageTitle:Ce,pageSubtitle:Le,importCard:xe,slideUpIn:Ae,cardHeader:Be,uploadArea:Ee,fileInputWrapper:Pe,fileInput:Fe,fileDisplay:De,fileIcon:$e,fileName:Oe,browseButton:Me,optionsArea:Re,checkboxLabel:Ue,checkbox:qe,checkboxCustom:He,optionText:Qe,optionTitle:Ke,optionDesc:We,actions:je,importBtn:ze,cancelBtn:Ge,statusMessage:Je,success:Ve,error:Ze,progressSection:Xe,progressBar:Ye,progressFill:et,progressInfo:tt,progressCount:nt,progressTitle:it,sourceBadge:st,anilist:at,kitsu:ot,skipped:rt,cardTitleRow:ct,anilistIcon:lt,malIcon:dt,badgeOnline:pt,badgeOffline:ht,connectedProfile:ut,avatar:mt,connectedInfo:_t,connectedName:gt,connectedHint:wt,loginPrompt:ft,loginSection:yt,fieldLabel:Nt,helpText:bt,loginText:vt,primaryBtn:It,secondaryBtn:kt,syncBtn:St,divider:Tt,actionSection:Ct,inputGroup:Lt,input:xt,syncSummary:At,syncErrors:Bt,spin:Et},q="tracker_anilist_client_id",ie="49887".trim(),Dt=()=>{const{setIsOpen:p}=ge(),c=se();X.useEffect(()=>{document.title="Trackers - dango"},[]);const[g,h]=l(""),[a,I]=l(null),[u,f]=l(""),B=ve(),{data:i,isLoading:m}=Y({queryKey:["trackerStatus"],queryFn:async()=>{const n=await fetch("/api/tracker/status");if(!n.ok)throw new Error("Failed to load tracker status");return n.json()}}),{data:w}=Y({queryKey:["anilistClientId"],queryFn:async()=>(await(await fetch(`/api/settings?key=${q}`)).json()).value||""}),H=ee(!1);X.useEffect(()=>{H.current||w!==void 0&&(w&&f(w),H.current=!0)},[w]);const E=i?.anilist?.connected??!1,k=i?.anilist?.user??null,P=!!ie,oe=(w||"").trim(),re=async()=>{const n=u.trim(),r=n||ie;if(!r){s.error("Enter your AniList client ID first");return}const y=async(_,O)=>{if(!(await fetch("/api/settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:_,value:O})})).ok)throw new Error(`Failed to save ${_}`)};try{n?n!==w&&await y(q,n):P&&oe&&await y(q,""),c.invalidateQueries({queryKey:["anilistClientId"]})}catch(_){s.error(_.message);return}const d=window.location.origin+window.location.pathname,N=encodeURIComponent(d);window.location.href=`https://anilist.co/api/v2/oauth/authorize?client_id=${encodeURIComponent(r)}&response_type=token&state=${N}`},Q=R({mutationFn:async()=>{const n=await fetch("/api/tracker/anilist/disconnect",{method:"POST"});if(!n.ok)throw new Error("Failed to disconnect");return n.json()},onSuccess:()=>{c.invalidateQueries({queryKey:["trackerStatus"]}),s.success("Disconnected from AniList")},onError:n=>s.error(n.message)}),S=R({mutationFn:async()=>{const n=await fetch("/api/tracker/sync",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:"anilist"})}),r=await n.json();if(!n.ok)throw new Error(r.error||"Sync failed");return r.summary},onSuccess:n=>{c.invalidateQueries({queryKey:["watchlist"]}),c.invalidateQueries({queryKey:["allContinueWatching"]}),I(n),s.success(`Sync complete — pushed ${n.pushed}, pulled ${n.pulled}, merged ${n.merged}, unchanged ${n.unchanged}`,{duration:6e3})},onError:n=>s.error(n.message)}),T=R({mutationFn:async()=>{if(!g.trim())throw new Error("Please enter a username");const n=await fetch("/api/tracker/anilist/import",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:g.trim()})}),r=await n.json();if(!n.ok)throw new Error(r.error||"Import failed");return r.count},onSuccess:n=>{c.invalidateQueries({queryKey:["watchlist"]}),c.invalidateQueries({queryKey:["allContinueWatching"]}),s.success(`Imported ${n} anime entries from AniList`),h("")},onError:n=>s.error(n.message)}),[F,ce]=l(!1),[K,W]=l(""),[C,j]=l(!1),[o,z]=l(null),[D,G]=l(null),[J,L]=l(""),$=ee(null),le=n=>{n.target.files&&n.target.files.length>0?W(n.target.files[0].name):W("")},de=_e(async()=>{const n=document.getElementById("malFile");if(!n.files||n.files.length===0){L("Please select a file first.");return}const r=n.files[0];j(!0),z(null),G(null),L("");const y=new AbortController;$.current=y;try{const d=new FormData;d.append("xmlfile",r),d.append("erase",String(F));const N=await fetch("/api/import/mal-xml",{method:"POST",body:d,signal:y.signal});if(!N.ok){const M=await N.text();let b="Failed to import";try{b=JSON.parse(M).error||b}catch{}throw new Error(b)}const _=N.body?.getReader();if(!_)throw new Error("No response stream");const O=new TextDecoder;let x="",A="";for(;;){const{done:M,value:b}=await _.read();if(M)break;x+=O.decode(b,{stream:!0});const V=x.split(`
2
+ `);x=V.pop()||"";for(const v of V)if(v.startsWith("event: "))A=v.slice(7).trim();else if(v.startsWith("data: ")){const ue=v.slice(6);try{const Z=JSON.parse(ue);A==="progress"?z(Z):A==="complete"&&G(Z)}catch{}}else v===""&&(A="")}c.invalidateQueries({queryKey:["watchlist"]})}catch(d){d instanceof DOMException&&d.name==="AbortError"?L("Import cancelled."):L(d.message)}finally{j(!1),$.current=null}},[F,c]),pe=()=>{$.current?.abort()},he=o?Math.round(o.current/o.total*100):0;return e("div",{className:"page-container",children:[e("div",{className:t.header,children:[e("h1",{className:t.pageTitle,children:"Trackers"}),e("p",{className:t.pageSubtitle,children:"Import & sync your anime watchlists with tracking services"})]}),e("div",{className:t.importCard,children:[e("div",{className:t.cardHeader,children:e("div",{className:t.cardTitleRow,children:[e(ke,{className:t.anilistIcon}),e("h3",{children:"AniList"}),m?null:E?e("span",{className:t.badgeOnline,children:"Connected"}):e("span",{className:t.badgeOffline,children:"Not connected"})]})}),E&&k?e("div",{className:t.connectedProfile,children:[k.avatar&&e("img",{src:k.avatar,alt:"Avatar",className:t.avatar}),e("div",{className:t.connectedInfo,children:[e("span",{className:t.connectedName,children:k.name}),e("span",{className:t.connectedHint,children:"2-way sync is ready"})]}),e("button",{className:t.secondaryBtn,onClick:()=>Q.mutate(),disabled:Q.isPending,children:[e(we,{})," Disconnect"]})]}):e("div",{className:t.loginSection,children:[e("p",{className:t.loginText,children:["Log in with AniList to enable bidirectional progress & status synchronization.",B&&e("span",{style:{marginLeft:8,color:"var(--accent)"},children:"Finishing login…"})]}),e("div",{className:t.fieldLabel,children:["AniList client ID — defaults to Dango's app"," ",e("a",{href:"https://anilist.co/settings/developer",target:"_blank",rel:"noopener noreferrer",children:["create your own app ",e(te,{size:9})]})]}),e("div",{className:t.inputGroup,children:[e("input",{type:"text",placeholder:"Client ID",value:u,onChange:n=>f(n.target.value),className:t.input}),e("button",{className:t.primaryBtn,onClick:re,disabled:!(u.trim()||P),children:[e(te,{})," Connect"]})]}),e("p",{className:t.helpText,children:P?e(U,{children:["By default uses Dango's client. To use your own AniList app: create it at"," ",e("a",{href:"https://anilist.co/settings/developer",target:"_blank",rel:"noopener noreferrer",children:"anilist.co/settings/developer"}),", set its ",e("strong",{children:"Redirect URL"})," to"," ",e("code",{children:window.location.port==="5173"?`${window.location.protocol}//${window.location.hostname}:3000/api/tracker/anilist/callback`:`${window.location.origin}/api/tracker/anilist/callback`}),", then paste only the ",e("strong",{children:"Client ID"})," above (leave empty to use Dango's)."]}):e(U,{children:["No shipped client in this build — create your own app at"," ",e("a",{href:"https://anilist.co/settings/developer",target:"_blank",rel:"noopener noreferrer",children:"anilist.co/settings/developer"}),", set ",e("strong",{children:"Redirect URL"})," to"," ",e("code",{children:window.location.port==="5173"?`${window.location.protocol}//${window.location.hostname}:3000/api/tracker/anilist/callback`:`${window.location.origin}/api/tracker/anilist/callback`}),", then paste the ",e("strong",{children:"Client ID"})," above."]})})]}),e("hr",{className:t.divider}),e("div",{className:t.actionSection,children:[e("h4",{children:"Two-way Sync"}),e("p",{children:"Merges progress non-destructively: pushes shows and episodes you watched on dango to AniList, and pulls anything you updated on AniList into dango."}),e("p",{style:{fontSize:"0.8rem",color:"var(--text-tertiary)",background:"var(--bg-tertiary)",border:"1px solid var(--border-primary)",borderRadius:"6px",padding:"8px 10px",marginBottom:"12px",lineHeight:1.5},children:[e("strong",{children:"Note:"})," AniList ",e("code",{children:"Rewatching (REPEATING)"})," is not tracked — entries with this status are ignored and left unchanged on AniList."]}),e("button",{className:t.syncBtn,onClick:()=>S.mutate(),disabled:!E||S.isPending,children:[e(fe,{className:S.isPending?t.spin:""}),S.isPending?"Syncing...":"Start Sync"]}),a&&e("div",{className:t.syncSummary,children:["Pushed: ",a.pushed," · Pulled: ",a.pulled," · Merged:"," ",a.merged," · Unchanged: ",a.unchanged,a.errors.length>0&&e("span",{className:t.syncErrors,children:[" ","· ",a.errors.length," error",a.errors.length>1?"s":""]})]})]}),e("hr",{className:t.divider}),e("div",{className:t.actionSection,children:[e("h4",{children:"Quick Import"}),e("p",{children:"Import all public anime list entries directly from any AniList username."}),e("div",{className:t.inputGroup,children:[e("input",{type:"text",placeholder:"Enter AniList username",value:g,onChange:n=>h(n.target.value),className:t.input,disabled:T.isPending}),e("button",{className:t.secondaryBtn,onClick:()=>T.mutate(),disabled:T.isPending,children:[e(ye,{})," ",T.isPending?"Importing...":"Import List"]})]})]})]}),e("div",{className:t.importCard,children:[e("div",{className:t.cardHeader,children:[e("div",{className:t.cardTitleRow,children:[e(Ie,{className:t.malIcon}),e("h3",{children:"MyAnimeList"})]}),e("p",{children:"Upload your exported MyAnimeList XML file to import your watchlist into dango."})]}),e("div",{className:t.uploadArea,children:e("div",{className:t.fileInputWrapper,children:[e("input",{type:"file",id:"malFile",accept:".xml,application/xml",className:t.fileInput,onChange:le,disabled:C}),e("div",{className:t.fileDisplay,children:[e(Ne,{className:t.fileIcon}),e("span",{className:t.fileName,children:K||"Choose XML file..."})]}),e("label",{htmlFor:"malFile",className:t.browseButton,children:"Browse"})]})}),e("div",{className:t.optionsArea,children:e("label",{className:t.checkboxLabel,children:[e("input",{type:"checkbox",id:"eraseWatchlistToggle",checked:F,onChange:n=>ce(n.target.checked),className:t.checkbox,disabled:C}),e("span",{className:t.checkboxCustom}),e("div",{className:t.optionText,children:[e("span",{className:t.optionTitle,children:"Erase current watchlist"}),e("span",{className:t.optionDesc,children:"Warning: This will permanently delete your existing dango watchlist before importing."})]})]})}),e("div",{className:t.actions,children:C?e(ne,{onClick:pe,className:t.cancelBtn,children:"Cancel Import"}):e(ne,{onClick:de,className:t.importBtn,disabled:!K,children:[e(be,{})," Start Import"]})}),C&&o&&e("div",{className:t.progressSection,children:[e("div",{className:t.progressBar,children:e("div",{className:t.progressFill,style:{width:`${he}%`}})}),e("div",{className:t.progressInfo,children:[e("span",{className:t.progressCount,children:[o.current," / ",o.total]}),e("span",{className:t.progressTitle,children:o.found?e(U,{children:[o.matchedTitle,e("span",{className:`${t.sourceBadge} ${t[o.source||"anilist"]}`,children:o.source==="kitsu"?"Kitsu":"AniList"})]}):e("span",{className:t.skipped,children:["Skipped: ",o.title]})})]})]}),D&&e("div",{className:`${t.statusMessage} ${t.success}`,children:["Import complete! Imported: ",D.imported,", Skipped: ",D.skipped,"."]}),J&&e("div",{className:`${t.statusMessage} ${t.error}`,children:J})]})]})};export{Dt as default};
@@ -0,0 +1 @@
1
+ ._header_9w09i_1{margin-bottom:var(--space-8);animation:_fadeIn_9w09i_1 .8s var(--ease-smooth)}._pageTitle_9w09i_6{font-size:var(--font-size-xl);font-weight:800;color:var(--text-primary);margin:0 0 var(--space-2);letter-spacing:-.02em}._pageSubtitle_9w09i_14{color:var(--text-tertiary);font-size:var(--font-size-sm);margin:0}._importCard_9w09i_20{background:var(--glass-bg);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid var(--glass-border);padding:var(--space-8);border-radius:var(--radius-xl);box-shadow:var(--glass-shadow);max-width:600px;margin:0 auto;animation:_slideUpIn_9w09i_1 .8s var(--ease-smooth)}._importCard_9w09i_20+._importCard_9w09i_20{margin-top:var(--space-6)}._cardHeader_9w09i_37{margin-bottom:var(--space-6)}._cardHeader_9w09i_37 h3{margin:0 0 var(--space-2);font-size:var(--font-size-lg);font-weight:700;color:var(--text-primary)}._cardHeader_9w09i_37 p{color:var(--text-secondary);font-size:var(--font-size-sm);margin:0;line-height:1.6}._uploadArea_9w09i_55{margin-bottom:var(--space-6)}._fileInputWrapper_9w09i_59{position:relative;display:flex;align-items:center;gap:var(--space-4);background:var(--bg-tertiary);border:1px dashed var(--border-secondary);border-radius:var(--radius-lg);padding:var(--space-4);transition:all var(--transition-fast)}._fileInputWrapper_9w09i_59:hover{border-color:var(--accent);background:var(--bg-elevated)}._fileInput_9w09i_59{position:absolute;top:0;left:0;width:100%;height:100%;opacity:0;cursor:pointer;z-index:2}._fileDisplay_9w09i_87{flex:1;display:flex;align-items:center;gap:var(--space-3);overflow:hidden}._fileIcon_9w09i_95{color:var(--text-tertiary);font-size:1.5rem}._fileName_9w09i_100{color:var(--text-primary);font-size:var(--font-size-sm);font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}._browseButton_9w09i_109{background:#ffffff0d;border:1px solid var(--border-primary);color:var(--text-secondary);padding:var(--space-2) var(--space-4);border-radius:var(--radius-md);font-size:var(--font-size-sm);font-weight:600;pointer-events:none}._optionsArea_9w09i_120{margin-bottom:var(--space-6);padding:var(--space-4);background:#f59e0b0d;border:1px solid rgba(245,158,11,.1);border-radius:var(--radius-lg)}._checkboxLabel_9w09i_128{display:flex;align-items:flex-start;gap:var(--space-3);cursor:pointer;position:relative}._checkbox_9w09i_128{opacity:0;position:absolute}._checkboxCustom_9w09i_141{width:20px;height:20px;border:2px solid var(--border-secondary);border-radius:4px;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px;transition:all var(--transition-fast)}._checkbox_9w09i_128:checked+._checkboxCustom_9w09i_141{background:#f59e0b;border-color:#f59e0b}._checkbox_9w09i_128:checked+._checkboxCustom_9w09i_141:after{content:"";width:5px;height:10px;border:solid white;border-width:0 2px 2px 0;transform:rotate(45deg);margin-bottom:2px}._optionText_9w09i_169{display:flex;flex-direction:column;gap:4px}._optionTitle_9w09i_175{color:#f59e0b;font-weight:600;font-size:var(--font-size-sm)}._optionDesc_9w09i_181{color:var(--text-tertiary);font-size:.8rem;line-height:1.4}._actions_9w09i_187{display:flex;justify-content:flex-end;gap:var(--space-3);border-top:1px solid var(--border-primary);padding-top:var(--space-6)}._importBtn_9w09i_195{display:flex;align-items:center;gap:var(--space-2)}._cancelBtn_9w09i_201{display:flex;align-items:center;gap:var(--space-2);background:#ef444426;border-color:#ef44444d;color:#ef4444}._cancelBtn_9w09i_201:hover{background:#ef444440;border-color:#ef444480}._statusMessage_9w09i_215{margin-top:var(--space-6);padding:var(--space-4);border-radius:var(--radius-md);font-size:var(--font-size-sm);font-weight:500;text-align:center;animation:_fadeIn_9w09i_1 .3s ease}._statusMessage_9w09i_215._success_9w09i_225{background:#10b9811a;color:#10b981;border:1px solid rgba(16,185,129,.2)}._statusMessage_9w09i_215._error_9w09i_231{background:#ef44441a;color:#ef4444;border:1px solid rgba(239,68,68,.2)}._progressSection_9w09i_237{margin-top:var(--space-6);animation:_fadeIn_9w09i_1 .3s ease}._progressBar_9w09i_242{height:6px;background:var(--bg-tertiary);border-radius:3px;overflow:hidden;margin-bottom:var(--space-3)}._progressFill_9w09i_250{height:100%;background:linear-gradient(90deg,#6366f1,#8b5cf6);border-radius:3px;transition:width .3s ease}._progressInfo_9w09i_257{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3)}._progressCount_9w09i_264{font-size:var(--font-size-sm);color:var(--text-tertiary);font-weight:500;white-space:nowrap}._progressTitle_9w09i_271{display:flex;align-items:center;gap:var(--space-2);font-size:var(--font-size-sm);color:var(--text-primary);font-weight:500;text-align:right;overflow:hidden}._progressTitle_9w09i_271>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:300px}._sourceBadge_9w09i_289{display:inline-flex;align-items:center;padding:2px 8px;border-radius:10px;font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;flex-shrink:0}._sourceBadge_9w09i_289._anilist_9w09i_301{background:#6366f126;color:#818cf8;border:1px solid rgba(99,102,241,.3)}._sourceBadge_9w09i_289._kitsu_9w09i_307{background:#ec489926;color:#f472b6;border:1px solid rgba(236,72,153,.3)}._skipped_9w09i_313{color:var(--text-tertiary);font-style:italic}._cardTitleRow_9w09i_318{display:flex;align-items:center;gap:var(--space-3)}._cardTitleRow_9w09i_318 h3{margin:0}._anilistIcon_9w09i_328{font-size:1.5rem;color:#818cf8;flex-shrink:0}._malIcon_9w09i_334{font-size:1.5rem;color:#2e51a2;flex-shrink:0}._badgeOnline_9w09i_340{font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;padding:3px 10px;border-radius:var(--radius-full);background:#10b9811f;color:#10b981;border:1px solid rgba(16,185,129,.25)}._badgeOffline_9w09i_352{font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;padding:3px 10px;border-radius:var(--radius-full);background:var(--bg-tertiary);color:var(--text-tertiary);border:1px solid var(--border-primary)}._connectedProfile_9w09i_364{display:flex;align-items:center;gap:var(--space-4);padding:var(--space-4);background:var(--bg-tertiary);border-radius:var(--radius-lg)}._avatar_9w09i_373{width:48px;height:48px;border-radius:50%;flex-shrink:0}._connectedInfo_9w09i_380{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}._connectedName_9w09i_388{color:var(--text-primary);font-weight:700;font-size:var(--font-size-sm)}._connectedHint_9w09i_394{color:#10b981;font-size:.8rem}._loginPrompt_9w09i_399{display:flex;align-items:center;justify-content:space-between;gap:var(--space-4);flex-wrap:wrap}._loginSection_9w09i_407{display:flex;flex-direction:column;gap:var(--space-3)}._fieldLabel_9w09i_413{font-size:var(--font-size-sm);font-weight:600;color:var(--text-primary)}._fieldLabel_9w09i_413 a{color:var(--accent);text-decoration:none;display:inline-flex;align-items:center;gap:4px;margin-left:6px}._fieldLabel_9w09i_413 a:hover{text-decoration:underline}._helpText_9w09i_432{margin:0;font-size:.8rem;color:var(--text-tertiary);line-height:1.6}._helpText_9w09i_432 code{background:var(--bg-tertiary);border:1px solid var(--border-primary);border-radius:4px;padding:1px 6px;font-size:.75rem;color:var(--text-secondary);word-break:break-all}._loginText_9w09i_449{color:var(--text-secondary);font-size:var(--font-size-sm);margin:0;line-height:1.6;flex:1;min-width:220px}._primaryBtn_9w09i_458,._secondaryBtn_9w09i_459,._syncBtn_9w09i_460{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);padding:var(--space-2-5) var(--space-4);border-radius:var(--radius-md);font-weight:600;font-size:var(--font-size-sm);cursor:pointer;border:1px solid transparent;transition:all var(--transition-fast);flex-shrink:0}._primaryBtn_9w09i_458{background:var(--accent);color:var(--accent-text)}._primaryBtn_9w09i_458:hover{filter:brightness(1.1)}._secondaryBtn_9w09i_459{background:#ffffff0d;border-color:var(--border-primary);color:var(--text-primary)}._secondaryBtn_9w09i_459:hover:not(:disabled){background:var(--bg-elevated);border-color:var(--border-secondary)}._syncBtn_9w09i_460{background:linear-gradient(135deg,#6366f1,#8b5cf6);color:#fff;padding:var(--space-3) var(--space-6)}._syncBtn_9w09i_460:hover:not(:disabled){filter:brightness(1.1)}._primaryBtn_9w09i_458:disabled,._secondaryBtn_9w09i_459:disabled,._syncBtn_9w09i_460:disabled{opacity:.5;cursor:not-allowed}._divider_9w09i_512{border:0;border-top:1px solid var(--border-primary);margin:var(--space-6) 0}._actionSection_9w09i_518 h4{margin:0 0 var(--space-1);color:var(--text-primary);font-size:var(--font-size-sm);font-weight:700}._actionSection_9w09i_518 p{color:var(--text-secondary);font-size:var(--font-size-sm);margin:0 0 var(--space-4);line-height:1.6}._inputGroup_9w09i_532{display:flex;gap:var(--space-2)}._input_9w09i_532{flex:1;min-width:0;padding:var(--space-2-5) var(--space-3);border-radius:var(--radius-md);border:1px solid var(--border-primary);background:var(--bg-tertiary);color:var(--text-primary);font-size:var(--font-size-sm)}._input_9w09i_532:focus{outline:none;border-color:var(--accent)}._syncSummary_9w09i_553{margin-top:var(--space-3);font-size:.8rem;color:var(--text-tertiary)}._syncErrors_9w09i_559{color:#ef4444}._spin_9w09i_563{animation:_spin_9w09i_563 1s linear infinite}@keyframes _spin_9w09i_563{to{transform:rotate(360deg)}}@keyframes _fadeIn_9w09i_1{0%{opacity:0}to{opacity:1}}@keyframes _slideUpIn_9w09i_1{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}@media(max-width:600px){._importCard_9w09i_20{padding:var(--space-6)}._fileInputWrapper_9w09i_59{flex-direction:column;align-items:stretch;text-align:center}._fileDisplay_9w09i_87{flex-direction:column}._browseButton_9w09i_109{text-align:center}}
@@ -0,0 +1 @@
1
+ ._cardWrapper_1etzt_1{position:relative;width:100%;height:100%;min-width:0;z-index:1;transition:z-index var(--transition-fast);content-visibility:auto;contain-intrinsic-size:200px 300px;border-radius:var(--radius-md)}._cardWrapper_1etzt_1:hover{z-index:5}._card_1etzt_1{display:flex;flex-direction:column;background-color:var(--bg-secondary);border-radius:var(--radius-md);overflow:hidden;height:100%;min-width:0;box-shadow:none;border:1px solid var(--border-secondary);transition:border-color var(--transition-base),background-color var(--transition-base);-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}._cardWrapper_1etzt_1:hover ._card_1etzt_1,._cardWrapper_1etzt_1:focus-within ._card_1etzt_1{border-color:var(--border-accent);background-color:var(--bg-tertiary);box-shadow:var(--shadow-active)}._cardWrapper_1etzt_1:focus-within{z-index:5}._posterContainer_1etzt_46{position:relative;width:100%;aspect-ratio:2 / 3;overflow:hidden;background:var(--bg-tertiary);border-radius:var(--radius-md) var(--radius-md) 0 0}._poster_1etzt_46{width:100%;height:100%;object-fit:cover;opacity:0;transition:opacity .4s ease,transform var(--transition-base),filter var(--transition-base);border-radius:var(--radius-md) var(--radius-md) 0 0}._poster_1etzt_46._loaded_1etzt_67{opacity:1}._poster_1etzt_46._gated_1etzt_71{filter:blur(14px);transform:scale(1.1)}._adultBadge_1etzt_76{position:absolute;top:8px;right:8px;background:#dc2626e6;color:#fff;font-size:.65rem;font-weight:700;padding:2px 6px;border-radius:4px;z-index:2;pointer-events:none}._posterPlaceholder_1etzt_90{width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:var(--text-secondary);font-size:.75rem;text-align:center;padding:1rem;background:var(--bg-tertiary)}._cardWrapper_1etzt_1:hover ._poster_1etzt_46{transform:scale(1.05)}._badges_1etzt_107{position:absolute;top:8px;left:8px;right:8px;display:flex;gap:6px;flex-wrap:wrap;z-index:2}._typeBadge_1etzt_118{padding:2px 8px;border-radius:4px;font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background-color:#000000b3;color:#fff;border:1px solid rgba(255,255,255,.1)}._typeBadge_1etzt_118._tv_1etzt_131{background:#3b82f6d9;color:#fff}._typeBadge_1etzt_118._movie_1etzt_136{background:#10b981d9;color:#fff}._typeBadge_1etzt_118._tvSeries_1etzt_141,._typeBadge_1etzt_118._tvMiniSeries_1etzt_146{background:#3b82f6d9;color:#fff}._ratingBadge_1etzt_151{display:inline-flex;align-items:center;padding:2px 6px;border-radius:4px;background:#000000b3;color:#fbbf24;font-size:.7rem;font-weight:600;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}._info_1etzt_163{padding:10px}._title_1etzt_167{margin:0;font-size:.9rem;font-weight:600;line-height:1.3;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;color:#e2e8f0;transition:color var(--transition-base);word-break:break-word;min-width:0}._cardWrapper_1etzt_1:hover ._title_1etzt_167{color:var(--accent-light)}._year_1etzt_186{margin:4px 0 0;font-size:.75rem;color:var(--text-secondary)}._container_1o48l_1{position:relative;width:100%;aspect-ratio:16 / 9;background:#000;overflow:hidden;border-radius:var(--radius-md);container-type:inline-size}._container_1o48l_1:fullscreen{width:100vw;height:100vh;aspect-ratio:auto;border-radius:0}@media(max-width:900px)and (orientation:landscape){._container_1o48l_1{aspect-ratio:auto;height:100vh;border-radius:0}}@media(max-width:900px){._settingsPanel_1o48l_27{right:12px;bottom:70px}}@media(pointer:coarse){._menuItem_1o48l_34{min-height:2.75rem}}@container (max-width: 26rem){._timeDisplay_1o48l_40{display:none}._bottomControls_1o48l_44{padding:.75rem}._leftControls_1o48l_48,._rightControls_1o48l_49{gap:.2rem}._controlBtn_1o48l_53{padding:5px;min-width:2.125rem;min-height:2.125rem}}._video_1o48l_60{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:contain;display:block;background:#000;border:none}._controlsOverlay_1o48l_72{position:absolute;inset:0;opacity:1;transition:opacity .4s cubic-bezier(.4,0,.2,1);z-index:50;pointer-events:none;display:flex;flex-direction:column;justify-content:space-between;background:radial-gradient(circle,transparent 20%,rgba(0,0,0,.4) 100%)}._controlsOverlay_1o48l_72>*{pointer-events:auto}._controlsOverlay_1o48l_72._hidden_1o48l_92{opacity:0;pointer-events:none;cursor:none}._topControls_1o48l_98{position:absolute;top:0;left:0;right:0;display:flex;align-items:center;gap:var(--space-6);background:linear-gradient(to bottom,rgba(0,0,0,.85) 0%,rgba(0,0,0,.45) 60%,transparent 100%);padding:var(--space-8) var(--space-10);transition:transform .4s cubic-bezier(.2,.8,.2,1);z-index:10;pointer-events:auto}._backBtn_1o48l_118{background:transparent;border:none;color:#ffffffd9;font-size:1.6rem;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--transition-fast);padding:8px;border-radius:50%}._backBtn_1o48l_118:hover{background:#0f0f1199;color:#fff;transform:scale(1.1)}._videoTitleInfo_1o48l_138{display:flex;flex-direction:column;gap:.25rem}._animeTitle_1o48l_144{font-size:1.4rem;font-weight:800;color:#fff;letter-spacing:-.01em;text-shadow:0 2px 4px rgba(0,0,0,.5)}._bottomControls_1o48l_44{position:absolute;bottom:0;left:0;right:0;background:linear-gradient(to top,rgba(0,0,0,.85) 0%,rgba(0,0,0,.45) 60%,transparent 100%);padding:clamp(1rem,4cqw,2.5rem) clamp(1rem,4cqw,2.5rem) clamp(.75rem,2.5cqw,1.5rem);z-index:10;pointer-events:auto;transition:transform .4s cubic-bezier(.2,.8,.2,1)}._progressBarContainer_1o48l_169{width:100%;height:20px;display:flex;align-items:center;cursor:pointer;position:relative;touch-action:pan-y}@media(pointer:coarse){._progressBarContainer_1o48l_169{height:28px}._progressBarContainer_1o48l_169 ._progressBar_1o48l_169{height:6px}._progressBarContainer_1o48l_169 ._thumb_1o48l_188{opacity:1}}._progressBar_1o48l_169{width:100%;height:4px;background:#fff3;border-radius:2px;position:relative;transition:height .15s ease}._progressBarContainer_1o48l_169:hover ._progressBar_1o48l_169{height:6px}._bufferedBar_1o48l_206{position:absolute;top:0;left:0;height:100%;background:#ffffff4d;border-radius:2px;pointer-events:none}._watchedBar_1o48l_216{position:absolute;top:0;left:0;height:100%;background:var(--accent);border-radius:2px;pointer-events:none}._thumb_1o48l_188{position:absolute;top:50%;width:12px;height:12px;background:#fff;border-radius:50%;transform:translate(-50%,-50%);box-shadow:0 0 4px #0006;pointer-events:none;opacity:0;transition:opacity .15s ease}._progressBarContainer_1o48l_169:hover ._thumb_1o48l_188,._progressBarContainer_1o48l_169._scrubbing_1o48l_241 ._thumb_1o48l_188{opacity:1}._timeBubble_1o48l_245{position:absolute;bottom:24px;background:#000000d9;color:#fff;padding:4px 8px;border-radius:4px;font-size:.8rem;font-weight:500;transform:translate(-50%);pointer-events:none;white-space:nowrap}._bottomControlsRow_1o48l_259{display:flex;align-items:center;justify-content:space-between;gap:.75rem;margin-top:8px}._leftControls_1o48l_48{display:flex;align-items:center;gap:1rem;gap:clamp(.5rem,2.5cqw,1rem);min-width:0}._rightControls_1o48l_49{display:flex;align-items:center;gap:.75rem;gap:clamp(.5rem,2cqw,.75rem)}._controlBtn_1o48l_53{background:transparent;border:none;color:#ffffffd9;font-size:1.1rem;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:8px;border-radius:4px;transition:all var(--transition-fast);min-width:2.125rem;min-height:2.125rem;flex:0 0 auto}@media(pointer:coarse){._controlBtn_1o48l_53{padding:10px;min-width:2.75rem;min-height:2.75rem}}._controlBtn_1o48l_53:hover{color:#fff;background:#ffffff1a}._controlBtn_1o48l_53._active_1o48l_312{color:var(--accent)}._volumeContainer_1o48l_316{display:flex;align-items:center;position:relative}._volumeSlider_1o48l_322{width:0;opacity:0;transform:scaleX(0);transform-origin:left;transition:all .3s cubic-bezier(.4,0,.2,1);cursor:pointer;margin-left:8px;-webkit-appearance:none;appearance:none;background:transparent;height:20px}._volumeContainer_1o48l_316:hover ._volumeSlider_1o48l_322,._volumeSlider_1o48l_322:focus{width:80px;opacity:1;transform:scaleX(1)}._volumeSlider_1o48l_322::-webkit-slider-runnable-track{width:100%;height:4px;background:linear-gradient(to right,var(--accent) 0%,var(--accent) var(--volume-percent, 0%),rgba(255,255,255,.2) var(--volume-percent, 0%),rgba(255,255,255,.2) 100%);border-radius:4px}._volumeSlider_1o48l_322::-moz-range-track{width:100%;height:4px;background:#fff3;border-radius:4px}._volumeSlider_1o48l_322::-moz-range-progress{height:4px;background:var(--accent);border-radius:4px}._volumeSlider_1o48l_322::-webkit-slider-thumb{-webkit-appearance:none;height:12px;width:12px;border-radius:50%;background:#fff;margin-top:-4px;box-shadow:0 0 5px #00000080}._timeDisplay_1o48l_40{color:#fffc;font-size:.85rem;font-weight:500;font-variant-numeric:tabular-nums;min-width:100px}._settingsPanel_1o48l_27{position:absolute;bottom:clamp(4rem,12vh,6.25rem);right:clamp(.5rem,4vw,2.5rem);background:#141418f2;border:1px solid var(--border-secondary);border-radius:var(--radius-md);width:max-content;min-width:12rem;max-width:min(19rem,calc(100vw - 1.5rem));font-size:.85rem;z-index:60;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);box-shadow:0 8px 32px #00000080;display:flex;flex-direction:column;overflow:hidden}._settingsHeader_1o48l_406{display:flex;align-items:center;padding:.55rem .75rem;border-bottom:1px solid var(--border-secondary);gap:.625rem}._settingsBackBtn_1o48l_414{background:transparent;border:none;color:#ffffffd9;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:4px;border-radius:4px;transition:all var(--transition-fast)}._settingsBackBtn_1o48l_414:hover{background:#ffffff1a;color:#fff}._settingsTitle_1o48l_432{font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}._settingsContent_1o48l_443{overflow-y:auto;padding:.375rem;display:flex;flex-direction:column;gap:.125rem;max-height:min(56vh,22rem)}._currentValue_1o48l_452{color:var(--text-tertiary);font-size:.8rem;font-weight:500}._settingsLabel_1o48l_458{padding:var(--space-2) var(--space-4);font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--text-secondary)}._menuItem_1o48l_34{display:flex;align-items:center;justify-content:space-between;gap:.75rem;width:100%;min-height:2rem;padding:.5rem .75rem;background:transparent;border:none;color:var(--text-primary);font-size:.85rem;cursor:pointer;border-radius:var(--radius-sm);transition:background-color var(--transition-fast);text-align:left;white-space:nowrap}._menuItem_1o48l_34:hover{background:var(--bg-tertiary)}._menuItem_1o48l_34._active_1o48l_312{background:var(--bg-tertiary);color:var(--accent)}._currentValue_1o48l_452{color:var(--text-secondary);font-size:.85rem}._menuNote_1o48l_500{padding:.5rem .75rem;font-size:.7rem;line-height:1.5;color:var(--text-tertiary);white-space:normal;overflow-wrap:break-word}._spin_1o48l_509{animation:_spin_1o48l_509 1s linear infinite}@keyframes _spin_1o48l_509{0%{transform:rotate(0)}to{transform:rotate(360deg)}}._page_1e0ns_1{max-width:1200px;margin:0 auto;padding:1.5rem}._header_1e0ns_7{margin-bottom:1.5rem}._pageTitle_1e0ns_11{font-size:1.75rem;font-weight:700;margin:0 0 1rem;display:flex;align-items:center;gap:.5rem;color:var(--text-primary)}._searchForm_1e0ns_21{display:flex;gap:.5rem;max-width:600px}._searchInput_1e0ns_27{flex:1;padding:.6rem 1rem;border-radius:8px;border:1px solid var(--border-primary);background:var(--bg-elevated);color:var(--text-primary);font-size:.95rem;outline:none}._searchInput_1e0ns_27:focus{border-color:var(--accent)}._searchBtn_1e0ns_42{padding:.6rem 1rem;border-radius:8px;border:none;background:var(--accent);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center}._searchBtn_1e0ns_42:hover{opacity:.9}._suggestions_1e0ns_58{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:1.5rem}._suggestionPill_1e0ns_65{padding:.4rem .8rem;border-radius:20px;border:1px solid var(--border-primary);background:var(--bg-elevated);color:var(--text-secondary);cursor:pointer;font-size:.85rem;transition:all .15s ease}._suggestionPill_1e0ns_65:hover{border-color:var(--accent);color:var(--text-primary)}._statusMsg_1e0ns_81{padding:1rem;text-align:center;color:var(--text-secondary)}._statusMsg_1e0ns_81._error_1e0ns_87{color:#f87171}._statusMsg_1e0ns_81._textOnly_1e0ns_91{background:none;padding:.5rem}._spinner_1e0ns_96{animation:_spin_1e0ns_96 1s linear infinite;margin-right:.5rem}@keyframes _spin_1e0ns_96{0%{transform:rotate(0)}to{transform:rotate(360deg)}}._grid_1e0ns_110{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:1rem}._skeletonCard_1e0ns_116{border-radius:8px;overflow:hidden}._skeletonThumb_1e0ns_121{aspect-ratio:2 / 3;background:var(--bg-secondary);border-radius:8px}._skeletonLine_1e0ns_127{height:12px;background:var(--bg-secondary);border-radius:4px;margin-top:.5rem}._shimmer_1e0ns_134{background:linear-gradient(90deg,var(--bg-secondary) 25%,var(--bg-elevated) 50%,var(--bg-secondary) 75%);background-size:200% 100%;animation:_shimmer_1e0ns_134 1.5s infinite}@keyframes _shimmer_1e0ns_134{0%{background-position:200% 0}to{background-position:-200% 0}}._backBtn_1e0ns_154{display:inline-flex;align-items:center;gap:.4rem;padding:.4rem .8rem;border-radius:6px;border:1px solid var(--border-primary);background:var(--bg-elevated);color:var(--text-primary);cursor:pointer;font-size:.85rem;margin-bottom:1rem}._backBtn_1e0ns_154:hover{border-color:var(--accent)}._meta_1e0ns_172{display:flex;align-items:center;gap:.75rem;margin:.5rem 0;flex-wrap:wrap}._year_1e0ns_180{color:var(--text-secondary);font-size:.9rem}._rating_1e0ns_185{display:inline-flex;align-items:center;color:#fbbf24;font-weight:600;font-size:.9rem}._typeBadge_1e0ns_193{padding:2px 10px;border-radius:4px;font-size:.75rem;font-weight:600;text-transform:uppercase}._typeBadge_1e0ns_193._tv_1e0ns_201{background:#3b82f633;color:#60a5fa}._typeBadge_1e0ns_193._movie_1e0ns_206{background:#10b98133;color:#34d399}._typeBadge_1e0ns_193._tvSeries_1e0ns_211,._typeBadge_1e0ns_193._tvMiniSeries_1e0ns_216{background:#3b82f633;color:#60a5fa}._overview_1e0ns_221{color:var(--text-secondary);line-height:1.6;margin:.5rem 0 0;max-width:800px}._controls_1e0ns_228{display:flex;flex-wrap:wrap;gap:1rem;margin:1rem 0;align-items:flex-end}._controlLabel_1e0ns_236{display:flex;flex-direction:column;gap:.3rem;font-size:.8rem;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}._select_1e0ns_246{padding:.5rem .75rem;border-radius:6px;border:1px solid var(--border-primary);background:var(--bg-elevated);color:var(--text-primary);font-size:.9rem;cursor:pointer;min-width:160px}._playerSection_1e0ns_257{margin:1.5rem 0;border-radius:8px;overflow:hidden;overflow:clip;isolation:isolate;background:#000;position:relative}._video_1e0ns_261{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:contain;display:block;background:#000;border:none;border-radius:inherit}._videoHidden_1e0ns_283{opacity:0;pointer-events:none}._delayCanvas_1e0ns_288{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:contain;opacity:0;pointer-events:none;z-index:2;border-radius:inherit}._delayCanvasActive_1e0ns_301{opacity:1}._subtitleOverlay_1e0ns_305{position:absolute;top:0;left:0;width:100%;height:100%;z-index:3;pointer-events:none;overflow:hidden;border-radius:inherit}@media(max-width:900px)and (orientation:landscape){._playerSection_1e0ns_257{margin:0;border-radius:0}}._videoIframe_1e0ns_324{width:100%;aspect-ratio:16 / 9;min-height:400px;border:none;background:#000}._retryButton_1e0ns_332{margin-left:8px;padding:4px 10px;border-radius:4px;border:1px solid var(--border-primary);background:var(--bg-elevated);color:var(--text-primary);cursor:pointer;font-size:.8rem}._retryButton_1e0ns_332:hover{border-color:var(--accent)}
@@ -0,0 +1,15 @@
1
+ import{d as m,e,L as Bt,S as Se,h as _,A as M,q as _e,p as wt,r as Mt,f as Lt}from"./vendor-rLNfZm7Y.js";import{an as kt,B as lt,F as Ct,a5 as At,j as Pt,aa as zt,ac as Ft,ad as Vt,a6 as Ot,X as Rt,a8 as Dt,a9 as Ut,aN as Ht,Q as we,ai as jt,aO as Wt,a7 as qt,J as Kt}from"./index-CpjgU8ou.js";import{u as Nt}from"./useMatureConsent-CZMYBVXd.js";import{l as Xt,b as Gt,C as Qt,p as pt,M as it,S as Tt,T as Jt,B as Yt,d as Zt,D as R,u as en,s as mt,A as tn}from"./AvSyncCalibrator-vqErH7Cm.js";import{l as nn,c as sn}from"./hls-6Owgw2Aj.js";const rn="_cardWrapper_1etzt_1",an="_card_1etzt_1",on="_posterContainer_1etzt_46",ln="_poster_1etzt_46",cn="_loaded_1etzt_67",dn="_gated_1etzt_71",un="_adultBadge_1etzt_76",mn="_posterPlaceholder_1etzt_90",hn="_badges_1etzt_107",pn="_typeBadge_1etzt_118",vn="_tv_1etzt_131",gn="_movie_1etzt_136",fn="_tvSeries_1etzt_141",yn="_tvMiniSeries_1etzt_146",bn="_ratingBadge_1etzt_151",_n="_info_1etzt_163",Sn="_title_1etzt_167",Cn="_year_1etzt_186",V={cardWrapper:rn,card:an,posterContainer:on,poster:ln,loaded:cn,gated:dn,adultBadge:un,posterPlaceholder:mn,badges:hn,typeBadge:pn,tv:vn,movie:gn,tvSeries:fn,tvMiniSeries:yn,ratingBadge:bn,info:_n,title:Sn,year:Cn},Tn=({item:i})=>{const[S,I]=m(!1),[x,oe]=m(!1),{hasConsent:Q,grant:W}=Nt(),te=i.type==="tv"||i.type==="tvSeries"||i.type==="tvMiniSeries",ne=i.adult===!0&&!Q,J=`/tv/${i.id}?type=${te?"tv":"movie"}`,Ce=ue=>{ne&&(ue.preventDefault(),ue.stopPropagation(),oe(!0))};return e(Se,{children:[e(Bt,{to:J,className:V.cardWrapper,onClick:Ce,children:e("div",{className:V.card,children:[e("div",{className:V.posterContainer,children:[i.image?e("img",{src:i.image,alt:i.title,className:`${V.poster} ${S?V.loaded:""} ${ne?V.gated:""}`,loading:"lazy",decoding:"async",onLoad:()=>I(!0)}):e("div",{className:V.posterPlaceholder,children:e("span",{children:"No Image"})}),ne&&e("span",{className:V.adultBadge,children:"18+"}),e("div",{className:V.badges,children:[e("span",{className:`${V.typeBadge} ${V[i.type]}`,children:te?"TV":"Movie"}),i.vote_average!=null&&e("span",{className:V.ratingBadge,children:[e("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"currentColor",style:{marginRight:3},children:e("polygon",{points:"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"})}),Number(i.vote_average).toFixed(1)]})]})]}),e("div",{className:V.info,children:[e("h3",{className:V.title,children:i.title}),e("p",{className:V.year,children:i.year||"N/A"})]})]})}),x&&e(kt,{isOpen:x,title:"Content Warning",onClose:()=>oe(!1),children:e("div",{style:{padding:"1rem",textAlign:"center"},children:[e("p",{children:"This title contains mature content intended for adult audiences."}),e("p",{children:["By proceeding, you confirm that you are ",e("strong",{children:"18 years of age or older"})," (or the age of majority in your jurisdiction) and wish to view this content."]}),e("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center"},children:[e(lt,{variant:"secondary",onClick:()=>oe(!1),children:"Go Back"}),e(lt,{onClick:()=>{W(),oe(!1)},children:"I'm 18+, Continue"})]})]})})]})},kn="_container_1o48l_1",Nn="_settingsPanel_1o48l_27",En="_menuItem_1o48l_34",$n="_timeDisplay_1o48l_40",In="_bottomControls_1o48l_44",xn="_leftControls_1o48l_48",Bn="_rightControls_1o48l_49",wn="_controlBtn_1o48l_53",Mn="_controlsOverlay_1o48l_72",Ln="_hidden_1o48l_92",An="_topControls_1o48l_98",Pn="_backBtn_1o48l_118",zn="_videoTitleInfo_1o48l_138",Fn="_animeTitle_1o48l_144",Vn="_progressBarContainer_1o48l_169",On="_progressBar_1o48l_169",Rn="_thumb_1o48l_188",Dn="_bufferedBar_1o48l_206",Un="_watchedBar_1o48l_216",Hn="_scrubbing_1o48l_241",jn="_timeBubble_1o48l_245",Wn="_bottomControlsRow_1o48l_259",qn="_active_1o48l_312",Kn="_volumeContainer_1o48l_316",Xn="_volumeSlider_1o48l_322",Gn="_settingsHeader_1o48l_406",Qn="_settingsBackBtn_1o48l_414",Jn="_settingsTitle_1o48l_432",Yn="_settingsContent_1o48l_443",Zn="_currentValue_1o48l_452",es="_menuNote_1o48l_500",o={container:kn,settingsPanel:Nn,menuItem:En,timeDisplay:$n,bottomControls:In,leftControls:xn,rightControls:Bn,controlBtn:wn,controlsOverlay:Mn,hidden:Ln,topControls:An,backBtn:Pn,videoTitleInfo:zn,animeTitle:Fn,progressBarContainer:Vn,progressBar:On,thumb:Rn,bufferedBar:Dn,watchedBar:Un,scrubbing:Hn,timeBubble:jn,bottomControlsRow:Wn,active:qn,volumeContainer:Kn,volumeSlider:Xn,settingsHeader:Gn,settingsBackBtn:Qn,settingsTitle:Jn,settingsContent:Yn,currentValue:Zn,menuNote:es},ts=({videoRef:i,title:S,audioTracks:I,selectedAudioTrack:x,onAudioTrackChange:oe,subtitles:Q,selectedSubtitle:W,onSubtitleChange:te,streams:ne,qualityIdx:J,onQualityChange:Ce,onBack:ue,children:ct,movyServers:Me=[],selectedMovyServer:d="atlanta",onMovyServerSelect:Le,isMovySource:vt=!1,videoDelayEnabled:me=!1,onVideoDelayToggle:N,videoDelayMs:Te=0,onVideoDelayChange:dt,onCalibrateAvSync:We})=>{const[k,ke]=m(!1),[T,he]=m(!0),[q,pe]=m(0),[B,ie]=m(0),[se,A]=m(()=>{try{const n=parseFloat(localStorage.getItem("playerVolume")||"1");return isNaN(n)?1:Math.max(0,Math.min(1,n))}catch{return 1}}),[Ne,Ae]=m(()=>localStorage.getItem("playerMuted")==="true"),[le,ve]=m(!1),[f,P]=m(null),[z,D]=m({time:0,position:null}),[F,nt]=m(!1),[K]=m(Xt),[U,Ee]=m(K.fontSize),[ge,qe]=m(K.position),[Y,Z]=m(K.bgOpacity),[Ke,Xe]=m(K.bgColor),[$e,Pe]=m(K.textColor),[w,H]=m(K.edge),[j,Ge]=m(K.bold),L=(n,r)=>{try{localStorage.setItem(n,String(r))}catch{}},[Ie,ze]=m(null),fe=Ie??Te;_(()=>{ze(null)},[Te]);const st=()=>{Ie!==null&&(dt?.(Ie),ze(null))},ce=M(null),Fe=M(0),de=M(null),ye=M(0),ee=M(null),re=M(null),Ve=M(null),Oe=M(null);_(()=>{const n=i.current;if(!n)return;const r=()=>{ke(!n.paused),pe(n.currentTime),ie(n.duration||0)};return n.addEventListener("play",r),n.addEventListener("pause",r),n.addEventListener("timeupdate",r),n.addEventListener("loadedmetadata",r),n.addEventListener("volumechange",()=>{A(n.volume),Ae(n.muted)}),()=>{n.removeEventListener("play",r),n.removeEventListener("pause",r),n.removeEventListener("timeupdate",r),n.removeEventListener("loadedmetadata",r),n.removeEventListener("volumechange",r)}},[i]),_(()=>{const n="tv-player-subtitle-style";let r=document.getElementById(n);r||(r=document.createElement("style"),r.id=n,document.head.appendChild(r));const h={fontSize:U,bgOpacity:Y,bgColor:Ke,textColor:$e,edge:w,bold:j};r.textContent=Gt(h);const c=i.current;if(c){const v=()=>{const C=Number(ge);return isNaN(C)?0:Math.max(0,Math.min(100,C))},g=(C,O)=>{try{const G=C;G.snapToLines=!1,G.line=O}catch{}},X=()=>{const C=(isNaN(U)?1.8:U)*16,O=c.videoHeight||c.clientHeight||720,G=c.videoWidth||c.clientWidth||1280;return{step:C*1.3/O*100,chars:Math.max(20,Math.floor(G/(C*.55)))}},He=C=>{const O=Math.max(0,Math.min(100,100-v())),G=Array.from(C.activeCues??[]);if(G.length<=1){G.forEach(je=>g(je,O));return}const{step:bt,chars:Et}=X();let _t=O;for(let je=G.length-1;je>=0;je--){const $t=String(G[je].text??"").replace(/<[^>]*>/g,"").split(`
2
+ `).reduce((It,xt)=>It+Math.max(1,Math.ceil(xt.length/Et)),0),St=_t-$t*bt;g(G[je],Math.max(0,St)),_t=St-bt*.4}},ut=()=>{const C=Math.max(0,Math.min(100,100-v()));Array.from(c.textTracks).forEach(O=>{O.cues&&(Array.from(O.cues).forEach(G=>g(G,C)),O.mode==="showing"&&He(O))})};ut();const ot=C=>{const O=C.target;O.mode==="showing"&&He(O)},gt=()=>{Array.from(c.textTracks).forEach(C=>{C.removeEventListener("cuechange",ot),C.addEventListener("cuechange",ot)}),ut()};Array.from(c.textTracks).forEach(C=>{C.addEventListener("cuechange",ot)}),c.textTracks.addEventListener("addtrack",gt);const ft=Array.from(c.querySelectorAll("track")),yt=()=>ut();return ft.forEach(C=>C.addEventListener("load",yt)),()=>{Array.from(c.textTracks).forEach(C=>{C.removeEventListener("cuechange",ot)}),c.textTracks.removeEventListener("addtrack",gt),ft.forEach(C=>C.removeEventListener("load",yt))}}},[U,ge,Y,Ke,$e,w,j,W,Q,i]);const ae=_e(n=>{const r=Oe.current;if(!r)return;const h=n.type==="touchstart"?800:500;Date.now()-Fe.current<h||de.current===null&&(de.current=requestAnimationFrame(()=>{he(!0),r.style.cursor="default",ce.current&&clearTimeout(ce.current),k&&!f&&!F&&(ce.current=window.setTimeout(()=>{he(!1),document.fullscreenElement&&(r.style.cursor="none")},3e3)),de.current=null}))},[k,f,F]);_(()=>{const n=Oe.current;if(!n)return;n.addEventListener("mousemove",ae);const r=c=>ae(c);n.addEventListener("touchstart",r,{passive:!0});const h=()=>{he(!1)};return n.addEventListener("mouseleave",h),()=>{n.removeEventListener("mousemove",ae),n.removeEventListener("touchstart",r),n.removeEventListener("mouseleave",h)}},[ae]),_(()=>{(F||f)&&(he(!0),ce.current&&clearTimeout(ce.current))},[F,f]),_(()=>()=>{ce.current&&clearTimeout(ce.current),ee.current&&clearTimeout(ee.current),de.current!==null&&cancelAnimationFrame(de.current)},[]);const E=()=>{const n=i.current;n&&(n.paused?n.play().catch(()=>{}):n.pause())},Re=n=>{const r=n.target;return!!(r.closest(`.${o.controlsOverlay}`)||r.closest(`.${o.settingsPanel}`))},De=n=>{if(Re(n))return;const r=T;if(he(!T),r&&(Fe.current=Date.now()),ye.current+=1,ee.current&&clearTimeout(ee.current),ye.current===2){Ye(),ye.current=0;return}ee.current=setTimeout(()=>{ye.current=0},250)},Qe=n=>{const r=i.current;if(!r||!re.current||isNaN(B)||B===0)return;const h=re.current.getBoundingClientRect(),c=Math.min(1,Math.max(0,(n.clientX-h.left)/h.width));r.currentTime=c*B},$=n=>{if(!re.current||!B)return;const r=re.current.getBoundingClientRect(),h=Math.min(1,Math.max(0,(n.clientX-r.left)/r.width));D({time:h*B,position:n.clientX-r.left})},Ue=n=>{n.preventDefault();const r=i.current;r&&(nt(!0),r.pause())};_(()=>{const n=h=>{if(!F||!re.current||!B)return;const c=re.current.getBoundingClientRect(),v=Math.min(1,Math.max(0,(h.clientX-c.left)/c.width)),g=i.current;g&&(g.currentTime=v*B),D({time:v*B,position:h.clientX-c.left})},r=()=>{F&&(nt(!1),D({time:0,position:null}),i.current?.play().catch(()=>{}))};return document.addEventListener("mousemove",n),document.addEventListener("mouseup",r),()=>{document.removeEventListener("mousemove",n),document.removeEventListener("mouseup",r)}},[F,B,i]);const Je=n=>{const r=i.current;if(!r)return;const h=parseFloat(n.target.value);r.volume=h,r.muted=h===0,localStorage.setItem("playerVolume",h.toString())},rt=()=>{const n=i.current;n&&(n.muted=!n.muted,localStorage.setItem("playerMuted",n.muted.toString()))},Ye=()=>{const n=Oe.current;n&&(document.fullscreenElement?(document.exitFullscreen().catch(()=>{}),ve(!1)):(n.requestFullscreen().catch(()=>{}),ve(!0)))},Ze=n=>{if(!n||isNaN(n))return"0:00";const r=Math.floor(n/3600),h=Math.floor(n%3600/60),c=Math.floor(n%60);return r>0?`${r}:${h.toString().padStart(2,"0")}:${c.toString().padStart(2,"0")}`:`${h}:${c.toString().padStart(2,"0")}`},xe=B>0?q/B*100:0,et=Q.length>0,be=W>=0,Be=()=>{P("main"),he(!0)},at=()=>{if(be){te(-1);return}let n=null;try{n=localStorage.getItem("tvLastSubtitle")}catch{}te(pt(Q,{lastKey:n,enabled:!0}))},tt=()=>{P(null)},t=()=>e(Se,{children:[ne.length>1&&e("button",{className:o.menuItem,onClick:()=>P("quality"),children:[e("span",{children:"Quality"}),e("span",{className:o.currentValue,children:ne[J]?.quality||"Auto"})]}),vt&&Me.length>0&&e("button",{className:o.menuItem,onClick:()=>P("server"),children:[e("span",{style:{display:"flex",alignItems:"center",gap:6},children:[e(Ht,{size:12})," Movy Server"]}),e("span",{className:o.currentValue,style:{textTransform:"capitalize"},children:d})]}),et&&e("button",{className:o.menuItem,onClick:()=>P("subtitles"),children:[e("span",{children:"Subtitles"}),e("span",{className:o.currentValue,children:be?Q[W]?.label||Q[W]?.language:"Off"})]}),et&&e("button",{className:o.menuItem,onClick:()=>P("subtitle-style"),children:[e("span",{children:"Subtitle Style"}),e("span",{className:o.currentValue,children:[U.toFixed(1),"x · ",ge]})]}),I.length>0&&e("button",{className:o.menuItem,onClick:()=>P("audio"),children:[e("span",{children:"Audio Track"}),e("span",{className:o.currentValue,children:I[x]?.label||I[x]?.language})]}),e("button",{className:o.menuItem,onClick:()=>P("av-sync"),children:[e("span",{children:"A/V Sync"}),e("span",{className:o.currentValue,children:me?`${Te}ms`:"Off"})]})]}),s=()=>ne.map((n,r)=>e("button",{className:`${o.menuItem} ${r===J?o.active:""}`,onClick:()=>Ce(r),children:[e("span",{children:n.quality}),r===J&&e(we,{size:12})]},r)),a=()=>e(Se,{children:[e("button",{className:`${o.menuItem} ${be?"":o.active}`,onClick:()=>te(-1),children:[e("span",{children:"Off"}),!be&&e(we,{size:12})]}),Q.map((n,r)=>e("button",{className:`${o.menuItem} ${r===W?o.active:""}`,onClick:()=>te(r),children:[e("span",{children:n.label||n.language}),r===W&&e(we,{size:12})]},r))]}),l=()=>e(Se,{children:[e(it,{label:"Font Size",display:U.toFixed(1),min:.5,max:10,step:.5,value:U,percent:(U-.5)/9.5*100,onChange:n=>{Number.isFinite(n)&&(Ee(n),L("subtitleFontSize",n))}}),e(it,{label:"Vertical Position",display:`${ge}`,min:0,max:100,step:1,value:ge,percent:ge,onChange:n=>{if(Number.isFinite(n)){const r=Math.round(n);qe(r),L("subtitlePosition",r)}}}),e(it,{label:"Background Opacity",display:`${Math.round(Y*100)}%`,min:0,max:1,step:.05,value:Y,percent:Y*100,onChange:n=>{Number.isFinite(n)&&(Z(n),L("subtitleBgOpacity",n))}}),e(Tt,{label:"Text Color",colors:Jt,value:$e,onChange:n=>{Pe(n),L("subtitleTextColor",n)}}),e(Tt,{label:"Background Color",colors:Yt,value:Ke,onChange:n=>{Xe(n),L("subtitleBgColor",n)}}),e(Zt,{label:"Text Edge",options:["shadow","outline","none"],value:w,onChange:n=>{H(n),L("subtitleEdge",n)}}),e("button",{className:`${o.menuItem} ${j?o.active:""}`,onClick:()=>{Ge(!j),L("subtitleBold",!j)},children:[e("span",{children:"Bold Text"}),j&&e(we,{size:12})]}),e("button",{className:o.menuItem,onClick:()=>{Ee(R.fontSize),L("subtitleFontSize",R.fontSize),qe(R.position),L("subtitlePosition",R.position),Z(R.bgOpacity),L("subtitleBgOpacity",R.bgOpacity),Xe(R.bgColor),L("subtitleBgColor",R.bgColor),Pe(R.textColor),L("subtitleTextColor",R.textColor),H(R.edge),L("subtitleEdge",R.edge),Ge(R.bold),L("subtitleBold",R.bold)},children:e("span",{children:"Reset to Defaults"})})]}),p=()=>I.map((n,r)=>e("button",{className:`${o.menuItem} ${r===x?o.active:""}`,onClick:()=>oe(r),children:[e("span",{children:n.label||n.language}),r===x&&e(we,{size:12})]},r)),y=()=>e(Se,{children:Me.map(n=>e("button",{className:`${o.menuItem} ${d===n?o.active:""}`,onClick:()=>Le?.(n),children:[e("span",{style:{textTransform:"capitalize"},children:n}),d===n&&e(we,{size:12})]},n))}),b=()=>e(Se,{children:[e("button",{className:`${o.menuItem} ${me?o.active:""}`,onClick:()=>N?.(!me),children:[e("span",{children:"Video delay"}),me&&e(we,{size:12})]}),e(it,{label:"Video delay",display:`${fe}ms`,min:0,max:500,step:5,value:fe,percent:fe/500*100,onChange:n=>ze(Math.round(n)),onCommit:st}),e("div",{className:o.menuNote,children:"For Bluetooth headsets where audio arrives late. Video is held back via canvas; audio plays untouched."}),e("button",{className:o.menuItem,onClick:()=>We?.(),children:e("span",{children:"Calibrate…"})})]});return e("div",{ref:Oe,className:o.container,onClick:De,children:[ct,e("div",{ref:Ve,className:`${o.controlsOverlay} ${!T&&!f?o.hidden:""}`,onClick:n=>n.stopPropagation(),children:[e("div",{className:o.topControls,children:[e("button",{className:o.backBtn,onClick:ue,title:"Back","aria-label":"Back",children:e(Ct,{})}),e("div",{className:o.videoTitleInfo,children:e("span",{className:o.animeTitle,children:S})})]}),e(Qt,{isPlaying:k,onTogglePlay:E,onSkipBack:()=>{const n=i.current;n&&(n.currentTime=Math.max(0,n.currentTime-10))},onSkipForward:()=>{const n=i.current;n&&(n.currentTime=Math.min(B,n.currentTime+10))}}),e("div",{className:o.bottomControls,children:[e("div",{className:`${o.progressBarContainer} ${F?o.scrubbing:""}`,ref:re,onClick:Qe,onMouseMove:$,onMouseLeave:()=>{F||D({time:0,position:null})},children:[z.position!==null&&e("div",{className:o.timeBubble,style:{left:z.position},children:Ze(z.time)}),e("div",{className:o.progressBar,children:[e("div",{className:o.bufferedBar,style:{width:"100%"}}),e("div",{className:o.watchedBar,style:{width:`${xe}%`}}),e("div",{className:o.thumb,style:{left:`${xe}%`},onMouseDown:Ue})]})]}),e("div",{className:o.bottomControlsRow,children:[e("div",{className:o.leftControls,children:[e("button",{className:o.controlBtn,onClick:E,"aria-label":k?"Pause":"Play",children:k?e(At,{}):e(Pt,{})}),e("div",{className:o.volumeContainer,children:[e("button",{className:o.controlBtn,onClick:rt,"aria-label":Ne?"Unmute":"Mute",children:Ne?e(zt,{}):se<.5?e(Ft,{}):e(Vt,{})}),e("input",{type:"range",min:"0",max:"1",step:"0.05",value:Ne?0:se,onChange:Je,className:o.volumeSlider,style:{"--volume-percent":`${(Ne?0:se)*100}%`}})]}),e("span",{className:o.timeDisplay,children:[Ze(q)," / ",Ze(B)]})]}),e("div",{className:o.rightControls,children:[et&&e("button",{className:`${o.controlBtn} ${be?o.active:""}`,onClick:at,"aria-label":be?"Turn subtitles off":"Turn subtitles on",children:e(Ot,{})}),e("button",{className:`${o.controlBtn} ${f?o.active:""}`,onClick:()=>f?tt():Be(),"aria-label":"Settings",children:e(Rt,{})}),e("button",{className:o.controlBtn,onClick:Ye,"aria-label":le?"Exit Fullscreen":"Fullscreen",children:le?e(Dt,{}):e(Ut,{})})]})]})]})]}),f&&e("div",{className:o.settingsPanel,children:[e("div",{className:o.settingsHeader,children:[e("button",{className:o.settingsBackBtn,onClick:()=>f==="main"?tt():P("main"),children:e(Ct,{})}),e("span",{className:o.settingsTitle,children:f==="main"?"Settings":f==="subtitle-style"?"Subtitle Style":f==="audio"?"Audio Track":f==="server"?"Movy Server":f==="av-sync"?"A/V Sync":f.charAt(0).toUpperCase()+f.slice(1)})]}),e("div",{className:o.settingsContent,children:[f==="main"&&t(),f==="quality"&&s(),f==="subtitles"&&a(),f==="subtitle-style"&&l(),f==="audio"&&p(),f==="server"&&y(),f==="av-sync"&&b()]})]})]})},ns="_page_1e0ns_1",ss="_header_1e0ns_7",rs="_pageTitle_1e0ns_11",as="_searchForm_1e0ns_21",os="_searchInput_1e0ns_27",is="_searchBtn_1e0ns_42",ls="_suggestions_1e0ns_58",cs="_suggestionPill_1e0ns_65",ds="_statusMsg_1e0ns_81",us="_error_1e0ns_87",ms="_textOnly_1e0ns_91",hs="_spinner_1e0ns_96",ps="_spin_1e0ns_96",vs="_grid_1e0ns_110",gs="_skeletonCard_1e0ns_116",fs="_skeletonThumb_1e0ns_121",ys="_skeletonLine_1e0ns_127",bs="_shimmer_1e0ns_134",_s="_backBtn_1e0ns_154",Ss="_meta_1e0ns_172",Cs="_year_1e0ns_180",Ts="_rating_1e0ns_185",ks="_typeBadge_1e0ns_193",Ns="_tv_1e0ns_201",Es="_movie_1e0ns_206",$s="_tvSeries_1e0ns_211",Is="_tvMiniSeries_1e0ns_216",xs="_overview_1e0ns_221",Bs="_controls_1e0ns_228",ws="_controlLabel_1e0ns_236",Ms="_select_1e0ns_246",Ls="_playerSection_1e0ns_257",As="_video_1e0ns_261",Ps="_videoHidden_1e0ns_283",zs="_delayCanvas_1e0ns_288",Fs="_delayCanvasActive_1e0ns_301",Vs="_subtitleOverlay_1e0ns_305",Os="_videoIframe_1e0ns_324",Rs="_retryButton_1e0ns_332",u={page:ns,header:ss,pageTitle:rs,searchForm:as,searchInput:os,searchBtn:is,suggestions:ls,suggestionPill:cs,statusMsg:ds,error:us,textOnly:ms,spinner:hs,spin:ps,grid:vs,skeletonCard:gs,skeletonThumb:fs,skeletonLine:ys,shimmer:bs,backBtn:_s,meta:Ss,year:Cs,rating:Ts,typeBadge:ks,tv:Ns,movie:Es,tvSeries:$s,tvMiniSeries:Is,overview:xs,controls:Bs,controlLabel:ws,select:Ms,playerSection:Ls,video:As,videoHidden:Ps,delayCanvas:zs,delayCanvasActive:Fs,subtitleOverlay:Vs,videoIframe:Os,retryButton:Rs},ht=["miami","phoenix","dallas","seattle","denver","cancun","atlanta","houston","portland","austin","munich","berlin","paris","delhi"],Ds={embedmaster:{name:"EmbedMaster",url:(i,S,I,x)=>S==="movie"?`https://embedmaster.link/movie/${i}`:`https://embedmaster.link/tv/${i}/${I}/${x}`},vidfast:{name:"VidFast",url:(i,S,I,x)=>S==="movie"?`https://vidfast.pro/movie/${i}`:`https://vidfast.pro/tv/${i}/${I}/${x}`},videasy:{name:"VidEasy",url:(i,S,I,x)=>S==="movie"?`https://player.videasy.to/movie/${i}?overlay=true`:`https://player.videasy.to/tv/${i}/${I}/${x}?episodeSelector=true&overlay=true`},vidrock:{name:"VidRock",url:(i,S,I,x)=>S==="movie"?`https://vidrock.ru/movie/${i}`:`https://vidrock.ru/tv/${i}/${I}/${x}`}},Us=["Stranger Things","Breaking Bad","The Boys","Interstellar","Dune","Avengers","House of the Dragon","Wednesday"],Gs=()=>{const{id:i}=wt(),[S]=Mt(),I=Lt(),x=S.get("type"),[oe,Q]=m(""),[W,te]=m([]),[ne,J]=m(""),[Ce,ue]=m(!1),[ct,Me]=m(null),[d,Le]=m(null),[vt,me]=m(!1),[N,Te]=m(()=>parseInt(S.get("s")||"1",10)||1),[dt,We]=m([]),[k,ke]=m(()=>parseInt(S.get("e")||"1",10)||1),[T,he]=m(()=>{try{return localStorage.getItem("tvProvider")||"movybz"}catch{return"movybz"}}),[q,pe]=m([]),[B,ie]=m(!1),[se,A]=m(""),[Ne,Ae]=m([]),[le,ve]=m(0),[f,P]=m([]),[z,D]=m(-1),[F,nt]=m("all"),[K,U]=m(0),[Ee,ge]=m(""),[qe,Y]=m(""),[Z,Ke]=m(()=>{try{return localStorage.getItem("movyServer")||"miami"}catch{return"miami"}}),Xe=M([]);_(()=>{Xe.current=q},[q]);const $e=M(le);_(()=>{$e.current=le},[le]);const Pe=M(z);_(()=>{Pe.current=z},[z]);const w=M(null),H=M(null),j=M([]),Ge=M(null),L=M(null),[Ie,ze]=m(()=>{try{const t=Number(localStorage.getItem("playerVideoDelayMs"));if(Number.isFinite(t)&&t>=0&&t<=500)return Math.round(t)}catch{}return 180}),[fe,st]=m(()=>{try{return localStorage.getItem("playerVideoDelayEnabled")==="true"}catch{return!1}}),[ce,Fe]=m(!1),de=M(!1),ye=fe?Ie:0;en({videoRef:w,canvasRef:Ge,delayMs:ye,enabled:fe});const ee=fe,re=()=>{de.current&&(de.current=!1,w.current?.play().catch(()=>{}))},{hasConsent:Ve,grant:Oe}=Nt(),ae=M("");ae.current||(ae.current=`tv-${Date.now()}-${Math.random().toString(36).slice(2)}`);const E=d?.seasons===void 0&&d?.number_of_seasons===void 0?ct?.type==="movie":!1,Re=_e(t=>{let s=null,a=!0;try{s=localStorage.getItem("tvLastSubtitle"),a=localStorage.getItem("tvSubtitlesEnabled")!=="false"}catch{}return pt(t,{lastKey:s,enabled:a})},[]),De=_e(t=>{if(!(t<0))try{localStorage.setItem("tvSubtitlesEnabled","true"),localStorage.setItem("tvSelectedSubtitle",String(t))}catch{}},[]),Qe=_e(t=>{if(t.length===0)return 0;let s=null;try{s=localStorage.getItem("tvLastAudio")}catch{}if(s){const a=t.findIndex(n=>mt(n)===s);if(a>=0)return a;const l=s.indexOf("|||"),p=l>=0?s.slice(0,l):s,y=l>=0?s.slice(l+3):s,b=t.findIndex(n=>n.language===p||n.label===y);if(b>=0)return b}return pt(t,{lastKey:null,enabled:!0})},[]),$=["embedmaster","vidfast","videasy","vidrock"].includes(T);_(()=>{if(!i){Me(null),Le(null),pe([]),A(""),Y("");return}const t=Number(i),s=x||"tv";Me({id:t,title:"",year:"",type:s,image:""}),me(!0),Le(null),pe([]),A(""),Y("");const a=parseInt(S.get("s")||"",10),l=parseInt(S.get("e")||"",10);Te(isNaN(a)?1:a),ke(isNaN(l)?1:l),U(0),fetch(`/api/tv/details/${s}/${t}`).then(p=>p.json()).then(p=>{Le(p),me(!1),p.seasons&&p.seasons.length>0&&isNaN(a)&&Te(p.seasons[0].season_number)}).catch(()=>{me(!1),J("Failed to load details.")})},[i,x,S]),_(()=>{if(!d||!i)return;if(!(d.seasons!==void 0||d.number_of_seasons!==void 0)){We([]);return}const s=parseInt(S.get("e")||"",10);fetch(`/api/tv/episodes/${i}/${N}`).then(a=>a.json()).then(a=>{if(We(a.episodes||[]),a.episodes?.length>0){const l=!isNaN(s)&&a.episodes.find(p=>p.episode_number===s)?s:a.episodes[0].episode_number;ke(l)}}).catch(()=>{J("Failed to load episodes.")})},[d,i,N,S]),_(()=>{!d||!i||E||fetch(`/api/tv/episodes/${i}/${N}`).then(t=>t.json()).then(t=>{const s=t.episodes||[];We(s),s.length>0&&!s.find(a=>a.episode_number===k)&&ke(s[0].episode_number)}).catch(()=>{})},[N,d,i,E,k]),_(()=>{if(!$||!d||!i)return;const t=Ds[T];if(!t)return;const s=E?"movie":"tv",a=t.url(d.id,s,N,k);Y(a),fetch(`/api/resolve?url=${encodeURIComponent(a)}`).then(l=>l.json()).then(l=>{l.finalUrl&&Y(l.finalUrl)}).catch(()=>{})},[T,d,i,N,k,E,$]);const Ue=_e(async()=>{if(!d||!i||$||d.adult&&!Ve)return;T==="movybz"&&Xe.current.length>0?A(""):(ie(!0),A(""),pe([]),U(0),Ae([]),P([]));try{if(T==="movybz"){const s=E?"movie":"tv",a=new URLSearchParams({title:d.title||"",year:d.year||"",season:String(N),episode:String(k),totalSeasons:String(d.number_of_seasons||1),imdbId:d.imdb_id||""}),p=await(await fetch(`/api/tv/movybz/${s}/${i}/probe/${Z}?${a.toString()}`)).json();if(ie(!1),p.valid&&p.sources?.length){if(pe(p.sources),nt("all"),U(0),P([]),D(-1),fetch(`/api/tv/subtitles/${s}/${i}?season=${N}&episode=${k}`).then(h=>h.json()).then(h=>{const c=Array.isArray(h.subtitles)?h.subtitles:[];if(c.length===0)return;P(c);const v=Re(c);D(v),De(v)}).catch(()=>{}),p.audioTracks?.length){const h=p.audioTracks;Ae(h),ve(Qe(h))}else Ae([]);A("");return}A(`No streams from ${Z}. Try another server.`);return}else if(T==="vixsrc"){const s=E?"movie":"tv";let a=`/api/tv/vixsrc/${s}/${i}`;E||(a+=`?season=${N}&episode=${k}`);const p=await(await fetch(a)).json();if(ie(!1),!p.sources||!p.sources.length){A("No VixSrc streams available.");return}pe(p.sources),ge(p.referer||"https://vixsrc.to/");const y=p.audioTracks||[];Ae(y),y.length>0&&ve(Qe(y));const b=p.subtitles||[];if(P(b),b.length>0){const h=Re(b);D(h),De(h)}else D(-1);fetch(`/api/tv/subtitles/${s}/${i}?season=${N}&episode=${k}`).then(h=>h.json()).then(h=>{const c=Array.isArray(h.subtitles)?h.subtitles:[];c.length!==0&&P(v=>{const g=[...v,...c.filter(X=>!v.some(He=>He.url===X.url))];if(v.length===0){const X=Re(g);D(X),De(X)}return g})}).catch(()=>{})}}catch{ie(!1),A("Failed to load streams.")}},[d,i,T,N,k,E,$,Ve,Z,Re,De,Qe]),Je=_e(t=>{const s=t.toLowerCase();Ke(s);try{localStorage.setItem("movyServer",s)}catch{}A("")},[]),rt=_e(t=>{he(t);try{localStorage.setItem("tvProvider",t)}catch{}},[]);_(()=>{T&&d&&!$&&Ue()},[T,d,Ue,$]),_(()=>{if(!w.current||(H.current&&(H.current.destroy(),H.current=null),$))return;let t=!1;const s=F==="all"?q:q.filter(b=>b.type===F),a=s[K]?.url||"";if(!a)return;const l=w.current;l.pause(),l.removeAttribute("src"),l.load();const p=`/api/tv/stream-proxy?url=${encodeURIComponent(a)}&referer=${encodeURIComponent(T==="movybz"?"https://www.movy.bz/":Ee)}`;s[K]?.type==="hls"?(async()=>{const b=await nn();if(!t)if(b&&b.isSupported()){const n=new b({enableWorker:!0});H.current=n,n.on(b.Events.ERROR,(c,v)=>{v.fatal&&(A(`Stream failed (${v.details}). Try another source or reload.`),ie(!1),n.destroy(),H.current=null)}),n.loadSource(p),n.attachMedia(l);const r=()=>{let c=!1,v=0;try{c=localStorage.getItem("tvSubtitlesEnabled")==="true";const g=parseInt(localStorage.getItem("tvSelectedSubtitle")||"0",10);!isNaN(g)&&g>=0&&(v=g)}catch{}return{enabled:c,index:v}},h=()=>{if(typeof n.subtitleTrack!="number")return;const c=Array.isArray(n.subtitleTracks)?n.subtitleTracks:[];if(c.length===0){n.subtitleTrack=-1;return}const v=r();if(v.enabled){const g=v.index<c.length?v.index:0;n.subtitleTrack=g,D(g)}else n.subtitleTrack=-1};n.on(b.Events.MANIFEST_PARSED,()=>{const c=Array.isArray(n.audioTracks)?n.audioTracks.length:0,v=$e.current,g=c>0?Math.min(Math.max(0,v),c-1):v;n.audioTrack=g,g!==v&&ve(g),h(),l.play().catch(()=>{})}),n.on(b.Events.AUDIO_TRACK_SWITCHED,(c,v)=>{const g=$e.current,X=Array.isArray(n.audioTracks)?n.audioTracks.length:0;if(v.id!==g&&g>=0&&g<X){n.audioTrack!==g&&(n.audioTrack=g);return}ve(v.id)}),n.on(b.Events.SUBTITLE_TRACKS_UPDATED,()=>{h()}),n.on(b.Events.SUBTITLE_TRACK_SWITCH,(c,v)=>{const g=Array.isArray(n.subtitleTracks)?n.subtitleTracks:[];if(g.length!==0){if(v.id===-1){const X=r();if(X.enabled){const He=X.index<g.length?X.index:0;n.subtitleTrack=He;return}}D(v.id)}})}else sn(l)&&(l.src=p,l.play().catch(()=>{A("Failed to play stream. Try another source.")}))})():(l.src=p,l.play().catch(()=>{A("Failed to play stream. Try another source.")}));const y=()=>{const r=l.error?.code===4?"Video source not supported or not found":"Failed to load video stream";A(`${r}. The source may be invalid or expired. Try switching source or reloading.`),ie(!1)};return l.addEventListener("error",y),()=>{t=!0,l.removeEventListener("error",y)}},[q,K,F,T,Ee,$]),_(()=>{const t=H.current;!t||typeof t.audioTrack!="number"||(t.audioTrack=le)},[le]),_(()=>{const t=H.current;!t||typeof t.subtitleTrack!="number"||!Array.isArray(t.subtitleTracks)||t.subtitleTracks.length===0||(z>=0?t.subtitleTrack=z:t.subtitleTrack=-1)},[z]),_(()=>{const t=w.current;!t||$||(t.querySelectorAll("track").forEach(s=>s.remove()),j.current=[],f.length!==0&&f.forEach(s=>{const a=document.createElement("track");a.kind="subtitles",a.label=s.label||s.language||"Unknown",a.srclang=s.language||s.label||"en";const l=T==="movybz"?"https://www.movy.bz/":Ee||"https://vixsrc.to/",p=`/api/subtitle-proxy?url=${encodeURIComponent(s.url)}&referer=${encodeURIComponent(l)}`;a.src=p,a.addEventListener("load",()=>{const y=j.current.indexOf(a),b=a.track;b&&y>=0&&(b.mode=y===Pe.current?"showing":"hidden")}),t.appendChild(a),j.current.push(a)}))},[f,Ee,$,T]),_(()=>{const t=w.current;if(!t||$)return;const s=H.current;s&&typeof s.subtitleTrack=="number"&&Array.isArray(s.subtitleTracks)&&s.subtitleTracks.length>0&&(s.subtitleTrack=-1);const a=()=>{const y=j.current;if(y.length>0){y.forEach((n,r)=>{const h=n.track;h&&(h.mode=r===z?"showing":"hidden")});return}const b=Array.from(t.textTracks);b.length!==0&&b.forEach((n,r)=>{n.mode=r===z?"showing":"hidden"})};a();const l=()=>a();t.textTracks.addEventListener("addtrack",l),t.addEventListener("loadedmetadata",a,{once:!0});const p=window.setTimeout(a,600);return()=>{t.textTracks.removeEventListener("addtrack",l),t.removeEventListener("loadedmetadata",a),window.clearTimeout(p)}},[z,f,$,T]),_(()=>{if(!ee)return;const t=w.current,s=L.current;if(!t||!s)return;const a=()=>{if(s.innerHTML="",Pe.current<0)return;const y=j.current.map(c=>c.track).find(c=>c&&c.mode==="showing");if(!y)return;const b=ye/1e3;let n;if(b>0&&y.cues){const c=t.currentTime-b;n=Array.from(y.cues).filter(v=>v.startTime<=c&&c<=v.endTime)}else n=Array.from(y.activeCues??[]);if(n.length===0)return;let r=1.8,h=10;try{const c=parseFloat(localStorage.getItem("subtitleFontSize")||"1.8");isNaN(c)||(r=c);const v=parseInt(localStorage.getItem("subtitlePosition")||"10");isNaN(v)||(h=Math.max(0,Math.min(100,v)))}catch{}n.forEach(c=>{const v=String(c.text??"").replace(/<[^>]*>/g,"");if(!v)return;const g=document.createElement("div");g.style.cssText=`
3
+ font-size: ${r}rem;
4
+ color: white;
5
+ background-color: rgba(0, 0, 0, 0.5);
6
+ text-shadow: 0 0 4px black;
7
+ padding: 0.2em 0.5em;
8
+ text-align: center;
9
+ position: absolute;
10
+ left: 50%;
11
+ transform: translateX(-50%);
12
+ bottom: ${h}%;
13
+ white-space: pre-wrap;
14
+ line-height: 1.4;
15
+ `,g.textContent=v,s.appendChild(g)})},l=()=>a(),p=j.current.map(y=>y.track).filter(y=>!!y);return p.forEach(y=>y.addEventListener("cuechange",l)),t.addEventListener("timeupdate",l),a(),()=>{p.forEach(y=>y.removeEventListener("cuechange",l)),t.removeEventListener("timeupdate",l),s.innerHTML=""}},[ee,z,f,ye]);const Ye=async t=>{t?.preventDefault();const s=oe.trim();if(s){ue(!0),J(`Searching for "${s}"...`),te([]);try{const l=await(await fetch(`/api/tv/search?q=${encodeURIComponent(s)}`)).json();ue(!1),J(l.length?"":"No results found."),te(l)}catch{ue(!1),J("Search failed.")}}},Ze=t=>{Q(t),Ye()},xe=()=>{Me(null),Le(null),pe([]),Y(""),I("/tv")},et=t=>{ve(t);try{const a=Ne[t];a&&localStorage.setItem("tvLastAudio",mt(a))}catch{}const s=H.current;s&&s.audioTrack!==void 0&&(s.audioTrack=t)},be=t=>{D(t);try{if(t===-1)localStorage.setItem("tvSubtitlesEnabled","false");else{localStorage.setItem("tvSubtitlesEnabled","true"),localStorage.setItem("tvSelectedSubtitle",String(t));const l=f[t];l&&localStorage.setItem("tvLastSubtitle",mt(l))}}catch{}const s=w.current,a=H.current;a&&typeof a.subtitleTrack=="number"&&Array.isArray(a.subtitleTracks)&&a.subtitleTracks.length>0&&(a.subtitleTrack=-1),s&&Array.from(s.textTracks).forEach((l,p)=>{l.mode=p===t?"showing":"hidden"})},Be=_e(()=>{if(!d)return;const t=w.current,s=E?"":`S${String(N).padStart(2,"0")}E${String(k).padStart(2,"0")}`;fetch("/api/discord/tv",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({title:d.title,episodeLabel:s,isPlaying:t?!t.paused&&!t.ended:!0,thumbnail:d.poster,currentTime:t?t.currentTime:0,duration:t&&t.duration||0,isAdult:d.adult===!0,sessionId:ae.current})}).catch(()=>{}),fetch("/api/discord/heartbeat",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:ae.current})}).catch(()=>{})},[d,E,N,k]);_(()=>{if(!d)return;Be();const t=window.setInterval(()=>{const s=w.current;(!s||!s.paused)&&Be()},15e3);return()=>window.clearInterval(t)},[Be,d]),_(()=>{if(!d||$||B||se||q.length===0)return;const t=w.current;if(!t)return;const s=()=>Be();return t.addEventListener("play",s),t.addEventListener("pause",s),t.addEventListener("seeked",s),()=>{t.removeEventListener("play",s),t.removeEventListener("pause",s),t.removeEventListener("seeked",s)}},[d,$,B,se,q,Be]),_(()=>{const t=ae.current,s=()=>{const l=JSON.stringify({sessionId:t});navigator.sendBeacon?(navigator.sendBeacon("/api/discord/clear",new Blob([l],{type:"application/json"})),navigator.sendBeacon("/api/discord/heartbeat",new Blob([JSON.stringify({sessionId:t,bye:!0})],{type:"application/json"}))):fetch("/api/discord/clear",{method:"POST",headers:{"Content-Type":"application/json"},body:l,keepalive:!0}).catch(()=>{})},a=()=>s();return window.addEventListener("pagehide",a),window.addEventListener("beforeunload",a),()=>{window.removeEventListener("pagehide",a),window.removeEventListener("beforeunload",a),s()}},[]);const at=F==="all"?q:q.filter(t=>t.type===F);_(()=>{if(!d){document.title="TV & Movies - dango";return}document.title=E?`${d.title} - dango`:`${d.title} - Season ${N} Episode ${k} - dango`},[d,E,N,k]),_(()=>{if(!d||E)return;const t=new URLSearchParams(S),s=t.get("s"),a=t.get("e"),l=String(N),p=String(k);s===l&&a===p||(t.set("type",S.get("type")||"tv"),t.set("s",l),t.set("e",p),I(`${location.pathname}?${t.toString()}`,{replace:!0}))},[d,E,N,k,S,I]);const tt=(t,s)=>{const a=new URLSearchParams(S);a.set("type",S.get("type")||"tv"),a.set("s",String(t)),a.set("e",String(s)),I(`${location.pathname}?${a.toString()}`)};return e("div",{className:u.page,children:[d&&e("div",{className:u.header,children:[e("button",{className:u.backBtn,onClick:xe,children:[e(jt,{})," Back"]}),e("h1",{children:d.title}),e("div",{className:u.meta,children:[e("span",{className:u.year,children:d.year}),d.vote_average!=null&&e("span",{className:u.rating,children:[e("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"currentColor",style:{marginRight:4},children:e("polygon",{points:"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"})}),Number(d.vote_average).toFixed(1)]}),e("span",{className:`${u.typeBadge} ${u[E?"movie":"tv"]}`,children:E?"Movie":"TV Show"})]}),d.overview&&e("p",{className:u.overview,children:d.overview})]}),d&&!E&&e("div",{className:u.controls,children:[e("label",{className:u.controlLabel,children:["Season",e("select",{value:N,onChange:t=>{const s=parseInt(t.target.value,10)||1;Te(s),ke(1),tt(s,1)},className:u.select,children:d.seasons?.map(t=>e("option",{value:t.season_number,children:["Season ",t.season_number," (",t.episode_count," ep)"]},t.season_number))})]}),e("label",{className:u.controlLabel,children:["Episode",e("select",{value:k,onChange:t=>{const s=parseInt(t.target.value,10)||1;ke(s),tt(N,s)},className:u.select,children:dt.map(t=>e("option",{value:t.episode_number,children:["Ep ",t.episode_number," - ",t.name||""]},t.episode_number))})]}),e("label",{className:u.controlLabel,children:["Source",e("select",{value:T,onChange:t=>rt(t.target.value),className:u.select,children:[e("optgroup",{label:"Direct HLS",children:[e("option",{value:"movybz",children:"Movy.bz (4K HLS)"}),e("option",{value:"vixsrc",children:"VixSrc (HLS)"})]}),e("optgroup",{label:"WatchSeries Embeds",children:[e("option",{value:"embedmaster",children:"EmbedMaster"}),e("option",{value:"vidfast",children:"VidFast"}),e("option",{value:"videasy",children:"VidEasy"})]}),e("optgroup",{label:"Other Embeds",children:e("option",{value:"vidrock",children:"VidRock"})})]})]})]}),d&&E&&e("div",{className:u.controls,children:e("label",{className:u.controlLabel,children:["Source",e("select",{value:T,onChange:t=>rt(t.target.value),className:u.select,children:[e("optgroup",{label:"Direct HLS",children:[e("option",{value:"movybz",children:"Movy.bz (4K HLS)"}),e("option",{value:"vixsrc",children:"VixSrc (HLS)"})]}),e("optgroup",{label:"WatchSeries Embeds",children:[e("option",{value:"embedmaster",children:"EmbedMaster"}),e("option",{value:"vidfast",children:"VidFast"}),e("option",{value:"videasy",children:"VidEasy"})]}),e("optgroup",{label:"Other Embeds",children:e("option",{value:"vidrock",children:"VidRock"})})]})]})}),d&&e("div",{className:u.playerSection,style:d.adult&&!Ve?{filter:"blur(14px)",pointerEvents:"none",userSelect:"none"}:void 0,children:[B&&!$&&e("div",{className:u.statusMsg,children:[e(Wt,{className:u.spinner})," Loading stream..."]}),$&&qe?e("iframe",{src:qe,className:u.videoIframe,allow:"autoplay; fullscreen",allowFullScreen:!0}):!$&&!B&&at.length>0?e(Se,{children:[se&&e("div",{className:`${u.statusMsg} ${u.error}`,style:{flexDirection:"column",alignItems:"stretch",gap:8},children:[e("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[e("span",{style:{flex:1},children:se}),e("button",{className:u.retryButton,onClick:Ue,children:"Retry"})]}),T==="movybz"&&e("div",{style:{display:"flex",flexWrap:"wrap",gap:6,alignItems:"center",marginTop:4},children:[e("span",{style:{fontSize:"0.8rem",opacity:.9,fontWeight:600},children:"Servers:"}),ht.map(t=>e("button",{onClick:()=>Je(t),className:u.retryButton,style:{padding:"4px 8px",fontSize:"0.75rem",textTransform:"capitalize",background:Z===t?"var(--accent)":void 0,color:Z===t?"white":void 0},children:t},t))]})]}),e(ts,{videoRef:w,title:d.title,audioTracks:Ne,selectedAudioTrack:le,onAudioTrackChange:et,subtitles:f,selectedSubtitle:z,onSubtitleChange:be,streams:at,qualityIdx:K,onQualityChange:U,onBack:xe,movyServers:ht,selectedMovyServer:Z,onMovyServerSelect:Je,isMovySource:T==="movybz",videoDelayEnabled:fe,onVideoDelayToggle:t=>{st(t);try{localStorage.setItem("playerVideoDelayEnabled",String(t))}catch{}},videoDelayMs:Ie,onVideoDelayChange:t=>{const s=Math.max(0,Math.min(500,Math.round(t)));ze(s);try{localStorage.setItem("playerVideoDelayMs",String(s))}catch{}},onCalibrateAvSync:()=>{const t=w.current;de.current=!!t&&!t.paused&&!t.ended,t?.pause(),Fe(!0)},children:[e("video",{ref:w,autoPlay:!0,playsInline:!0,disablePictureInPicture:!0,className:`${u.video} ${ee?u.videoHidden:""}`,onError:()=>{A("Video failed to load. Try another server or reload."),ie(!1)}}),e("canvas",{ref:Ge,className:`${u.delayCanvas} ${ee?u.delayCanvasActive:""}`}),ee&&e("div",{ref:L,className:u.subtitleOverlay}),e(tn,{isOpen:ce,initialMs:Ie,onClose:()=>{Fe(!1),re()},onApply:t=>{const s=Math.max(0,Math.min(500,Math.round(t)));ze(s),st(!0);try{localStorage.setItem("playerVideoDelayMs",String(s)),localStorage.setItem("playerVideoDelayEnabled","true")}catch{}Fe(!1),re()}})]})]}):se&&!$?e("div",{className:`${u.statusMsg} ${u.error}`,style:{flexDirection:"column",alignItems:"stretch",gap:8},children:[e("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[e("span",{style:{flex:1},children:se}),e("button",{className:u.retryButton,onClick:Ue,children:"Retry"})]}),T==="movybz"&&e("div",{style:{display:"flex",flexWrap:"wrap",gap:6,alignItems:"center",marginTop:4},children:[e("span",{style:{fontSize:"0.8rem",opacity:.9,fontWeight:600},children:"Servers:"}),ht.map(t=>e("button",{onClick:()=>Je(t),className:u.retryButton,style:{padding:"4px 8px",fontSize:"0.75rem",textTransform:"capitalize",background:Z===t?"var(--accent)":void 0,color:Z===t?"white":void 0},children:t},t))]})]}):null]}),d?.adult&&!Ve&&e(kt,{isOpen:!0,title:"Content Warning",onClose:xe,children:e("div",{style:{padding:"1rem",textAlign:"center"},children:[e("p",{children:"This title contains mature content intended for adult audiences."}),e("p",{children:["By proceeding, you confirm that you are ",e("strong",{children:"18 years of age or older"})," (or the age of majority in your jurisdiction) and wish to view this content."]}),e("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center"},children:[e(lt,{variant:"secondary",onClick:xe,children:"Go Back"}),e(lt,{onClick:Oe,children:"I'm 18+, Continue"})]})]})}),!d&&e(Se,{children:[e("header",{className:u.header,children:[e("h1",{className:u.pageTitle,children:[e(qt,{})," TV & Movies"]}),e("form",{className:u.searchForm,onSubmit:t=>Ye(t),children:[e("input",{className:u.searchInput,type:"text",value:oe,onChange:t=>Q(t.target.value),placeholder:"Search movies or shows...","aria-label":"Search TV and Movies"}),e("button",{className:u.searchBtn,type:"submit","aria-label":"Search",children:e(Kt,{})})]})]}),e("div",{className:u.suggestions,children:Us.map(t=>e("button",{className:u.suggestionPill,onClick:()=>Ze(t),children:t},t))}),ne&&e("div",{className:`${u.statusMsg} ${Ce?"":u.textOnly}`,children:ne}),Ce&&W.length===0&&e("div",{className:u.grid,"aria-hidden":!0,children:Array.from({length:12}).map((t,s)=>e("div",{className:u.skeletonCard,children:[e("div",{className:`${u.skeletonThumb} ${u.shimmer}`}),e("div",{className:`${u.skeletonLine} ${u.shimmer}`,style:{width:"88%"}}),e("div",{className:`${u.skeletonLine} ${u.shimmer}`,style:{width:"55%"}})]},s))}),!Ce&&W.length>0&&e("div",{className:u.grid,children:W.map(t=>e(Tn,{item:t},t.id))})]})]})};export{Gs as default};
@@ -0,0 +1 @@
1
+ ._header_1di35_1{margin-bottom:var(--space-8);animation:_fadeIn_1di35_1 .8s var(--ease-smooth)}._title_1di35_6{font-size:var(--font-size-xl);font-weight:800;color:var(--text-primary);margin:0 0 var(--space-2);letter-spacing:-.02em}._subtitle_1di35_14{color:var(--text-tertiary);font-size:var(--font-size-sm);margin:0;font-weight:500}._controls_1di35_21{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:var(--space-6);margin-bottom:var(--space-10);background:var(--glass-bg);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);padding:var(--space-4) var(--space-6);border-radius:var(--radius-xl);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow);animation:_slideUpIn_1di35_1 .8s var(--ease-smooth);width:100%;box-sizing:border-box}._filters_1di35_40{display:flex;flex-wrap:wrap;gap:var(--space-2)}._filterBtn_1di35_46{background:#ffffff0d;color:var(--text-secondary);border:1px solid var(--border-primary);padding:.6rem 1.2rem;border-radius:var(--radius-full);font-size:var(--font-size-sm);font-weight:600;transition:all var(--transition-base);cursor:pointer}._filterBtn_1di35_46:hover{background:#ffffff1a;color:var(--text-primary);border-color:var(--text-tertiary)}._filterBtn_1di35_46._active_1di35_64{background:var(--accent);color:#fff;border-color:var(--accent);box-shadow:0 4px 15px var(--accent-glow)}._sortSelect_1di35_71{width:180px;height:44px;padding:0 var(--space-4);background-color:var(--bg-tertiary);border:1px solid var(--border-primary);border-radius:var(--radius-lg);color:var(--text-primary);font-size:var(--font-size-sm);font-weight:600;cursor:pointer;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%2371717a' 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 1rem center;transition:all var(--transition-fast)}._sortSelect_1di35_71:hover{background-color:var(--bg-elevated);border-color:var(--border-secondary)}._sortSelect_1di35_71:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-glow)}._filterContainer_1di35_100{background:var(--glass-bg);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid var(--glass-border);padding:var(--space-6);border-radius:var(--radius-xl);margin-bottom:var(--space-10);box-shadow:var(--glass-shadow);animation:_slideUpIn_1di35_1 .8s var(--ease-smooth);width:100%;box-sizing:border-box}._searchBarWrapper_1di35_114{display:flex;gap:var(--space-4);align-items:center}._inputIconWrapper_1di35_120{flex:1;position:relative}._searchIcon_1di35_125{position:absolute;left:var(--space-4);top:50%;transform:translateY(-50%);color:var(--text-tertiary);pointer-events:none}._searchInput_1di35_134{width:100%;height:52px;padding:0 var(--space-4) 0 3.2rem;background:var(--bg-tertiary);border:1px solid var(--border-primary);border-radius:var(--radius-lg);color:var(--text-primary);font-size:var(--font-size-base);font-family:inherit;transition:all var(--transition-fast)}._searchInput_1di35_134:focus{outline:none;border-color:var(--accent);background:var(--bg-elevated);box-shadow:0 0 0 4px var(--accent-glow)}._searchActions_1di35_154{display:flex;gap:var(--space-3)}._searchBtn_1di35_159{height:52px;padding:0 var(--space-8)!important}._filterToggleBtn_1di35_164{display:flex;align-items:center;gap:var(--space-2);height:52px;padding:0 var(--space-4);background:#ffffff0d;border:1px solid var(--border-secondary);border-radius:var(--radius-lg);color:var(--text-primary);font-weight:600;font-size:var(--font-size-sm);cursor:pointer;transition:all var(--transition-fast)}._filterToggleBtn_1di35_164:hover{background:#ffffff1a;border-color:var(--text-secondary)}._filterToggleBtn_1di35_164._active_1di35_64{background:var(--accent);border-color:var(--accent);color:#fff;box-shadow:0 4px 15px var(--accent-glow)}._advancedFilters_1di35_192{max-height:0;overflow:hidden;transition:all .4s cubic-bezier(.4,0,.2,1);opacity:0}._advancedFilters_1di35_192._show_1di35_199{max-height:1200px;opacity:1;margin-top:var(--space-6)}._filterDivider_1di35_205{height:1px;background:var(--border-primary);margin-bottom:var(--space-6)}._filterGrid_1di35_211{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:var(--space-6);margin-bottom:var(--space-8)}._filterItem_1di35_218{display:flex;flex-direction:column;gap:var(--space-2)}._filterItem_1di35_218 label{font-size:.7rem;font-weight:700;color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.05em}._filterItem_1di35_218 select{height:44px;padding:0 var(--space-4);background:var(--bg-tertiary);border:1px solid var(--border-primary);border-radius:var(--radius-md);color:var(--text-primary);font-size:var(--font-size-sm);font-family:inherit;cursor:pointer;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%2371717a' 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 1rem center;transition:all var(--transition-fast)}._filterItem_1di35_218 select:hover{border-color:var(--border-secondary);background-color:var(--bg-elevated)}._filterItem_1di35_218 select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-glow)}._genreSection_1di35_260{border-top:1px solid var(--border-primary);padding-top:var(--space-6);margin-bottom:var(--space-8)}._genreLabel_1di35_266{display:block;font-size:.7rem;font-weight:700;color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.05em;margin-bottom:var(--space-4)}._genreContainer_1di35_276{display:flex;flex-wrap:wrap;gap:var(--space-2)}._genreButton_1di35_282{background:#ffffff0d;border:1px solid var(--border-primary);color:var(--text-secondary);padding:.5rem 1rem;border-radius:var(--radius-full);font-size:var(--font-size-xs);font-weight:600;cursor:pointer;transition:all var(--transition-fast)}._genreButton_1di35_282:hover{border-color:var(--accent);color:var(--text-primary)}._genreButton_1di35_282._include_1di35_299{background:#10b9811a;border-color:#10b981;color:#10b981}._genreButton_1di35_282._exclude_1di35_305{background:#ef44441a;border-color:#ef4444;color:#ef4444;text-decoration:line-through}._filterActions_1di35_312{display:flex;justify-content:flex-end;gap:var(--space-4);border-top:1px solid var(--border-primary);padding-top:var(--space-6)}._grid_1di35_320{display:grid;grid-template-columns:repeat(7,1fr);gap:var(--space-6);animation:_fadeIn_1di35_1 .5s var(--ease-smooth);width:100%}@media(max-width:1400px){._grid_1di35_320{grid-template-columns:repeat(6,1fr)}}@media(max-width:1200px){._grid_1di35_320{grid-template-columns:repeat(5,1fr)}}@media(max-width:1024px){._grid_1di35_320{grid-template-columns:repeat(4,1fr)}}@media(max-width:768px){._grid_1di35_320{grid-template-columns:repeat(3,1fr);gap:var(--space-2);min-width:0;width:100%;align-items:start}._controls_1di35_21,._filterContainer_1di35_100{padding:var(--space-4);width:100%;box-sizing:border-box}._filters_1di35_40{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;scroll-snap-type:x mandatory;padding-bottom:var(--space-2)}._filters_1di35_40::-webkit-scrollbar{display:none}._filterBtn_1di35_46{flex-shrink:0;scroll-snap-align:start}._searchBarWrapper_1di35_114{flex-direction:column;align-items:stretch}._searchActions_1di35_154{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-2)}._searchBtn_1di35_159{padding:0!important}._filterGrid_1di35_211{grid-template-columns:repeat(2,1fr)}}@media(max-width:600px){._grid_1di35_320{grid-template-columns:repeat(2,1fr)!important;gap:12px!important;min-width:0;width:100%;overflow:hidden;justify-items:center}._itemWrapper_1di35_410{width:100%;max-width:160px;min-width:0;overflow:hidden;height:auto}._cardActions_1di35_418{gap:8px;margin-top:8px;width:100%}._statusSelect_1di35_424{height:36px;font-size:11px;padding:0 8px;background-position:right .6rem center;flex-grow:1}._removeBtn_1di35_432{width:36px;height:36px;flex-shrink:0}._filterGrid_1di35_211{grid-template-columns:1fr}}._resultsHeader_1di35_443{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-6);gap:var(--space-4);flex-wrap:wrap;width:100%}._resultsTitle_1di35_453{font-size:var(--font-size-lg);font-weight:700;color:var(--text-primary);margin:0;display:flex;align-items:center;gap:var(--space-2)}._itemCount_1di35_463{font-size:var(--font-size-sm);color:var(--text-tertiary);font-weight:500}._pagination_1di35_469{display:flex;align-items:center;gap:var(--space-3);background:var(--bg-secondary);padding:6px 12px;border-radius:var(--radius-full);border:1px solid var(--border-secondary)}._pageBtn_1di35_479{background:none;border:none;color:var(--text-primary);cursor:pointer;display:flex;align-items:center;justify-content:center;padding:6px;border-radius:var(--radius-full);transition:all var(--transition-fast);gap:var(--space-2)}._pageBtn_1di35_479:hover:not(:disabled){background:var(--bg-tertiary);color:var(--accent)}._pageBtn_1di35_479:disabled{opacity:.3;cursor:not-allowed}._pageBtn_1di35_479 span{font-size:var(--font-size-xs);font-weight:600}._pageInfo_1di35_508{font-size:var(--font-size-sm);color:var(--text-secondary);min-width:80px;text-align:center}._pageInfo_1di35_508 strong{color:var(--text-primary)}._bottomPagination_1di35_519{display:flex;justify-content:center;margin-top:var(--space-10);padding-top:var(--space-6);border-top:1px solid var(--border-primary);width:100%}._itemWrapper_1di35_410{display:flex;flex-direction:column;height:100%;transition:transform var(--transition-base)}._itemWrapper_1di35_410:hover{transform:translateY(-4px)}._cardActions_1di35_418{margin-top:.5rem;display:flex;align-items:center;gap:.5rem;background:var(--bg-surface, #181820);padding:4px;border-radius:var(--radius-md);border:1px solid var(--border-primary)}._statusSelect_1di35_424{flex-grow:1;height:36px;padding:0 .75rem;background-color:#ffffff0a!important;border:1px solid var(--border-primary)!important;border-radius:var(--radius-sm)!important;color:var(--text-primary);font-size:.8rem;font-weight:600;cursor:pointer}._statusSelect_1di35_424:hover{border-color:var(--border-accent)!important;background-color:#ffffff14!important}._removeBtn_1di35_432{background:#ef44441a;color:#ef4444;border:1px solid rgba(239,68,68,.2);width:36px;height:36px;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-sm);transition:all .2s ease;cursor:pointer;flex-shrink:0}._removeBtn_1di35_432:hover{background:#ef4444;color:#fff;border-color:#ef4444;transform:scale(1.05)}._emptyState_1di35_590{text-align:center;padding:var(--space-16) var(--space-4);color:var(--text-tertiary);background:var(--glass-bg);background-image:radial-gradient(circle,rgba(139,92,246,.08) 0%,transparent 70%);border:1px dashed var(--border-primary);border-radius:var(--radius-xl);font-size:var(--font-size-base);font-weight:500;animation:_fadeIn_1di35_1 .5s var(--ease-smooth);width:100%;display:flex;flex-direction:column;align-items:center;gap:var(--space-4)}._emptyTitle_1di35_608{font-size:1.25rem;font-weight:700;color:var(--text-primary);margin:0}._emptyText_1di35_615{color:var(--text-secondary);margin:0;max-width:420px;line-height:1.6}._emptyBtn_1di35_622{display:inline-flex;align-items:center;gap:.5rem;margin-top:var(--space-2);padding:.7rem 1.6rem;background:linear-gradient(135deg,var(--accent) 0%,var(--accent-dark) 100%);color:var(--accent-text);font-size:var(--font-size-sm);font-weight:700;border:none;border-radius:var(--radius-full);cursor:pointer;box-shadow:0 4px 16px var(--accent-glow);transition:all var(--transition-base)}._emptyBtn_1di35_622:hover{transform:translateY(-2px);box-shadow:0 8px 24px var(--accent-glow)}@keyframes _fadeIn_1di35_1{0%{opacity:0}to{opacity:1}}@keyframes _slideUpIn_1di35_1{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}._headerActions_1di35_664{display:flex;align-items:center;gap:var(--space-4);flex-wrap:wrap}._manageBtn_1di35_671{display:flex;align-items:center;gap:var(--space-2);height:40px;padding:0 var(--space-4);background:#ffffff0d;border:1px solid var(--border-secondary);border-radius:var(--radius-lg);color:var(--text-primary);font-weight:600;font-size:var(--font-size-sm);cursor:pointer;transition:all var(--transition-fast)}._manageBtn_1di35_671:hover{background:#ffffff1a;border-color:var(--text-secondary)}._manageBtn_1di35_671._active_1di35_64{background:var(--accent);border-color:var(--accent);color:#fff;box-shadow:0 4px 15px var(--accent-glow)}._manageBar_1di35_699{display:flex;align-items:center;gap:var(--space-4);flex-wrap:wrap;padding:var(--space-3) var(--space-4);margin-bottom:var(--space-6);background:var(--glass-bg);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid var(--glass-border);border-radius:var(--radius-xl);box-shadow:var(--glass-shadow);width:100%;box-sizing:border-box;animation:_fadeIn_1di35_1 .3s ease-out}._selectAllBtn_1di35_717{display:flex;align-items:center;gap:var(--space-2);background:none;border:none;color:var(--text-secondary);font-weight:600;font-size:var(--font-size-sm);cursor:pointer;padding:var(--space-1) var(--space-2);border-radius:var(--radius-md);transition:all var(--transition-fast)}._selectAllBtn_1di35_717:hover{color:var(--text-primary);background:#ffffff0f}._selectAllBtn_1di35_717 svg{color:var(--accent)}._manageCount_1di35_741{font-size:var(--font-size-sm);font-weight:700;color:var(--accent-light);white-space:nowrap}._manageSpacer_1di35_748{flex:1}._manageStatusSelect_1di35_752{height:38px;padding:0 .75rem;background-color:#ffffff0a!important;border:1px solid var(--border-primary)!important;border-radius:var(--radius-sm)!important;color:var(--text-primary);font-size:.8rem;font-weight:600;cursor:pointer}._manageStatusSelect_1di35_752:disabled{opacity:.45;cursor:default}._manageRemoveBtn_1di35_769{display:flex;align-items:center;gap:var(--space-2);height:38px;padding:0 var(--space-4);background:#ef44441f;color:#ef4444;border:1px solid rgba(239,68,68,.3);border-radius:var(--radius-sm);font-weight:600;font-size:var(--font-size-sm);cursor:pointer;transition:all var(--transition-fast)}._manageRemoveBtn_1di35_769:hover:not(:disabled){background:#ef444440;border-color:#ef4444}._manageRemoveBtn_1di35_769:disabled{opacity:.45;cursor:default}._itemWrapper_1di35_410{position:relative}._selectOverlay_1di35_799{position:absolute;inset:0;z-index:6;cursor:pointer;border-radius:var(--radius-md);transition:background var(--transition-fast)}._selectOverlay_1di35_799:hover{background:#6c9fff1f}._itemWrapper_1di35_410._selected_1di35_812 ._selectOverlay_1di35_799{background:#6c9fff26;border:2px solid var(--accent);border-radius:var(--radius-md);box-shadow:0 8px 24px var(--accent-glow)}._selectBadge_1di35_819{position:absolute;top:8px;left:8px;width:26px;height:26px;display:flex;align-items:center;justify-content:center;border-radius:50%;border:2px solid rgba(255,255,255,.7);background:#00000073;color:#fff;transition:all var(--transition-fast)}._itemWrapper_1di35_410._selected_1di35_812 ._selectBadge_1di35_819{background:var(--accent);border-color:var(--accent)}
@@ -0,0 +1 @@
1
+ import{h as ue,p as Ye,f as qe,r as He,u as Qe,d,A as Ve,T as M,a as me,e,S as Ke}from"./vendor-rLNfZm7Y.js";import{u as Je,g as Ze,y as Xe,z as he,A as pe,C as et,m as tt,D as at,E as nt,G as st,H as lt,I as it,J as ge,B,K as rt,b as ct,c as ot,L as dt,F as _e,a as ve,N as ut,O as mt,P as fe,Q as ht,M as Z}from"./index-CpjgU8ou.js";import{S as pt,a as gt}from"./SkeletonGrid-D5vRvX5q.js";import{E as _t}from"./ErrorMessage-BwSjzblw.js";import"./useIsMobile-Cb8HcKRj.js";import"./useAnimeInfoData-BOfyi9UJ.js";const vt="_header_1di35_1",ft="_fadeIn_1di35_1",yt="_title_1di35_6",St="_subtitle_1di35_14",bt="_controls_1di35_21",Ct="_slideUpIn_1di35_1",At="_filters_1di35_40",Nt="_filterBtn_1di35_46",Bt="_active_1di35_64",Lt="_sortSelect_1di35_71",kt="_filterContainer_1di35_100",wt="_searchBarWrapper_1di35_114",Tt="_inputIconWrapper_1di35_120",It="_searchIcon_1di35_125",xt="_searchInput_1di35_134",Wt="_searchActions_1di35_154",Rt="_searchBtn_1di35_159",Pt="_filterToggleBtn_1di35_164",Ft="_advancedFilters_1di35_192",Ot="_show_1di35_199",zt="_filterDivider_1di35_205",$t="_filterGrid_1di35_211",Dt="_filterItem_1di35_218",Gt="_genreSection_1di35_260",Mt="_genreLabel_1di35_266",Et="_genreContainer_1di35_276",Ut="_genreButton_1di35_282",jt="_include_1di35_299",Yt="_exclude_1di35_305",qt="_filterActions_1di35_312",Ht="_grid_1di35_320",Qt="_itemWrapper_1di35_410",Vt="_cardActions_1di35_418",Kt="_statusSelect_1di35_424",Jt="_removeBtn_1di35_432",Zt="_resultsHeader_1di35_443",Xt="_resultsTitle_1di35_453",ea="_itemCount_1di35_463",ta="_pagination_1di35_469",aa="_pageBtn_1di35_479",na="_pageInfo_1di35_508",sa="_bottomPagination_1di35_519",la="_emptyState_1di35_590",ia="_emptyTitle_1di35_608",ra="_emptyText_1di35_615",ca="_emptyBtn_1di35_622",oa="_headerActions_1di35_664",da="_manageBtn_1di35_671",ua="_manageBar_1di35_699",ma="_selectAllBtn_1di35_717",ha="_manageCount_1di35_741",pa="_manageSpacer_1di35_748",ga="_manageStatusSelect_1di35_752",_a="_manageRemoveBtn_1di35_769",va="_selectOverlay_1di35_799",fa="_selected_1di35_812",ya="_selectBadge_1di35_819",a={header:vt,fadeIn:ft,title:yt,subtitle:St,controls:bt,slideUpIn:Ct,filters:At,filterBtn:Nt,active:Bt,sortSelect:Lt,filterContainer:kt,searchBarWrapper:wt,inputIconWrapper:Tt,searchIcon:It,searchInput:xt,searchActions:Wt,searchBtn:Rt,filterToggleBtn:Pt,advancedFilters:Ft,show:Ot,filterDivider:zt,filterGrid:$t,filterItem:Dt,genreSection:Gt,genreLabel:Mt,genreContainer:Et,genreButton:Ut,include:jt,exclude:Yt,filterActions:qt,grid:Ht,itemWrapper:Qt,cardActions:Vt,statusSelect:Kt,removeBtn:Jt,resultsHeader:Zt,resultsTitle:Xt,itemCount:ea,pagination:ta,pageBtn:aa,pageInfo:na,bottomPagination:sa,emptyState:la,emptyTitle:ia,emptyText:ra,emptyBtn:ca,headerActions:oa,manageBtn:da,manageBar:ua,selectAllBtn:ma,manageCount:ha,manageSpacer:pa,manageStatusSelect:ga,manageRemoveBtn:_a,selectOverlay:va,selected:fa,selectBadge:ya},Se=["All","Continue Watching","Watching","Completed","On-Hold","Dropped","Planned"],ye=Se.slice(2),Sa=[{value:"ALL",label:"All Types"},{value:"TV",label:"TV Series"},{value:"Movie",label:"Movie"},{value:"OVA",label:"OVA"},{value:"ONA",label:"ONA"},{value:"TV_SHORT",label:"TV Short"},{value:"SPECIAL",label:"Special"}],ba=[{value:"ALL",label:"All Seasons"},{value:"WINTER",label:"Winter"},{value:"SPRING",label:"Spring"},{value:"SUMMER",label:"Summer"},{value:"FALL",label:"Fall"}],wa=()=>{ue(()=>{document.title="Watchlist - dango"},[]);const{filter:y="All"}=Ye(),X=qe(),[l,ee]=He(),te=Qe(),[o,L]=d(parseInt(l.get("page")||"1")),[h,k]=d(l.get("query")||""),[S,E]=d(l.get("sortBy")||"last_added"),[p,w]=d(l.get("type")||"ALL"),[g,T]=d(l.get("season")||"ALL"),[_,I]=d(l.get("year")||"ALL"),[b,x]=d(()=>{const t={},n=l.get("genres")?.split(",").filter(Boolean)||[],s=l.get("excludeGenres")?.split(",").filter(Boolean)||[];return n.forEach(i=>i&&(t[i]="include")),s.forEach(i=>i&&(t[i]="exclude")),t}),[W,be]=d(()=>["type","season","year","genres","excludeGenres"].some(t=>l.has(t))),{lowEndMode:Ce}=Je(),{titlePreference:R}=Ze(),{data:Ae}=Xe(),ae=Ae?.genres||[],U=Ve(null),[c,C]=d(null),[j,P]=d(!1),[ne,F]=d(!1),[O,Ne]=d(!1),[m,v]=d(new Set),r=y==="Continue Watching",z=M(()=>{const t=new URLSearchParams(l);return t.delete("page"),t.set("titlePreference",R),t.toString()},[l,R]),{data:$,isLoading:Be,error:Le}=he(z,o,14),{data:D,isLoading:ke,error:we}=pe(y,z,o,14),{data:Te}=he(z,o+1,14),{data:Ie}=pe(y,z,o+1,14),Y=M(()=>(r?$?.data:D?.data)||[],[r,$,D]),q=M(()=>(r?$?.total:D?.total)||0,[r,$,D]),A=r?Be:ke,se=r?Le:we,le=r?Te:Ie;ue(()=>{k(l.get("query")||""),E(l.get("sortBy")||"last_added"),w(l.get("type")||"ALL"),T(l.get("season")||"ALL"),I(l.get("year")||"ALL");const t={},n=l.get("genres")?.split(",").filter(Boolean)||[],s=l.get("excludeGenres")?.split(",").filter(Boolean)||[];n.forEach(i=>i&&(t[i]="include")),s.forEach(i=>i&&(t[i]="exclude")),x(t),L(parseInt(l.get("page")||"1")),v(new Set)},[l]);const xe=me({mutationFn:async({id:t,status:n})=>{await fetch("/api/watchlist/status",{method:"POST",body:JSON.stringify({id:t,status:n}),headers:{"Content-Type":"application/json"}})},onSuccess:()=>{te.invalidateQueries({queryKey:["watchlist"]}),et.success("Status updated")}}),We=me({mutationFn:async t=>{await fetch("/api/continue-watching/remove",{method:"POST",body:JSON.stringify({showId:t}),headers:{"Content-Type":"application/json"}})},onSuccess:()=>te.invalidateQueries({queryKey:["allContinueWatching"]})}),H=tt(),{data:ie}=at("skipRemoveConfirmation"),Re=nt(),Q=M(()=>{const t=n=>n[R]||n.name||"";return[...Y].sort((n,s)=>S==="name_asc"?t(n).localeCompare(t(s)):S==="name_desc"?t(s).localeCompare(t(n)):0)},[Y,S,R]),V=new Date().getFullYear(),Pe=[{value:"ALL",label:"All Years"},...Array.from({length:V-1980+1},(t,n)=>({value:String(V-n),label:String(V-n)}))],u=(t=S,n=1)=>{const s=new URLSearchParams;h.trim()&&s.set("query",h.trim()),t!=="last_added"&&s.set("sortBy",t),p!=="ALL"&&s.set("type",p),g!=="ALL"&&s.set("season",g),_!=="ALL"&&s.set("year",_);const i=Object.entries(b).filter(([,f])=>f==="include").map(([f])=>f),N=Object.entries(b).filter(([,f])=>f==="exclude").map(([f])=>f);i.length>0&&s.set("genres",i.join(",")),N.length>0&&s.set("excludeGenres",N.join(",")),n>1&&s.set("page",n.toString()),ee(s),n!==o&&L(n)},G=t=>{if(u(S,t),U.current){const n=U.current.getBoundingClientRect().top+window.scrollY-100;window.scrollTo({top:n,behavior:"smooth"})}},Fe=()=>{k(""),E("last_added"),w("ALL"),T("ALL"),I("ALL"),x({}),ee(new URLSearchParams),L(1)},Oe=t=>{x(n=>{const s=n[t],i={...n};return s==="include"?i[t]="exclude":s==="exclude"?delete i[t]:i[t]="include",i})},re=(t,n)=>{if(r){C({id:t,name:n});return}String(ie)==="true"||String(ie)==="1"?H.mutate(t):C({id:t,name:n})},ze=()=>{if(c){if(c.ids){r?($e.mutate(c.ids),j&&oe.mutate(c.ids)):oe.mutate(c.ids),v(new Set),C(null),P(!1),F(!1);return}r?(We.mutate(c.id),j&&H.mutate(c.id)):H.mutate(c.id),ne&&Re.mutate({key:"skipRemoveConfirmation",value:!0}),C(null),P(!1),F(!1)}},ce=()=>{C(null),P(!1),F(!1)},oe=st(),$e=lt(),De=it(),Ge=()=>{Ne(t=>{const n=!t;return n||v(new Set),n})},Me=t=>{v(n=>{const s=new Set(n);return s.has(t)?s.delete(t):s.add(t),s})},K=Q.map(t=>t.id),J=K.length>0&&K.every(t=>m.has(t)),Ee=()=>{v(J?new Set:new Set(K))},Ue=t=>{m.size!==0&&(De.mutate({ids:[...m],status:t}),v(new Set))},je=()=>{m.size!==0&&C({ids:[...m]})},de=Y.length>=14&&le&&le.data.length>0;return e("div",{className:"page-container",children:[e("header",{className:a.header,children:[e("h2",{className:a.title,children:"My Watchlist"}),e("p",{className:a.subtitle,children:"Track and manage your anime collection"})]}),e("div",{className:a.controls,children:[e("div",{className:a.filters,children:Se.map(t=>e("button",{className:`${a.filterBtn} ${y===t?a.active:""}`,onClick:()=>{const n=new URLSearchParams(l);n.delete("page"),X({pathname:`/watchlist/${t}`,search:n.toString()}),L(1)},children:t},t))}),e("div",{children:e("select",{className:a.sortSelect,value:S,onChange:t=>{const n=t.currentTarget.value;E(n),u(n,o)},children:[e("option",{value:"last_added",children:"Recently Added"}),e("option",{value:"name_asc",children:"Name (A-Z)"}),e("option",{value:"name_desc",children:"Name (Z-A)"})]})})]}),e("div",{className:a.filterContainer,children:[e("div",{className:a.searchBarWrapper,children:[e("div",{className:a.inputIconWrapper,children:[e(ge,{className:a.searchIcon}),e("input",{className:a.searchInput,placeholder:"Search your watchlist by title...",value:h,onInput:t=>k(t.currentTarget.value),onKeyDown:t=>t.key==="Enter"&&u()})]}),e("div",{className:a.searchActions,children:[e(B,{onClick:()=>u(),className:a.searchBtn,children:"Search"}),e("button",{className:`${a.filterToggleBtn} ${W?a.active:""}`,onClick:()=>be(!W),children:[e(rt,{size:14}),e("span",{children:"Filters"}),W?e(ct,{size:12}):e(ot,{size:12})]})]})]}),e("div",{className:`${a.advancedFilters} ${W?a.show:""}`,children:[e("div",{className:a.filterDivider}),e("div",{className:a.filterGrid,children:[e("div",{className:a.filterItem,children:[e("label",{children:"Type"}),e("select",{value:p,onChange:t=>w(t.currentTarget.value),children:Sa.map(t=>e("option",{value:t.value,children:t.label},t.value))})]}),e("div",{className:a.filterItem,children:[e("label",{children:"Season"}),e("select",{value:g,onChange:t=>T(t.currentTarget.value),children:ba.map(t=>e("option",{value:t.value,children:t.label},t.value))})]}),e("div",{className:a.filterItem,children:[e("label",{children:"Year"}),e("select",{value:_,onChange:t=>I(t.currentTarget.value),children:Pe.map(t=>e("option",{value:t.value,children:t.label},t.value))})]})]}),ae.length>0&&e("div",{className:a.genreSection,children:[e("label",{className:a.genreLabel,children:"Genres"}),e("div",{className:a.genreContainer,children:ae.map(t=>e("button",{className:`${a.genreButton} ${a[b[t]||""]}`,onClick:()=>Oe(t),children:t},t))})]}),e("div",{className:a.filterActions,children:[e(B,{variant:"secondary",onClick:Fe,children:"Reset All"}),e(B,{onClick:()=>u(),className:a.applyBtn,children:"Apply Filters"})]})]})]}),e("div",{className:a.resultsHeader,ref:U,children:[e("h3",{className:a.resultsTitle,children:[r?"Continue Watching":y,e("span",{className:a.itemCount,children:["(",q," items)"]})]}),e("div",{className:a.headerActions,children:[e("button",{className:`${a.manageBtn} ${O?a.active:""}`,onClick:Ge,children:[e(dt,{size:13}),e("span",{children:"Bulk Manage"})]}),q>0&&e("div",{className:a.pagination,children:[e("button",{className:a.pageBtn,onClick:()=>G(o-1),disabled:o===1||A,"aria-label":"Previous page",children:e(_e,{size:14})}),e("span",{className:a.pageInfo,children:["Page ",e("strong",{children:o})]}),e("button",{className:a.pageBtn,onClick:()=>G(o+1),disabled:!de||A,"aria-label":"Next page",children:e(ve,{size:14})})]})]})]}),O&&e("div",{className:a.manageBar,children:[e("button",{className:a.selectAllBtn,onClick:Ee,children:[J?e(ut,{size:16}):e(mt,{size:16}),e("span",{children:J?"Clear Page":"Select All"})]}),e("span",{className:a.manageCount,children:[m.size," selected"]}),e("div",{className:a.manageSpacer}),!r&&e("select",{className:a.manageStatusSelect,value:"",onChange:t=>{t.currentTarget.value&&Ue(t.currentTarget.value)},disabled:m.size===0,title:"Set status for selected items",children:[e("option",{value:"",children:"Set status…"}),ye.map(t=>e("option",{value:t,children:t},t))]}),e("button",{className:a.manageRemoveBtn,onClick:je,disabled:m.size===0,children:[e(fe,{size:13}),e("span",{children:"Remove Selected"})]})]}),A?e(pt,{}):se?e(_t,{message:se.message}):e(Ke,{children:[(p!=="ALL"||g!=="ALL"||_!=="ALL"||Object.keys(b).length>0||h.trim())&&e("div",{style:{display:"flex",flexWrap:"wrap",gap:"8px",alignItems:"center",marginBottom:"1.5rem"},children:[e("span",{style:{fontSize:"0.8rem",color:"var(--text-muted)",fontWeight:600},children:"Active Filters:"}),h.trim()&&e("span",{className:"badge badge-secondary",style:{display:"inline-flex",alignItems:"center",gap:"6px"},children:["Search: ",h,e("button",{onClick:t=>{t.stopPropagation(),t.preventDefault(),k(""),u()},style:{background:"none",border:"none",color:"inherit",cursor:"pointer"},children:"✕"})]}),p!=="ALL"&&e("span",{className:"badge badge-secondary",style:{display:"inline-flex",alignItems:"center",gap:"6px"},children:["Type: ",p,e("button",{onClick:t=>{t.stopPropagation(),t.preventDefault(),w("ALL"),u()},style:{background:"none",border:"none",color:"inherit",cursor:"pointer"},children:"✕"})]}),g!=="ALL"&&e("span",{className:"badge badge-secondary",style:{display:"inline-flex",alignItems:"center",gap:"6px"},children:["Season: ",g,e("button",{onClick:t=>{t.stopPropagation(),t.preventDefault(),T("ALL"),u()},style:{background:"none",border:"none",color:"inherit",cursor:"pointer"},children:"✕"})]}),_!=="ALL"&&e("span",{className:"badge badge-secondary",style:{display:"inline-flex",alignItems:"center",gap:"6px"},children:["Year: ",_,e("button",{onClick:t=>{t.stopPropagation(),t.preventDefault(),I("ALL"),u()},style:{background:"none",border:"none",color:"inherit",cursor:"pointer"},children:"✕"})]}),Object.entries(b).map(([t,n])=>e("span",{className:`badge ${n==="include"?"badge-primary":"badge-danger"}`,style:{display:"inline-flex",alignItems:"center",gap:"6px"},children:[n==="include"?`+ ${t}`:`- ${t}`,e("button",{onClick:s=>{s.stopPropagation(),s.preventDefault(),x(i=>{const N={...i};return delete N[t],N}),u()},style:{background:"none",border:"none",color:"inherit",cursor:"pointer"},children:"✕"})]},t))]}),e("div",{className:`${a.grid} ${Ce?a.lowEnd:""}`,children:Q.map(t=>{const n=m.has(t.id);return e("div",{className:`${a.itemWrapper} ${n?a.selected:""}`,children:[O&&e("div",{className:a.selectOverlay,onClick:()=>Me(t.id),title:n?"Deselect":"Select",children:e("span",{className:a.selectBadge,children:n?e(ht,{size:12}):null})}),e(gt,{anime:t,continueWatching:r,onRemove:()=>re(t.id,t.name),layout:"vertical"}),!r&&!O&&e("div",{className:a.cardActions,children:[e("select",{className:a.statusSelect,value:t.status,onChange:s=>xe.mutate({id:t.id,status:s.currentTarget.value}),children:ye.map(s=>e("option",{value:s,children:s},s))}),e("button",{className:a.removeBtn,onClick:()=>re(t.id,t.name),title:"Remove from Watchlist","aria-label":"Remove from Watchlist",children:e(fe,{size:12})})]})]},t._id)})})]}),!A&&Q.length===0&&e("div",{className:a.emptyState,children:[e("h3",{className:a.emptyTitle,children:"Your watchlist is looking a bit lonely"}),e("p",{className:a.emptyText,children:y!=="All"||h||p!=="ALL"||g!=="ALL"||_!=="ALL"||Object.keys(b).length>0?"No anime match these filters. Try adjusting them to see more titles.":"Let's find something to watch!"}),e("button",{className:a.emptyBtn,onClick:()=>X("/search"),children:[e(ge,{size:14}),e("span",{children:"Browse Anime"})]})]}),q>0&&e("div",{className:a.bottomPagination,children:e("div",{className:a.pagination,children:[e("button",{className:a.pageBtn,onClick:()=>G(o-1),disabled:o===1||A,children:[e(_e,{size:14}),e("span",{children:"Previous"})]}),e("span",{className:a.pageInfo,children:["Page ",e("strong",{children:o})]}),e("button",{className:a.pageBtn,onClick:()=>G(o+1),disabled:!de||A,children:[e("span",{children:"Next"}),e(ve,{size:14})]})]})}),e(Z,{isOpen:!!c,onClose:ce,title:r?"Reset Progress":"Remove from Watchlist",children:[e(Z.Body,{children:[e("p",{children:c?.ids&&c.ids.length>1?r?`Are you sure you want to remove watch progress for ${c.ids.length} items?`:`Are you sure you want to remove ${c.ids.length} items from your watchlist?`:r?`Are you sure you want to remove your watch progress for "${c?.name}"?`:`Are you sure you want to remove "${c?.name}" from your watchlist?`}),r&&e("label",{children:[e("input",{type:"checkbox",checked:j,onChange:t=>P(t.target.checked)}),"Also remove from my watchlist"]}),!r&&!(c?.ids&&c.ids.length>1)&&e("label",{children:[e("input",{type:"checkbox",checked:ne,onChange:t=>F(t.target.checked)}),"Remember my choice"]})]}),e(Z.Actions,{children:[e(B,{variant:"secondary",onClick:ce,children:"No"}),e(B,{variant:"danger",onClick:ze,children:"Yes"})]})]})]})};export{wa as default};
@@ -0,0 +1 @@
1
+ import{ae as n}from"./index-CpjgU8ou.js";let a=null,e=null;async function r(){return a||(e||(e=n(()=>import("./hls-BOLXTnjL.js"),[]).then(l=>(a=l.default,a)).catch(()=>null)),e)}function c(l){return l.canPlayType("application/vnd.apple.mpegurl")!==""||l.canPlayType("application/x-mpegURL")!==""}export{c,r as l};