@serifpersia/dango 3.9.1 → 3.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/client/dist/assets/{AnimeCard-CocG9qrm.js → AnimeCard-DV3CayVB.js} +1 -1
- package/client/dist/assets/{AnimeInfo-C-ZFMCrd.js → AnimeInfo-C_yN40WV.js} +1 -1
- package/client/dist/assets/{AnimeInfoPage-DwL9Ax5L.js → AnimeInfoPage-Dr9zOOq1.js} +2 -2
- package/client/dist/assets/{Asmr-D1HNwHq-.js → Asmr-BzVhO0PK.js} +1 -1
- package/client/dist/assets/{AsmrPopup-l0czpXly.js → AsmrPopup-CfCdTvhx.js} +1 -1
- package/client/dist/assets/{AsmrResetProgressModal-DYEslZfI.js → AsmrResetProgressModal-CLjzhb4H.js} +1 -1
- package/client/dist/assets/{Home-ujV6ObHi.css → Home-D_Hd4SUo.css} +1 -1
- package/client/dist/assets/{Home-Ck5Pv2w-.js → Home-wtyG5fKA.js} +1 -1
- package/client/dist/assets/{Insights-BNgHB1hx.js → Insights-DGTqzxXr.js} +1 -1
- package/client/dist/assets/{LibraryListPage-D27ISh6l.js → LibraryListPage-DhsV2n64.js} +1 -1
- package/client/dist/assets/{ListeningList-vXQfEFYE.js → ListeningList-BPD9igfn.js} +1 -1
- package/client/dist/assets/{Manga-CeXla1mv.js → Manga-ClgoT4qk.js} +1 -1
- package/client/dist/assets/{MangaInfoPage-B8IZSB-e.js → MangaInfoPage-B8fttN1T.js} +1 -1
- package/client/dist/assets/{MangaReadPage-GpMss0tS.js → MangaReadPage-BTAVFeJH.js} +1 -1
- package/client/dist/assets/{MangaResetProgressModal-CSR-roX2.js → MangaResetProgressModal-CshoUUBm.js} +1 -1
- package/client/dist/assets/{Mature-D64IntyP.js → Mature-DAgfZt9Q.js} +1 -1
- package/client/dist/assets/{MatureConsentModal-BHtqyO00.js → MatureConsentModal-BhpY2wdn.js} +1 -1
- package/client/dist/assets/{MediaCard-9IiRZpbk.js → MediaCard-Czkyxqgb.js} +1 -1
- package/client/dist/assets/{OptionListMenu-D4J4Q9gM.js → OptionListMenu-HllK8Z_u.js} +1 -1
- package/client/dist/assets/Player-BVGxVSGv.js +56 -0
- package/client/dist/assets/{PlayerProvider-BmMsmdYb.js → PlayerProvider-DGtOX3e2.js} +1 -1
- package/client/dist/assets/{PlayerSettings-BpQo55X9.js → PlayerSettings-9iBVbWNR.js} +1 -1
- package/client/dist/assets/{QueueOptionsButton-C__t6z-U.js → QueueOptionsButton-C3ptca9g.js} +1 -1
- package/client/dist/assets/{QueueRail-ByZnqlUT.js → QueueRail-De3oifUM.js} +1 -1
- package/client/dist/assets/{ReadingList-DgvW6qH1.js → ReadingList-Bco6T_Jh.js} +1 -1
- package/client/dist/assets/{ResetProgressModal-DgzXKZJG.js → ResetProgressModal-Cx1SaMad.js} +1 -1
- package/client/dist/assets/Search-B6dgK2Zu.js +1 -0
- package/client/dist/assets/{Settings-DtwXOUlW.js → Settings-DvOx960h.js} +1 -1
- package/client/dist/assets/{SkeletonGrid-aY7UYKGV.js → SkeletonGrid-B2s8ytI8.js} +1 -1
- package/client/dist/assets/{Trackers-B2tFpPHi.js → Trackers-Bp-U_jYN.js} +1 -1
- package/client/dist/assets/{Tv-Bbot3Klz.css → Tv-CDALArd3.css} +1 -1
- package/client/dist/assets/Tv-t2tt4jji.js +4 -0
- package/client/dist/assets/{TvInfo-DzdeVN1Y.js → TvInfo-BiUMbdN7.js} +1 -1
- package/client/dist/assets/{TvPopup-BbrEhCCy.js → TvPopup-DnwmyRRE.js} +1 -1
- package/client/dist/assets/{TvSearch-CLj4jth8.js → TvSearch-C9VNflnp.js} +1 -1
- package/client/dist/assets/{TvWatchlist-sq1VTglT.js → TvWatchlist-Bt39ymiP.js} +1 -1
- package/client/dist/assets/{VirtualKeyboard-CdG90MB4.js → VirtualKeyboard-BSILqgeU.js} +1 -1
- package/client/dist/assets/{WatchAlong-CeIMQosP.js → WatchAlong-GtXJ-2Qq.js} +1 -1
- package/client/dist/assets/{WatchAlongPanel-75S2BYQN.js → WatchAlongPanel-CxkbtjKg.js} +1 -1
- package/client/dist/assets/{Watchlist-BC20a1Yr.js → Watchlist-CQ57yp82.js} +1 -1
- package/client/dist/assets/index-BYGDqzEf.js +178 -0
- package/client/dist/assets/index-TGvIXMUj.css +1 -0
- package/client/dist/assets/{libraryInvalidation-ZMju1rNj.js → libraryInvalidation-CHW51Kbi.js} +1 -1
- package/client/dist/assets/playbackCompletion-DrDOXJXe.js +1 -0
- package/client/dist/assets/{useAnimeInfoData-Ba3HNec1.js → useAnimeInfoData-CZY3Ui-u.js} +1 -1
- package/client/dist/assets/{useMangaLibrary-D_qIjbhI.js → useMangaLibrary-x8zL6mOh.js} +1 -1
- package/client/dist/assets/{useMangaPopup-BpPyLnyj.js → useMangaPopup-DdrgbIw-.js} +1 -1
- package/client/dist/assets/{useProviders-Cy_Qpq6t.js → useProviders-Dk2T31ho.js} +1 -1
- package/client/dist/assets/{useTv-BDTl6Tsj.js → useTv-CDh-n25T.js} +1 -1
- package/client/dist/assets/{useTvLibrary-BcAQarFR.js → useTvLibrary-Dec7yfKF.js} +1 -1
- package/client/dist/assets/useWatchAlongPlayer-D1o2zDEn.css +1 -0
- package/client/dist/assets/useWatchAlongPlayer-DpUPA4jD.js +10 -0
- package/client/dist/index.html +2 -2
- package/package.json +2 -2
- package/server/dist/server.js +1 -1
- package/server/package.json +1 -1
- package/client/dist/assets/Player-BsXkumtD.js +0 -56
- package/client/dist/assets/Search-DaH6qV3W.js +0 -1
- package/client/dist/assets/Tv-VxFnu6cA.js +0 -4
- package/client/dist/assets/index-Bi3wnovR.css +0 -1
- package/client/dist/assets/index-DAZg1_S9.js +0 -178
- package/client/dist/assets/playbackCompletion-Del9VqoH.js +0 -1
- package/client/dist/assets/useWatchAlongPlayer-CPj919ZS.js +0 -10
- package/client/dist/assets/useWatchAlongPlayer-DwQJwhql.css +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
._fullscreenFlat_10bzs_1{border-radius:0}@media(max-width:900px)and (orientation:landscape){._fullscreenFlat_10bzs_1{border-radius:0}}@container (max-width: 26rem){._timeDisplay_10bzs_12{display:none}._bottomControls_10bzs_16{padding:0 .75rem .75rem}._leftControls_10bzs_20,._rightControls_10bzs_21{gap:.2rem}._controlBtn_10bzs_25{padding:5px;min-width:2.125rem;min-height:2.125rem}}._controlsOverlay_10bzs_32{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_10bzs_32>*{pointer-events:auto}._controlsOverlay_10bzs_32._hidden_10bzs_52{opacity:0;pointer-events:none;cursor:none}._topControls_10bzs_58{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_10bzs_78{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_10bzs_78:hover{background:#0f0f1199;color:#fff;transform:scale(1.1)}._videoTitleInfo_10bzs_98{display:flex;flex-direction:column;gap:.25rem}._animeTitle_10bzs_104{font-size:1.4rem;font-weight:800;color:#fff;letter-spacing:-.01em;text-shadow:0 2px 4px rgba(0,0,0,.5)}._episodeLabel_10bzs_112{font-size:.85rem;font-weight:600;color:#ffffffbf;text-shadow:0 2px 4px rgba(0,0,0,.5)}._speedBoostBadge_10bzs_119{position:absolute;top:1.5rem;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:.7rem;padding:.65rem 1rem;border:1px solid color-mix(in srgb,var(--accent) 45%,transparent);border-radius:var(--radius-md);background:#121216eb;color:#f5f3ff;font-size:.85rem;font-weight:800;letter-spacing:.06em;z-index:11;pointer-events:none}._speedBoostBadge_10bzs_119 span{line-height:1}._speedBoostBadge_10bzs_119 svg{display:block;flex-shrink:0}._bottomControls_10bzs_16{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:0 clamp(.5rem,1.5cqw,.75rem) clamp(.75rem,2.5cqw,1.5rem);z-index:10;pointer-events:auto;transition:transform .4s cubic-bezier(.2,.8,.2,1)}._progressBarContainer_10bzs_165{width:100%;height:20px;display:flex;align-items:center;cursor:pointer;position:relative;touch-action:none}@media(pointer:coarse){._progressBarContainer_10bzs_165{height:28px}._progressBarContainer_10bzs_165 ._progressBar_10bzs_165{height:6px}._progressBarContainer_10bzs_165 ._thumb_10bzs_184{opacity:1}}._progressBar_10bzs_165{width:100%;height:4px;background:#fff3;border-radius:2px;position:relative;transition:height .15s ease}._progressBarContainer_10bzs_165:hover ._progressBar_10bzs_165{height:6px}._bufferedBar_10bzs_202{position:absolute;top:0;left:0;height:100%;background:#ffffff4d;border-radius:2px;pointer-events:none}._watchedBar_10bzs_212{position:absolute;top:0;left:0;height:100%;background:var(--accent);border-radius:2px;pointer-events:none}._thumb_10bzs_184{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_10bzs_165:hover ._thumb_10bzs_184,._progressBarContainer_10bzs_165._scrubbing_10bzs_237 ._thumb_10bzs_184{opacity:1}._timeBubble_10bzs_241{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_10bzs_255{display:flex;align-items:center;justify-content:space-between;gap:.75rem;margin-top:8px}._leftControls_10bzs_20{display:flex;align-items:center;gap:1rem;gap:clamp(.5rem,2.5cqw,1rem);min-width:0}._rightControls_10bzs_21{display:flex;align-items:center;gap:.75rem;gap:clamp(.5rem,2cqw,.75rem)}._nextEpisodeBtn_10bzs_278{background:#ffffff0f;border:1px solid rgba(255,255,255,.12);border-radius:var(--radius-md);padding:.45rem .8rem;color:#fffc;font-weight:600;font-size:.9rem;display:inline-flex;align-items:center;gap:.5rem;cursor:pointer;transition:all var(--transition-fast);white-space:nowrap}._nextEpisodeBtn_10bzs_278:hover{background:#ffffff1a;color:#fff;transform:translateY(-1px);border-color:#fff3}._controlBtn_10bzs_25{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_10bzs_25{padding:10px;min-width:2.75rem;min-height:2.75rem}}._controlBtn_10bzs_25:hover{color:#fff;background:#ffffff1a}._controlBtn_10bzs_25:focus{outline:none}._controlBtn_10bzs_25:focus-visible{outline:2px solid var(--accent-light);outline-offset:2px}._controlBtn_10bzs_25._active_10bzs_340{color:var(--accent)}._timeDisplay_10bzs_12{color:#fffc;font-size:.85rem;font-weight:500;font-variant-numeric:tabular-nums;min-width:100px}._settingsPanel_10bzs_352{position:absolute;bottom:clamp(6rem,15vh,8rem);right:clamp(1rem,3vw,2rem);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_10bzs_371{display:flex;align-items:center;padding:.55rem .75rem;border-bottom:1px solid var(--border-secondary);gap:.625rem}._settingsBackBtn_10bzs_379{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_10bzs_379:hover{background:#ffffff1a;color:#fff}._settingsTitle_10bzs_397{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_10bzs_408{overflow-y:auto;padding:.375rem;display:flex;flex-direction:column;gap:.125rem;max-height:min(56vh,22rem)}._currentValue_10bzs_417{color:var(--text-tertiary);font-size:.8rem;font-weight:500}._menuItem_10bzs_423{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_10bzs_423:hover{background:var(--bg-tertiary)}._menuItem_10bzs_423._active_10bzs_340{background:color-mix(in srgb,var(--accent) 18%,transparent);color:var(--accent-lighter)}._currentValue_10bzs_417{color:var(--text-secondary);font-size:.85rem}._menuNote_10bzs_456{padding:.5rem .75rem;font-size:.7rem;line-height:1.5;color:var(--text-tertiary);white-space:normal;overflow-wrap:break-word}._loadingOverlay_10bzs_465{position:absolute;inset:0;display:flex;justify-content:center;align-items:center;z-index:10;background:#00000080;border-radius:inherit}._loadingDots_10bzs_476{display:flex;gap:10px}._dot_10bzs_481{width:12px;height:12px;border-radius:50%;background-color:var(--accent);animation:_bounce_10bzs_1 1.4s infinite ease-in-out both;box-shadow:0 0 10px var(--accent-glow)}._dot_10bzs_481:nth-child(1){animation-delay:-.32s}._dot_10bzs_481:nth-child(2){animation-delay:-.16s}@keyframes _bounce_10bzs_1{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}._bufferingOverlay_10bzs_510{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);pointer-events:none;z-index:20}._bufferingSpinner_10bzs_519{width:50px;height:50px;border:4px solid rgba(255,255,255,.3);border-radius:50%;border-top-color:var(--accent);animation:_spin_10bzs_1 1s ease-in-out infinite}@keyframes _spin_10bzs_1{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media(pointer:coarse){._settingsPanel_10bzs_352{font-size:.9rem;bottom:calc(env(safe-area-inset-bottom,0px) + 7rem);right:max(.75rem,env(safe-area-inset-right,0px))}._menuItem_10bzs_423{min-height:2.75rem}._settingsContent_10bzs_408{max-height:52vh}}@media(max-width:480px){._settingsPanel_10bzs_352{min-width:9rem;max-width:calc(100vw - 2rem);font-size:.75rem;bottom:calc(env(safe-area-inset-bottom,0px) + 6rem)}._settingsHeader_10bzs_371{padding:.4rem .625rem}._settingsTitle_10bzs_397{font-size:.64rem}._menuItem_10bzs_423{min-height:2.25rem;padding:.45rem .625rem;font-size:.75rem;gap:.5rem}._settingsContent_10bzs_408{max-height:min(40vh,15rem)}}@media(max-height:500px)and (orientation:landscape){._settingsPanel_10bzs_352{bottom:7.25rem;right:2rem;min-width:10rem;max-width:min(15rem,calc(100vw - 1.5rem));font-size:.8rem}._menuItem_10bzs_423{min-height:2.5rem;font-size:.8rem}._settingsContent_10bzs_408{max-height:50vh;overflow-y:auto}}._statusMsg_1bhd3_1{padding:1rem;text-align:center;color:var(--text-secondary)}._statusMsg_1bhd3_1._error_1bhd3_7{color:#f87171}._spinner_1bhd3_11{animation:_spin_1bhd3_11 1s linear infinite;margin-right:.5rem}._sourceLoader_1bhd3_16{padding:.75rem;display:flex;justify-content:center}._ringSpinner_1bhd3_22{width:40px;height:40px;border:4px solid rgba(255,255,255,.1);border-left-color:var(--accent);border-radius:50%;animation:_spin_1bhd3_11 1s linear infinite}@keyframes _spin_1bhd3_11{0%{transform:rotate(0)}to{transform:rotate(360deg)}}._meta_1bhd3_40{display:flex;align-items:center;gap:.75rem;margin:.5rem 0;flex-wrap:wrap}._year_1bhd3_48{color:var(--text-secondary);font-size:.9rem}._rating_1bhd3_53{display:inline-flex;align-items:center;gap:4px;color:var(--accent-lighter);font-weight:600;font-size:.9rem}._typeBadge_1bhd3_62{padding:2px 10px;border-radius:4px;font-size:.75rem;font-weight:600;text-transform:uppercase}._typeBadge_1bhd3_62._tv_1bhd3_70{background:color-mix(in srgb,var(--accent) 20%,transparent);color:var(--accent)}._typeBadge_1bhd3_62._movie_1bhd3_75{background:color-mix(in srgb,var(--accent-lighter) 20%,transparent);color:var(--accent-lighter)}._controlLabel_1bhd3_80{display:flex;flex-direction:column;gap:.3rem;font-size:.8rem;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}._select_1bhd3_90{height:42px;padding:0 1rem;border-radius:var(--radius-md);border:1px solid var(--border-primary);background:var(--bg-elevated);color:var(--text-primary);font-size:.9rem;cursor:pointer;min-width:160px}._playerSection_1bhd3_102{margin:0;border-radius:0;overflow:hidden;overflow:clip;isolation:isolate;background:#000;position:relative}._video_1bhd3_106{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:contain;display:block;background:#000;border:none;border-radius:inherit}._videoHidden_1bhd3_128{opacity:0;pointer-events:none}._delayCanvas_1bhd3_133{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_1bhd3_146{opacity:1}._subtitleOverlay_1bhd3_150{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_1bhd3_102{margin:0;border-radius:0}}._videoIframe_1bhd3_169{width:100%;aspect-ratio:16 / 9;min-height:400px;border:none;background:#000}._retryButton_1bhd3_177{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_1bhd3_177:hover{border-color:var(--accent)}._sidebarSeason_1bhd3_192{display:flex;flex-direction:column;gap:.4rem;font-size:.75rem;font-weight:700;color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.1em;margin-bottom:var(--space-4)}._sidebarSeason_1bhd3_192 ._select_1bhd3_90{width:100%}._mobileSeasonRow_1bhd3_208{display:none}@media(max-width:768px){._mobileSeasonRow_1bhd3_208{display:block}._mobileSeasonRow_1bhd3_208 ._sidebarSeason_1bhd3_192{margin-bottom:0}}._providerSelectWrap_1bhd3_222{display:flex;align-items:flex-end;gap:1rem;flex-wrap:wrap;min-width:0}._genreRow_1bhd3_230{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.6rem}._genreChip_1bhd3_237{padding:.2rem .7rem;border-radius:20px;border:1px solid var(--glass-border);background:#ffffff0d;color:var(--text-secondary);font-size:.78rem;font-weight:600}._metaRow_1bhd3_247{display:flex;flex-wrap:wrap;gap:.35rem;margin-top:.6rem;color:var(--text-secondary);font-size:.9rem}._detailGrid_1bhd3_256{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:1.1rem 1.25rem;align-content:start;min-width:0}._detailItem_1bhd3_264{display:flex;flex-direction:column;gap:.2rem;padding:0;border-radius:0;border:0;background:none}._detailItem_1bhd3_264 strong{font-size:.75rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-tertiary)}._detailItem_1bhd3_264 span{color:var(--text-primary);font-size:.9rem}._imdbLink_1bhd3_286{color:var(--accent-light);font-size:.9rem;text-decoration:none}._imdbLink_1bhd3_286:hover{text-decoration:underline}._watchedOverlay_1bhd3_296{position:absolute;inset:0;z-index:5;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;padding:1.5rem;text-align:center;color:var(--text-primary);background:radial-gradient(circle at 50% 35%,color-mix(in srgb,var(--accent) 18%,transparent),transparent 60%),#000;border-radius:inherit}._watchedTitle_1bhd3_318{margin:0;font-size:1.2rem;font-weight:700}._watchedSubtext_1bhd3_324{margin:0;color:var(--text-secondary);font-size:.9rem}._watchedActions_1bhd3_330{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:10px;margin-top:.5rem;width:100%;max-width:560px}._watchedActions_1bhd3_330>:first-child{justify-self:end}._watchedActions_1bhd3_330>:last-child{justify-self:start}@media(max-width:480px){._watchedActions_1bhd3_330{display:flex;flex-wrap:wrap;justify-content:center}._watchedActions_1bhd3_330>div{display:contents}}
|
|
1
|
+
._fullscreenFlat_10bzs_1{border-radius:0}@media(max-width:900px)and (orientation:landscape){._fullscreenFlat_10bzs_1{border-radius:0}}@container (max-width: 26rem){._timeDisplay_10bzs_12{display:none}._bottomControls_10bzs_16{padding:0 .75rem .75rem}._leftControls_10bzs_20,._rightControls_10bzs_21{gap:.2rem}._controlBtn_10bzs_25{padding:5px;min-width:2.125rem;min-height:2.125rem}}._controlsOverlay_10bzs_32{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_10bzs_32>*{pointer-events:auto}._controlsOverlay_10bzs_32._hidden_10bzs_52{opacity:0;pointer-events:none;cursor:none}._topControls_10bzs_58{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_10bzs_78{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_10bzs_78:hover{background:#0f0f1199;color:#fff;transform:scale(1.1)}._videoTitleInfo_10bzs_98{display:flex;flex-direction:column;gap:.25rem}._animeTitle_10bzs_104{font-size:1.4rem;font-weight:800;color:#fff;letter-spacing:-.01em;text-shadow:0 2px 4px rgba(0,0,0,.5)}._episodeLabel_10bzs_112{font-size:.85rem;font-weight:600;color:#ffffffbf;text-shadow:0 2px 4px rgba(0,0,0,.5)}._speedBoostBadge_10bzs_119{position:absolute;top:1.5rem;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:.7rem;padding:.65rem 1rem;border:1px solid color-mix(in srgb,var(--accent) 45%,transparent);border-radius:var(--radius-md);background:#121216eb;color:#f5f3ff;font-size:.85rem;font-weight:800;letter-spacing:.06em;z-index:11;pointer-events:none}._speedBoostBadge_10bzs_119 span{line-height:1}._speedBoostBadge_10bzs_119 svg{display:block;flex-shrink:0}._bottomControls_10bzs_16{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:0 clamp(.5rem,1.5cqw,.75rem) clamp(.75rem,2.5cqw,1.5rem);z-index:10;pointer-events:auto;transition:transform .4s cubic-bezier(.2,.8,.2,1)}._progressBarContainer_10bzs_165{width:100%;height:20px;display:flex;align-items:center;cursor:pointer;position:relative;touch-action:none}@media(pointer:coarse){._progressBarContainer_10bzs_165{height:28px}._progressBarContainer_10bzs_165 ._progressBar_10bzs_165{height:6px}._progressBarContainer_10bzs_165 ._thumb_10bzs_184{opacity:1}}._progressBar_10bzs_165{width:100%;height:4px;background:#fff3;border-radius:2px;position:relative;transition:height .15s ease}._progressBarContainer_10bzs_165:hover ._progressBar_10bzs_165{height:6px}._bufferedBar_10bzs_202{position:absolute;top:0;left:0;height:100%;background:#ffffff4d;border-radius:2px;pointer-events:none}._watchedBar_10bzs_212{position:absolute;top:0;left:0;height:100%;background:var(--accent);border-radius:2px;pointer-events:none}._thumb_10bzs_184{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_10bzs_165:hover ._thumb_10bzs_184,._progressBarContainer_10bzs_165._scrubbing_10bzs_237 ._thumb_10bzs_184{opacity:1}._timeBubble_10bzs_241{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_10bzs_255{display:flex;align-items:center;justify-content:space-between;gap:.75rem;margin-top:8px}._leftControls_10bzs_20{display:flex;align-items:center;gap:1rem;gap:clamp(.5rem,2.5cqw,1rem);min-width:0}._rightControls_10bzs_21{display:flex;align-items:center;gap:.75rem;gap:clamp(.5rem,2cqw,.75rem)}._nextEpisodeBtn_10bzs_278{background:#ffffff0f;border:1px solid rgba(255,255,255,.12);border-radius:var(--radius-md);padding:.45rem .8rem;color:#fffc;font-weight:600;font-size:.9rem;display:inline-flex;align-items:center;gap:.5rem;cursor:pointer;transition:all var(--transition-fast);white-space:nowrap}._nextEpisodeBtn_10bzs_278:hover{background:#ffffff1a;color:#fff;transform:translateY(-1px);border-color:#fff3}._controlBtn_10bzs_25{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_10bzs_25{padding:10px;min-width:2.75rem;min-height:2.75rem}}._controlBtn_10bzs_25:hover{color:#fff;background:#ffffff1a}._controlBtn_10bzs_25:focus{outline:none}._controlBtn_10bzs_25:focus-visible{outline:2px solid var(--accent-light);outline-offset:2px}._controlBtn_10bzs_25._active_10bzs_340{color:var(--accent)}._timeDisplay_10bzs_12{color:#fffc;font-size:.85rem;font-weight:500;font-variant-numeric:tabular-nums;min-width:100px}._settingsPanel_10bzs_352{position:absolute;bottom:clamp(6rem,15vh,8rem);right:clamp(1rem,3vw,2rem);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_10bzs_371{display:flex;align-items:center;padding:.55rem .75rem;border-bottom:1px solid var(--border-secondary);gap:.625rem}._settingsBackBtn_10bzs_379{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_10bzs_379:hover{background:#ffffff1a;color:#fff}._settingsTitle_10bzs_397{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_10bzs_408{overflow-y:auto;padding:.375rem;display:flex;flex-direction:column;gap:.125rem;max-height:min(56vh,22rem)}._currentValue_10bzs_417{color:var(--text-tertiary);font-size:.8rem;font-weight:500}._menuItem_10bzs_423{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_10bzs_423:hover{background:var(--bg-tertiary)}._menuItem_10bzs_423._active_10bzs_340{background:color-mix(in srgb,var(--accent) 18%,transparent);color:var(--accent-lighter)}._currentValue_10bzs_417{color:var(--text-secondary);font-size:.85rem}._menuNote_10bzs_456{padding:.5rem .75rem;font-size:.7rem;line-height:1.5;color:var(--text-tertiary);white-space:normal;overflow-wrap:break-word}._loadingOverlay_10bzs_465{position:absolute;inset:0;display:flex;justify-content:center;align-items:center;z-index:10;background:#00000080;border-radius:inherit}._loadingDots_10bzs_476{display:flex;gap:10px}._dot_10bzs_481{width:12px;height:12px;border-radius:50%;background-color:var(--accent);animation:_bounce_10bzs_1 1.4s infinite ease-in-out both;box-shadow:0 0 10px var(--accent-glow)}._dot_10bzs_481:nth-child(1){animation-delay:-.32s}._dot_10bzs_481:nth-child(2){animation-delay:-.16s}@keyframes _bounce_10bzs_1{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}._bufferingOverlay_10bzs_510{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);pointer-events:none;z-index:20}._bufferingSpinner_10bzs_519{width:50px;height:50px;border:4px solid rgba(255,255,255,.3);border-radius:50%;border-top-color:var(--accent);animation:_spin_10bzs_1 1s ease-in-out infinite}@keyframes _spin_10bzs_1{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media(pointer:coarse){._settingsPanel_10bzs_352{font-size:.9rem;bottom:calc(env(safe-area-inset-bottom,0px) + 7rem);right:max(.75rem,env(safe-area-inset-right,0px))}._menuItem_10bzs_423{min-height:2.75rem}._settingsContent_10bzs_408{max-height:52vh}}@media(max-width:480px){._settingsPanel_10bzs_352{min-width:9rem;max-width:calc(100vw - 2rem);font-size:.75rem;bottom:calc(env(safe-area-inset-bottom,0px) + 6rem)}._settingsHeader_10bzs_371{padding:.4rem .625rem}._settingsTitle_10bzs_397{font-size:.64rem}._menuItem_10bzs_423{min-height:2.25rem;padding:.45rem .625rem;font-size:.75rem;gap:.5rem}._settingsContent_10bzs_408{max-height:min(40vh,15rem)}}@media(max-height:500px)and (orientation:landscape){._settingsPanel_10bzs_352{bottom:7.25rem;right:2rem;min-width:10rem;max-width:min(15rem,calc(100vw - 1.5rem));font-size:.8rem}._menuItem_10bzs_423{min-height:2.5rem;font-size:.8rem}._settingsContent_10bzs_408{max-height:50vh;overflow-y:auto}}._statusMsg_4kgbf_1{padding:1rem;text-align:center;color:var(--text-secondary)}._statusMsg_4kgbf_1._error_4kgbf_7{color:#f87171}._spinner_4kgbf_11{animation:_spin_4kgbf_11 1s linear infinite;margin-right:.5rem}._sourceLoader_4kgbf_16{padding:.75rem;display:flex;justify-content:center}._ringSpinner_4kgbf_22{width:40px;height:40px;border:4px solid rgba(255,255,255,.1);border-left-color:var(--accent);border-radius:50%;animation:_spin_4kgbf_11 1s linear infinite}@keyframes _spin_4kgbf_11{0%{transform:rotate(0)}to{transform:rotate(360deg)}}._meta_4kgbf_40{display:flex;align-items:center;gap:.75rem;margin:.5rem 0;flex-wrap:wrap}._year_4kgbf_48{color:var(--text-secondary);font-size:.9rem}._rating_4kgbf_53{display:inline-flex;align-items:center;gap:4px;color:var(--accent-lighter);font-weight:600;font-size:.9rem}._typeBadge_4kgbf_62{padding:2px 10px;border-radius:4px;font-size:.75rem;font-weight:600;text-transform:uppercase}._typeBadge_4kgbf_62._tv_4kgbf_70{background:color-mix(in srgb,var(--accent) 20%,transparent);color:var(--accent)}._typeBadge_4kgbf_62._movie_4kgbf_75{background:color-mix(in srgb,var(--accent-lighter) 20%,transparent);color:var(--accent-lighter)}._controlLabel_4kgbf_80{display:flex;flex-direction:column;gap:.3rem;font-size:.8rem;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}._select_4kgbf_90{height:42px;padding:0 1rem;border-radius:var(--radius-md);border:1px solid var(--border-primary);background:var(--bg-elevated);color:var(--text-primary);font-size:.9rem;cursor:pointer;min-width:160px}._playerSection_4kgbf_102{margin:0;border-radius:0;overflow:hidden;overflow:clip;isolation:isolate;background:#000;position:relative}._video_4kgbf_106{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:contain;display:block;background:#000;border:none;border-radius:inherit}._videoHidden_4kgbf_128{opacity:0;pointer-events:none}._delayCanvas_4kgbf_133{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_4kgbf_146{opacity:1}._subtitleOverlay_4kgbf_150{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_4kgbf_102{margin:0;border-radius:0}}._videoIframe_4kgbf_169{width:100%;aspect-ratio:16 / 9;min-height:400px;border:none;background:#000}._retryButton_4kgbf_177{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_4kgbf_177:hover{border-color:var(--accent)}._sidebarSeason_4kgbf_192{display:flex;flex-direction:column;gap:.4rem;font-size:.75rem;font-weight:700;color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.1em;margin-bottom:var(--space-4)}._sidebarSeason_4kgbf_192 ._select_4kgbf_90{width:100%}._mobileSeasonRow_4kgbf_208{display:none}@media(max-width:768px){._mobileSeasonRow_4kgbf_208{display:block}._mobileSeasonRow_4kgbf_208 ._sidebarSeason_4kgbf_192{margin-bottom:0}}._providerSelectWrap_4kgbf_222{display:flex;align-items:flex-end;gap:1rem;flex-wrap:wrap;min-width:0}._genreRow_4kgbf_230{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.6rem}._genreChip_4kgbf_237{padding:.2rem .7rem;border-radius:20px;border:1px solid var(--glass-border);background:#ffffff0d;color:var(--text-secondary);font-size:.78rem;font-weight:600}._metaRow_4kgbf_247{display:flex;flex-wrap:wrap;gap:.35rem;margin-top:.6rem;color:var(--text-secondary);font-size:.9rem}._detailGrid_4kgbf_256{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:1.1rem 1.25rem;align-content:start;min-width:0}._detailItem_4kgbf_264{display:flex;flex-direction:column;gap:.2rem;padding:0;border-radius:0;border:0;background:none}._detailItem_4kgbf_264 strong{font-size:.75rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-tertiary)}._detailItem_4kgbf_264 span{color:var(--text-primary);font-size:.9rem}._imdbLink_4kgbf_286{color:var(--accent-light);font-size:.9rem;text-decoration:none}._imdbLink_4kgbf_286:hover{text-decoration:underline}._watchedOverlay_4kgbf_296{position:absolute;inset:0;z-index:5;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;padding:1.5rem;text-align:center;color:var(--text-primary);background:radial-gradient(circle at 50% 35%,color-mix(in srgb,var(--accent) 18%,transparent),transparent 60%),#000;border-radius:inherit}._watchedTitle_4kgbf_318{margin:0;font-size:1.2rem;font-weight:700}._watchedSubtext_4kgbf_324{margin:0;color:var(--text-secondary);font-size:.9rem}._watchedActions_4kgbf_330{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:10px;margin-top:.5rem;width:100%;max-width:560px}._watchedActions_4kgbf_330>:first-child{justify-self:end}._watchedActions_4kgbf_330>:last-child{justify-self:start}._watchedActionsCentered_4kgbf_348{display:flex;flex-wrap:wrap;justify-content:center}._watchedActionsCentered_4kgbf_348>div{display:contents}@media(max-width:480px){._watchedActions_4kgbf_330{display:flex;flex-wrap:wrap;justify-content:center}._watchedActions_4kgbf_330>div{display:contents}}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{u as t,d as v,A as U,h as p,S as Ue,g as Er,q as _,o as Nr,p as wr,a as Ir,T as ke}from"./vendor-core-DfaOB3Rn.js";import{h as jt,p as $,t as Ct,ac as Ar,a6 as Pr,S as ts,e as xr,ak as Lr,J as Rs,B as ge,a8 as Br}from"./index-BYGDqzEf.js";import{P as Rr,a as Mr,b as $r,F as Dr,f as Or,c as zr}from"./PlayerProvider-DGtOX3e2.js";import{u as Fr}from"./vendor-query-BBT5_sHx.js";import{I as ie}from"./vendor-icons-DrybRNxP.js";import{p as os,M as Vr,z as zs,f as as,c as Ur,C as Wr,a as Hr,P as qr,b as _n,u as Kr,i as Yr,j as Qr,n as jr,h as Gr,k as Xr,m as Jr,l as Zr,s as ns,d as eo,e as to,g as no,r as so,o as Le,A as ro,t as oo,E as ao,w as io,x as lo,v as ee,y as co,R as uo,q as Ms}from"./useWatchAlongPlayer-DpUPA4jD.js";import{S as mo,O as ss,a as ho,A as fo,b as bo}from"./OptionListMenu-HllK8Z_u.js";import{M as go}from"./MatureConsentModal-BhpY2wdn.js";import{u as po}from"./useProviders-Dk2T31ho.js";import{e as vo,b as yo,f as So,g as _o,d as ko,c as To,h as Co,i as Eo}from"./useTvLibrary-Dec7yfKF.js";import{b as No,i as Qt,l as wo,a as Io,c as Ao,h as $s}from"./playbackCompletion-DrDOXJXe.js";import{u as Po}from"./useIsMobile-Dvx1uJ82.js";import{S as xo}from"./SynopsisText-B3Sa5pRv.js";import{W as Lo}from"./WatchAlongPanel-CxkbtjKg.js";import"./libraryInvalidation-CHW51Kbi.js";const Bo="_fullscreenFlat_10bzs_1",Ro="_timeDisplay_10bzs_12",Mo="_bottomControls_10bzs_16",$o="_leftControls_10bzs_20",Do="_rightControls_10bzs_21",Oo="_controlBtn_10bzs_25",zo="_controlsOverlay_10bzs_32",Fo="_hidden_10bzs_52",Vo="_topControls_10bzs_58",Uo="_backBtn_10bzs_78",Wo="_videoTitleInfo_10bzs_98",Ho="_animeTitle_10bzs_104",qo="_episodeLabel_10bzs_112",Ko="_speedBoostBadge_10bzs_119",Yo="_progressBarContainer_10bzs_165",Qo="_progressBar_10bzs_165",jo="_thumb_10bzs_184",Go="_bufferedBar_10bzs_202",Xo="_watchedBar_10bzs_212",Jo="_scrubbing_10bzs_237",Zo="_timeBubble_10bzs_241",ea="_bottomControlsRow_10bzs_255",ta="_nextEpisodeBtn_10bzs_278",na="_active_10bzs_340",sa="_settingsPanel_10bzs_352",ra="_settingsHeader_10bzs_371",oa="_settingsBackBtn_10bzs_379",aa="_settingsTitle_10bzs_397",ia="_settingsContent_10bzs_408",la="_currentValue_10bzs_417",ca="_menuItem_10bzs_423",da="_menuNote_10bzs_456",ua="_loadingOverlay_10bzs_465",ma="_loadingDots_10bzs_476",ha="_dot_10bzs_481",fa="_bufferingOverlay_10bzs_510",ba="_bufferingSpinner_10bzs_519",o={fullscreenFlat:Bo,timeDisplay:Ro,bottomControls:Mo,leftControls:$o,rightControls:Do,controlBtn:Oo,controlsOverlay:zo,hidden:Fo,topControls:Vo,backBtn:Uo,videoTitleInfo:Wo,animeTitle:Ho,episodeLabel:qo,speedBoostBadge:Ko,progressBarContainer:Yo,progressBar:Qo,thumb:jo,bufferedBar:Go,watchedBar:Xo,scrubbing:Jo,timeBubble:Zo,bottomControlsRow:ea,nextEpisodeBtn:ta,active:na,settingsPanel:sa,settingsHeader:ra,settingsBackBtn:oa,settingsTitle:aa,settingsContent:ia,currentValue:la,menuItem:ca,menuNote:da,loadingOverlay:ua,loadingDots:ma,dot:ha,bufferingOverlay:fa,bufferingSpinner:ba},ga=({player:r,visible:b,settingsOpen:z,onOpenSettings:x,onCloseSettings:M,hasSubtitles:C,isSubtitleActive:w,subtitles:d,onSubtitleChange:c,showNextEpisodeButton:k,onNextEpisode:s,isTheaterMode:L,onTheaterModeToggle:pe,timeLabelRef:te})=>{const{state:u,actions:Ne}=r,Be=()=>{if(w){c(-1);return}let ve=null;try{ve=$.getItem("tvLastSubtitle")}catch{}c(os(d,{lastKey:ve,enabled:!0}))};return t("div",{className:`${o.controlsOverlay} ${b?"":o.hidden}`,"data-speed-boost-ignore":"true",style:{pointerEvents:"none",background:"none",justifyContent:"flex-end"},children:t("div",{className:o.bottomControls,onClick:ve=>ve.stopPropagation(),children:[t(Rr,{classes:{container:o.progressBarContainer,scrubbing:o.scrubbing,timeBubble:o.timeBubble,bar:o.progressBar,buffered:o.bufferedBar,watched:o.watchedBar,thumb:o.thumb},timeLabelRef:te}),t("div",{className:o.bottomControlsRow,children:[t("div",{className:o.leftControls,children:[t(Mr,{className:o.controlBtn}),t($r,{buttonClassName:o.controlBtn,onExpandedChange:Ne.setShowVolumeSlider}),t("span",{className:o.timeDisplay,ref:te,children:[jt(0)," / ",jt(u.duration)]})]}),t("div",{className:o.rightControls,children:[k&&t("button",{className:o.nextEpisodeBtn,onClick:s,title:"Play next episode",children:"Next EP"}),C&&t("button",{className:`${o.controlBtn} ${w?o.active:""}`,onClick:Be,"aria-label":w?"Turn subtitles off":"Turn subtitles on",children:t(ie,{name:"closed-captioning"})}),t("button",{className:`${o.controlBtn} ${z?o.active:""}`,onClick:()=>z?M():x(),"aria-label":"Settings",children:t(ie,{name:"cog"})}),t("button",{className:`${o.controlBtn} ${L?o.active:""}`,onClick:ve=>{ve.stopPropagation(),pe()},title:L?"Exit Theater Mode":"Theater Mode","aria-label":L?"Exit Theater Mode":"Theater Mode",children:t(ie,{name:"tv"})}),t(Dr,{className:o.controlBtn})]})]})]})})},kn=-6e4,rs=6e4,Ds=500,pa=({classes:r,delayMs:b,onDelayChange:z})=>{const[x,M]=v(null),C=x??b,w=U(z);w.current=z;const d=U(b);d.current=b;const c=U(null);c.current=x,p(()=>{M(null)},[b]),p(()=>()=>{const L=c.current;L!==null&&L!==d.current&&w.current(L)},[]);const k=L=>{d.current=L,c.current=null,w.current(L),M(null)},s=L=>{const pe=c.current??d.current,te=Math.max(kn,Math.min(rs,pe+L));k(te)};return t(Ue,{children:[t("div",{style:{display:"flex",gap:6,padding:"0.5rem 0.75rem 0.25rem"},children:[t("button",{type:"button",className:r.item,onClick:()=>s(-Ds),"aria-label":"Show subtitles 0.5 seconds earlier",style:{flex:1,justifyContent:"center"},children:t("span",{children:"-0.5s"})}),t("button",{type:"button",className:r.item,onClick:()=>s(Ds),"aria-label":"Show subtitles 0.5 seconds later",style:{flex:1,justifyContent:"center"},children:t("span",{children:"+0.5s"})}),t("button",{type:"button",className:r.item,onClick:()=>k(0),disabled:C===0,"aria-label":"Reset subtitle timing",style:{flex:1,justifyContent:"center"},children:t("span",{children:"Reset"})})]}),t(Vr,{label:"Subtitle timing",display:zs(C),min:kn,max:rs,step:100,value:C,percent:(C-kn)/(rs-kn)*100,onChange:L=>{const pe=Math.round(L);c.current=pe,M(pe)},onCommit:()=>{const L=c.current;L!==null&&k(L)}}),t("div",{className:r.note,children:"Positive delays subtitles (show later). Negative shows them earlier. 0.0s is default."})]})},va=({view:r,onSelectView:b,onClose:z,player:x,onSubtitleStyleChange:M,streams:C,resolutionIdx:w,onResolutionChange:d,hasSubtitles:c,subtitles:k,selectedSubtitle:s,isSubtitleActive:L,onSubtitleChange:pe,audioTracks:te,selectedAudioTrack:u,onAudioTrackChange:Ne,videoDelayEnabled:Be,onVideoDelayToggle:ve,videoDelayMs:ye,onVideoDelayChange:S,onCalibrate:Et,subtitleDelayMs:nt,onSubtitleDelayChange:E,ambientSettings:W,onAmbientChange:Y})=>{const{state:de}=x,Nt=()=>t(Ue,{children:[C.length>1&&t("button",{className:o.menuItem,onClick:()=>b("resolution"),children:[t("span",{children:"Resolution"}),t("span",{className:o.currentValue,children:C[w]?.quality||"Auto"})]}),c&&t("button",{className:o.menuItem,onClick:()=>b("subtitles"),children:[t("span",{children:"Subtitles"}),t("span",{className:o.currentValue,children:L?k[s]?.label||k[s]?.language:"Off"})]}),c&&t("button",{className:o.menuItem,onClick:()=>b("subtitle-style"),children:[t("span",{children:"Subtitle Style"}),t("span",{className:o.currentValue,children:[de.subtitleFontSize.toFixed(1),"x · ",de.subtitlePosition]})]}),c&&t("button",{className:o.menuItem,onClick:()=>b("subtitle-timing"),children:[t("span",{children:"Subtitle Timing"}),t("span",{className:o.currentValue,children:zs(nt)})]}),te.length>0&&t("button",{className:o.menuItem,onClick:()=>b("audio"),children:[t("span",{children:"Audio Track"}),t("span",{className:o.currentValue,children:te[u]?.label||te[u]?.language})]}),t("button",{className:o.menuItem,onClick:()=>b("av-sync"),children:[t("span",{children:"A/V Sync"}),t("span",{className:o.currentValue,children:Be?`${ye}ms`:"Off"})]}),W&&Y&&t("button",{className:o.menuItem,onClick:()=>b("ambient"),children:[t("span",{children:"Ambient Light"}),t("span",{className:o.currentValue,children:W.enabled?"On":"Off"})]})]}),Re=()=>t(ss,{classes:{item:o.menuItem,active:o.active},options:C.map((I,se)=>({key:String(se),label:I.quality,selected:se===w})),onSelect:I=>d(Number(I))}),st=()=>t(ss,{classes:{item:o.menuItem,active:o.active},options:[{key:"off",label:"Off",selected:!L},...k.map((I,se)=>({key:String(se),label:I.label||I.language,selected:se===s}))],onSelect:I=>pe(I==="off"?-1:Number(I))}),bt=()=>t(ho,{classes:{item:o.menuItem,active:o.active},values:{fontSize:de.subtitleFontSize,position:de.subtitlePosition,bgOpacity:de.subtitleBgOpacity,bgColor:de.subtitleBgColor,textColor:de.subtitleTextColor,edge:de.subtitleEdge,bold:de.subtitleBold},onChange:M}),le=()=>t(pa,{classes:{item:o.menuItem,active:o.active,note:o.menuNote},delayMs:nt,onDelayChange:I=>E?.(I)}),wt=()=>t(ss,{classes:{item:o.menuItem,active:o.active},options:te.map((I,se)=>({key:String(se),label:I.label||I.language,selected:se===u})),onSelect:I=>Ne(Number(I))}),rt=()=>t(fo,{classes:{item:o.menuItem,active:o.active,note:o.menuNote},enabled:Be,delayMs:ye,onToggle:I=>ve?.(I),onDelayChange:I=>S?.(I),onCalibrate:Et}),Q=()=>W&&Y?t(bo,{classes:{item:o.menuItem,active:o.active,note:o.menuNote},values:W,onChange:Y}):null;return t("div",{"data-speed-boost-ignore":"true",onClick:I=>I.stopPropagation(),children:t(mo,{classes:{panel:o.settingsPanel,header:o.settingsHeader,backBtn:o.settingsBackBtn,title:o.settingsTitle,content:o.settingsContent},title:r==="main"?"Settings":r==="subtitle-style"?"Subtitle Style":r==="subtitle-timing"?"Subtitle Timing":r==="audio"?"Audio Track":r==="resolution"?"Resolution":r==="av-sync"?"A/V Sync":r==="ambient"?"Ambient Light":r.charAt(0).toUpperCase()+r.slice(1),onBack:()=>r==="main"?z():b("main"),children:[r==="main"&&Nt(),r==="resolution"&&Re(),r==="subtitles"&&st(),r==="subtitle-style"&&bt(),r==="subtitle-timing"&&le(),r==="audio"&&wt(),r==="av-sync"&&rt(),r==="ambient"&&Q()]})})},ya=({player:r,title:b,episodeLabel:z,server:x,audioTracks:M,selectedAudioTrack:C,onAudioTrackChange:w,subtitles:d,selectedSubtitle:c,onSubtitleChange:k,streams:s,resolutionIdx:L,onResolutionChange:pe,onBack:te,children:u,videoDelayEnabled:Ne=!1,onVideoDelayToggle:Be,videoDelayMs:ve=0,onVideoDelayChange:ye,onCalibrateAvSync:S,subtitleDelayMs:Et=0,onSubtitleDelayChange:nt,showNextEpisodeButton:E=!1,onNextEpisode:W,isLoading:Y=!1,isTheaterMode:de,onTheaterModeToggle:Nt,ambientSettings:Re,onAmbientChange:st,hideChrome:bt=!1})=>{const{state:le,refs:wt,actions:rt}=r,Q=wt.videoRef,{subtitleFontSize:I,subtitlePosition:se,subtitleBgOpacity:ue,subtitleBgColor:Me,subtitleTextColor:$e,subtitleEdge:re,subtitleBold:It}=le,[We,Te]=v(null),At=U(null),[Ce,Pt]=v(0);p(()=>{const he=Q.current;if(!he)return;const ne=()=>Pt(he.clientHeight||0);ne();const at=new ResizeObserver(ne);return at.observe(he),()=>at.disconnect()},[Q]);const me=rt.setSubtitleStyle;p(()=>{const he="tv-player-subtitle-style";let ne=document.getElementById(he);ne||(ne=document.createElement("style"),ne.id=he,document.head.appendChild(ne));const at={fontSize:I,position:se,bgOpacity:ue,bgColor:Me,textColor:$e,edge:re,bold:It},oe=Q.current,vt=as(I,Ce||oe?.clientHeight||720);if(ne.textContent=Ur({...at,fontSize:vt}),oe){const Bt=()=>{const i=Number(se);return isNaN(i)?0:Math.max(0,Math.min(100,i))},it=(i,l)=>{try{const F=i;F.snapToLines=!1,F.line=l}catch{}},Se=()=>{const i=vt*16,l=oe.videoHeight||oe.clientHeight||720,F=oe.videoWidth||oe.clientWidth||1280;return{step:i*1.3/l*100,chars:Math.max(20,Math.floor(F/(i*.55)))}},Jt=i=>{const l=Math.max(0,Math.min(100,100-Bt())),F=Array.from(i.activeCues??[]);if(F.length<=1){F.forEach(Oe=>it(Oe,l));return}const{step:ce,chars:Zt}=Se();let $t=l;for(let Oe=F.length-1;Oe>=0;Oe--){const Tn=String(F[Oe].text??"").replace(/<[^>]*>/g,"").split(`
|
|
2
|
+
`).reduce((Cn,fe)=>Cn+Math.max(1,Math.ceil(fe.length/Zt)),0),Dt=$t-Tn*ce;it(F[Oe],Math.max(0,Dt)),$t=Dt-ce*.4}},Ie=()=>{const i=Math.max(0,Math.min(100,100-Bt()));Array.from(oe.textTracks).forEach(l=>{l.cues&&(Array.from(l.cues).forEach(F=>it(F,i)),l.mode==="showing"&&Jt(l))})};Ie();const lt=i=>{const l=i.target;l.mode==="showing"&&Jt(l)},Rt=()=>{Array.from(oe.textTracks).forEach(i=>{i.removeEventListener("cuechange",lt),i.addEventListener("cuechange",lt)}),Ie()};Array.from(oe.textTracks).forEach(i=>{i.addEventListener("cuechange",lt)}),oe.textTracks.addEventListener("addtrack",Rt);const Mt=Array.from(oe.querySelectorAll("track")),yt=()=>Ie();return Mt.forEach(i=>i.addEventListener("load",yt)),()=>{Array.from(oe.textTracks).forEach(i=>{i.removeEventListener("cuechange",lt)}),oe.textTracks.removeEventListener("addtrack",Rt),Mt.forEach(i=>i.removeEventListener("load",yt))}}},[I,se,ue,Me,$e,re,It,c,d,Q,Ce]);const De=d.length>0,we=c>=0,gt=()=>{Te("main"),rt.setShowControls(!0)},He=()=>{Te(null)},Gt=le.showControls||!!We,ot=Or(r.engine),qe=ot.audioTracks.find(he=>he.id===ot.activeAudioTrack)??M[C],Xt=c>=0?d[c]??ot.subtitleTracks.find(he=>he.id===c):void 0,xt=t(Wr,{visible:Gt,title:b,episode:z,server:Y?void 0:x,audio:Y?void 0:qe?.label||qe?.language,subtitles:Y?void 0:Xt?.label||Xt?.language,onBack:te,classes:{overlay:o.controlsOverlay,hidden:o.hidden,top:o.topControls,backBtn:o.backBtn,titleInfo:o.videoTitleInfo,title:o.animeTitle,episode:o.episodeLabel}}),K=!Y&&!le.isBuffering&&le.duration>0?t(Hr,{}):null,pt=t(ga,{player:r,visible:Gt,settingsOpen:!!We,onOpenSettings:gt,onCloseSettings:He,hasSubtitles:De,isSubtitleActive:we,subtitles:d,onSubtitleChange:k,showNextEpisodeButton:E,onNextEpisode:W,isTheaterMode:de,onTheaterModeToggle:Nt,timeLabelRef:At}),A=We?t(va,{view:We,onSelectView:Te,onClose:He,player:r,onSubtitleStyleChange:me,streams:s,resolutionIdx:L,onResolutionChange:pe,hasSubtitles:De,subtitles:d,selectedSubtitle:c,isSubtitleActive:we,onSubtitleChange:k,audioTracks:M,selectedAudioTrack:C,onAudioTrackChange:w,videoDelayEnabled:Ne,onVideoDelayToggle:Be,videoDelayMs:ve,onVideoDelayChange:ye,onCalibrate:()=>{Te(null),S?.()},subtitleDelayMs:Et,onSubtitleDelayChange:nt,ambientSettings:Re,onAmbientChange:st}):null,Lt=t(Ue,{children:[Y&&t("div",{className:o.loadingOverlay,"aria-hidden":"true",children:t("div",{className:o.loadingDots,children:[t("div",{className:o.dot}),t("div",{className:o.dot}),t("div",{className:o.dot})]})}),le.isBuffering&&!Y&&t("div",{className:o.bufferingOverlay,"aria-hidden":"true",children:t("div",{className:o.bufferingSpinner})}),le.isSpeedBoostActive&&t("div",{className:o.speedBoostBadge,"aria-hidden":"true",children:[t("span",{children:"2x"}),t(ie,{name:"forward",size:12})]})]});return t(qr,{engine:r.engine,topBar:xt,centerControls:K,bottomBar:!Y&&le.duration>0?pt:null,settingsPanel:A,overlays:Lt,isInteracting:!!We||le.showVolumeSlider,nativeControls:le.useNativeControls,onStageClick:He,className:le.isFullscreen?o.fullscreenFlat:"",chromeDisabled:bt,children:u})},Sa=({servers:r,selectedServer:b,onServerSelect:z})=>r.length===0?null:t("div",{className:_n.sourceSelectionContainer,children:[t("h4",{children:"Source"}),t("div",{className:_n.sourceButtons,children:r.map(x=>t("button",{className:`${_n.sourceButton} ${b===x?_n.active:""}`,onClick:()=>z(x),children:x},x))})]}),_a=Er.memo(Sa);function ka({details:r,isMovie:b,season:z,episode:x,videoRef:M,active:C}){const w=U("");w.current||(w.current=`tv-${Date.now()}-${Math.random().toString(36).slice(2)}`);const d=_(()=>{if(!r)return;const c=M.current,k=b?"":`S${String(z).padStart(2,"0")}E${String(x).padStart(2,"0")}`;Ct.discord.tvPresence.mutate({title:r.title,episodeLabel:k,isPlaying:c?!c.paused&&!c.ended:!0,thumbnail:r.poster,currentTime:c?c.currentTime:0,duration:c&&c.duration||0,isAdult:r.adult===!0,sessionId:w.current}).catch(()=>{}),Ct.discord.heartbeat.mutate({sessionId:w.current}).catch(()=>{})},[r,b,z,x,M]);return p(()=>{if(!r)return;d();const c=window.setInterval(()=>{const k=M.current;(!k||!k.paused)&&d()},15e3);return()=>window.clearInterval(c)},[d,r,M]),p(()=>{if(!r||!C)return;const c=M.current;if(!c)return;const k=()=>d();return c.addEventListener("play",k),c.addEventListener("pause",k),c.addEventListener("seeked",k),()=>{c.removeEventListener("play",k),c.removeEventListener("pause",k),c.removeEventListener("seeked",k)}},[r,C,d,M]),p(()=>{const c=w.current,k=()=>Ar(c),s=()=>k();return window.addEventListener("pagehide",s),window.addEventListener("beforeunload",s),()=>{window.removeEventListener("pagehide",s),window.removeEventListener("beforeunload",s),k()}},[]),{sendPresence:d}}function Ta(r,b,z){const x=()=>{const C=Array.isArray(r.audioTracks)?r.audioTracks.length:0,w=z.getWant(),d=C>0?Math.min(Math.max(0,w),C-1):w;r.audioTrack=d,d!==w&&z.onResolve(d)},M=(C,w)=>{const d=z.getWant(),c=Array.isArray(r.audioTracks)?r.audioTracks.length:0;if(w.id!==d&&d>=0&&d<c){r.audioTrack!==d&&(r.audioTrack=d);return}z.onResolve(w.id)};return r.on(b.MANIFEST_PARSED,x),r.on(b.AUDIO_TRACK_SWITCHED,M),()=>{r.off(b.MANIFEST_PARSED,x),r.off(b.AUDIO_TRACK_SWITCHED,M)}}const Ca=/\b(SmartTV|SMART-TV|Tizen|Web0S|webOS|NetCast|HbbTV|AppleTV|CrKey|BRAVIA|AFT[A-Za-z]|Fire\s?TV|GoogleTV|Roku|VIDAA|DTV|PlayStation|Xbox|Opera TV|POV_TV)\b/i;function Ea(){try{if(Ca.test(navigator.userAgent||""))return!0;const r=navigator.deviceMemory;if(typeof r=="number"&&r>0&&r<2)return!0}catch{}return!1}const Na="_statusMsg_4kgbf_1",wa="_error_4kgbf_7",Ia="_spinner_4kgbf_11",Aa="_spin_4kgbf_11",Pa="_sourceLoader_4kgbf_16",xa="_ringSpinner_4kgbf_22",La="_meta_4kgbf_40",Ba="_year_4kgbf_48",Ra="_rating_4kgbf_53",Ma="_typeBadge_4kgbf_62",$a="_tv_4kgbf_70",Da="_movie_4kgbf_75",Oa="_controlLabel_4kgbf_80",za="_select_4kgbf_90",Fa="_playerSection_4kgbf_102",Va="_video_4kgbf_106",Ua="_videoHidden_4kgbf_128",Wa="_delayCanvas_4kgbf_133",Ha="_delayCanvasActive_4kgbf_146",qa="_subtitleOverlay_4kgbf_150",Ka="_videoIframe_4kgbf_169",Ya="_retryButton_4kgbf_177",Qa="_sidebarSeason_4kgbf_192",ja="_mobileSeasonRow_4kgbf_208",Ga="_providerSelectWrap_4kgbf_222",Xa="_genreRow_4kgbf_230",Ja="_genreChip_4kgbf_237",Za="_metaRow_4kgbf_247",ei="_detailGrid_4kgbf_256",ti="_detailItem_4kgbf_264",ni="_imdbLink_4kgbf_286",si="_watchedOverlay_4kgbf_296",ri="_watchedTitle_4kgbf_318",oi="_watchedSubtext_4kgbf_324",ai="_watchedActions_4kgbf_330",ii="_watchedActionsCentered_4kgbf_348",g={statusMsg:Na,error:wa,spinner:Ia,spin:Aa,sourceLoader:Pa,ringSpinner:xa,meta:La,year:Ba,rating:Ra,typeBadge:Ma,tv:$a,movie:Da,controlLabel:Oa,select:za,playerSection:Fa,video:Va,videoHidden:Ua,delayCanvas:Wa,delayCanvasActive:Ha,subtitleOverlay:qa,videoIframe:Ka,retryButton:Ya,sidebarSeason:Qa,mobileSeasonRow:ja,providerSelectWrap:Ga,genreRow:Xa,genreChip:Ja,metaRow:Za,detailGrid:ei,detailItem:ti,imdbLink:ni,watchedOverlay:si,watchedTitle:ri,watchedSubtext:oi,watchedActions:ai,watchedActionsCentered:ii},li=[],ci=[];function Os({error:r,onRetry:b}){return t("div",{className:`${g.statusMsg} ${g.error}`,style:{flexDirection:"column",alignItems:"stretch",gap:8},children:t("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[t("span",{style:{flex:1},children:r}),t("button",{className:g.retryButton,onClick:b,children:"Retry"})]})})}const Ei=()=>{const{id:r}=Nr(),[b]=wr(),z=U(b);z.current=b;const x=Ir(),M=Fr(),C=b.get("type"),w=Pr(),d=!!w.session,c=d&&!w.session?.host,k=c&&["tv","movie"].includes(w.room?.selection.kind||"")?w.room?.selection:null,[s,L]=v(null),[pe,te]=v(()=>parseInt(b.get("s")||"1",10)||1),u=k?.season??pe,[Ne,Be]=v([]),[ve,ye]=v(()=>parseInt(b.get("e")||"1",10)||1),S=k?Number(k.episode):ve,[Et,nt]=v(()=>{try{return $.getItem("tvProvider")||""}catch{return""}}),E=k?.provider??Et,[W,Y]=v([]),[de,Nt]=v(""),[Re,st]=v(""),{options:bt,isFallback:le,isLoading:wt}=po(),rt=ke(()=>bt.filter(e=>(e.kind??"tv")==="tv").map(e=>({id:e.id,label:e.label,tier:e.tier==="embed"?"embed":"direct",servers:e.servers})),[bt]),Q=le||rt.length===0?li:rt,I=Q.filter(e=>e.tier==="direct"),se=Q.filter(e=>e.tier==="embed"),[ue,Me]=v(!1),[$e,re]=v(""),[It,We]=v([]),[Te,At]=v(0),[Ce,Pt]=v([]),[me,De]=v(-1),[we,gt]=v(0),[He,Gt]=v(""),[ot,qe]=v(""),[Xt,xt]=v(()=>{try{return $.getItem("tvServer")||""}catch{return""}}),K=k?.source??Xt,pt=ke(()=>Q.find(e=>e.id===E),[Q,E]),A=pt?.tier==="embed",[Lt,he]=v([]),[ne,at]=v(""),[oe,vt]=v(""),[Bt,it]=v(!1),Se=ke(()=>Lt.length>0?Lt:pt?.servers??[],[Lt,pt]),Jt=ke(()=>ne&&!d?["Embed",...Se]:Se,[Se,ne,d]),Ie=Bt&&!!ne,lt=Ie?oe||ne:"";p(()=>{if(!ne){vt("");return}let e=!1;return ts(`/api/resolve?url=${encodeURIComponent(ne)}`).then(n=>{!e&&n.finalUrl&&vt(n.finalUrl)}).catch(()=>{}),()=>{e=!0}},[ne]);const Rt=U([]);p(()=>{Rt.current=W},[W]);const Mt=U(Te);p(()=>{Mt.current=Te},[Te]);const yt=U(me);p(()=>{yt.current=me},[me]);const i=Kr({skipIntervals:ci}),l=i.refs.videoRef,F=U(null),ce=U([]),Zt=U(null),$t=U(null),{videoDelayMs:Oe,videoDelayEnabled:en,setDelayEnabled:Tn,handleVideoDelayChange:Dt,isCalibrating:Cn,testClipActive:fe,stopCalibration:En,openAvSyncCalibrator:Fs,cancelAvSyncCalibrator:Vs,applyAvSyncCalibrator:Us,toggleTestClip:Ws,calibReturnRef:tn,effectiveVideoDelayMs:Nn}=Yr(l),[St,Hs]=v(()=>{try{const e=Number($.getItem("tvSubtitleDelayMs"));if(Number.isFinite(e)&&e>=-6e4&&e<=6e4)return Math.round(e)}catch{}return 0}),wn=U(St);wn.current=St;const qs=_(e=>{const n=Math.max(-6e4,Math.min(6e4,Math.round(e)));if(wn.current!==n){wn.current=n,Hs(n);try{$.setItem("tvSubtitleDelayMs",String(n))}catch{}}},[]);Qr({videoRef:l,canvasRef:Zt,delayMs:Nn,enabled:en});const In=en,_e=In||St!==0,{settings:An,update:Ks}=jr(),Pn=U(_e);Pn.current=_e;const xn=_(()=>{if(!Pn.current)return;const e=l.current;e&&Array.from(e.textTracks).forEach(n=>{n.mode!=="hidden"&&(n.mode="hidden")})},[l]),{hasConsent:Ot,grant:Ys}=xr(),f=C==="movie";ka({details:s,isMovie:f,season:u,episode:S,videoRef:l,active:!A&&!ue&&!$e&&W.length>0});const nn=r?Lr(C||"tv",r):"",j=nn,ze=`${j}:${u}:${S}:${E}:${K}`,sn=ke(()=>!r||!s||A||Ie||ue||Re!==ze||W[we]?.type!=="hls"?null:{kind:f?"movie":"tv",...f?{}:{season:u},showId:r,episode:String(f?1:S),provider:E,source:K,mode:"sub",title:s.title},[r,s,A,Ie,ue,Re,ze,W,we,f,u,S,E,K]),is=Gr(i.engine,sn,ue||!s),ls=vo(),Ln=yo(),Ke=So(),Ye=_o(),{toggle:cs,bookmarkedIds:Qs,pending:js}=ko(),{data:ds}=To(s?nn:void 0),zt=ds?!!ds.inLibrary:nn?Qs.has(nn):!1,Gs=_(()=>{!s||!r||cs({tmdbId:Number(r),mediaType:C||"tv",title:s.title,poster:s.poster,year:s.year,adult:s.adult})},[s,r,C,cs]),{data:Qe,isFetched:Ft,isFetching:Bn}=Co(j||void 0,u,S),rn=ke(()=>Ne.map(e=>e.episode_number).sort((e,n)=>e-n),[Ne]),Vt=rn.indexOf(S),Rn=Vt>0?rn[Vt-1]:null,P=Vt>=0&&Vt<rn.length-1?rn[Vt+1]:null,on=ke(()=>(s?.seasons??[]).map(e=>e.season_number).filter(e=>Number.isFinite(e)).sort((e,n)=>e-n),[s]),G=ke(()=>{if(f||P!=null)return null;const e=on.indexOf(u);return e>=0&&e<on.length-1?on[e+1]:(s?.number_of_seasons??0)>u?u+1:null},[f,P,on,u,s?.number_of_seasons]),Mn=No(s?.status),ct=f||P==null&&G==null&&Mn,us=P==null&&G==null&&!ct,Ae=Qe?.currentTime??0,an=U(null),[je,ln]=v(!1),[_t,ms]=v(0),[Ut,hs]=v(!1),[dt,ut]=v(!1),[Xs,$n]=v(!1),[Js,Zs]=v(""),[cn,er]=v(!1),[tr,Dn]=v(!1),[On,zn]=v(!1),{isTheaterMode:Fe,toggleTheaterMode:Fn,handleLayoutClick:nr}=Xr(),fs=Qe?.duration??0,bs=Qe?.completed===1,Wt=`${j}:${u}:${S}`,[gs,sr]=v(null);p(()=>{Ft&&sr(e=>e?.key===Wt?e:{key:Wt,watched:bs||Qt(Ae,fs)})},[Ft,Wt,bs,Ae,fs]);const rr=Ft&&gs?.key===Wt&&gs.watched,[dn]=v(wo),[or,ps]=v(!1);p(()=>{ps(!1)},[Wt]);const vs=!d&&!fe&&rr&&!On,Ge=vs&&dn,mt=vs&&!dn&&!or,Xe=dt&&dn,ar=dt&&!dn,ys=_(()=>{zn(!0),ut(!1)},[]);p(()=>{const e=n=>{n.defaultPrevented||n.ctrlKey||n.metaKey||n.altKey||n.repeat||n.target.closest('input, textarea, button, select, a, [role="button"], [contenteditable="true"]')||n.key.toLowerCase()==="t"&&Fn()};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[Fn]),Jr(i,(W.length>0||ot!=="")&&!Fe&&!je&&!dt&&!Ge&&!mt);const ir=Po(),[kt,lr]=v(Io),cr=_(e=>{lr(e),Ao(e)},[]),Je=U(!1),Ve=U(null),Vn=U(0),X=U(null),Ss=_(()=>{X.current=Ae,zn(!0),ut(!1)},[Ae]),un=U(""),dr=$s(Ae),Ht=!d&&!Je.current&&!On&&(je||dt||dr||Ge||mt),mn=U(Ht);mn.current=Ht;const hn=U(!1);p(()=>{hn.current=Ut},[Ut]);const Ze=_((e,n)=>{if(!j||!n||n<30)return;const a=Qt(e,n);Math.abs(e-Vn.current)<10&&!a||(Vn.current=e,ls.mutate({mediaId:j,season:u,episode:S,currentTime:Math.floor(e),duration:Math.floor(n),completed:a,title:s?.title??null,poster:s?.poster??null,backdrop:s?.backdrop??null,year:s?.year??null,overview:s?.overview??null,tmdbId:s?.id??null,mediaType:C||"tv",adult:s?.adult?1:0}))},[j,u,S,ls,s,C]),Pe=_((e,n)=>{En();const a=new URLSearchParams(b);a.set("type",b.get("type")||"tv"),a.set("s",String(e)),a.set("e",String(n)),x(`${window.location.pathname}?${a.toString()}`)},[b,x,En]),qt=_(()=>{const e=l.current;if(!e||f||P==null){$n(!1);return}const n=e.duration||0,a=e.currentTime||0;$n(n>0&&a/n>=.8)},[f,P,l]),fn=_((e,n)=>["tv-sources",E,f?"movie":"tv",r,e,n,K],[E,f,r,K]),bn=_(async(e,n)=>{if(!s||!r||!E)return{valid:!1,sources:[]};const a=f?"movie":"tv",m=await Ct.tv.sources.query({provider:E,type:a,tmdbId:String(r),season:e,episode:n,title:s.title||"",year:s.year||"",totalSeasons:String(s.number_of_seasons||1),imdbId:s.imdb_id||"",...K?{server:K}:{}});return{valid:"valid"in m?m.valid:!1,error:"error"in m?m.error:void 0,sources:m.sources,referer:"referer"in m?m.referer:void 0,audioTracks:m.audioTracks,subtitles:"subtitles"in m?m.subtitles:void 0,servers:"servers"in m?m.servers:void 0,server:"server"in m?m.server:void 0,embedUrl:"embedUrl"in m?m.embedUrl:void 0}},[s,r,E,f,K]),_s=_(()=>{if(f||!s||!r||!E||A||P==null)return;const e=fn(u,P);M.getQueryState(e)?.status!=="success"&&M.prefetchQuery({queryKey:e,queryFn:()=>bn(u,P),staleTime:300*1e3,gcTime:1800*1e3})},[f,s,r,E,A,P,u,M,fn,bn]),ur=_(()=>{if(fe)return;qt();const e=l.current;!e||e.paused||e.ended||(e.duration>0&&e.duration-e.currentTime<=60&&_s(),!Ve.current&&(Ve.current=setTimeout(()=>{Ve.current=null,Ze(e.currentTime,e.duration||0)},5e3)))},[Ze,l,fe,qt,_s]),mr=_(()=>{const e=l.current;if(!(!e||!s)&&(Ve.current&&clearTimeout(Ve.current),Ve.current=null,Ze(e.currentTime,e.duration||0),!c)){if(P!=null){kt&&(ye(P),Pe(u,P));return}!f&&G==null&&!Mn||(Zs(f?s.title:`${s.title} - Season ${u}`),ut(!0),Je.current=!0)}},[f,s,u,P,G,Mn,kt,Ze,Pe,l,c]),{checkEnd:gn,logDuration:ks}=Zr({videoRef:l,sourceType:A?"iframe":void 0,resetKey:`${j}:${u}:${S}:${On}`,onEnd:mr}),hr=_(()=>{i.actions.onPlay()},[i.actions]),fr=_(()=>{i.actions.onPause();const e=l.current;e&&!e.ended&&Ze(e.currentTime,e.duration||0)},[i.actions,Ze,l]),br=_(()=>{const e=l.current;if(e){try{const n=parseFloat($.getItem("playerVolume")||"");isNaN(n)||(e.volume=Math.max(0,Math.min(1,n))),e.muted=$.getItem("playerMuted")==="true"}catch{}if(X.current!=null&&X.current>0){try{e.currentTime=X.current}catch{}X.current=null}qt()}},[l,qt]),Un=_(()=>{const e=l.current;if(e&&X.current!=null&&X.current>0){try{e.currentTime=X.current}catch{}X.current=null}},[l]),gr=_(()=>{_t>0&&(X.current=_t);const e=l.current;if(e&&_t>0){try{e.currentTime=_t,X.current=null}catch{}e.play().catch(()=>{})}ln(!1),Je.current=!0},[_t,l]),Ts=_(()=>{X.current=null;const e=l.current;e&&(e.currentTime=0,e.play().catch(()=>{})),ln(!1),Je.current=!0},[l]),Wn=_(()=>{P!=null&&(Je.current=!0,ye(P),Pe(u,P))},[P,u,Pe]),Hn=_(()=>{G!=null&&(ut(!1),Je.current=!0,te(G),ye(1),Pe(G,1))},[G,Pe]),qn=_(async()=>{if(j)try{zt?await Ke.mutateAsync({id:j,status:"Completed"}):s&&r&&(await Ye.mutateAsync({tmdbId:Number(r),mediaType:C||"tv",title:s.title,poster:s.poster,backdrop:s.backdrop,year:s.year,overview:s.overview,adult:s.adult,status:"Completed",silent:!0}),Rs.success("Moved to Completed")),ut(!1),x("/")}catch{}},[j,zt,Ke,Ye,s,r,C,x]);p(()=>{Je.current=!1,an.current=null,ln(!1),$n(!1),ms(0),hs(!1),zn(!1),hn.current=!1,X.current=null,Vn.current=0},[j,u,S]),p(()=>{un.current=ze},[ze]),p(()=>{Ft&&(hs(!0),hn.current=!0)},[Ft,j,u,S]),p(()=>{if(d||Bn||!Qe||Je.current)return;const e=`${j}:${u}:${S}`;if(an.current===e)return;an.current=e;const n=Qe,a=n.currentTime??0;$s(a)&&n.completed!==1&&!Qt(a,n.duration??0)&&(ms(a),ln(!0))},[Qe,Bn,j,u,S,d]),p(()=>{!d&&je&&l.current&&l.current.pause()},[je,l,d]),p(()=>{!d&&mt&&l.current&&l.current.pause()},[mt,l,d]),p(()=>{(Ge||mt||Xe)&&i.state.isFullscreen&&i.actions.toggleFullscreen()},[Ge,mt,Xe,i.state.isFullscreen,i.actions]),p(()=>{const e=l.current;return()=>{Ve.current&&clearTimeout(Ve.current),Ve.current=null,!e?.ended&&i.engine.getState().duration>0&&Ze(i.engine.getTimeline().currentTime,i.engine.getState().duration)}},[i.engine,Ze,l]);const Kn=_(e=>{let n=null,a=!0;try{n=$.getItem("tvLastSubtitle"),a=$.getItem("tvSubtitlesEnabled")!=="false"}catch{}return os(e,{lastKey:n,enabled:a})},[]),Yn=_(e=>{if(!(e<0))try{$.setItem("tvSubtitlesEnabled","true"),$.setItem("tvSelectedSubtitle",String(e))}catch{}},[]),Cs=_(e=>{if(e.length===0)return 0;let n=null;try{n=$.getItem("tvLastAudio")}catch{}if(n){const a=e.findIndex(B=>ns(B)===n);if(a>=0)return a;const m=n.indexOf("|||"),h=m>=0?n.slice(0,m):n,T=m>=0?n.slice(m+3):n,D=e.findIndex(B=>B.language===h||B.label===T);if(D>=0)return D}return os(e,{lastKey:null,enabled:!0})},[]),Es=_(e=>{let n=null;try{n=$.getItem("tvLastQuality")}catch{}if(!n||e.length===0)return 0;const a=e.findIndex(B=>(B.quality||"")===n);if(a>=0)return a;const m=B=>{const Z=/(\d{3,4})/.exec(B||"");return Z?parseInt(Z[1],10):0},h=m(n);if(!h)return 0;let T=0,D=1/0;return e.forEach((B,Z)=>{const y=m(B.quality),H=Math.abs(y-h);y>0&&H<D&&(D=H,T=Z)}),T},[]),{data:Ns}=Eo(j||void 0),ws=ke(()=>(Ns?.progress??[]).filter(n=>n.season===u&&(n.completed===1||Qt(n.currentTime,n.duration))).map(n=>String(n.episode)),[Ns,u]),Is=ke(()=>Ne.map(e=>({id:String(e.episode_number),label:`Episode ${e.episode_number}`,sublabel:e.name||void 0,thumbnail:e.still_path?`https://image.tmdb.org/t/p/w185${e.still_path}`:void 0})),[Ne]),As=ke(()=>(s?.genres??[]).map(e=>e.name).slice(0,5),[s]),Qn=ke(()=>[s?.year,s?.status,s?.number_of_seasons?`${s.number_of_seasons} Season${s.number_of_seasons>1?"s":""}`:null,s?.number_of_episodes?`${s.number_of_episodes} Episodes`:null].filter(Boolean),[s]);p(()=>{if(!c&&Q.length!==0&&!Q.some(e=>e.id===E)){const e=Q.find(n=>n.tier==="direct")?.id??Q[0].id;nt(e);try{$.setItem("tvProvider",e)}catch{}}},[Q,E,c]),p(()=>{he([]),at(""),vt(""),it(!1)},[E]),p(()=>{if(!c&&Se.length!==0&&!Se.includes(K)){xt(Se[0]);try{$.setItem("tvServer",Se[0])}catch{}}},[Se,K,c]),p(()=>{if(!r){L(null),Y([]),st(""),re(""),qe("");return}const e=Number(r),n=C||"tv";L(null),Y([]),st(""),re(""),qe("");const a=parseInt(z.current.get("s")||"",10),m=parseInt(z.current.get("e")||"",10);te(isNaN(a)?1:a),ye(isNaN(m)?1:m),gt(0),Ct.tv.details.query({type:n,id:String(e)}).then(h=>{const T={id:h.id,title:h.title||"",overview:h.overview||"",vote_average:h.vote_average,year:h.year,poster:h.poster,backdrop:h.backdrop,imdb_id:h.imdb_id||void 0,adult:h.adult,status:h.status,seasons:h.seasons,number_of_seasons:h.number_of_seasons};L(T),T.seasons&&T.seasons.length>0&&isNaN(a)&&te(T.seasons[0].season_number)}).catch(()=>{})},[r,C]),p(()=>{if(!s||!r)return;if(!(s.seasons!==void 0||s.number_of_seasons!==void 0)){Be([]);return}const n=parseInt(b.get("e")||"",10);Ct.tv.episodes.query({id:String(r),season:String(u)}).then(a=>{const m=(a.episodes||[]).map(h=>({episode_number:h.episode_number,name:h.name||"",vote_average:h.vote_average,overview:h.overview||"",still_path:h.still_path||""}));Be(m),m.length!==0&&ye(h=>!isNaN(n)&&m.some(T=>T.episode_number===n)?n:m.some(T=>T.episode_number===h)?h:m[0].episode_number)}).catch(()=>{})},[s,r,u,b]),p(()=>{if(!A||!s||!r)return;ts(`/api/tv/embed/${E}/${f?"movie":"tv"}/${r}?season=${u}&episode=${S}`).then(n=>{if(n.url)return qe(n.url),ts(`/api/resolve?url=${encodeURIComponent(n.url)}`).then(a=>{a.finalUrl&&qe(a.finalUrl)})}).catch(()=>{})},[E,s,r,u,S,f,A]);const pn=_(async()=>{if(!s||!r||!E||A||s.adult&&!Ot)return;const e=ze;Me(!0),re(""),Rt.current.length===0&&(Y([]),gt(0),We([]),Pt([]));try{const n=await M.fetchQuery({queryKey:fn(u,S),queryFn:()=>bn(u,S),staleTime:3e5,gcTime:18e5});if(un.current!==e)return;if(Me(!1),!n.valid||!n.sources?.length){re(n.error?`${n.error}`:Se.length>0?`No streams from ${K}. Try another server.`:"No streams available.");return}if(d&&K&&n.server&&n.server!==K){Y([]),re("The host's selected server is unavailable. Automatic source switching is disabled in watch-along rooms.");return}!c&&!K&&n.server&&xt(n.server);const a=d?n.sources.filter(B=>B.type==="hls"):n.sources;if(d&&a.length===0){Y([]),re("The room requires a direct HLS source. No compatible stream is available here.");return}Y(a),Nt(n.server||K),st(e),n.servers?.length&&he(n.servers),n.embedUrl&&at(n.embedUrl),gt(Es(a)),n.referer&&Gt(n.referer);const m=n.audioTracks||[];We(m),At(m.length>0?Cs(m):0);const h=n.subtitles||[];if(Pt(h),h.length>0){const B=Kn(h);De(B),Yn(B)}else De(-1);const T=f?"movie":"tv",D=r;Ct.tv.subtitles.query({type:T,tmdbId:String(D),season:String(u),episode:String(S)}).then(B=>{if(un.current!==e)return;const Z=Array.isArray(B.subtitles)?B.subtitles:[];Z.length!==0&&Pt(y=>{const H=[...y,...Z.filter(J=>!y.some(V=>V.url===J.url))];if(y.length===0){const J=Kn(H);De(J),Yn(J)}return H})}).catch(()=>{}),re("")}catch(n){if(un.current!==e)return;Me(!1),re(n instanceof Error?n.message:"Failed to load streams.")}},[s,r,E,u,S,f,A,Ot,Se,K,Kn,Yn,Cs,Es,M,fn,bn,ze,d,c]),jn=_(()=>{const e=l.current;e&&!isNaN(e.currentTime)&&(X.current=e.currentTime)},[l]),pr=_(e=>{if(!(c||d&&e==="Embed")){if(e==="Embed"){it(!0);return}jn(),it(!1),xt(e);try{$.setItem("tvServer",e)}catch{}re("")}},[jn,c,d]),vr=_(e=>{nt(e);try{$.setItem("tvProvider",e)}catch{}},[]);p(()=>{E&&s&&!A&&pn()},[E,s,pn,A]),p(()=>{if(Ge){i.engine.unload();return}if(!l.current)return;if(F.current=null,A||Ie||d&&W[we]?.type!=="hls"){i.engine.unload();return}if(fe&&!d)return i.engine.loadSource({url:"/av-sync-test.mp4"},{autoPlay:!mn.current});if(tn.current!=null&&(X.current=tn.current,tn.current=null),Re===ze&&X.current==null&&!mn.current)try{const y=l.current;y&&!y.ended&&y.currentTime>1&&(X.current=y.currentTime)}catch{}const n=X.current??0,a=!ue&&Re===ze?Ie?"":W[we]?.url||"":"";if(!a){try{l.current?.pause(),l.current?.removeAttribute("src"),l.current?.load()}catch{}return}const m=l.current;m.pause(),m.removeAttribute("src"),m.load(),i.actions.resetMediaState();const h=`/api/tv/stream-proxy?url=${encodeURIComponent(a)}&referer=${encodeURIComponent(He)}&provider=${encodeURIComponent(E)}`,T=Ea()||document.body.classList.contains("low-end"),D=T?60:180,B=i.engine.loadSource({url:h,hls:W[we]?.type==="hls"},{hlsConfig:{enableWorker:!0,lowLatencyMode:!1,startPosition:n>0?n:-1,maxBufferLength:D,maxMaxBufferLength:D+(T?30:60),backBufferLength:T?30:60,maxBufferSize:(T?120:360)*1e3*1e3,fragLoadPolicy:{default:{maxTimeToFirstByteMs:15e3,maxLoadTimeMs:45e3,timeoutRetry:{maxNumRetry:2,retryDelayMs:0,maxRetryDelayMs:0},errorRetry:{maxNumRetry:3,retryDelayMs:800,maxRetryDelayMs:6e3}}},manifestLoadPolicy:{default:{maxTimeToFirstByteMs:1e4,maxLoadTimeMs:25e3,timeoutRetry:{maxNumRetry:1,retryDelayMs:500,maxRetryDelayMs:2e3},errorRetry:{maxNumRetry:2,retryDelayMs:800,maxRetryDelayMs:4e3}}}},onHls:(y,H)=>{F.current=y;const J=()=>{let O=!1,R=0;try{O=$.getItem("tvSubtitlesEnabled")==="true";const N=parseInt($.getItem("tvSelectedSubtitle")||"0",10);!isNaN(N)&&N>=0&&(R=N)}catch{}return{enabled:O,index:R}},V=()=>{if(typeof y.subtitleTrack!="number")return;if(ce.current.length>0){y.subtitleTrack=-1;return}const O=Array.isArray(y.subtitleTracks)?y.subtitleTracks:[];if(O.length===0){y.subtitleTrack=-1;return}const R=J();if(R.enabled){const N=R.index<O.length?R.index:0;y.subtitleTrack=N,De(N),xn()}else y.subtitleTrack=-1};Ta(y,H.Events,{getWant:()=>Mt.current,onResolve:O=>At(O)}),y.on(H.Events.MANIFEST_PARSED,V),y.on(H.Events.SUBTITLE_TRACKS_UPDATED,()=>{V()}),y.on(H.Events.SUBTITLE_TRACK_SWITCH,(O,R)=>{if(ce.current.length>0){if(R.id!==-1)try{y.subtitleTrack=-1}catch{}return}const N=Array.isArray(y.subtitleTracks)?y.subtitleTracks:[];if(N.length!==0){if(R.id===-1){const Ee=J();if(Ee.enabled){const ae=Ee.index<N.length?Ee.index:0;y.subtitleTrack=ae;return}}De(R.id),xn()}})},onReady:()=>{(n>0||!mn.current&&hn.current)&&i.engine.play()},onError:y=>{re(y.message),Me(!1),F.current=null}}),Z=()=>{const J=m.error?.code===4?"Video source not supported or not found":"Failed to load video stream";re(`${J}. The source may be invalid or expired. Try switching source or reloading.`),Me(!1)};return m.addEventListener("error",Z),()=>{B(),F.current=null,m.removeEventListener("error",Z)}},[W,Re,ue,we,E,He,A,Ie,l,tn,fe,j,u,S,Un,xn,i.actions,i.engine,ze,d,Ge]),p(()=>{if(c||!Ut||je||dt||Ht||A||fe)return;const e=l.current;!e||!e.paused||e.ended||e.readyState<1||(Un(),i.engine.play())},[Ut,je,dt,Ht,A,fe,Un,l,c,i.engine]),p(()=>{const e=F.current;!e||typeof e.audioTrack!="number"||(e.audioTrack=Te)},[Te]),p(()=>{const e=F.current;!e||typeof e.subtitleTrack!="number"||!Array.isArray(e.subtitleTracks)||e.subtitleTracks.length===0||ce.current.length>0||(me>=0?e.subtitleTrack=me:e.subtitleTrack=-1)},[me]),p(()=>{const e=l.current;if(!(!e||A)&&(e.querySelectorAll("track").forEach(n=>n.remove()),ce.current=[],Ce.length!==0&&(Ce.forEach(n=>{const a=document.createElement("track");a.kind="subtitles",a.label=n.label||n.language||"Unknown",a.srclang=n.language||n.label||"en";const m=`/api/subtitle-proxy?url=${encodeURIComponent(n.url)}&referer=${encodeURIComponent(He)}`;a.src=m,a.addEventListener("load",()=>{const h=ce.current.indexOf(a),T=a.track;if(T&&h>=0){const D=h===yt.current;T.mode=D&&!Pn.current?"showing":"hidden"}}),e.appendChild(a),ce.current.push(a)}),Ce.length>0)))try{const n=F.current;n&&typeof n.subtitleTrack=="number"&&n.subtitleTrack!==-1&&(n.subtitleTrack=-1)}catch{}},[Ce,He,A,E,K,l]),p(()=>{const e=l.current;if(!e||A)return;const n=F.current;ce.current.length>0&&n&&typeof n.subtitleTrack=="number"&&Array.isArray(n.subtitleTracks)&&n.subtitleTracks.length>0&&(n.subtitleTrack=-1);const a=()=>{const T=as(i.state.subtitleFontSize,e.clientHeight||720),D=Math.max(0,Math.min(100,100-i.state.subtitlePosition)),B=()=>{const V=T*16,O=e.videoHeight||e.clientHeight||720,R=e.videoWidth||e.clientWidth||1280;return{step:V*1.3/O*100,chars:Math.max(20,Math.floor(R/(V*.55)))}},Z=(V,O)=>{const R=V;R.snapToLines=!1,R.line=O},y=V=>{if(!V.cues)return;Array.from(V.cues).forEach(ae=>Z(ae,D));const O=Array.from(V.activeCues??[]);if(O.length<=1){O.forEach(ae=>Z(ae,D));return}const{step:R,chars:N}=B();let Ee=D;for(let ae=O.length-1;ae>=0;ae--){const et=String(O[ae].text??"").replace(/<[^>]*>/g,"").split(`
|
|
3
|
+
`).reduce((yn,Kt)=>yn+Math.max(1,Math.ceil(Kt.length/N)),0);Ee=Math.max(0,Ee-et*R),Z(O[ae],Ee),Ee-=R*.4}},H=ce.current;if(H.length>0){H.forEach((V,O)=>{const R=V.track;if(!R)return;const N=O===me;R.mode=N&&!_e?"showing":"hidden",N&&!_e&&y(R)});return}const J=Array.from(e.textTracks);J.length!==0&&J.forEach((V,O)=>{const R=O===me;V.mode=R&&!_e?"showing":"hidden",R&&!_e&&y(V)})};a();const m=()=>a();e.textTracks.addEventListener("addtrack",m),e.addEventListener("loadedmetadata",a,{once:!0});const h=window.setTimeout(a,600);return()=>{e.textTracks.removeEventListener("addtrack",m),e.removeEventListener("loadedmetadata",a),window.clearTimeout(h)}},[me,Ce,A,E,l,_e,i.state.subtitleFontSize,i.state.subtitlePosition]),p(()=>{if(!_e)return;const e=l.current,n=$t.current;if(!e||!n)return;const a=St/1e3,m=Nn/1e3,h=new Set;let T=[],D=-1,B=-1,Z=-1,y=-1,H=0,J=0,V=!1;const O=()=>{const q=yt.current;if(q<0)return null;const tt=ce.current;return tt.length>0?tt[q]?.track??null:Array.from(e.textTracks)[q]??null},R=(q,tt)=>{const be=q.cues;if(!be||be.length===0)return Array.from(q.activeCues??[]);let ht=0,ft=be.length;for(;ht<ft;){const xe=ht+ft>>>1;be[xe].endTime+a<tt?ht=xe+1:ft=xe}const Yt=[];for(let xe=ht;xe<be.length;xe++){const Sn=be[xe];if(Sn.startTime+a>tt)break;Sn.endTime+a>=tt&&Yt.push(Sn)}return Yt},N=()=>{const q=O(),tt=e.currentTime-m,be=q?R(q,tt):[],ht=e.clientWidth,ft=e.clientHeight,Yt=e.videoWidth,xe=e.videoHeight;if(be.length===T.length&&be.every((Jn,Zn)=>Jn===T[Zn])&&ht===D&&ft===B&&Yt===Z&&xe===y||(T=be,D=ht,B=ft,Z=Yt,y=xe,n.textContent="",be.length===0))return;const Ls={fontSize:as(i.state.subtitleFontSize,ft),position:i.state.subtitlePosition,bgOpacity:i.state.subtitleBgOpacity,bgColor:i.state.subtitleBgColor,textColor:i.state.subtitleTextColor,edge:i.state.subtitleEdge,bold:i.state.subtitleBold},kr=eo(Ls),Tr=to(e,Ls.position);be.forEach((Jn,Zn)=>{const Bs=String(Jn.text??"");if(!no(Bs).trim())return;const es=document.createElement("div"),Cr=(be.length-1-Zn)*1.7;es.style.cssText=`${kr}
|
|
4
|
+
bottom: calc(${Tr}px + ${Cr}em);`,es.innerHTML=so(Bs),n.appendChild(es)})},Ee=()=>{Array.from(e.textTracks).forEach(q=>{h.has(q)||(h.add(q),q.addEventListener("cuechange",N))})},ae=()=>{Ee(),N()},Xn=()=>{if(V||J)return;const q=()=>{J=0,!(V||e.paused||e.ended)&&(N(),Xn())};J=window.requestAnimationFrame(q)},et=e,yn=()=>{H=0,N(),!V&&et.requestVideoFrameCallback&&(H=et.requestVideoFrameCallback(yn))},Kt=()=>{N(),et.requestVideoFrameCallback?H||(H=et.requestVideoFrameCallback(yn)):Xn()};Ee(),e.textTracks.addEventListener("addtrack",ae),e.textTracks.addEventListener("removetrack",ae),e.addEventListener("timeupdate",N),e.addEventListener("seeked",N),e.addEventListener("loadedmetadata",N),e.addEventListener("play",Kt);const Ps=Array.from(e.querySelectorAll("track"));Ps.forEach(q=>q.addEventListener("load",N));const xs=typeof ResizeObserver>"u"?null:new ResizeObserver(()=>N());return xs?.observe(e),N(),Kt(),()=>{V=!0,h.forEach(q=>q.removeEventListener("cuechange",N)),e.textTracks.removeEventListener("addtrack",ae),e.textTracks.removeEventListener("removetrack",ae),e.removeEventListener("timeupdate",N),e.removeEventListener("seeked",N),e.removeEventListener("loadedmetadata",N),e.removeEventListener("play",Kt),Ps.forEach(q=>q.removeEventListener("load",N)),xs?.disconnect(),J&&window.cancelAnimationFrame(J),H&&et.cancelVideoFrameCallback&&et.cancelVideoFrameCallback(H),n.textContent=""}},[_e,St,me,Ce,Nn,l,i.state.subtitleFontSize,i.state.subtitlePosition,i.state.subtitleBgOpacity,i.state.subtitleBgColor,i.state.subtitleTextColor,i.state.subtitleEdge,i.state.subtitleBold]);const Gn=()=>{L(null),Y([]),qe(""),x(-1)},yr=_(e=>{c||(te(e),ye(1),Pe(e,1))},[Pe,c]),vn=!f&&s?.seasons&&s.seasons.length>1?t("label",{className:g.sidebarSeason,children:[t("span",{children:"Season"}),t("select",{disabled:c,value:u,onChange:e=>yr(parseInt(e.currentTarget.value,10)||1),className:g.select,children:s.seasons.map(e=>t("option",{value:e.season_number,children:["Season ",e.season_number," (",e.episode_count," ep)"]},e.season_number))})]}):null,Tt=_(e=>{if(c)return;const n=parseInt(e,10);if(!isNaN(n)){try{l.current?.pause()}catch{}ye(n),Pe(u,n)}Dn(!1)},[u,Pe,l,c]);p(()=>{if(f)return;const e=n=>{n.target.closest('input, textarea, button, select, a, [role="button"], [contenteditable="true"]')||n.key.toLowerCase()==="n"&&(P!=null?Tt(String(P)):Rs.error("No next episode available"))};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[f,P,Tt]);const Sr=e=>{At(e);try{const a=It[e];a&&$.setItem("tvLastAudio",ns(a))}catch{}const n=F.current;n&&n.audioTrack!==void 0&&(n.audioTrack=e)},_r=e=>{De(e);try{if(e===-1)$.setItem("tvSubtitlesEnabled","false");else{$.setItem("tvSubtitlesEnabled","true"),$.setItem("tvSelectedSubtitle",String(e));const h=Ce[e];h&&$.setItem("tvLastSubtitle",ns(h))}}catch{}const n=l.current,a=F.current;if(a&&typeof a.subtitleTrack=="number"&&Array.isArray(a.subtitleTracks)&&a.subtitleTracks.length>0&&(a.subtitleTrack=ce.current.length>0||e<0?-1:e),!n)return;const m=ce.current;if(m.length>0){m.forEach((h,T)=>{const D=h.track;if(!D)return;const B=T===e;D.mode=B&&!_e?"showing":"hidden"});return}Array.from(n.textTracks).forEach((h,T)=>{const D=T===e;h.mode=D&&!_e?"showing":"hidden"})};return p(()=>{if(!s){document.title="TV & Movies - dango";return}document.title=f?`${s.title} - dango`:`${s.title} - Season ${u} Episode ${S} - dango`},[s,f,u,S]),p(()=>{if(!s||f)return;const e=new URLSearchParams(b),n=e.get("s"),a=e.get("e"),m=String(u),h=String(S);n===m&&a===h||(e.set("type",b.get("type")||"tv"),e.set("s",m),e.set("e",h),x(`${window.location.pathname}?${e.toString()}`,{replace:!0}))},[s,f,u,S,b,x]),t("div",{className:`${Le.playerPageLayout} ${Fe?Le.theaterMode:""} ${f?Le.noSidebar:""}`,onClick:nr,children:[Fe&&t(ro,{videoRef:l,active:An.enabled&&!A&&W.length>0&&!$e&&!(s?.adult&&!Ot),settings:An}),!Fe&&!f&&t("aside",{className:Le.episodeSidebar,children:s?t(oo,{episodes:Is,currentEpisode:String(S),watchedEpisodes:ws,onEpisodeClick:Tt,header:vn}):t(ao,{variant:"sidebar"})}),t("div",{className:Le.playerMain,children:[s&&t("div",{className:g.playerSection,onContextMenu:e=>e.preventDefault(),style:s.adult&&!Ot?{filter:"blur(14px)",pointerEvents:"none",userSelect:"none"}:void 0,children:A&&ot&&!d?t("iframe",{src:ot,className:g.videoIframe,allow:"autoplay; fullscreen",allowFullScreen:!0}):!A&<&&!d?t("iframe",{src:lt,className:g.videoIframe,allow:"autoplay; fullscreen",allowFullScreen:!0}):!A&&(W.length>0||ue)?t(Ue,{children:[$e&&t(Os,{error:$e,onRetry:pn}),t(ya,{player:i,title:s.title,episodeLabel:f?void 0:`S${u} E${S}`,server:de||pt?.label||E,audioTracks:It,selectedAudioTrack:Te,onAudioTrackChange:Sr,subtitles:Ce,selectedSubtitle:me,onSubtitleChange:_r,streams:W,resolutionIdx:we,onResolutionChange:e=>{jn(),gt(e);try{const n=W[e]?.quality;n&&$.setItem("tvLastQuality",n)}catch{}},onBack:Gn,videoDelayEnabled:en,onVideoDelayToggle:Tn,videoDelayMs:Oe,onVideoDelayChange:Dt,onCalibrateAvSync:d?void 0:Fs,subtitleDelayMs:St,onSubtitleDelayChange:qs,showNextEpisodeButton:!c&&Xs&&!je&&!dt,onNextEpisode:Wn,isLoading:ue,isTheaterMode:Fe,onTheaterModeToggle:Fn,ambientSettings:An,onAmbientChange:Ks,hideChrome:Ge||Xe,children:t(Ue,{children:[t(zr,{autoPlay:!d&&Ut&&!Ht,playsInline:!0,disablePictureInPicture:!0,className:`${g.video} ${In?g.videoHidden:""}`,onTimeUpdate:()=>{fe||(ur(),gn())},onEnded:()=>{fe||gn(!0)},onPlay:hr,onPause:fr,onSeeked:()=>{fe||(qt(),gn())},onLoadedMetadata:()=>{br(),ks(),gn()},onDurationChange:()=>{ks()},onContextMenu:e=>e.preventDefault(),onError:()=>{re("Video failed to load. Try another server or reload."),Me(!1)}}),t("canvas",{ref:Zt,className:`${g.delayCanvas} ${In?g.delayCanvasActive:""}`}),_e&&t("div",{ref:$t,className:g.subtitleOverlay}),t(io,{isOpen:Cn,ms:Oe,onChange:Dt,onApply:Us,onClose:Vs,testClipActive:fe,onTestClip:Ws}),(Ge||Xe)&&t("div",{className:g.watchedOverlay,children:[t(ie,{name:"check-circle",size:48,style:{color:"var(--accent-lighter)"}}),t("p",{className:g.watchedTitle,children:Xe||ct?G!=null?"Season Complete!":f?"Movie Completed!":"Show Completed!":f?"Movie watched":`S${u} E${S} watched`}),t("p",{className:g.watchedSubtext,children:Xe||ct?G!=null?`You finished Season ${u}.`:f?"You finished this movie!":"Congratulations! You finished all available episodes.":"Resume where you left off, replay from the beginning, or continue with the next episode."}),t("div",{className:`${g.watchedActions} ${Xe?g.watchedActionsCentered:""}`,children:[t("div",{children:Ae>5&&!Xe&&t(ge,{variant:us?void 0:"secondary",onClick:Ss,children:`Resume ${jt(Ae)}`})}),t("div",{children:P!=null?t(ge,{onClick:Wn,children:`Watch EP ${P}`}):G!=null?t(ge,{onClick:Hn,children:`Start Season ${G}`}):null}),t("div",{children:[t(ge,{variant:"secondary",onClick:ys,children:"Replay"}),ct&&t(ge,{onClick:qn,disabled:Ke.isPending||Ye.isPending,children:Ke.isPending||Ye.isPending?"Saving...":"Move to Completed"})]})]})]})]})})]}):$e&&!A?t(Os,{error:$e,onRetry:pn}):null}),t(Lo,{playback:sn?{selection:sn,position:l.current?.currentTime||0,playing:!1,rate:i.engine.getState().playbackRate}:null,onCreate:()=>{En(),i.engine.pause()},needsPlayback:is.needsPlayback,onEnablePlayback:is.enablePlayback}),d&&!ue&&s&&!sn&&t("p",{role:"alert",children:"The host's direct HLS source is unavailable here. Retry or leave the room to use another source."}),!Fe&&s&&t(lo,{}),!Fe&&vn&&t("div",{className:g.mobileSeasonRow,children:vn}),!Fe&&s&&t("div",{className:ee.streamPanel,children:[t("div",{className:g.providerSelectWrap,children:t("label",{className:g.controlLabel,children:["Provider",t("select",{value:E,onChange:e=>vr(e.currentTarget.value),className:g.select,disabled:c||Q.length===0,children:wt?t("option",{value:"",children:"Loading..."}):Q.length===0?t("option",{value:"",children:"No providers available"}):t(Ue,{children:[I.length>0&&t("optgroup",{label:"Direct HLS",children:I.map(e=>t("option",{value:e.id,children:e.label},e.id))}),se.length>0&&t("optgroup",{label:"Embeds",children:se.map(e=>t("option",{value:e.id,children:e.label},e.id))})]})})]})}),!c&&!A&&(ue?t("div",{className:g.sourceLoader,children:t("div",{className:g.ringSpinner})}):t(_a,{servers:Jt,selectedServer:Bt?"Embed":K,onServerSelect:pr}))]}),!Fe&&s&&t("div",{className:Le.playerInfoContainer,children:[t("div",{className:Le.playerInfoHeader,children:[t("div",{className:Le.playerAnimeCard,children:s.poster&&t(Br,{src:`https://image.tmdb.org/t/p/w342${s.poster}`,alt:s.title,loading:"lazy",decoding:"async"})}),t("div",{className:Le.videoTitleSection,children:[t("div",{className:ee.titleContainer,children:[t("h1",{children:s.title}),t("div",{className:g.meta,children:[t("span",{className:g.year,children:s.year}),s.vote_average!=null&&s.vote_average>0&&t("span",{className:g.rating,children:[t(ie,{name:"star",size:12}),Number(s.vote_average).toFixed(1)]}),t("span",{className:`${g.typeBadge} ${g[f?"movie":"tv"]}`,children:f?"Movie":"TV Show"})]}),As.length>0&&t("div",{className:g.genreRow,children:As.map(e=>t("span",{className:g.genreChip,children:e},e))}),Qn.length>0&&t("div",{className:g.metaRow,children:Qn.map((e,n)=>t("span",{children:[e,n<Qn.length-1?" · ":""]},`${e}-${n}`))})]}),t("div",{className:ee.controls,children:[t("button",{className:`${ee.watchlistBtn} ${zt?ee.inList:""}`,onClick:Gs,disabled:js,type:"button",children:[zt?t(ie,{name:"check",size:14}):t(ie,{name:"plus",size:14}),zt?"In Watchlist":"Add to Watchlist"]}),!f&&t(Ue,{children:[t("button",{className:`${ee.episodeNavBtn} ${ee.secondary}`,onClick:()=>Rn!=null&&Tt(String(Rn)),disabled:c||Rn==null,type:"button",children:[t(ie,{name:"chevron-left",size:14}),"Prev EP"]}),t("button",{className:`${ee.episodeNavBtn} ${ee.primary}`,onClick:()=>P!=null&&Tt(String(P)),disabled:c||P==null,type:"button",children:["Next EP",t(ie,{name:"chevron-right",size:14})]}),!f&&t("button",{className:`${ee.watchlistBtn} ${ee.modeToggleBtn} ${kt?ee.modeToggleActive:""}`,onClick:()=>cr(!kt),type:"button","aria-pressed":kt,children:kt?"AUTOPLAY: ON":"AUTOPLAY: OFF"}),ir&&t("button",{className:`${ee.watchlistBtn}`,onClick:()=>Dn(!0),type:"button",children:[t(ie,{name:"list-ul",size:14}),"Episodes"]}),t("button",{className:`${ee.watchlistBtn}`,onClick:()=>Ln.mutate({mediaId:j??"",season:u,episode:S}),disabled:Ln.isPending,type:"button",children:[t(ie,{name:"undo",size:14}),Ln.isPending?"Resetting...":"Reset Progress"]})]})]})]})]}),t("div",{className:Le.infoColumns,children:[t("div",{className:`${ee.descriptionSection} ${ee.synopsisFlat}`,children:[t("h3",{children:"Synopsis"}),t(xo,{text:s.overview,emptyText:"No description available."}),t("button",{className:ee.detailsToggleBtn,onClick:()=>er(!cn),type:"button",children:[cn?t(ie,{name:"chevron-up"}):t(ie,{name:"chevron-down"}),cn?"Hide Details":"Show Details"]})]}),cn&&t("div",{className:g.detailGrid,children:[s.first_air_date&&t("div",{className:g.detailItem,children:[t("strong",{children:f?"Release Date":"First Air Date"}),t("span",{children:s.first_air_date})]}),s.last_air_date&&t("div",{className:g.detailItem,children:[t("strong",{children:"Last Air Date"}),t("span",{children:s.last_air_date})]}),s.networks&&s.networks.length>0&&t("div",{className:g.detailItem,children:[t("strong",{children:"Networks"}),t("span",{children:s.networks.map(e=>e.name).join(", ")})]}),s.created_by&&s.created_by.length>0&&t("div",{className:g.detailItem,children:[t("strong",{children:"Created By"}),t("span",{children:s.created_by.map(e=>e.name).join(", ")})]}),s.episode_run_time&&s.episode_run_time.length>0&&t("div",{className:g.detailItem,children:[t("strong",{children:"Episode Runtime"}),t("span",{children:[s.episode_run_time[0]," min"]})]}),s.imdb_id&&t("div",{className:g.detailItem,children:[t("strong",{children:"IMDb"}),t("a",{href:`https://www.imdb.com/title/${s.imdb_id}`,target:"_blank",rel:"noopener noreferrer",className:g.imdbLink,children:"View on IMDb"})]})]})]})]}),!f&&t(co,{isOpen:tr,onClose:()=>Dn(!1),episodes:Is,currentEpisode:String(S),watchedEpisodes:ws,onEpisodeClick:Tt,header:vn}),s?.adult&&!Ot&&t(go,{isOpen:!0,onClose:Gn,onGrant:Ys}),t(uo,{isOpen:!d&&je&&!Bn&&an.current===`${j}:${u}:${S}`&&Qe?.completed!==1&&!Qt(Ae,Qe?.duration??0),onClose:Ts,title:"Resume Watching",message:t(Ue,{children:["You were at ",t("strong",{children:jt(_t)})]}),restartLabel:"Start from Beginning",onResume:gr,onRestart:Ts}),t(Ms,{isOpen:mt,onClose:()=>ps(!0),title:ct?f?"Movie Completed!":"Show Completed!":"Episode Completed",heading:f?s?.title??"Movie":`S${u} E${S}`,message:ct?f?"You finished this movie!":"Congratulations! You finished all available episodes.":f?"You've already watched this movie. Resume where you left off or replay it.":"You've already watched this episode. Resume where you left off, replay it, or continue with the next episode.",children:[Ae>5&&t(ge,{variant:us?void 0:"secondary",onClick:Ss,children:`Resume ${jt(Ae)}`}),t(ge,{variant:"secondary",onClick:ys,children:"Replay"}),P!=null?t(ge,{onClick:Wn,children:["Watch EP ",P]}):G!=null?t(ge,{onClick:Hn,children:["Start Season ",G]}):ct?t(ge,{onClick:qn,disabled:Ke.isPending||Ye.isPending,children:Ke.isPending||Ye.isPending?"Saving...":"Move to Completed"}):null]}),t(Ms,{isOpen:ar,onClose:()=>ut(!1),title:f?"Movie Completed!":G!=null?"Season Complete!":"Show Completed!",heading:Js,message:f?"You finished this movie!":G!=null?`You finished Season ${u}.`:"Congratulations! You finished all available episodes.",children:G!=null?t(ge,{onClick:Hn,children:["Start Season ",G]}):t(Ue,{children:[t(ge,{onClick:()=>{ut(!1),Gn()},children:"Back to Details"}),t(ge,{onClick:qn,disabled:Ke.isPending||Ye.isPending,children:Ke.isPending||Ye.isPending?"Saving...":"Move to Completed"})]})}),!s&&t("div",{className:g.statusMsg,children:[t(ie,{name:"spinner",className:g.spinner})," Loading..."]})]})]})};export{Ei as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as R,a as q,p as E,d as l,h as C,T,u as e,g as F}from"./vendor-core-DfaOB3Rn.js";import{I as a}from"./vendor-icons-DrybRNxP.js";import{aj as j,e as U,ak as H,t as J,B as w,a8 as K,i as I}from"./index-
|
|
1
|
+
import{o as R,a as q,p as E,d as l,h as C,T,u as e,g as F}from"./vendor-core-DfaOB3Rn.js";import{I as a}from"./vendor-icons-DrybRNxP.js";import{aj as j,e as U,ak as H,t as J,B as w,a8 as K,i as I}from"./index-BYGDqzEf.js";import{c as Q,d as X}from"./useTvLibrary-Dec7yfKF.js";import"./vendor-query-BBT5_sHx.js";import"./libraryInvalidation-CHW51Kbi.js";const Y="_container_198yg_1",Z="_heroSection_198yg_11",ee="_bannerContainer_198yg_17",ne="_banner_198yg_17",te="_bannerOverlay_198yg_37",se="_heroContent_198yg_49",ae="_posterContainer_198yg_62",oe="_poster_198yg_62",ie="_infoGlass_198yg_86",re="_title_198yg_100",le="_quickMeta_198yg_110",ce="_metaItem_198yg_118",de="_iconStar_198yg_126",me="_iconTv_198yg_130",_e="_iconType_198yg_134",he="_genres_198yg_139",ge="_genre_198yg_139",ve="_metaRow_198yg_156",pe="_metaValue_198yg_164",ue="_metaDivider_198yg_168",ye="_synopsisSection_198yg_173",ke="_sectionTitleSmall_198yg_179",be="_synopsis_198yg_173",Ne="_actions_198yg_196",Se="_watchBtn_198yg_202",fe="_watchlistBtn_198yg_226",Ce="_active_198yg_250",Te="_seasonPickerLabel_198yg_256",we="_seasonSelect_198yg_267",Ie="_detailsToggleBtn_198yg_286",Be="_expandedContent_198yg_304",De="_detailGrid_198yg_309",Me="_detailItem_198yg_315",Le="_imdbLink_198yg_333",Pe="_heroSkeleton_198yg_343",$e="_skeletonBanner_198yg_347",Ge="_skeletonContent_198yg_354",xe="_skeletonPoster_198yg_365",Oe="_skeletonInfo_198yg_373",Ae="_skeletonTitle_198yg_380",Ve="_skeletonMeta_198yg_388",We="_skeletonDesc_198yg_396",ze="_skeletonActions_198yg_404",Re="_errorState_198yg_413",qe="_matureOverlay_198yg_434",Ee="_matureContent_198yg_444",n={container:Y,heroSection:Z,bannerContainer:ee,banner:ne,bannerOverlay:te,heroContent:se,posterContainer:ae,poster:oe,infoGlass:ie,title:re,quickMeta:le,metaItem:ce,iconStar:de,iconTv:me,iconType:_e,genres:he,genre:ge,metaRow:ve,metaValue:pe,metaDivider:ue,synopsisSection:ye,sectionTitleSmall:ke,synopsis:be,actions:Ne,watchBtn:Se,watchlistBtn:fe,active:Ce,seasonPickerLabel:Te,seasonSelect:we,detailsToggleBtn:Ie,expandedContent:Be,detailGrid:De,detailItem:Me,imdbLink:Le,heroSkeleton:Pe,skeletonBanner:$e,skeletonContent:Ge,skeletonPoster:xe,skeletonInfo:Oe,skeletonTitle:Ae,skeletonMeta:Ve,skeletonDesc:We,skeletonActions:ze,errorState:Re,matureOverlay:qe,matureContent:Ee};function Qe(){const{id:o}=R(),c=q(),[B]=E(),i=j(B.get("type")),{hasConsent:D}=U(),[t,M]=l(null),[L,_]=l(!0),[u,y]=l(""),[d,P]=l(!1),[h,$]=l(1),G=H(i,o??""),x=Number(o),{data:O}=Q(t?G:void 0),g=!!O?.inLibrary,{toggle:A}=X();C(()=>{o&&(_(!0),y(""),J.tv.details.query({type:i,id:String(o)}).then(s=>{const m={id:s.id,title:s.title||"",overview:s.overview||"",vote_average:s.vote_average,year:s.year,poster:s.poster,backdrop:s.backdrop,imdb_id:s.imdb_id||void 0,adult:s.adult,seasons:s.seasons?.map(z=>({...z,name:""})),number_of_seasons:s.number_of_seasons};M(m),_(!1)}).catch(s=>{y(s.message),_(!1)}))},[o,i]),C(()=>{document.title=t?.title?`${t.title} - dango`:"TV & Movies - dango"},[t?.title]);const V=()=>{!o||!t||c(r?I(i,o):I(i,o,h,1))},W=()=>{t&&A({tmdbId:x,mediaType:i,title:t.title,poster:t.poster,year:t.year,adult:t.adult})},r=i==="movie",v=!r,k=t?.backdrop?`https://image.tmdb.org/t/p/w1280${t.backdrop}`:"",b=t?.poster?`https://image.tmdb.org/t/p/w500${t.poster}`:"",N=T(()=>t?.genres?t.genres.map(s=>s.name).slice(0,5):[],[t?.genres]),S=T(()=>t?.seasons?t.seasons.filter(s=>s.season_number>0):[],[t?.seasons]),p=[t?.year,t?.status,v&&t?.number_of_seasons?`${t.number_of_seasons} Season${t.number_of_seasons>1?"s":""}`:null,v&&t?.number_of_episodes?`${t.number_of_episodes} Episodes`:null].filter(Boolean);if(L)return e("div",{className:n.container,children:e("div",{className:n.heroSkeleton,children:[e("div",{className:n.skeletonBanner}),e("div",{className:n.skeletonContent,children:[e("div",{className:n.skeletonPoster}),e("div",{className:n.skeletonInfo,children:[e("div",{className:n.skeletonTitle}),e("div",{className:n.skeletonMeta}),e("div",{className:n.skeletonDesc}),e("div",{className:n.skeletonActions})]})]})]})});if(u||!t)return e("div",{className:n.container,children:e("div",{className:n.errorState,children:[e(a,{name:"exclamation-triangle",size:48}),e("h2",{children:"Failed to load details"}),e("p",{children:u||"Something went wrong"}),e(w,{onClick:()=>c(-1),children:"Go Back"})]})});const f=t.adult&&!D;return e("div",{className:n.container,style:f?{filter:"blur(14px)",pointerEvents:"none",userSelect:"none"}:void 0,children:[e("div",{className:n.heroSection,children:[e("div",{className:n.bannerContainer,children:[k&&e("div",{className:n.banner,style:{backgroundImage:`url(${k})`}}),e("div",{className:n.bannerOverlay})]}),e("div",{className:n.heroContent,children:[e("div",{className:n.posterContainer,children:b&&e(K,{src:b,alt:t.title,className:n.poster,decoding:"async"})}),e("div",{className:n.infoGlass,children:[e("div",{children:[e("h1",{className:n.title,children:t.title}),e("div",{className:n.quickMeta,children:[t.vote_average!=null&&t.vote_average>0&&e("div",{className:n.metaItem,children:[e(a,{name:"star",className:n.iconStar}),e("span",{children:Number(t.vote_average).toFixed(1)})]}),e("div",{className:n.metaItem,children:[e(a,{name:"tv",className:n.iconTv}),e("span",{children:r?"Movie":"TV Show"})]}),t.vote_count!=null&&e("div",{className:n.metaItem,children:[e(a,{name:"users",className:n.iconType}),e("span",{children:[t.vote_count.toLocaleString()," votes"]})]})]}),N.length>0&&e("div",{className:n.genres,children:N.map(s=>e("span",{className:n.genre,children:s},s))})]}),p.length>0&&e("div",{className:n.metaRow,children:p.map((s,m)=>e(F.Fragment,{children:[e("span",{className:n.metaValue,children:s}),m<p.length-1&&e("span",{className:n.metaDivider,children:"·"})]},m))}),t.overview&&e("div",{className:n.synopsisSection,children:[e("h2",{className:n.sectionTitleSmall,children:"Synopsis"}),e("p",{className:n.synopsis,children:t.overview})]}),e("div",{className:n.actions,children:[e("button",{className:n.watchBtn,onClick:V,children:[e(a,{name:"play",size:14}),r?"Watch Now":`Start S${h}`]}),e("button",{className:`${n.watchlistBtn} ${g?n.active:""}`,onClick:W,children:[g?e(a,{name:"check",size:14}):e(a,{name:"plus",size:14}),g?"In Watchlist":"Add to Watchlist"]})]}),v&&S.length>1&&e("label",{className:n.seasonPickerLabel,children:[e("span",{children:"Season"}),e("select",{value:h,onChange:s=>$(parseInt(s.currentTarget.value,10)||1),className:n.seasonSelect,children:S.map(s=>e("option",{value:s.season_number,children:["Season ",s.season_number," (",s.episode_count," Episodes)"]},s.season_number))})]}),e("button",{className:n.detailsToggleBtn,onClick:()=>P(!d),children:[d?e(a,{name:"chevron-up"}):e(a,{name:"chevron-down"}),d?"Hide Details":"Show Details"]}),d&&e("div",{className:n.expandedContent,children:e("div",{className:n.detailGrid,children:[t.first_air_date&&e("div",{className:n.detailItem,children:[e("strong",{children:r?"Release Date":"First Air Date"}),e("span",{children:t.first_air_date})]}),t.last_air_date&&e("div",{className:n.detailItem,children:[e("strong",{children:"Last Air Date"}),e("span",{children:t.last_air_date})]}),t.networks&&t.networks.length>0&&e("div",{className:n.detailItem,children:[e("strong",{children:"Networks"}),e("span",{children:t.networks.map(s=>s.name).join(", ")})]}),t.created_by&&t.created_by.length>0&&e("div",{className:n.detailItem,children:[e("strong",{children:"Created By"}),e("span",{children:t.created_by.map(s=>s.name).join(", ")})]}),t.episode_run_time&&t.episode_run_time.length>0&&e("div",{className:n.detailItem,children:[e("strong",{children:"Episode Runtime"}),e("span",{children:[t.episode_run_time[0]," min"]})]}),t.imdb_id&&e("div",{className:n.detailItem,children:[e("strong",{children:"IMDb"}),e("a",{href:`https://www.imdb.com/title/${t.imdb_id}`,target:"_blank",rel:"noopener noreferrer",className:n.imdbLink,children:"View on IMDb"})]})]})})]})]})]}),f&&e("div",{className:n.matureOverlay,children:e("div",{className:n.matureContent,children:[e(a,{name:"exclamation-triangle",size:48}),e("h2",{children:"Content Warning"}),e("p",{children:"This content may contain mature themes."}),e(w,{onClick:()=>c("/"),children:"Go Back"})]})})]})}export{Qe as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as n,h as b,T as k,u as T}from"./vendor-core-DfaOB3Rn.js";import{ak as _,t as m,k as w,i as I,l as P}from"./index-
|
|
1
|
+
import{d as n,h as b,T as k,u as T}from"./vendor-core-DfaOB3Rn.js";import{ak as _,t as m,k as w,i as I,l as P}from"./index-BYGDqzEf.js";import{d as D}from"./useTvLibrary-Dec7yfKF.js";import{a as W}from"./MediaCard-Czkyxqgb.js";const S=({item:e,anchorRect:l,onMouseEnter:i,onMouseLeave:c,onRequestClose:p})=>{const[a,u]=n(null),[d,r]=n(!0),{toggle:v,bookmarkedIds:g}=D(),y=_(e.type,e.id),f=g.has(y);b(()=>{let o=!1;return r(!0),m.tv.details.query({type:e.type,id:String(e.id)}).then(s=>{o||(u({overview:s.overview,vote_average:s.vote_average,number_of_seasons:s.number_of_seasons}),r(!1))}).catch(()=>{o||r(!1)}),()=>{o=!0}},[e.id,e.type]);const h=k(()=>a?.genres?a.genres.slice(0,4).map(o=>o.name):[],[a?.genres]),t=[];return a?.vote_average!=null&&a.vote_average>0&&t.push({icon:"star",label:Number(a.vote_average).toFixed(1),accent:!0}),t.push({icon:"tv",label:e.type==="tv"?"TV Show":"Movie"}),e.year&&t.push({label:e.year}),a?.status&&t.push({label:a.status}),T(W,{anchorRect:l,title:e.title,loading:d,meta:t,genres:h,synopsis:P(a?.overview,200),primaryAction:{to:I(e.type,e.id),label:"Watch now",icon:"play"},secondaryAction:{to:w(e.type,e.id),label:"Details",icon:"info-circle"},bookmarked:f,onToggleBookmark:()=>v({tmdbId:e.id,mediaType:e.type,title:e.title,poster:e.image,year:e.year}),onMouseEnter:i,onMouseLeave:c,onRequestClose:p})};export{S as T};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{h as I,p as ae,A as re,d as o,T as Y,q as M,u as t}from"./vendor-core-DfaOB3Rn.js";import{I as h}from"./vendor-icons-DrybRNxP.js";import{P as D}from"./MediaCard-
|
|
1
|
+
import{h as I,p as ae,A as re,d as o,T as Y,q as M,u as t}from"./vendor-core-DfaOB3Rn.js";import{I as h}from"./vendor-icons-DrybRNxP.js";import{P as D}from"./MediaCard-Czkyxqgb.js";import{a as ne,T as se}from"./useTv-CDh-n25T.js";import{S as le}from"./SkeletonGrid-B2s8ytI8.js";import{u as ie,T as W,M as Q,aa as oe,B as x}from"./index-BYGDqzEf.js";import{E as ce}from"./ErrorMessage-DAxegITP.js";import{s as r}from"./Search.module-C_qwCdHS.js";import"./vendor-ui-3qrARCPr.js";import"./useIsMobile-Dvx1uJ82.js";import"./MatureConsentModal-BhpY2wdn.js";import"./TvPopup-DnwmyRRE.js";import"./useTvLibrary-Dec7yfKF.js";import"./vendor-query-BBT5_sHx.js";import"./libraryInvalidation-CHW51Kbi.js";const de=[{value:"multi",label:"All"},{value:"tv",label:"TV Shows"},{value:"movie",label:"Movies"}],ue=[{value:"popularity.desc",label:"Popularity"},{value:"vote_average.desc",label:"Top Rated"},{value:"primary_release_date.desc",label:"Newest"},{value:"primary_release_date.asc",label:"Oldest"},{value:"vote_count.desc",label:"Most Voted"}],O=new Date().getFullYear(),me=[{value:"ALL",label:"All Years"},...Array.from({length:O-1980+1},(l,m)=>({value:String(O-m),label:String(O-m)}))];function _e(){I(()=>{document.title="Search TV & Movies - dango"},[]);const[l,m]=ae(),{lowEndMode:K}=ie(),C=re(null),[g,H]=o(l.get("q")||""),[p,U]=o(l.get("q")||""),[u,v]=o(parseInt(l.get("page")||"1",10)||1),[i,J]=o(l.get("type")||"multi"),[$,k]=o(l.get("genre")||""),[y,B]=o(l.get("year")||"ALL"),[f,E]=o(l.get("sort_by")||"popularity.desc"),[b,X]=o(!1),[c,N]=o(()=>{const e={},a=l.get("genre")||"";return a&&(e[a]="include"),e}),P=Y(()=>{if(i==="tv")return Object.entries(W).map(([a,n])=>({id:a,name:n}));if(i==="movie")return Object.entries(Q).map(([a,n])=>({id:a,name:n}));const e=new Map;for(const[a,n]of Object.entries(W))e.set(a,n);for(const[a,n]of Object.entries(Q))e.set(a,n);return Array.from(e.entries()).map(([a,n])=>({id:a,name:n}))},[i]),S=Y(()=>Object.entries(c).filter(([,a])=>a==="include").map(([a])=>a).join(","),[c]),{data:L,isLoading:w,isError:Z,error:ee}=ne({query:p,type:i,genre:S,year:y,sort_by:f,page:u}),T=L?.results||[],_=L?.total_pages||0,j=L?.total_results||0,R=u<Math.min(_,500),d=M((e={})=>{const a=new URLSearchParams,n=e.q!==void 0?e.q:p,s=e.type!==void 0?e.type:i,G=e.year!==void 0?e.year:y,V=e.sort!==void 0?e.sort:f,F=e.page!==void 0?e.page:String(u),z=e.genre!==void 0?e.genre:S;n.trim()&&a.set("q",n.trim()),s!=="multi"&&a.set("type",s),z&&a.set("genre",z),G!=="ALL"&&a.set("year",G),V!=="popularity.desc"&&a.set("sort_by",V),F!=="1"&&a.set("page",F),m(a,{replace:!0})},[p,i,y,f,u,S,m]),A=M(()=>{oe(),v(1),U(g),d({q:g,page:"1"}),window.scrollTo({top:0,behavior:"smooth"})},[g,d]),q=M(e=>{if(v(e),d({page:String(e)}),C.current){const a=C.current.getBoundingClientRect().top+window.scrollY-100;window.scrollTo({top:a,behavior:"smooth"})}},[d]),te=M(e=>{N(a=>{const n=a[e],s={...a};return n==="include"?s[e]="exclude":n==="exclude"?delete s[e]:s[e]="include",s}),v(1)},[]);return I(()=>{const a=Object.entries(c).filter(([,n])=>n==="include").map(([n])=>n).join(",");a!==$&&(k(a),d({genre:a,page:"1"}))},[c,$,k,d]),t("div",{className:"page-container",children:[t("div",{className:r.header,children:[t("h1",{className:r.pageTitle,children:"Search TV & Movies"}),t("p",{className:r.pageSubtitle,children:"Discover trending shows, movies, and more powered by TMDB"})]}),t("div",{className:r.filterContainer,children:[t("div",{className:r.searchBarWrapper,children:[t("div",{className:r.inputIconWrapper,children:[t(h,{name:"search",className:r.searchIcon}),t("input",{type:"text","data-virtual-keyboard":"true",className:r.searchInput,placeholder:"Search titles...",value:g,onInput:e=>H(e.currentTarget.value),onKeyDown:e=>e.key==="Enter"&&A()})]}),t("div",{className:r.searchActions,children:[t("select",{value:i,onChange:e=>{J(e.currentTarget.value),N({})},className:r.providerSelect,"aria-label":"Media type",children:de.map(e=>t("option",{value:e.value,children:e.label},e.value))}),t(x,{onClick:A,className:r.searchBtn,children:"Search"}),t("button",{className:`${r.filterToggleBtn} ${b?r.active:""}`,onClick:()=>X(!b),children:[t(h,{name:"filter",size:14}),t("span",{children:"Filters"}),b?t(h,{name:"chevron-up",size:12}):t(h,{name:"chevron-down",size:12})]})]})]}),t("div",{className:`${r.advancedFilters} ${b?r.show:""}`,children:[t("div",{className:r.filterDivider}),t("div",{className:r.filterGrid,children:[t("div",{className:r.filterItem,children:[t("label",{children:"Sort By"}),t("select",{value:f,onChange:e=>E(e.currentTarget.value),children:ue.map(e=>t("option",{value:e.value,children:e.label},e.value))})]}),t("div",{className:r.filterItem,children:[t("label",{children:"Year"}),t("select",{value:y,onChange:e=>B(e.currentTarget.value),children:me.map(e=>t("option",{value:e.value,children:e.label},e.value))})]})]}),P.length>0&&t("div",{className:r.genreSection,children:[t("label",{className:r.genreLabel,children:"Genres"}),t("div",{className:r.genreContainer,children:P.map(e=>t("button",{className:`${r.genreButton} ${r[c[e.id]||""]}`,onClick:()=>te(e.id),children:e.name},e.id))})]}),t("div",{className:r.filterActions,children:[t(x,{variant:"secondary",onClick:()=>{N({}),B("ALL"),E("popularity.desc"),v(1),d({genre:"",year:"ALL",sort:"popularity.desc",page:"1"})},children:"Reset All"}),t(x,{onClick:A,className:r.searchBtn,children:"Apply Filters"})]})]})]}),Z&&t(ce,{message:ee?.message||"Search failed"}),Object.keys(c).length>0&&t("div",{style:{display:"flex",flexWrap:"wrap",gap:"8px",marginBottom:"1.5rem"},children:[t("span",{style:{fontSize:"0.8rem",color:"var(--text-muted)",fontWeight:600},children:"Active Filters:"}),Object.entries(c).map(([e,a])=>{const n=P.find(s=>s.id===e)?.name||e;return t("span",{className:`badge ${a==="include"?"badge-primary":"badge-danger"}`,style:{display:"inline-flex",alignItems:"center",gap:"6px"},children:[a==="include"?`+ ${n}`:`- ${n}`,t("button",{onClick:()=>{const s={...c};delete s[e],N(s)},style:{background:"none",border:"none",color:"inherit",cursor:"pointer"},children:"✕"})]},e)})]}),t("div",{className:r.resultsHeader,ref:C,children:[t("h2",{className:r.resultsTitle,children:[p?`Results for "${p}"`:S?"Browsing genres":i==="tv"?"Popular TV Shows":i==="movie"?"Popular Movies":"Trending",j>0&&t("span",{style:{fontWeight:400,color:"var(--text-tertiary)",fontSize:"0.85em",marginLeft:"0.5em"},children:["(",j.toLocaleString(),")"]})]}),T.length>0&&t(D,{page:u,totalPages:Math.max(1,Math.min(_,500)),canGoNext:R,onChange:q,isLoading:w})]}),t("div",{className:`${r.resultsGrid} ${K?r.lowEnd:""}`,children:w?t(le,{}):T.map(e=>t(se,{item:{id:e.id,title:e.title,year:e.year,type:e.type,image:e.image,vote_average:e.vote_average,adult:e.adult}},`${e.type}-${e.id}`))}),!w&&T.length===0&&t("div",{className:r.noResults,children:[t(h,{name:"search",size:48,className:r.noResultsIcon}),t("h3",{children:"No results found"}),t("p",{children:"Try adjusting your search or filters to find what you're looking for."})]}),T.length>0&&t("div",{className:r.bottomPagination,children:t(D,{page:u,totalPages:Math.max(1,Math.min(_,500)),canGoNext:R,onChange:q,isLoading:w,variant:"labeled"})})]})}export{_e as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as $,d as f,h as L,T as U,u as d}from"./vendor-core-DfaOB3Rn.js";import{M as x}from"./MediaCard-
|
|
1
|
+
import{o as $,d as f,h as L,T as U,u as d}from"./vendor-core-DfaOB3Rn.js";import{M as x}from"./MediaCard-Czkyxqgb.js";import{L as F}from"./LibraryListPage-DhsV2n64.js";import{R as N}from"./ResetProgressModal-Cx1SaMad.js";import{T as _}from"./TvPopup-DnwmyRRE.js";import{i as y,h as u,j as R}from"./index-BYGDqzEf.js";import{j,u as K,a as O,b as Q,f as Y,k as q,l as z,m as G,T as I}from"./useTvLibrary-Dec7yfKF.js";import"./vendor-icons-DrybRNxP.js";import"./vendor-ui-3qrARCPr.js";import"./useIsMobile-Dvx1uJ82.js";import"./MatureConsentModal-BhpY2wdn.js";import"./SkeletonGrid-B2s8ytI8.js";import"./ErrorMessage-DAxegITP.js";import"./LibraryListPage.module-r6k9nyT9.js";import"./vendor-query-BBT5_sHx.js";import"./libraryInvalidation-CHW51Kbi.js";const Z=["All","Continue Watching",...I],S=24;function ct(){const{filter:l="All"}=$(),[c,m]=f(1),[s,v]=f(null);L(()=>{document.title="TV Watchlist - dango"},[]),L(()=>{m(1)},[l]);const o=l==="Continue Watching",r=j(o?"All":l,c,S),i=K(100),T=O(),P=Q(),k=Y(),w=q(),C=z(),B=G(),M=U(()=>o?(i.data?.data??[]).map(t=>{const a=t.currentTime??0,e=t.duration??0,g=t.season??1,h=t.episode??1,n=t.mediaType==="movie",p=n?"Movie":`S${g} E${h}`,b=t.completed===1||e>0&&a>=e*.8;return{key:t.id,libId:t.id,tmdbId:t.tmdbId??0,mediaType:t.mediaType,title:t.title||"",poster:t.poster||"",year:t.year,adult:R({adult:t.adult===1}),status:t.watchlistStatus??"",badge:p,progressPercent:b?100:e>0?a/e*100:0,progressLabel:e>0?b?"Watched":n?`${u(a)} / ${u(e)}`:`${p} · ${u(a)} / ${u(e)}`:p,watchTarget:y(t.mediaType,t.tmdbId??0,n?void 0:g,n?void 0:h)}}):(r.data?.data??[]).map(t=>({key:t.id,libId:t.id,tmdbId:t.tmdbId,mediaType:t.mediaType,title:t.title,poster:t.poster||"",year:t.year,adult:R({adult:t.adult===1}),status:t.status,badge:t.lastSeason&&t.lastEpisode?`S${t.lastSeason} E${t.lastEpisode}`:void 0,progressPercent:void 0,progressLabel:void 0,watchTarget:y(t.mediaType,t.tmdbId,t.lastSeason??void 0,t.lastEpisode??void 0)})),[o,i.data,r.data]),W=o?i.data?.total??0:r.data?.total??0,E=o?i.isLoading:r.isLoading,A=o?i.error:r.error,V=t=>{s&&(P.mutate({mediaId:s.libId}),t&&T.mutate(s.libId))};return d(F,{headerTitle:"My TV Watchlist",headerSubtitle:"Track and manage your movies and shows",filters:Z,filterBy:l,filterBasePath:"/tv-watchlist",continueFilter:"Continue Watching",statusOptions:[...I],entries:M,total:W,isLoading:E,error:A,page:c,pageSize:S,onPageChange:m,emptyTitle:"Your TV watchlist is looking a bit empty",emptyFilteredText:"No titles match this filter.",emptyAllText:"Let's find something to watch!",browseLabel:"Browse TV & Movies",browseTarget:"/tv",removeListLabel:"Remove from TV Watchlist",listNoun:"TV watchlist",skipConfirmKey:"tvSkipRemoveConfirmation",onBulkStatus:(t,a)=>w.mutate({ids:t,status:a}),onBulkRemove:t=>{o?B.mutate(t):C.mutate(t)},onStatusChange:(t,a)=>k.mutate({id:t,status:a}),onRemoveItem:t=>T.mutate(t),renderCard:t=>d(x,{item:{id:t.libId,title:t.title,thumbnail:t.poster,typeBadge:t.mediaType==="movie"?"Movie":"TV",chapterBadge:t.badge??null,isAdult:t.adult},linkTo:t.watchTarget,hoverIcon:"play",progress:t.progressPercent!==void 0&&t.progressLabel?{percent:t.progressPercent,label:t.progressLabel}:void 0,showProgress:o,metaRow:t.year?d("span",{style:{opacity:.75},children:t.year}):void 0,onRemove:o?()=>v(t):void 0,renderPopup:(a,e)=>d(_,{item:{id:t.tmdbId??0,title:t.title||"",year:t.year||"",type:t.mediaType||"tv",image:t.poster||""},anchorRect:a,onMouseEnter:e.onMouseEnter,onMouseLeave:e.onMouseLeave,onRequestClose:e.close})}),modals:d(N,{isOpen:!!s,itemName:s?.title,progressKind:"watch",listLabel:"my TV watchlist",onClose:()=>{v(null)},onConfirm:V})})}export{ct as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as w,A as E,h as v,q as N,$ as D,u as o}from"./vendor-core-DfaOB3Rn.js";import{p as x}from"./index-
|
|
1
|
+
import{d as w,A as E,h as v,q as N,$ as D,u as o}from"./vendor-core-DfaOB3Rn.js";import{p as x}from"./index-BYGDqzEf.js";import"./vendor-query-BBT5_sHx.js";import"./vendor-icons-DrybRNxP.js";const O="_keyboard_1l8yf_1",R="_small_1l8yf_18",T="_medium_1l8yf_25",q="_large_1l8yf_32",U="_topBar_1l8yf_39",V="_dragHandle_1l8yf_48",W="_grip_1l8yf_59",X="_topButton_1l8yf_67",Y="_key_1l8yf_1",j="_closeButton_1l8yf_98",A="_keys_1l8yf_104",F="_row_1l8yf_111",J="_wideKey_1l8yf_132",P="_spaceKey_1l8yf_136",G="_spaceIcon_1l8yf_144",Q="_activeKey_1l8yf_153",t={keyboard:O,small:R,medium:T,large:q,topBar:U,dragHandle:V,grip:W,topButton:X,key:Y,closeButton:j,keys:A,row:F,wideKey:J,spaceKey:P,spaceIcon:G,activeKey:Q},$="virtual-keyboard-state",b=["small","medium","large"],Z=["1","2","3","4","5","6","7","8","9","0"],ee=["!","@","#","$","%","^","&","*","(",")"],te=[["q","w","e","r","t","y","u","i","o","p"],["a","s","d","f","g","h","j","k","l"],["z","x","c","v","b","n","m"]],ne=()=>{const i={position:{x:Math.max(12,window.innerWidth-690),y:Math.max(90,window.innerHeight-330)},size:"medium"};try{const c=x.getItem($);if(!c)return i;const s=JSON.parse(c);return{position:s.position&&Number.isFinite(s.position.x)&&Number.isFinite(s.position.y)?s.position:i.position,size:s.size&&b.includes(s.size)?s.size:i.size}}catch{return i}},K=(i,c)=>{const s=c?.offsetWidth??650,r=c?.offsetHeight??270;return{x:Math.min(Math.max(8,i.x),Math.max(8,window.innerWidth-s-8)),y:Math.min(Math.max(8,i.y),Math.max(8,window.innerHeight-r-8))}};function re({activeInputRef:i,isVisible:c,onClose:s}){const[{position:r,size:l},h]=w(ne),[k,z]=w(!1),[g,S]=w(!1),f=E(null),u=E(null);v(()=>{x.setItem($,JSON.stringify({position:r,size:l}))},[r,l]),v(()=>{const e=()=>{h(n=>({...n,position:K(n.position,f.current)}))};return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]);const _=()=>i.current&&document.contains(i.current)?i.current:document.activeElement instanceof HTMLInputElement?document.activeElement:null,d=e=>{const n=_();if(!n)return;const a=n.selectionStart??n.value.length,p=n.selectionEnd??n.value.length;n.setRangeText(e,a,p,"end"),n.dispatchEvent(new Event("input",{bubbles:!0})),n.focus()},M=()=>{const e=_();if(!e)return;const n=e.selectionStart??e.value.length,a=e.selectionEnd??e.value.length;n===a&&n===0||(e.setRangeText("",n===a?n-1:n,a,"end"),e.dispatchEvent(new Event("input",{bubbles:!0})),e.focus())},B=()=>{const e=_();if(!e){s();return}const n=e.form;n?n.requestSubmit():e.dispatchEvent(new KeyboardEvent("keydown",{key:"Enter",bubbles:!0})),s()},C=e=>{e.preventDefault()},y=N(e=>{if(!u.current)return;const n={x:e.clientX-u.current.x,y:e.clientY-u.current.y};h(a=>({...a,position:K(n,f.current)}))},[]),m=N(()=>{u.current=null,window.removeEventListener("mousemove",y),window.removeEventListener("mouseup",m)},[y]),L=e=>{e.preventDefault(),u.current={x:e.clientX-r.x,y:e.clientY-r.y},window.addEventListener("mousemove",y),window.addEventListener("mouseup",m)};if(v(()=>()=>{window.removeEventListener("mousemove",y),window.removeEventListener("mouseup",m)},[y,m]),!c)return null;const H=g?ee:Z,I=()=>{h(e=>{const n=b[(b.indexOf(e.size)+1)%b.length];return{...e,size:n}})};return D(o("div",{ref:f,className:`${t.keyboard} ${t[l]}`,style:{left:r.x,top:r.y},onMouseDown:C,"data-virtual-keyboard-root":!0,children:[o("div",{className:t.topBar,children:[o("div",{className:t.dragHandle,onMouseDown:L,"aria-label":"Move virtual keyboard",children:[o("span",{className:t.grip,"aria-hidden":"true"}),o("span",{children:"Virtual Keyboard"})]}),o("button",{type:"button",className:t.topButton,onClick:I,children:["Size: ",l[0].toUpperCase()+l.slice(1)]}),o("button",{type:"button",className:`${t.topButton} ${t.closeButton}`,onClick:s,children:"X"})]}),o("div",{className:t.keys,children:[o("div",{className:t.row,children:[H.map(e=>o("button",{type:"button",className:t.key,onClick:()=>d(e),children:e},e)),o("button",{type:"button",className:`${t.key} ${t.wideKey}`,onClick:M,"aria-label":"Backspace",children:"⟵"})]}),te.map((e,n)=>o("div",{className:t.row,children:[e.map(a=>{const p=k?a.toUpperCase():a;return o("button",{type:"button",className:t.key,onClick:()=>d(p),children:p},a)}),n===1&&o("button",{type:"button",className:`${t.key} ${t.wideKey}`,onClick:B,children:"Enter"})]},e.join(""))),o("div",{className:t.row,children:[o("button",{type:"button",className:`${t.key} ${t.wideKey} ${g?t.activeKey:""}`,onClick:()=>S(e=>!e),children:"Ctrl"}),o("button",{type:"button",className:`${t.key} ${t.wideKey} ${k?t.activeKey:""}`,onClick:()=>z(e=>!e),children:"Shift"}),o("button",{type:"button",className:`${t.key} ${t.spaceKey}`,onClick:()=>d(" "),"aria-label":"Space",children:o("span",{className:t.spaceIcon})}),o("button",{type:"button",className:t.key,onClick:()=>d("."),children:"."}),o("button",{type:"button",className:t.key,onClick:()=>d("-"),children:"-"})]})]})]}),document.body)}export{re as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as h,d as s,u as e}from"./vendor-core-DfaOB3Rn.js";import{a6 as d,B as m}from"./index-
|
|
1
|
+
import{c as h,d as s,u as e}from"./vendor-core-DfaOB3Rn.js";import{a6 as d,B as m}from"./index-BYGDqzEf.js";import{W as u,s as p,a as g}from"./WatchAlongPanel-CxkbtjKg.js";import"./vendor-query-BBT5_sHx.js";import"./vendor-icons-DrybRNxP.js";function b(){const o=d(),c=h(),[t,l]=s(c.hash.slice(1)),[n,a]=s("");return e("div",{style:{maxWidth:640,margin:"2rem auto",padding:"0 1rem"},children:[e("h1",{children:"Watch along"}),e("p",{children:"Watch with friends across the internet. The host chooses the episode, provider, and source, and controls playback. Your dango streams your own video."}),o.session&&e(u,{}),!o.session&&e("form",{className:p.panel,onSubmit:r=>{r.preventDefault();try{o.join(t),a("")}catch(i){a(i instanceof Error?i.message:"Could not join room")}},children:[e(g,{}),e("label",{htmlFor:"watch-invite",children:"Invite link or room code"}),e("input",{id:"watch-invite",value:t,onChange:r=>l(r.currentTarget.value),required:!0,autoComplete:"off"}),e("p",{children:"Joining shares your connection and playback readiness with the room service. Start a room from an episode using a direct HLS source."}),e(m,{type:"submit",disabled:!o.workerUrl,style:{marginTop:"1rem"},children:"Join room"}),!o.workerUrl&&e("p",{children:"Watch along is unavailable. The server needs a watch-along service URL."}),n&&e("p",{role:"alert",children:n})]})]})}export{b as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as h,A as _,h as z,u as s,L as C}from"./vendor-core-DfaOB3Rn.js";import{a6 as g,B as r}from"./index-
|
|
1
|
+
import{d as h,A as _,h as z,u as s,L as C}from"./vendor-core-DfaOB3Rn.js";import{a6 as g,B as r}from"./index-BYGDqzEf.js";const N="_panel_ntzz0_1",b="_summary_ntzz0_10",k="_heading_ntzz0_20",x="_actions_ntzz0_21",T="_members_ntzz0_22",A="_name_ntzz0_29",o={panel:N,summary:b,heading:k,actions:x,members:T,name:A};function L(){const t=g();return s("label",{className:o.name,children:["Display name",s("input",{value:t.displayName,onChange:a=>t.setDisplayName(a.currentTarget.value),maxLength:32,placeholder:"Your name (optional)",autoComplete:"nickname"}),s("small",{children:"Remembered for this profile on this browser."})]})}function D({playback:t,onCreate:a,needsPlayback:l,onEnablePlayback:p}){const e=g(),[y,m]=h(!1),[d,i]=h(""),[v,f]=h(!1),c=_(null);z(()=>{c.current&&(e.session||l)&&(c.current.open=!0)},[e.session,l]);const u=e.session?`${e.workerUrl}/join#${e.session.id}.${e.session.guestToken}`:"";return s("details",{ref:c,className:o.panel,"aria-label":"Watch along",children:[s("summary",{className:o.summary,children:["Watch along",e.session?e.session.host?" · You are hosting":" · Following host":""]}),s("div",{className:o.heading,children:e.session?s("div",{className:o.actions,children:[s(r,{size:"sm",variant:"secondary",onClick:async()=>{f(!0);try{await navigator.clipboard.writeText(u),i("Invite copied")}catch{i("Copy the invite below")}},children:"Copy invite"}),s(r,{size:"sm",variant:"ghost",onClick:e.leave,children:e.session.host?"End room":"Leave room"})]}):s("div",{className:o.actions,children:[a&&s(r,{size:"sm",loading:y,disabled:!t||!e.workerUrl,onClick:async()=>{if(t){m(!0),i("");try{a(),await e.create({...t,playing:!1})}catch(n){i(n instanceof Error?n.message:"Could not create room")}finally{m(!1)}}},children:"Create room"}),s(C,{to:"/watch-along",children:"Join a room"})]})}),s(L,{}),!e.session&&s("p",{children:"Direct HLS only. Each viewer needs their own dango. Room controls use the shared watch-along service."}),e.session&&s("p",{children:[e.connected?e.room?.hostOnline?"Connected":"Host disconnected. Room closes after 60 seconds unless they reconnect":"Connecting…"," ","· Provider and source follow the host. Volume and subtitles stay yours."]}),e.room&&s("p",{children:[e.session?.host&&"End the room when you are finished watching. ","Rooms automatically close six hours after creation. This room expires at"," ",s("time",{dateTime:new Date(e.room.expiresAt).toISOString(),children:new Date(e.room.expiresAt).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}),", even if playback is still active."]}),e.room&&s("ul",{className:o.members,children:e.room.members.map((n,w)=>s("li",{children:[n.name||(n.host?"Host":`Guest ${w+1}`),n.name&&n.host?" (host)":"",n.id===e.selfId?" (you)":"",": ",n.status]},n.id))}),l&&s(r,{size:"sm",onClick:p,children:"Enable playback"}),v&&e.session&&s("input",{"aria-label":"Room invite",readOnly:!0,value:u,onFocus:n=>n.currentTarget.select()}),(e.error||d)&&s("p",{role:"status",children:e.error||d})]})}export{D as W,L as a,o as s};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{h as fe,o as He,a as Ze,p as Je,d as h,A as ye,T,u as t,S as Xe}from"./vendor-core-DfaOB3Rn.js";import{u as et,a as Se}from"./vendor-query-BBT5_sHx.js";import{o as tt,u as at,d as nt,G as st,H as _e,I as we,q as Ae,J as lt,t as rt,w as ct,K as it,L as ot,N as dt,O as ht,P as ut,B as W,Q as se}from"./index-DAZg1_S9.js";import{I as g}from"./vendor-icons-DrybRNxP.js";import{A as mt}from"./AnimeCard-CocG9qrm.js";import{S as pt}from"./SkeletonGrid-aY7UYKGV.js";import{E as gt}from"./ErrorMessage-DAxegITP.js";import{P as Le}from"./MediaCard-9IiRZpbk.js";import{s as n}from"./LibraryListPage.module-r6k9nyT9.js";import{A as vt}from"./ActiveFilterChips-olGfwxle.js";import"./useAnimeInfoData-Ba3HNec1.js";import"./QueueOptionsButton-C__t6z-U.js";import"./vendor-ui-3qrARCPr.js";import"./playbackCompletion-Del9VqoH.js";import"./useIsMobile-Dvx1uJ82.js";import"./MatureConsentModal-BHtqyO00.js";const ft=(d,v)=>{const l=new URLSearchParams(v);return l.delete("page"),l.sort(),`${d}|${l.toString()}`},yt=(d,v)=>{const l=new Set(d);return v.forEach(w=>l.add(w)),l},St=(d,v)=>{const l=new Set(d);return v.forEach(w=>l.delete(w)),l},_t="_sortSelect_cahhw_1",wt="_filterContainer_cahhw_30",At="_slideUpIn_cahhw_1",Lt="_searchBarWrapper_cahhw_44",Ct="_inputIconWrapper_cahhw_50",Nt="_searchIcon_cahhw_55",bt="_searchInput_cahhw_64",Bt="_searchActions_cahhw_84",kt="_searchBtn_cahhw_89",Rt="_filterToggleBtn_cahhw_94",Tt="_advancedFilters_cahhw_115",Wt="_show_cahhw_122",It="_filterDivider_cahhw_128",xt="_filterGrid_cahhw_134",Pt="_filterItem_cahhw_141",$t="_genreSection_cahhw_183",Ft="_genreLabel_cahhw_189",Gt="_genreContainer_cahhw_199",Ot="_genreButton_cahhw_205",Mt="_include_cahhw_222",Et="_exclude_cahhw_228",Dt="_filterActions_cahhw_235",zt="_applyBtn_cahhw_246",c={sortSelect:_t,filterContainer:wt,slideUpIn:At,searchBarWrapper:Lt,inputIconWrapper:Ct,searchIcon:Nt,searchInput:bt,searchActions:Bt,searchBtn:kt,filterToggleBtn:Rt,advancedFilters:Tt,show:Wt,filterDivider:It,filterGrid:xt,filterItem:Pt,genreSection:$t,genreLabel:Ft,genreContainer:Gt,genreButton:Ot,include:Mt,exclude:Et,filterActions:Dt,applyBtn:zt},Ne=["All","Continue Watching","Watching","Completed","On-Hold","Dropped","Planned"],Ce=Ne.slice(2),Ut=[{value:"ALL",label:"All Types"},{value:"TV",label:"TV Series"},{value:"Movie",label:"Movie"},{value:"OVA",label:"OVA"},{value:"ONA",label:"ONA"},{value:"TV_SHORT",label:"TV Short"},{value:"SPECIAL",label:"Special"},{value:"ADULT",label:"Adult (18+)"}],qt=[{value:"ALL",label:"All Seasons"},{value:"WINTER",label:"Winter"},{value:"SPRING",label:"Spring"},{value:"SUMMER",label:"Summer"},{value:"FALL",label:"Fall"}],ca=()=>{fe(()=>{document.title="Watchlist - dango"},[]);const{filter:d="All"}=He(),v=Ze(),[l,w]=Je(),Q=et(),le=tt(),[f,I]=h(parseInt(l.get("page")||"1")),[A,x]=h(l.get("query")||""),[L,V]=h(l.get("sortBy")||"last_added"),[C,P]=h(l.get("type")||"ALL"),[N,$]=h(l.get("season")||"ALL"),[b,F]=h(l.get("year")||"ALL"),[k,G]=h(()=>{const e={},a=l.get("genres")?.split(",").map(r=>r.trim()).filter(Boolean)||[],s=l.get("excludeGenres")?.split(",").map(r=>r.trim()).filter(Boolean)||[];return a.forEach(r=>r&&(e[r]="include")),s.forEach(r=>r&&(e[r]="exclude")),e}),[O,be]=h(()=>["type","season","year","genres","excludeGenres"].some(e=>l.has(e))),{lowEndMode:Be}=at(),{titlePreference:M}=nt(),{data:ke}=st(),re=ke?.genres||[],H=ye(null),[o,B]=h(null),[Z,E]=h(!1),[ce,D]=h(!1),[z,Re]=h(!1),[p,y]=h(new Set),J=ye(null),i=d==="Continue Watching",U=T(()=>{const e=new URLSearchParams(l);return e.delete("page"),e.set("titlePreference",M),e.toString()},[l,M]),{data:q,isLoading:Te,error:We}=_e(U,f,14),{data:Y,isLoading:Ie,error:xe}=we(d,U,f,14),{data:Pe}=_e(U,f+1,14),{data:$e}=we(d,U,f+1,14),X=T(()=>(i?q?.data:Y?.data)||[],[i,q,Y]),R=T(()=>(i?q?.total:Y?.total)||0,[i,q,Y]),j=i?Te:Ie,ie=i?We:xe,oe=i?Pe:$e;fe(()=>{x(l.get("query")||""),V(l.get("sortBy")||"last_added"),P(l.get("type")||"ALL"),$(l.get("season")||"ALL"),F(l.get("year")||"ALL");const e={},a=l.get("genres")?.split(",").map(u=>u.trim()).filter(Boolean)||[],s=l.get("excludeGenres")?.split(",").map(u=>u.trim()).filter(Boolean)||[];a.forEach(u=>u&&(e[u]="include")),s.forEach(u=>u&&(e[u]="exclude")),G(e),I(parseInt(l.get("page")||"1"));const r=ft(d,l);J.current!==null&&J.current!==r&&y(new Set),J.current=r},[l,d]);const Fe=Se({mutationFn:async({id:e,status:a})=>{await rt.watchlist.setStatus.mutate({id:e,status:a})},onSuccess:()=>{Q.invalidateQueries({queryKey:[Ae.watchlist]}),lt.success("Status updated")}}),Ge=Se(le.continueWatching.remove.mutationOptions({onSuccess:()=>{Q.invalidateQueries(le.continueWatching.pathFilter()),Q.invalidateQueries({queryKey:[Ae.continueWatching]})}})),ee=ct(),{data:de}=it("skipRemoveConfirmation"),Oe=ot(),te=T(()=>{const e=a=>a[M]||a.name||"";return[...X].sort((a,s)=>L==="name_asc"?e(a).localeCompare(e(s)):L==="name_desc"?e(s).localeCompare(e(a)):0)},[X,L,M]),ae=new Date().getFullYear(),Me=[{value:"ALL",label:"All Years"},...Array.from({length:ae-1980+1},(e,a)=>({value:String(ae-a),label:String(ae-a)}))],m=(e=L,a=1)=>{const s=new URLSearchParams;A.trim()&&s.set("query",A.trim()),e!=="last_added"&&s.set("sortBy",e),C!=="ALL"&&s.set("type",C),N!=="ALL"&&s.set("season",N),b!=="ALL"&&s.set("year",b);const r=Object.entries(k).filter(([,_])=>_==="include").map(([_])=>_),u=Object.entries(k).filter(([,_])=>_==="exclude").map(([_])=>_);r.length>0&&s.set("genres",r.join(",")),u.length>0&&s.set("excludeGenres",u.join(",")),a>1&&s.set("page",a.toString()),w(s),a!==f&&I(a)},he=e=>{if(m(L,e),H.current){const a=H.current.getBoundingClientRect().top+window.scrollY-100;window.scrollTo({top:a,behavior:"smooth"})}},Ee=()=>{x(""),V("last_added"),P("ALL"),$("ALL"),F("ALL"),G({}),w(new URLSearchParams),I(1)},De=e=>{G(a=>{const s=a[e],r={...a};return s==="include"?r[e]="exclude":s==="exclude"?delete r[e]:r[e]="include",r})},ue=(e,a)=>{if(i){B({id:e,name:a});return}String(de)==="true"||String(de)==="1"?ee.mutate({id:e}):B({id:e,name:a})},ze=()=>{if(o){if(o.ids){i?(Ue.mutate({ids:o.ids}),Z&&pe.mutate({ids:o.ids})):pe.mutate({ids:o.ids}),y(new Set),B(null),E(!1),D(!1);return}i?(Ge.mutate({showId:o.id}),Z&&ee.mutate({id:o.id})):ee.mutate({id:o.id}),ce&&Oe.mutate({key:"skipRemoveConfirmation",value:!0}),B(null),E(!1),D(!1)}},me=()=>{B(null),E(!1),D(!1)},pe=dt(),Ue=ht(),qe=ut(),Ye=()=>{Re(e=>{const a=!e;return a||y(new Set),a})},je=e=>{y(a=>{const s=new Set(a);return s.has(e)?s.delete(e):s.add(e),s})},K=te.map(e=>e.id),ne=K.length>0&&K.every(e=>p.has(e)),Ke=()=>{y(ne?e=>St(e,K):e=>yt(e,K))},Qe=e=>{p.size!==0&&(qe.mutate({ids:[...p],status:e}),y(new Set))},Ve=()=>{p.size!==0&&B({ids:[...p]})},ge=X.length>=14&&oe&&oe.data.length>0,ve=T(()=>Math.max(1,Math.ceil(R/14)),[R]),S=[];A.trim()&&S.push({key:"query",label:`Search: ${A}`,onRemove:()=>{x(""),m()}}),C!=="ALL"&&S.push({key:"type",label:`Type: ${C}`,onRemove:()=>{P("ALL"),m()}}),N!=="ALL"&&S.push({key:"season",label:`Season: ${N}`,onRemove:()=>{$("ALL"),m()}}),b!=="ALL"&&S.push({key:"year",label:`Year: ${b}`,onRemove:()=>{F("ALL"),m()}});for(const[e,a]of Object.entries(k))S.push({key:e,label:a==="include"?`+ ${e}`:`-${e}`,tone:a==="include"?"primary":"danger",onRemove:()=>{G(s=>{const r={...s};return delete r[e],r}),m()}});return t("div",{className:"page-container",children:[t("header",{className:n.header,children:[t("h2",{className:n.title,children:"My Watchlist"}),t("p",{className:n.subtitle,children:"Track and manage your anime collection"})]}),t("div",{className:n.controls,children:[t("div",{className:n.filters,children:Ne.map(e=>t("button",{className:`${n.filterBtn} ${d===e?n.active:""}`,onClick:()=>{const a=new URLSearchParams(l);a.delete("page"),v({pathname:`/watchlist/${e}`,search:a.toString()}),I(1)},children:e},e))}),t("div",{children:t("select",{className:c.sortSelect,value:L,onChange:e=>{const a=e.currentTarget.value;V(a),m(a,f)},children:[t("option",{value:"last_added",children:"Recently Added"}),t("option",{value:"name_asc",children:"Name (A-Z)"}),t("option",{value:"name_desc",children:"Name (Z-A)"})]})})]}),t("div",{className:c.filterContainer,children:[t("div",{className:c.searchBarWrapper,children:[t("div",{className:c.inputIconWrapper,children:[t(g,{name:"search",className:c.searchIcon}),t("input",{className:c.searchInput,placeholder:"Search your watchlist by title...",value:A,onInput:e=>x(e.currentTarget.value),onKeyDown:e=>e.key==="Enter"&&m()})]}),t("div",{className:c.searchActions,children:[t(W,{onClick:()=>m(),className:c.searchBtn,children:"Search"}),t("button",{className:`${c.filterToggleBtn} ${O?n.active:""}`,onClick:()=>be(!O),children:[t(g,{name:"filter",size:14}),t("span",{children:"Filters"}),O?t(g,{name:"chevron-up",size:12}):t(g,{name:"chevron-down",size:12})]})]})]}),t("div",{className:`${c.advancedFilters} ${O?c.show:""}`,children:[t("div",{className:c.filterDivider}),t("div",{className:c.filterGrid,children:[t("div",{className:c.filterItem,children:[t("label",{children:"Type"}),t("select",{value:C,onChange:e=>P(e.currentTarget.value),children:Ut.map(e=>t("option",{value:e.value,children:e.label},e.value))})]}),t("div",{className:c.filterItem,children:[t("label",{children:"Season"}),t("select",{value:N,onChange:e=>$(e.currentTarget.value),children:qt.map(e=>t("option",{value:e.value,children:e.label},e.value))})]}),t("div",{className:c.filterItem,children:[t("label",{children:"Year"}),t("select",{value:b,onChange:e=>F(e.currentTarget.value),children:Me.map(e=>t("option",{value:e.value,children:e.label},e.value))})]})]}),re.length>0&&t("div",{className:c.genreSection,children:[t("label",{className:c.genreLabel,children:"Genres"}),t("div",{className:c.genreContainer,children:re.map(e=>t("button",{className:`${c.genreButton} ${c[k[e]||""]}`,onClick:()=>De(e),children:e},e))})]}),t("div",{className:c.filterActions,children:[t(W,{variant:"secondary",onClick:Ee,children:"Reset All"}),t(W,{onClick:()=>m(),className:c.applyBtn,children:"Apply Filters"})]})]})]}),t("div",{className:n.resultsHeader,ref:H,children:[t("h3",{className:n.resultsTitle,children:[i?"Continue Watching":d,t("span",{className:n.itemCount,children:["(",R," items)"]})]}),t("div",{className:n.headerActions,children:[t("button",{className:`${n.manageBtn} ${z?n.active:""}`,onClick:Ye,children:[t(g,{name:"pencil-alt",size:13}),t("span",{children:"Bulk Manage"})]}),R>0&&t(Le,{page:f,totalPages:ve,canGoNext:ge,onChange:he,isLoading:j})]})]}),z&&t("div",{className:n.manageBar,children:[t("button",{className:n.selectAllBtn,onClick:Ke,children:[t("span",{className:`${n.selectAllBox} ${ne?n.selectAllBoxChecked:""}`,"aria-hidden":"true"}),t("span",{children:ne?"Clear Page":"Select All"})]}),t("span",{className:n.manageCount,children:[p.size," selected"]}),t("div",{className:n.manageSpacer}),!i&&t("select",{className:n.manageStatusSelect,value:"",onChange:e=>{e.currentTarget.value&&Qe(e.currentTarget.value)},disabled:p.size===0,title:"Set status for selected items",children:[t("option",{value:"",children:"Set status…"}),Ce.map(e=>t("option",{value:e,children:e},e))]}),t("button",{className:n.manageRemoveBtn,onClick:Ve,disabled:p.size===0,children:[t(g,{name:"trash",size:13}),t("span",{children:"Remove Selected"})]})]}),j?t(pt,{}):ie?t(gt,{message:ie.message}):t(Xe,{children:[S.length>0&&t(vt,{chips:S}),t("div",{className:`${n.grid} ${Be?n.lowEnd:""}`,children:te.map(e=>{const a=p.has(e.id);return t("div",{className:`${n.itemWrapper} ${a?n.selected:""}`,children:[z&&t("div",{className:n.selectOverlay,onClick:()=>je(e.id),title:a?"Deselect":"Select",children:t("span",{className:n.selectBadge,children:a?t(g,{name:"check",size:12}):null})}),t(mt,{anime:e,continueWatching:i,onRemove:()=>ue(e.id,e.name),layout:"vertical"}),!i&&!z&&t("div",{className:n.cardActions,children:[t("select",{className:n.statusSelect,value:e.status,onChange:s=>Fe.mutate({id:e.id,status:s.currentTarget.value}),children:Ce.map(s=>t("option",{value:s,children:s},s))}),t("button",{className:n.removeBtn,onClick:()=>ue(e.id,e.name),title:"Remove from Watchlist","aria-label":"Remove from Watchlist",children:t(g,{name:"trash",size:12})})]})]},e._id)})})]}),!j&&te.length===0&&t("div",{className:n.emptyState,children:[t("h3",{className:n.emptyTitle,children:"Your watchlist is looking a bit lonely"}),t("p",{className:n.emptyText,children:d!=="All"||A||C!=="ALL"||N!=="ALL"||b!=="ALL"||Object.keys(k).length>0?"No anime match these filters. Try adjusting them to see more titles.":"Let's find something to watch!"}),t("button",{className:n.emptyBtn,onClick:()=>v("/search"),children:[t(g,{name:"search",size:14}),t("span",{children:"Browse Anime"})]})]}),R>0&&t("div",{className:n.bottomPagination,children:t(Le,{page:f,totalPages:ve,canGoNext:ge,onChange:he,isLoading:j,variant:"labeled"})}),t(se,{isOpen:!!o,onClose:me,title:i?"Reset Progress":"Remove from Watchlist",children:[t(se.Body,{children:[t("p",{children:o?.ids&&o.ids.length>1?i?`Are you sure you want to remove watch progress for ${o.ids.length} items?`:`Are you sure you want to remove ${o.ids.length} items from your watchlist?`:i?`Are you sure you want to remove your watch progress for "${o?.name}"?`:`Are you sure you want to remove "${o?.name}" from your watchlist?`}),i&&t("label",{children:[t("input",{type:"checkbox",checked:Z,onChange:e=>E(e.currentTarget.checked)}),"Also remove from my watchlist"]}),!i&&!(o?.ids&&o.ids.length>1)&&t("label",{children:[t("input",{type:"checkbox",checked:ce,onChange:e=>D(e.currentTarget.checked)}),"Remember my choice"]})]}),t(se.Actions,{children:[t(W,{variant:"secondary",onClick:me,children:"No"}),t(W,{variant:"danger",onClick:ze,children:"Yes"})]})]})]})};export{ca as default};
|
|
1
|
+
import{h as fe,o as He,a as Ze,p as Je,d as h,A as ye,T,u as t,S as Xe}from"./vendor-core-DfaOB3Rn.js";import{u as et,a as Se}from"./vendor-query-BBT5_sHx.js";import{o as tt,u as at,d as nt,G as st,H as _e,I as we,q as Ae,J as lt,t as rt,w as ct,K as it,L as ot,N as dt,O as ht,P as ut,B as W,Q as se}from"./index-BYGDqzEf.js";import{I as g}from"./vendor-icons-DrybRNxP.js";import{A as mt}from"./AnimeCard-DV3CayVB.js";import{S as pt}from"./SkeletonGrid-B2s8ytI8.js";import{E as gt}from"./ErrorMessage-DAxegITP.js";import{P as Le}from"./MediaCard-Czkyxqgb.js";import{s as n}from"./LibraryListPage.module-r6k9nyT9.js";import{A as vt}from"./ActiveFilterChips-olGfwxle.js";import"./useAnimeInfoData-CZY3Ui-u.js";import"./QueueOptionsButton-C3ptca9g.js";import"./vendor-ui-3qrARCPr.js";import"./playbackCompletion-DrDOXJXe.js";import"./useIsMobile-Dvx1uJ82.js";import"./MatureConsentModal-BhpY2wdn.js";const ft=(d,v)=>{const l=new URLSearchParams(v);return l.delete("page"),l.sort(),`${d}|${l.toString()}`},yt=(d,v)=>{const l=new Set(d);return v.forEach(w=>l.add(w)),l},St=(d,v)=>{const l=new Set(d);return v.forEach(w=>l.delete(w)),l},_t="_sortSelect_cahhw_1",wt="_filterContainer_cahhw_30",At="_slideUpIn_cahhw_1",Lt="_searchBarWrapper_cahhw_44",Ct="_inputIconWrapper_cahhw_50",Nt="_searchIcon_cahhw_55",bt="_searchInput_cahhw_64",Bt="_searchActions_cahhw_84",kt="_searchBtn_cahhw_89",Rt="_filterToggleBtn_cahhw_94",Tt="_advancedFilters_cahhw_115",Wt="_show_cahhw_122",It="_filterDivider_cahhw_128",xt="_filterGrid_cahhw_134",Pt="_filterItem_cahhw_141",$t="_genreSection_cahhw_183",Ft="_genreLabel_cahhw_189",Gt="_genreContainer_cahhw_199",Ot="_genreButton_cahhw_205",Mt="_include_cahhw_222",Et="_exclude_cahhw_228",Dt="_filterActions_cahhw_235",zt="_applyBtn_cahhw_246",c={sortSelect:_t,filterContainer:wt,slideUpIn:At,searchBarWrapper:Lt,inputIconWrapper:Ct,searchIcon:Nt,searchInput:bt,searchActions:Bt,searchBtn:kt,filterToggleBtn:Rt,advancedFilters:Tt,show:Wt,filterDivider:It,filterGrid:xt,filterItem:Pt,genreSection:$t,genreLabel:Ft,genreContainer:Gt,genreButton:Ot,include:Mt,exclude:Et,filterActions:Dt,applyBtn:zt},Ne=["All","Continue Watching","Watching","Completed","On-Hold","Dropped","Planned"],Ce=Ne.slice(2),Ut=[{value:"ALL",label:"All Types"},{value:"TV",label:"TV Series"},{value:"Movie",label:"Movie"},{value:"OVA",label:"OVA"},{value:"ONA",label:"ONA"},{value:"TV_SHORT",label:"TV Short"},{value:"SPECIAL",label:"Special"},{value:"ADULT",label:"Adult (18+)"}],qt=[{value:"ALL",label:"All Seasons"},{value:"WINTER",label:"Winter"},{value:"SPRING",label:"Spring"},{value:"SUMMER",label:"Summer"},{value:"FALL",label:"Fall"}],ca=()=>{fe(()=>{document.title="Watchlist - dango"},[]);const{filter:d="All"}=He(),v=Ze(),[l,w]=Je(),Q=et(),le=tt(),[f,I]=h(parseInt(l.get("page")||"1")),[A,x]=h(l.get("query")||""),[L,V]=h(l.get("sortBy")||"last_added"),[C,P]=h(l.get("type")||"ALL"),[N,$]=h(l.get("season")||"ALL"),[b,F]=h(l.get("year")||"ALL"),[k,G]=h(()=>{const e={},a=l.get("genres")?.split(",").map(r=>r.trim()).filter(Boolean)||[],s=l.get("excludeGenres")?.split(",").map(r=>r.trim()).filter(Boolean)||[];return a.forEach(r=>r&&(e[r]="include")),s.forEach(r=>r&&(e[r]="exclude")),e}),[O,be]=h(()=>["type","season","year","genres","excludeGenres"].some(e=>l.has(e))),{lowEndMode:Be}=at(),{titlePreference:M}=nt(),{data:ke}=st(),re=ke?.genres||[],H=ye(null),[o,B]=h(null),[Z,E]=h(!1),[ce,D]=h(!1),[z,Re]=h(!1),[p,y]=h(new Set),J=ye(null),i=d==="Continue Watching",U=T(()=>{const e=new URLSearchParams(l);return e.delete("page"),e.set("titlePreference",M),e.toString()},[l,M]),{data:q,isLoading:Te,error:We}=_e(U,f,14),{data:Y,isLoading:Ie,error:xe}=we(d,U,f,14),{data:Pe}=_e(U,f+1,14),{data:$e}=we(d,U,f+1,14),X=T(()=>(i?q?.data:Y?.data)||[],[i,q,Y]),R=T(()=>(i?q?.total:Y?.total)||0,[i,q,Y]),j=i?Te:Ie,ie=i?We:xe,oe=i?Pe:$e;fe(()=>{x(l.get("query")||""),V(l.get("sortBy")||"last_added"),P(l.get("type")||"ALL"),$(l.get("season")||"ALL"),F(l.get("year")||"ALL");const e={},a=l.get("genres")?.split(",").map(u=>u.trim()).filter(Boolean)||[],s=l.get("excludeGenres")?.split(",").map(u=>u.trim()).filter(Boolean)||[];a.forEach(u=>u&&(e[u]="include")),s.forEach(u=>u&&(e[u]="exclude")),G(e),I(parseInt(l.get("page")||"1"));const r=ft(d,l);J.current!==null&&J.current!==r&&y(new Set),J.current=r},[l,d]);const Fe=Se({mutationFn:async({id:e,status:a})=>{await rt.watchlist.setStatus.mutate({id:e,status:a})},onSuccess:()=>{Q.invalidateQueries({queryKey:[Ae.watchlist]}),lt.success("Status updated")}}),Ge=Se(le.continueWatching.remove.mutationOptions({onSuccess:()=>{Q.invalidateQueries(le.continueWatching.pathFilter()),Q.invalidateQueries({queryKey:[Ae.continueWatching]})}})),ee=ct(),{data:de}=it("skipRemoveConfirmation"),Oe=ot(),te=T(()=>{const e=a=>a[M]||a.name||"";return[...X].sort((a,s)=>L==="name_asc"?e(a).localeCompare(e(s)):L==="name_desc"?e(s).localeCompare(e(a)):0)},[X,L,M]),ae=new Date().getFullYear(),Me=[{value:"ALL",label:"All Years"},...Array.from({length:ae-1980+1},(e,a)=>({value:String(ae-a),label:String(ae-a)}))],m=(e=L,a=1)=>{const s=new URLSearchParams;A.trim()&&s.set("query",A.trim()),e!=="last_added"&&s.set("sortBy",e),C!=="ALL"&&s.set("type",C),N!=="ALL"&&s.set("season",N),b!=="ALL"&&s.set("year",b);const r=Object.entries(k).filter(([,_])=>_==="include").map(([_])=>_),u=Object.entries(k).filter(([,_])=>_==="exclude").map(([_])=>_);r.length>0&&s.set("genres",r.join(",")),u.length>0&&s.set("excludeGenres",u.join(",")),a>1&&s.set("page",a.toString()),w(s),a!==f&&I(a)},he=e=>{if(m(L,e),H.current){const a=H.current.getBoundingClientRect().top+window.scrollY-100;window.scrollTo({top:a,behavior:"smooth"})}},Ee=()=>{x(""),V("last_added"),P("ALL"),$("ALL"),F("ALL"),G({}),w(new URLSearchParams),I(1)},De=e=>{G(a=>{const s=a[e],r={...a};return s==="include"?r[e]="exclude":s==="exclude"?delete r[e]:r[e]="include",r})},ue=(e,a)=>{if(i){B({id:e,name:a});return}String(de)==="true"||String(de)==="1"?ee.mutate({id:e}):B({id:e,name:a})},ze=()=>{if(o){if(o.ids){i?(Ue.mutate({ids:o.ids}),Z&&pe.mutate({ids:o.ids})):pe.mutate({ids:o.ids}),y(new Set),B(null),E(!1),D(!1);return}i?(Ge.mutate({showId:o.id}),Z&&ee.mutate({id:o.id})):ee.mutate({id:o.id}),ce&&Oe.mutate({key:"skipRemoveConfirmation",value:!0}),B(null),E(!1),D(!1)}},me=()=>{B(null),E(!1),D(!1)},pe=dt(),Ue=ht(),qe=ut(),Ye=()=>{Re(e=>{const a=!e;return a||y(new Set),a})},je=e=>{y(a=>{const s=new Set(a);return s.has(e)?s.delete(e):s.add(e),s})},K=te.map(e=>e.id),ne=K.length>0&&K.every(e=>p.has(e)),Ke=()=>{y(ne?e=>St(e,K):e=>yt(e,K))},Qe=e=>{p.size!==0&&(qe.mutate({ids:[...p],status:e}),y(new Set))},Ve=()=>{p.size!==0&&B({ids:[...p]})},ge=X.length>=14&&oe&&oe.data.length>0,ve=T(()=>Math.max(1,Math.ceil(R/14)),[R]),S=[];A.trim()&&S.push({key:"query",label:`Search: ${A}`,onRemove:()=>{x(""),m()}}),C!=="ALL"&&S.push({key:"type",label:`Type: ${C}`,onRemove:()=>{P("ALL"),m()}}),N!=="ALL"&&S.push({key:"season",label:`Season: ${N}`,onRemove:()=>{$("ALL"),m()}}),b!=="ALL"&&S.push({key:"year",label:`Year: ${b}`,onRemove:()=>{F("ALL"),m()}});for(const[e,a]of Object.entries(k))S.push({key:e,label:a==="include"?`+ ${e}`:`-${e}`,tone:a==="include"?"primary":"danger",onRemove:()=>{G(s=>{const r={...s};return delete r[e],r}),m()}});return t("div",{className:"page-container",children:[t("header",{className:n.header,children:[t("h2",{className:n.title,children:"My Watchlist"}),t("p",{className:n.subtitle,children:"Track and manage your anime collection"})]}),t("div",{className:n.controls,children:[t("div",{className:n.filters,children:Ne.map(e=>t("button",{className:`${n.filterBtn} ${d===e?n.active:""}`,onClick:()=>{const a=new URLSearchParams(l);a.delete("page"),v({pathname:`/watchlist/${e}`,search:a.toString()}),I(1)},children:e},e))}),t("div",{children:t("select",{className:c.sortSelect,value:L,onChange:e=>{const a=e.currentTarget.value;V(a),m(a,f)},children:[t("option",{value:"last_added",children:"Recently Added"}),t("option",{value:"name_asc",children:"Name (A-Z)"}),t("option",{value:"name_desc",children:"Name (Z-A)"})]})})]}),t("div",{className:c.filterContainer,children:[t("div",{className:c.searchBarWrapper,children:[t("div",{className:c.inputIconWrapper,children:[t(g,{name:"search",className:c.searchIcon}),t("input",{className:c.searchInput,placeholder:"Search your watchlist by title...",value:A,onInput:e=>x(e.currentTarget.value),onKeyDown:e=>e.key==="Enter"&&m()})]}),t("div",{className:c.searchActions,children:[t(W,{onClick:()=>m(),className:c.searchBtn,children:"Search"}),t("button",{className:`${c.filterToggleBtn} ${O?n.active:""}`,onClick:()=>be(!O),children:[t(g,{name:"filter",size:14}),t("span",{children:"Filters"}),O?t(g,{name:"chevron-up",size:12}):t(g,{name:"chevron-down",size:12})]})]})]}),t("div",{className:`${c.advancedFilters} ${O?c.show:""}`,children:[t("div",{className:c.filterDivider}),t("div",{className:c.filterGrid,children:[t("div",{className:c.filterItem,children:[t("label",{children:"Type"}),t("select",{value:C,onChange:e=>P(e.currentTarget.value),children:Ut.map(e=>t("option",{value:e.value,children:e.label},e.value))})]}),t("div",{className:c.filterItem,children:[t("label",{children:"Season"}),t("select",{value:N,onChange:e=>$(e.currentTarget.value),children:qt.map(e=>t("option",{value:e.value,children:e.label},e.value))})]}),t("div",{className:c.filterItem,children:[t("label",{children:"Year"}),t("select",{value:b,onChange:e=>F(e.currentTarget.value),children:Me.map(e=>t("option",{value:e.value,children:e.label},e.value))})]})]}),re.length>0&&t("div",{className:c.genreSection,children:[t("label",{className:c.genreLabel,children:"Genres"}),t("div",{className:c.genreContainer,children:re.map(e=>t("button",{className:`${c.genreButton} ${c[k[e]||""]}`,onClick:()=>De(e),children:e},e))})]}),t("div",{className:c.filterActions,children:[t(W,{variant:"secondary",onClick:Ee,children:"Reset All"}),t(W,{onClick:()=>m(),className:c.applyBtn,children:"Apply Filters"})]})]})]}),t("div",{className:n.resultsHeader,ref:H,children:[t("h3",{className:n.resultsTitle,children:[i?"Continue Watching":d,t("span",{className:n.itemCount,children:["(",R," items)"]})]}),t("div",{className:n.headerActions,children:[t("button",{className:`${n.manageBtn} ${z?n.active:""}`,onClick:Ye,children:[t(g,{name:"pencil-alt",size:13}),t("span",{children:"Bulk Manage"})]}),R>0&&t(Le,{page:f,totalPages:ve,canGoNext:ge,onChange:he,isLoading:j})]})]}),z&&t("div",{className:n.manageBar,children:[t("button",{className:n.selectAllBtn,onClick:Ke,children:[t("span",{className:`${n.selectAllBox} ${ne?n.selectAllBoxChecked:""}`,"aria-hidden":"true"}),t("span",{children:ne?"Clear Page":"Select All"})]}),t("span",{className:n.manageCount,children:[p.size," selected"]}),t("div",{className:n.manageSpacer}),!i&&t("select",{className:n.manageStatusSelect,value:"",onChange:e=>{e.currentTarget.value&&Qe(e.currentTarget.value)},disabled:p.size===0,title:"Set status for selected items",children:[t("option",{value:"",children:"Set status…"}),Ce.map(e=>t("option",{value:e,children:e},e))]}),t("button",{className:n.manageRemoveBtn,onClick:Ve,disabled:p.size===0,children:[t(g,{name:"trash",size:13}),t("span",{children:"Remove Selected"})]})]}),j?t(pt,{}):ie?t(gt,{message:ie.message}):t(Xe,{children:[S.length>0&&t(vt,{chips:S}),t("div",{className:`${n.grid} ${Be?n.lowEnd:""}`,children:te.map(e=>{const a=p.has(e.id);return t("div",{className:`${n.itemWrapper} ${a?n.selected:""}`,children:[z&&t("div",{className:n.selectOverlay,onClick:()=>je(e.id),title:a?"Deselect":"Select",children:t("span",{className:n.selectBadge,children:a?t(g,{name:"check",size:12}):null})}),t(mt,{anime:e,continueWatching:i,onRemove:()=>ue(e.id,e.name),layout:"vertical"}),!i&&!z&&t("div",{className:n.cardActions,children:[t("select",{className:n.statusSelect,value:e.status,onChange:s=>Fe.mutate({id:e.id,status:s.currentTarget.value}),children:Ce.map(s=>t("option",{value:s,children:s},s))}),t("button",{className:n.removeBtn,onClick:()=>ue(e.id,e.name),title:"Remove from Watchlist","aria-label":"Remove from Watchlist",children:t(g,{name:"trash",size:12})})]})]},e._id)})})]}),!j&&te.length===0&&t("div",{className:n.emptyState,children:[t("h3",{className:n.emptyTitle,children:"Your watchlist is looking a bit lonely"}),t("p",{className:n.emptyText,children:d!=="All"||A||C!=="ALL"||N!=="ALL"||b!=="ALL"||Object.keys(k).length>0?"No anime match these filters. Try adjusting them to see more titles.":"Let's find something to watch!"}),t("button",{className:n.emptyBtn,onClick:()=>v("/search"),children:[t(g,{name:"search",size:14}),t("span",{children:"Browse Anime"})]})]}),R>0&&t("div",{className:n.bottomPagination,children:t(Le,{page:f,totalPages:ve,canGoNext:ge,onChange:he,isLoading:j,variant:"labeled"})}),t(se,{isOpen:!!o,onClose:me,title:i?"Reset Progress":"Remove from Watchlist",children:[t(se.Body,{children:[t("p",{children:o?.ids&&o.ids.length>1?i?`Are you sure you want to remove watch progress for ${o.ids.length} items?`:`Are you sure you want to remove ${o.ids.length} items from your watchlist?`:i?`Are you sure you want to remove your watch progress for "${o?.name}"?`:`Are you sure you want to remove "${o?.name}" from your watchlist?`}),i&&t("label",{children:[t("input",{type:"checkbox",checked:Z,onChange:e=>E(e.currentTarget.checked)}),"Also remove from my watchlist"]}),!i&&!(o?.ids&&o.ids.length>1)&&t("label",{children:[t("input",{type:"checkbox",checked:ce,onChange:e=>D(e.currentTarget.checked)}),"Remember my choice"]})]}),t(se.Actions,{children:[t(W,{variant:"secondary",onClick:me,children:"No"}),t(W,{variant:"danger",onClick:ze,children:"Yes"})]})]})]})};export{ca as default};
|