diff --git a/backend/image_service.py b/backend/image_service.py new file mode 100644 index 0000000..f8029ad --- /dev/null +++ b/backend/image_service.py @@ -0,0 +1,61 @@ +import os +import httpx +import hashlib +from PIL import Image +from io import BytesIO +from fastapi.responses import Response +from typing import Optional + +CACHE_DIR = "cache/images" +os.makedirs(CACHE_DIR, exist_ok=True) + +async def get_proxied_image(url: str, width: Optional[int] = None): + """ + Fetch an image, resize it, convert to WebP, and cache it. + """ + # Create a unique cache key based on URL and width + cache_key = hashlib.md5(f"{url}_{width}".encode()).hexdigest() + cache_path = os.path.join(CACHE_DIR, f"{cache_key}.webp") + + # 1. Check if cached version exists + if os.path.exists(cache_path): + with open(cache_path, "rb") as f: + return Response(content=f.read(), media_type="image/webp") + + # 2. Fetch original image + async with httpx.AsyncClient(follow_redirects=True) as client: + try: + response = await client.get(url, timeout=10.0) + response.raise_for_status() + except Exception as e: + # Fallback or error + return None + + # 3. Process image with Pillow + try: + img = Image.open(BytesIO(response.content)) + + # Convert to RGB if necessary (e.g., from RGBA or CMYK) + if img.mode in ("RGBA", "P"): + img = img.convert("RGB") + + # Resize if width specified + if width and img.width > width: + ratio = width / float(img.width) + height = int(float(img.height) * float(ratio)) + img = img.resize((width, height), Image.LANCZOS) + + # 4. Save to buffer as WebP + output = BytesIO() + img.save(output, format="WEBP", quality=80) + webp_data = output.getvalue() + + # 5. Save to cache + with open(cache_path, "wb") as f: + f.write(webp_data) + + return Response(content=webp_data, media_type="image/webp") + + except Exception as e: + print(f"Error processing image: {e}") + return None diff --git a/backend/main.py b/backend/main.py index f7a2963..5b1e24f 100644 --- a/backend/main.py +++ b/backend/main.py @@ -14,6 +14,8 @@ from fastapi.responses import FileResponse, JSONResponse from cache import cache from video_extractor import extractor, VideoInfo from database import init_db, get_db, VideoRepository, Video +from security import verify_hmac +from image_service import get_proxied_image # Initialize FastAPI app app = FastAPI( @@ -25,7 +27,13 @@ app = FastAPI( # CORS middleware app.add_middleware( CORSMiddleware, - allow_origins=["*"], + allow_origins=[ + "https://nf.khoavo.myds.me", + "http://localhost:5173", + "http://localhost:3000", + "capacitor://localhost", + "http://localhost" + ], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], @@ -80,6 +88,17 @@ async def startup(): print("ℹ Use /api/admin/update to update dependencies") +# Get images via proxy +@app.get("/api/images/proxy") +async def proxy_image(url: str, width: Optional[int] = None): + """ + Proxy and optimize images (WebP + Resizing) + """ + response = await get_proxied_image(url, width) + if not response: + raise HTTPException(status_code=404, detail="Image not found or could not be processed") + return response + # Health check @app.get("/api/health") async def health_check(): @@ -95,7 +114,7 @@ async def health_check(): # ============================================ @app.get("/api/admin/version") -async def get_versions(): +async def get_versions(authorized: bool = Depends(verify_hmac)): """Get versions of all managed dependencies""" from auto_updater import get_all_versions import asyncio @@ -110,7 +129,7 @@ async def get_versions(): @app.post("/api/admin/update") -async def trigger_update(package: str = None): +async def trigger_update(package: str = None, authorized: bool = Depends(verify_hmac)): """Trigger manual update of dependencies Args: @@ -141,7 +160,7 @@ async def trigger_update(package: str = None): # Video extraction endpoint @app.post("/api/extract", response_model=ExtractResponse) -async def extract_video(request: ExtractRequest): +async def extract_video(request: ExtractRequest, authorized: bool = Depends(verify_hmac)): """ Extract video stream URL from source. Uses cache-aside pattern with 3-hour TTL. @@ -193,7 +212,7 @@ async def extract_video(request: ExtractRequest): # Get available qualities @app.get("/api/qualities") -async def get_qualities(url: str): +async def get_qualities(url: str, authorized: bool = Depends(verify_hmac)): """Get available quality options for a video""" try: qualities = await extractor.get_available_qualities(url) @@ -204,7 +223,7 @@ async def get_qualities(url: str): # Video CRUD endpoints @app.post("/api/videos", response_model=VideoResponse) -async def create_video(video: VideoCreate, db=Depends(get_db)): +async def create_video(video: VideoCreate, db=Depends(get_db), authorized: bool = Depends(verify_hmac)): """Add a video to the library""" repo = VideoRepository(db) @@ -222,7 +241,8 @@ async def list_videos( skip: int = Query(0, ge=0), limit: int = Query(50, ge=1, le=100), category: Optional[str] = None, - db=Depends(get_db) + db=Depends(get_db), + authorized: bool = Depends(verify_hmac) ): """List all videos with pagination""" repo = VideoRepository(db) @@ -232,7 +252,7 @@ async def list_videos( @app.get("/api/videos/{video_id}", response_model=VideoResponse) -async def get_video(video_id: int, db=Depends(get_db)): +async def get_video(video_id: int, db=Depends(get_db), authorized: bool = Depends(verify_hmac)): """Get video by ID""" repo = VideoRepository(db) video = repo.get_by_id(video_id) @@ -242,7 +262,7 @@ async def get_video(video_id: int, db=Depends(get_db)): @app.delete("/api/videos/{video_id}") -async def delete_video(video_id: int, db=Depends(get_db)): +async def delete_video(video_id: int, db=Depends(get_db), authorized: bool = Depends(verify_hmac)): """Delete video from library""" repo = VideoRepository(db) if repo.delete(video_id): @@ -255,7 +275,8 @@ async def delete_video(video_id: int, db=Depends(get_db)): async def search_videos( q: str = Query(..., min_length=1), limit: int = Query(20, ge=1, le=50), - db=Depends(get_db) + db=Depends(get_db), + authorized: bool = Depends(verify_hmac) ): """Search videos by title""" repo = VideoRepository(db) @@ -271,7 +292,8 @@ async def get_phimmoichill_catalog( category: Optional[str] = None, page: int = Query(1, ge=1), limit: int = Query(24, ge=1, le=50), - sort: str = Query("modified", description="Sort by: modified, year, rating") + sort: str = Query("modified", description="Sort by: modified, year, rating"), + authorized: bool = Depends(verify_hmac) ): """ Get movie catalog from ophim API with sorting support. @@ -440,7 +462,8 @@ async def get_phimmoichill_catalog( @app.get("/api/rophim/search") async def search_phimmoichill( q: str = Query(..., min_length=1), - limit: int = Query(20, ge=1, le=50) + limit: int = Query(20, ge=1, le=50), + authorized: bool = Depends(verify_hmac) ): """Search movies by title AND actors using ophim API""" import aiohttp @@ -527,7 +550,7 @@ async def search_phimmoichill( @app.get("/api/rophim/categories/discover") -async def discover_categories(): +async def discover_categories(authorized: bool = Depends(verify_hmac)): """ Discover all available categories from PhimMoiChill Returns types, genres, countries, and years @@ -556,7 +579,8 @@ async def discover_categories(): async def get_movies_by_category( slug: str = Query(..., description="Category slug (e.g., 'the-loai/hanh-dong', 'danh-sach/phim-le')"), page: int = Query(1, ge=1), - limit: int = Query(24, ge=1, le=50) + limit: int = Query(24, ge=1, le=50), + authorized: bool = Depends(verify_hmac) ): """ Get movies for a specific category @@ -587,7 +611,7 @@ async def get_movies_by_category( @app.get("/api/rophim/home/curated") -async def get_curated_homepage_sections(): +async def get_curated_homepage_sections(authorized: bool = Depends(verify_hmac)): """ Get curated homepage sections with TOP RATED, NEW RELEASES, and popular genres. This provides a Rotten Tomatoes / Moviewiser style layout. @@ -693,7 +717,7 @@ async def get_curated_homepage_sections(): @app.get("/api/rophim/stream/{slug}") -async def get_rophim_stream(slug: str, episode: int = 1): +async def get_rophim_stream(slug: str, episode: int = 1, authorized: bool = Depends(verify_hmac)): """ Get video stream URL from ophim API for a specific slug and episode. """ @@ -715,7 +739,7 @@ async def get_rophim_stream(slug: str, episode: int = 1): return JSONResponse(status_code=500, content={"detail": str(e)}) @app.post("/api/rophim/stream") -async def get_rophim_stream_post(data: dict): +async def get_rophim_stream_post(data: dict, authorized: bool = Depends(verify_hmac)): """ Get video stream URL (POST) - supports source_url if needed """ @@ -748,7 +772,7 @@ async def get_rophim_stream_post(data: dict): @app.get("/api/rophim/home/sections") -async def get_home_more_sections(page: int = Query(1, ge=1), view: str = Query('home')): +async def get_home_more_sections(page: int = Query(1, ge=1), view: str = Query('home'), authorized: bool = Depends(verify_hmac)): """ Get paginated sections for homepage OR specific views (infinite scroll). Returns dynamic sections (Genres, Countries, etc.) or View specific sections. @@ -788,7 +812,7 @@ def clean_movie_description(movie: Dict) -> Dict: @app.get("/api/rophim/movie/{slug}") -async def get_phimmoichill_movie(slug: str): +async def get_phimmoichill_movie(slug: str, authorized: bool = Depends(verify_hmac)): """Get detailed movie info from PhimMoiChill with optional TMDB enrichment""" import asyncio from rophim_scraper import get_movie_details @@ -825,7 +849,8 @@ async def get_phimmoichill_movie(slug: str): async def get_phimmoichill_stream( slug: str, episode: int = Query(1, ge=1), - server: int = Query(0, ge=0, le=2) + server: int = Query(0, ge=0, le=2), + authorized: bool = Depends(verify_hmac) ): """Get video stream URL for a movie/episode using ophim API""" import asyncio @@ -861,7 +886,7 @@ class PhimMoiChillStreamRequest(BaseModel): @app.post("/api/rophim/stream") -async def get_phimmoichill_stream_by_url(request: PhimMoiChillStreamRequest): +async def get_phimmoichill_stream_by_url(request: PhimMoiChillStreamRequest, authorized: bool = Depends(verify_hmac)): """Get video stream URL using slug from source_url - uses ophim API""" import asyncio import re @@ -906,7 +931,8 @@ async def get_phimmoichill_stream_by_url(request: PhimMoiChillStreamRequest): @app.post("/api/crawl/trigger") async def trigger_crawl( page: int = Query(1, ge=1), - limit: int = Query(50, ge=1, le=100) + limit: int = Query(50, ge=1, le=100), + authorized: bool = Depends(verify_hmac) ): """ Trigger a movie catalog crawl. @@ -949,7 +975,7 @@ async def crawl_status(): # ============================================ @app.get("/api/rophim/categories/all") -async def get_all_categories(): +async def get_all_categories(authorized: bool = Depends(verify_hmac)): """Get all themed category sections in one call""" import asyncio from category_scraper import get_categories_sync @@ -967,7 +993,7 @@ async def get_all_categories(): @app.get("/api/rophim/categories/hot") -async def get_hot_category(limit: int = Query(24, ge=1, le=50)): +async def get_hot_category(limit: int = Query(24, ge=1, le=50), authorized: bool = Depends(verify_hmac)): """Get Hot Movies category""" import asyncio from category_scraper import PhimMoiChillCategoryScraper @@ -992,7 +1018,7 @@ async def get_hot_category(limit: int = Query(24, ge=1, le=50)): @app.get("/api/rophim/categories/new-releases") -async def get_new_releases_category(limit: int = Query(24, ge=1, le=50)): +async def get_new_releases_category(limit: int = Query(24, ge=1, le=50), authorized: bool = Depends(verify_hmac)): """Get New Releases category""" import asyncio from category_scraper import PhimMoiChillCategoryScraper @@ -1017,7 +1043,7 @@ async def get_new_releases_category(limit: int = Query(24, ge=1, le=50)): @app.get("/api/rophim/categories/top10") -async def get_top10_category(): +async def get_top10_category(authorized: bool = Depends(verify_hmac)): """Get Top 10 Most Watched""" import asyncio from category_scraper import PhimMoiChillCategoryScraper @@ -1042,7 +1068,7 @@ async def get_top10_category(): @app.get("/api/rophim/categories/cinema") -async def get_cinema_category(limit: int = Query(24, ge=1, le=50)): +async def get_cinema_category(limit: int = Query(24, ge=1, le=50), authorized: bool = Depends(verify_hmac)): """Get Cinema Releases category""" import asyncio from category_scraper import PhimMoiChillCategoryScraper @@ -1079,22 +1105,14 @@ print(f"🔍 DEBUG: Path exists: {os.path.exists(frontend_path)}") if os.path.exists(frontend_path): print(f"✓ Serving frontend from {frontend_path}") - # Mount directories only if they exist (Vite production builds often flatten these) - for folder in ["assets", "icons", "scripts", "styles", "js"]: + # Mount main directories + for folder in ["assets", "icons", "scripts", "styles", "js", "public"]: folder_path = os.path.join(frontend_path, folder) if os.path.exists(folder_path): app.mount(f"/{folder}", StaticFiles(directory=folder_path), name=folder) print(f" - Mounted /{folder}") - @app.get("/") - async def serve_index(): - return FileResponse(os.path.join(frontend_path, "index.html")) - - @app.get("/watch") - @app.get("/watch.html") - async def serve_watch(): - return FileResponse(os.path.join(frontend_path, "watch.html")) - + # Direct file responses for root files @app.get("/manifest.json") async def serve_manifest(): return FileResponse(os.path.join(frontend_path, "manifest.json")) @@ -1103,13 +1121,38 @@ if os.path.exists(frontend_path): async def serve_sw(): return FileResponse(os.path.join(frontend_path, "sw.js")) -# Catch-all for any other routes (SPA support) + @app.get("/favicon.ico") + async def serve_favicon(): + favicon = os.path.join(frontend_path, "favicon.ico") + if os.path.exists(favicon): + return FileResponse(favicon) + return Response(status_code=204) + + @app.get("/watch") + @app.get("/watch.html") + async def serve_watch(): + return FileResponse(os.path.join(frontend_path, "watch.html")) + + # Root index + @app.get("/") + async def serve_index(): + return FileResponse(os.path.join(frontend_path, "index.html")) + +# Catch-all for SPA navigation (only for GET requests and non-API, non-file paths) @app.exception_handler(404) -async def custom_404_handler(request, exc): - if not request.url.path.startswith("/api"): +async def custom_404_handler(request: Request, exc): + path = request.url.path + # Don't intercept API or static file requests + if (not path.startswith("/api") and + not any(path.startswith(f"/{f}") for f in ["assets", "scripts", "styles", "js", "icons"]) and + "." not in path.split("/")[-1]): if os.path.exists(os.path.join(frontend_path, "index.html")): return FileResponse(os.path.join(frontend_path, "index.html")) - return JSONResponse(status_code=404, content={"detail": "Not found"}) + + return JSONResponse( + status_code=404, + content={"detail": "Not found", "path": path} + ) if __name__ == "__main__": diff --git a/backend/requirements.txt b/backend/requirements.txt index 7fe1ef5..18a2e81 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -28,3 +28,6 @@ httpx>=0.25.0 # Multipart uploads python-multipart>=0.0.6 + +# Image Processing +Pillow>=10.0.0 diff --git a/backend/security.py b/backend/security.py new file mode 100644 index 0000000..59acae6 --- /dev/null +++ b/backend/security.py @@ -0,0 +1,59 @@ +import hmac +import hashlib +import time +import os +from fastapi import Request, HTTPException, Security +from fastapi.security import APIKeyHeader + +# In production, this should be an environment variable +# For now, we'll use a placeholder that the user can set +SECRET_KEY = os.getenv("STREAMFLIX_SECRET_KEY", "your-super-secret-key-change-this") + +signature_header = APIKeyHeader(name="X-Signature", auto_error=False) +timestamp_header = APIKeyHeader(name="X-Timestamp", auto_error=False) + +def verify_hmac( + request: Request, + signature: str = Security(signature_header), + timestamp: str = Security(timestamp_header) +): + """ + Verify HMAC signature of the request. + Signature = HMAC_SHA256(secret, timestamp + path + method + body) + """ + if not signature or not timestamp: + raise HTTPException(status_code=401, detail="Authentication headers missing") + + # 1. Check timestamp (prevents replay attacks, 5 minute window) + try: + request_time = int(timestamp) + current_time = int(time.time()) + if abs(current_time - request_time) > 300: # 5 minutes + raise HTTPException(status_code=401, detail="Request expired") + except ValueError: + raise HTTPException(status_code=401, detail="Invalid timestamp") + + # 2. Reconstruct payload + # Note: For GET requests, body is empty + body = b"" + if request.method in ["POST", "PUT", "PATCH"]: + # This is tricky in FastAPI as reading body consumes it + # We'll need to handle this carefully if we want to sign the body + pass + + path = request.url.path + method = request.method + + payload = f"{timestamp}{path}{method}".encode() + + # 3. Calculate signature + expected_signature = hmac.new( + SECRET_KEY.encode(), + payload, + hashlib.sha256 + ).hexdigest() + + if not hmac.compare_digest(signature, expected_signature): + raise HTTPException(status_code=401, detail="Invalid signature") + + return True diff --git a/backend/static/assets/Toast-BwR22KmJ.js b/backend/static/assets/Toast-BwR22KmJ.js deleted file mode 100644 index 5d82b89..0000000 --- a/backend/static/assets/Toast-BwR22KmJ.js +++ /dev/null @@ -1,47 +0,0 @@ -(function(){const h=document.createElement("link").relList;if(h&&h.supports&&h.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))m(e);new MutationObserver(e=>{for(const t of e)if(t.type==="childList")for(const u of t.addedNodes)u.tagName==="LINK"&&u.rel==="modulepreload"&&m(u)}).observe(document,{childList:!0,subtree:!0});function o(e){const t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?t.credentials="include":e.crossOrigin==="anonymous"?t.credentials="omit":t.credentials="same-origin",t}function m(e){if(e.ep)return;e.ep=!0;const t=o(e);fetch(e.href,t)}})();const z="/api";class Bt{async extractVideo(h,o=null){const m=await fetch(`${z}/extract`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:h,quality:o})});if(!m.ok){const e=await m.json();throw new Error(e.detail||"Extraction failed")}return m.json()}async getQualities(h){const o=await fetch(`${z}/qualities?url=${encodeURIComponent(h)}`);if(!o.ok)throw new Error("Failed to get qualities");return(await o.json()).qualities}async listVideos({skip:h=0,limit:o=50,category:m=null}={}){let e=`${z}/videos?skip=${h}&limit=${o}`;m&&m!=="all"&&(e+=`&category=${encodeURIComponent(m)}`);const t=await fetch(e);if(!t.ok)throw new Error("Failed to fetch videos");return t.json()}async addVideo(h){const o=await fetch(`${z}/videos`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(h)});if(!o.ok){const m=await o.json();throw new Error(m.detail||"Failed to add video")}return o.json()}async deleteVideo(h){if(!(await fetch(`${z}/videos/${h}`,{method:"DELETE"})).ok)throw new Error("Failed to delete video")}async searchVideos(h,o=20){const m=await fetch(`${z}/search?q=${encodeURIComponent(h)}&limit=${o}`);if(!m.ok)throw new Error("Search failed");return m.json()}async health(){return(await fetch(`${z}/health`)).json()}async getRophimCatalog({category:h=null,country:o=null,genre:m=null,page:e=1,limit:t=24,sort:u="modified"}={}){let r=`${z}/rophim/catalog?page=${e}&limit=${t}&sort=${u}`;h&&(r+=`&category=${encodeURIComponent(h)}`),o&&(r+=`&country=${encodeURIComponent(o)}`),m&&(r+=`&genre=${encodeURIComponent(m)}`);const i=await fetch(r);if(!i.ok)throw new Error("Failed to fetch RoPhim catalog");return i.json()}async getCuratedSections(){const h=await fetch(`${z}/rophim/home/curated`);if(!h.ok)throw new Error("Failed to fetch curated sections");return h.json()}async searchRophim(h,o=20){const m=await fetch(`${z}/rophim/search?q=${encodeURIComponent(h)}&limit=${o}`);if(!m.ok)throw new Error("RoPhim search failed");return m.json()}async getHomeSections(h=2,o="home"){const m=await fetch(`${z}/rophim/home/sections?page=${h}&view=${o}`);if(!m.ok)throw new Error("Failed to fetch home sections");return m.json()}async getRophimMovie(h){const o=await fetch(`${z}/rophim/movie/${encodeURIComponent(h)}`);if(!o.ok)throw new Error("Failed to fetch movie details");return o.json()}async getRophimStream(h,o=1){const m=await fetch(`${z}/rophim/stream/${encodeURIComponent(h)}?episode=${o}`);if(!m.ok)throw new Error("Failed to get stream");return m.json()}async getRophimStreamByUrl(h,o="",m=1,e=0){const t=await fetch(`${z}/rophim/stream`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({source_url:h,slug:o||"",episode:m,server:e})});if(!t.ok){const u=await t.json();throw new Error(u.detail||"Failed to get stream")}return t.json()}}const Dt=new Bt;let mt=null;const At=300,bt=document.getElementById("searchModal"),xt=document.getElementById("searchBackdrop"),K=document.getElementById("searchInput"),wt=document.getElementById("closeSearch"),dt=document.getElementById("searchLoading"),pt=document.getElementById("searchGrid");document.querySelector('[data-view="search"]');function gt(){bt.classList.add("active"),setTimeout(()=>K.focus(),100)}function vt(){bt.classList.remove("active"),K.value="",pt.innerHTML="",dt.style.display="none"}async function yt(a){if(!a||a.trim().length<2){pt.innerHTML="",dt.style.display="none";return}dt.style.display="flex";try{const h=await Dt.searchRophim(a);dt.style.display="none",h&&h.movies&&h.movies.length>0?pt.innerHTML=h.movies.map(o=>` -
-
-
- ${o.title} -
-
-
-

${o.title}

-
- ${o.year||""} - ${o.quality?`${o.quality}`:""} -
-
-
-
-
- `).join(""):pt.innerHTML=` -
- - - -

No results found for "${a}"

-
- `}catch(h){console.error("Search failed:",h),dt.style.display="none",pt.innerHTML=` -
-

Search failed. Please try again.

-
- `}}function jt(){[document.getElementById("headerSearchBtn"),document.getElementById("mobileSearchBtn"),document.querySelector('[data-view="search"]'),document.querySelector('button[data-view="search"]')].forEach(m=>{m&&m.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation(),gt()})}),wt&&wt.addEventListener("click",vt),xt&&xt.addEventListener("click",vt),K&&(K.addEventListener("input",m=>{clearTimeout(mt);const e=m.target.value;mt=setTimeout(()=>{yt(e)},At)}),K.addEventListener("keydown",m=>{m.key==="Enter"&&(clearTimeout(mt),yt(m.target.value))})),document.addEventListener("keydown",m=>{(m.metaKey||m.ctrlKey)&&m.key==="k"&&(m.preventDefault(),gt()),m.key==="Escape"&&bt.classList.contains("active")&&vt()});const o=new URLSearchParams(window.location.search).get("search");o&&o.trim()&&setTimeout(()=>{gt(),K&&(K.value=o),yt(o);const m=window.location.pathname;window.history.replaceState({},"",m)},300)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",jt):jt();/*! - * artplayer.js v5.3.0 - * Github: https://github.com/zhw2590582/ArtPlayer - * (c) 2017-2025 Harvey Zack - * Released under the MIT License. - */(function(a,h,o,m,e,t,u,r){var i=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{},n=typeof i[m]=="function"&&i[m],s=n.i||{},l=n.cache||{},c=typeof module<"u"&&typeof module.require=="function"&&module.require.bind(module);function p(y,x){if(!l[y]){if(!a[y]){if(e[y])return e[y];var f=typeof i[m]=="function"&&i[m];if(!x&&f)return f(y,!0);if(n)return n(y,!0);if(c&&typeof y=="string")return c(y);var v=Error("Cannot find module '"+y+"'");throw v.code="MODULE_NOT_FOUND",v}j.resolve=function(E){var S=a[y][1][E];return S??E},j.cache={};var w=l[y]=new p.Module(y);a[y][0].call(w.exports,j,w,w.exports,i)}return l[y].exports;function j(E){var S=j.resolve(E);return S===!1?{}:p(S)}}p.isParcelRequire=!0,p.Module=function(y){this.id=y,this.bundle=p,this.require=c,this.exports={}},p.modules=a,p.cache=l,p.parent=n,p.distDir=void 0,p.publicUrl=void 0,p.devServer=void 0,p.i=s,p.register=function(y,x){a[y]=[function(f,v){v.exports=x},{}]},Object.defineProperty(p,"root",{get:function(){return i[m]}}),i[m]=p;for(var d=0;dQ.call(this,this)),R.DEBUG){let et=W=>console.log(`[ART.${this.id}] -> ${W}`);et(`Version@${R.version}`);for(let W=0;Wet(`Event@${ct.type}`))}Y.push(this)}static get instances(){return Y}static get version(){return n.version}static get config(){return l.default}static get utils(){return V}static get scheme(){return H.default}static get Emitter(){return J.default}static get validator(){return i.default}static get kindOf(){return i.default.kindOf}static get html(){return G.default.html}static get option(){return{id:"",container:"#artplayer",url:"",poster:"",type:"",theme:"#f00",volume:.7,isLive:!1,muted:!1,autoplay:!1,autoSize:!1,autoMini:!1,loop:!1,flip:!1,playbackRate:!1,aspectRatio:!1,screenshot:!1,setting:!1,hotkey:!0,pip:!1,mutex:!0,backdrop:!0,fullscreen:!1,fullscreenWeb:!1,subtitleOffset:!1,miniProgressBar:!1,useSSR:!1,playsInline:!0,lock:!1,gesture:!0,fastForward:!1,autoPlayback:!1,autoOrientation:!1,airplay:!1,proxy:void 0,layers:[],contextmenu:[],controls:[],settings:[],quality:[],highlight:[],plugins:[],thumbnails:{url:"",number:60,column:10,width:0,height:0,scale:1},subtitle:{url:"",type:"",style:{},name:"",escape:!0,encoding:"utf-8",onVttLoad:X=>X},moreVideoAttr:{controls:!1,preload:V.isSafari?"auto":"metadata"},i18n:{},icons:{},cssVar:{},customType:{},lang:navigator==null?void 0:navigator.language.toLowerCase()}}get proxy(){return this.events.proxy}get query(){return this.template.query}get video(){return this.template.$video}destroy(X=!0){R.REMOVE_SRC_WHEN_DESTROY&&this.video.removeAttribute("src"),this.events.destroy(),this.template.destroy(X),Y.splice(Y.indexOf(this),1),this.isDestroy=!0,this.emit("destroy")}}o.default=R,R.STYLE=u.default,R.DEBUG=!1,R.CONTEXTMENU=!0,R.NOTICE_TIME=2e3,R.SETTING_WIDTH=250,R.SETTING_ITEM_WIDTH=200,R.SETTING_ITEM_HEIGHT=35,R.RESIZE_TIME=200,R.SCROLL_TIME=200,R.SCROLL_GAP=50,R.AUTO_PLAYBACK_MAX=10,R.AUTO_PLAYBACK_MIN=5,R.AUTO_PLAYBACK_TIMEOUT=3e3,R.RECONNECT_TIME_MAX=5,R.RECONNECT_SLEEP_TIME=1e3,R.CONTROL_HIDE_TIME=3e3,R.DBCLICK_TIME=300,R.DBCLICK_FULLSCREEN=!0,R.MOBILE_DBCLICK_PLAY=!0,R.MOBILE_CLICK_PLAY=!1,R.AUTO_ORIENTATION_TIME=200,R.INFO_LOOP_TIME=1e3,R.FAST_FORWARD_VALUE=3,R.FAST_FORWARD_TIME=1e3,R.TOUCH_MOVE_RATIO=.5,R.VOLUME_STEP=.1,R.SEEK_STEP=5,R.PLAYBACK_RATE=[.5,.75,1,1.25,1.5,2],R.ASPECT_RATIO=["default","4:3","16:9"],R.FLIP=["normal","horizontal","vertical"],R.FULLSCREEN_WEB_IN_BODY=!1,R.LOG_VERSION=!0,R.USE_RAF=!1,R.REMOVE_SRC_WHEN_DESTROY=!0,V.isBrowser&&(window.Artplayer=R,V.setStyleText("artplayer-style",u.default),setTimeout(()=>{R.LOG_VERSION&&console.log(`%c ArtPlayer %c ${R.version} %c https://artplayer.org`,"color: #fff; background: #5f5f5f","color: #fff; background: #4bc729","")},100))},{"bundle-text:./style/index.less":"2wh8D","option-validator":"g7VGh","../package.json":"lh3R5","./config":"eJfh8","./contextmenu":"9zso8","./control":"dp1yk","./events":"jmVSD","./hotkey":"dswts","./i18n":"d9ktO","./icons":"fFHY0","./info":"kZ0F8","./layer":"j9lbi","./loading":"bMjWd","./mask":"k1nkQ","./notice":"fPVaU","./player":"uR0Sw","./plugins":"cjxJL","./scheme":"biLjm","./setting":"bwLGT","./storage":"kwqbK","./subtitle":"k5613","./template":"fwOA1","./utils":"aBlEo","./utils/emitter":"4NM7P","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"2wh8D":[function(a,h,o,m){h.exports='.art-video-player{--art-theme:red;--art-font-color:#fff;--art-background-color:#000;--art-text-shadow-color:#00000080;--art-transition-duration:.2s;--art-padding:10px;--art-border-radius:3px;--art-progress-height:6px;--art-progress-color:#ffffff40;--art-hover-color:#ffffff40;--art-loaded-color:#ffffff40;--art-state-size:80px;--art-state-opacity:.8;--art-bottom-height:100px;--art-bottom-offset:20px;--art-bottom-gap:5px;--art-highlight-width:8px;--art-highlight-color:#ffffff80;--art-control-height:46px;--art-control-opacity:.75;--art-control-icon-size:36px;--art-control-icon-scale:1.1;--art-volume-height:120px;--art-volume-handle-size:14px;--art-lock-size:36px;--art-indicator-scale:0;--art-indicator-size:16px;--art-fullscreen-web-index:9999;--art-settings-icon-size:24px;--art-settings-max-height:300px;--art-selector-max-height:300px;--art-contextmenus-min-width:250px;--art-subtitle-font-size:20px;--art-subtitle-gap:5px;--art-subtitle-bottom:15px;--art-subtitle-border:#000;--art-widget-background:#000000d9;--art-tip-background:#000000b3;--art-scrollbar-size:4px;--art-scrollbar-background:#ffffff40;--art-scrollbar-background-hover:#ffffff80;--art-mini-progress-height:2px}.art-bg-cover{background-position:50%;background-repeat:no-repeat;background-size:cover}.art-bottom-gradient{background-image:linear-gradient(#0000,#0006,#000);background-position:bottom;background-repeat:repeat-x}.art-backdrop-filter{backdrop-filter:saturate(180%)blur(20px);background-color:#000000bf!important}.art-truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.art-video-player{zoom:1;text-align:left;user-select:none;box-sizing:border-box;width:100%;height:100%;color:var(--art-font-color);background-color:var(--art-background-color);text-shadow:0 0 2px var(--art-text-shadow-color);-webkit-tap-highlight-color:#0000;-ms-touch-action:manipulation;touch-action:manipulation;-ms-high-contrast-adjust:none;direction:ltr;outline:0;margin:0 auto;padding:0;font-family:PingFang SC,Helvetica Neue,Microsoft YaHei,Roboto,Arial,sans-serif;font-size:14px;line-height:1.3;position:relative}.art-video-player *,.art-video-player :before,.art-video-player :after{box-sizing:border-box}.art-video-player ::-webkit-scrollbar{width:var(--art-scrollbar-size);height:var(--art-scrollbar-size)}.art-video-player ::-webkit-scrollbar-thumb{background-color:var(--art-scrollbar-background)}.art-video-player ::-webkit-scrollbar-thumb:hover{background-color:var(--art-scrollbar-background-hover)}.art-video-player img{vertical-align:top;max-width:100%}.art-video-player svg{fill:var(--art-font-color)}.art-video-player a{color:var(--art-font-color);text-decoration:none}.art-icon{justify-content:center;align-items:center;line-height:1;display:flex}.art-video-player.art-backdrop .art-contextmenus,.art-video-player.art-backdrop .art-info,.art-video-player.art-backdrop .art-settings,.art-video-player.art-backdrop .art-layer-auto-playback,.art-video-player.art-backdrop .art-selector-list,.art-video-player.art-backdrop .art-volume-inner{backdrop-filter:saturate(180%)blur(20px);background-color:#000000bf!important}.art-video{z-index:10;cursor:pointer;width:100%;height:100%;position:absolute;inset:0}.art-poster{z-index:11;pointer-events:none;background-position:50%;background-repeat:no-repeat;background-size:cover;width:100%;height:100%;position:absolute;inset:0}.art-video-player .art-subtitle{z-index:20;text-align:center;pointer-events:none;justify-content:center;align-items:center;gap:var(--art-subtitle-gap);width:100%;bottom:var(--art-subtitle-bottom);font-size:var(--art-subtitle-font-size);transition:bottom var(--art-transition-duration)ease;text-shadow:var(--art-subtitle-border)1px 0 1px,var(--art-subtitle-border)0 1px 1px,var(--art-subtitle-border)-1px 0 1px,var(--art-subtitle-border)0 -1px 1px,var(--art-subtitle-border)1px 1px 1px,var(--art-subtitle-border)-1px -1px 1px,var(--art-subtitle-border)1px -1px 1px,var(--art-subtitle-border)-1px 1px 1px;flex-direction:column;padding:0 5%;display:none;position:absolute}.art-video-player.art-subtitle-show .art-subtitle{display:flex}.art-video-player.art-control-show .art-subtitle{bottom:calc(var(--art-control-height) + var(--art-subtitle-bottom))}.art-danmuku{z-index:30;pointer-events:none;width:100%;height:100%;position:absolute;inset:0;overflow:hidden}.art-video-player .art-layers{z-index:40;pointer-events:none;width:100%;height:100%;display:none;position:absolute;inset:0}.art-video-player .art-layers .art-layer{pointer-events:auto}.art-video-player.art-layer-show .art-layers{display:flex}.art-video-player .art-mask{z-index:50;pointer-events:none;justify-content:center;align-items:center;width:100%;height:100%;display:flex;position:absolute;inset:0}.art-video-player .art-mask .art-state{opacity:0;width:var(--art-state-size);height:var(--art-state-size);transition:all var(--art-transition-duration)ease;justify-content:center;align-items:center;display:flex;transform:scale(2)}.art-video-player.art-mask-show .art-state{cursor:pointer;pointer-events:auto;opacity:var(--art-state-opacity);transform:scale(1)}.art-video-player.art-loading-show .art-state{display:none}.art-video-player .art-loading{z-index:70;pointer-events:none;justify-content:center;align-items:center;width:100%;height:100%;display:none;position:absolute;inset:0}.art-video-player.art-loading-show .art-loading{display:flex}.art-video-player .art-bottom{z-index:60;opacity:0;pointer-events:none;width:100%;height:100%;padding:0 var(--art-padding);transition:all var(--art-transition-duration)ease;background-size:100% var(--art-bottom-height);background-image:linear-gradient(#0000,#0006,#000);background-position:bottom;background-repeat:repeat-x;flex-direction:column;justify-content:flex-end;display:flex;position:absolute;inset:0;overflow:hidden}.art-video-player .art-bottom .art-controls,.art-video-player .art-bottom .art-progress{transform:translateY(var(--art-bottom-offset));transition:transform var(--art-transition-duration)ease}.art-video-player.art-control-show .art-bottom,.art-video-player.art-hover .art-bottom{opacity:1}.art-video-player.art-control-show .art-bottom .art-controls,.art-video-player.art-hover .art-bottom .art-controls,.art-video-player.art-control-show .art-bottom .art-progress,.art-video-player.art-hover .art-bottom .art-progress{transform:translateY(0)}.art-bottom .art-progress{z-index:0;pointer-events:auto;padding-bottom:var(--art-bottom-gap);position:relative}.art-bottom .art-progress .art-control-progress{cursor:pointer;height:var(--art-progress-height);justify-content:center;align-items:center;display:flex;position:relative}.art-bottom .art-progress .art-control-progress .art-control-progress-inner{width:100%;height:50%;transition:height var(--art-transition-duration)ease;background-color:var(--art-progress-color);align-items:center;display:flex;position:relative}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-hover{z-index:0;background-color:var(--art-hover-color);width:0%;height:100%;position:absolute;inset:0}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-loaded{z-index:10;background-color:var(--art-loaded-color);width:0%;height:100%;position:absolute;inset:0}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-played{z-index:20;background-color:var(--art-theme);width:0%;height:100%;position:absolute;inset:0}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-highlight{z-index:30;pointer-events:none;width:100%;height:100%;position:absolute;inset:0}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-highlight span{z-index:0;pointer-events:auto;width:100%;height:100%;transform:translateX(calc(var(--art-highlight-width)/-2));background-color:var(--art-highlight-color);position:absolute;inset:0 auto 0 0;width:var(--art-highlight-width)!important}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator{z-index:40;width:var(--art-indicator-size);height:var(--art-indicator-size);transform:scale(var(--art-indicator-scale));margin-left:calc(var(--art-indicator-size)/-2);transition:transform var(--art-transition-duration)ease;border-radius:50%;justify-content:center;align-items:center;display:flex;position:absolute;left:0}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator .art-icon{pointer-events:none;width:100%;height:100%}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator:hover{transform:scale(1.2)!important}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator:active{transform:scale(1)!important}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-tip{z-index:50;border-radius:var(--art-border-radius);white-space:nowrap;background-color:var(--art-tip-background);padding:3px 5px;font-size:12px;line-height:1;display:none;position:absolute;top:-25px;left:0}.art-bottom .art-progress .art-control-progress:hover .art-control-progress-inner{height:100%}.art-bottom .art-progress .art-control-thumbnails{bottom:calc(var(--art-bottom-gap) + 10px);border-radius:var(--art-border-radius);pointer-events:none;background-color:var(--art-widget-background);display:none;position:absolute;left:0;box-shadow:0 1px 3px #0003,0 1px 2px -1px #0003}.art-bottom:hover .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator{transform:scale(1)}.art-controls{z-index:10;pointer-events:auto;height:var(--art-control-height);justify-content:space-between;align-items:center;display:flex;position:relative}.art-controls .art-controls-left,.art-controls .art-controls-right{height:100%;display:flex}.art-controls .art-controls-center{flex:1;justify-content:center;align-items:center;height:100%;padding:0 10px;display:none}.art-controls .art-controls-right{justify-content:flex-end}.art-controls .art-control{cursor:pointer;white-space:nowrap;opacity:var(--art-control-opacity);min-height:var(--art-control-height);min-width:var(--art-control-height);transition:opacity var(--art-transition-duration)ease;flex-shrink:0;justify-content:center;align-items:center;display:flex}.art-controls .art-control .art-icon{height:var(--art-control-icon-size);width:var(--art-control-icon-size);transform:scale(var(--art-control-icon-scale));transition:transform var(--art-transition-duration)ease}.art-controls .art-control .art-icon:active{transform:scale(calc(var(--art-control-icon-scale)*.8))}.art-controls .art-control:hover{opacity:1}.art-control-volume{position:relative}.art-control-volume .art-volume-panel{text-align:center;cursor:default;opacity:0;pointer-events:none;left:0;right:0;bottom:var(--art-control-height);width:var(--art-control-height);height:var(--art-volume-height);transition:all var(--art-transition-duration)ease;justify-content:center;align-items:center;padding:0 5px;font-size:12px;display:flex;position:absolute;transform:translateY(10px)}.art-control-volume .art-volume-panel .art-volume-inner{border-radius:var(--art-border-radius);background-color:var(--art-widget-background);flex-direction:column;align-items:center;gap:10px;width:100%;height:100%;padding:10px 0 12px;display:flex}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider{cursor:pointer;flex:1;justify-content:center;width:100%;display:flex;position:relative}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-handle{border-radius:var(--art-border-radius);background-color:#ffffff40;justify-content:center;width:2px;display:flex;position:relative;overflow:hidden}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-handle .art-volume-loaded{z-index:0;background-color:var(--art-theme);width:100%;height:100%;position:absolute;inset:0}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-indicator{width:var(--art-volume-handle-size);height:var(--art-volume-handle-size);margin-top:calc(var(--art-volume-handle-size)/-2);background-color:var(--art-theme);transition:transform var(--art-transition-duration)ease;border-radius:100%;flex-shrink:0;position:absolute;transform:scale(1)}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider:active .art-volume-indicator{transform:scale(.9)}.art-control-volume:hover .art-volume-panel{opacity:1;pointer-events:auto;transform:translateY(0)}.art-video-player .art-notice{z-index:80;width:100%;height:auto;padding:var(--art-padding);pointer-events:none;display:none;position:absolute;inset:0 0 auto}.art-video-player .art-notice .art-notice-inner{border-radius:var(--art-border-radius);background-color:var(--art-tip-background);padding:5px;line-height:1;display:inline-flex}.art-video-player.art-notice-show .art-notice{display:flex}.art-video-player .art-contextmenus{z-index:120;border-radius:var(--art-border-radius);background-color:var(--art-widget-background);min-width:var(--art-contextmenus-min-width);flex-direction:column;padding:5px 0;font-size:12px;display:none;position:absolute}.art-video-player .art-contextmenus .art-contextmenu{cursor:pointer;border-bottom:1px solid #ffffff1a;padding:10px 15px;display:flex}.art-video-player .art-contextmenus .art-contextmenu span{padding:0 8px}.art-video-player .art-contextmenus .art-contextmenu span:hover,.art-video-player .art-contextmenus .art-contextmenu span.art-current{color:var(--art-theme)}.art-video-player .art-contextmenus .art-contextmenu:hover{background-color:#ffffff1a}.art-video-player .art-contextmenus .art-contextmenu:last-child{border-bottom:none}.art-video-player.art-contextmenu-show .art-contextmenus{display:flex}.art-video-player .art-settings{z-index:90;border-radius:var(--art-border-radius);max-height:var(--art-settings-max-height);left:auto;right:var(--art-padding);bottom:var(--art-control-height);transition:all var(--art-transition-duration)ease;background-color:var(--art-widget-background);flex-direction:column;display:none;position:absolute;overflow:hidden auto}.art-video-player .art-settings .art-setting-panel{flex-direction:column;display:none}.art-video-player .art-settings .art-setting-panel.art-current{display:flex}.art-video-player .art-settings .art-setting-panel .art-setting-item{cursor:pointer;transition:background-color var(--art-transition-duration)ease;justify-content:space-between;align-items:center;padding:0 5px;display:flex;overflow:hidden}.art-video-player .art-settings .art-setting-panel .art-setting-item:hover{background-color:#ffffff1a}.art-video-player .art-settings .art-setting-panel .art-setting-item.art-current{color:var(--art-theme)}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-icon-check{visibility:hidden;height:15px}.art-video-player .art-settings .art-setting-panel .art-setting-item.art-current .art-icon-check{visibility:visible}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left{flex-shrink:0;justify-content:center;align-items:center;gap:5px;display:flex}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left .art-setting-item-left-icon{height:var(--art-settings-icon-size);width:var(--art-settings-icon-size);justify-content:center;align-items:center;display:flex}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right{justify-content:center;align-items:center;gap:5px;font-size:12px;display:flex}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-item-right-tooltip{white-space:nowrap;color:#ffffff80}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-item-right-icon{justify-content:center;align-items:center;min-width:32px;height:24px;display:flex}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-range{appearance:none;background-color:#fff3;outline:none;width:80px;height:3px}.art-video-player .art-settings .art-setting-panel .art-setting-item-back{border-bottom:1px solid #ffffff1a}.art-video-player.art-setting-show .art-settings{display:flex}.art-video-player .art-info{left:var(--art-padding);top:var(--art-padding);z-index:100;border-radius:var(--art-border-radius);background-color:var(--art-widget-background);padding:10px;font-size:12px;display:none;position:absolute}.art-video-player .art-info .art-info-panel{flex-direction:column;gap:5px;display:flex}.art-video-player .art-info .art-info-panel .art-info-item{align-items:center;gap:5px;display:flex}.art-video-player .art-info .art-info-panel .art-info-item .art-info-title{text-align:right;width:100px}.art-video-player .art-info .art-info-panel .art-info-item .art-info-content{text-overflow:ellipsis;white-space:nowrap;user-select:all;width:250px;overflow:hidden}.art-video-player .art-info .art-info-close{cursor:pointer;position:absolute;top:5px;right:5px}.art-video-player.art-info-show .art-info{display:flex}.art-hide-cursor *{cursor:none!important}.art-video-player[data-aspect-ratio]{overflow:hidden}.art-video-player[data-aspect-ratio] .art-video{object-fit:fill;box-sizing:content-box}.art-fullscreen{--art-progress-height:8px;--art-indicator-size:20px;--art-control-height:60px;--art-control-icon-scale:1.3}.art-fullscreen-web{--art-progress-height:8px;--art-indicator-size:20px;--art-control-height:60px;--art-control-icon-scale:1.3;z-index:var(--art-fullscreen-web-index);width:100%;height:100%;position:fixed;inset:0}.art-mini-popup{z-index:9999;border-radius:var(--art-border-radius);cursor:move;user-select:none;background:#000;width:320px;height:180px;transition:opacity .2s;position:fixed;overflow:hidden;box-shadow:0 0 5px #00000080}.art-mini-popup svg{fill:#fff}.art-mini-popup .art-video{pointer-events:none}.art-mini-popup .art-mini-close{z-index:20;cursor:pointer;opacity:0;transition:opacity .2s;position:absolute;top:10px;right:10px}.art-mini-popup .art-mini-state{z-index:30;pointer-events:none;opacity:0;background-color:#00000040;justify-content:center;align-items:center;width:100%;height:100%;transition:opacity .2s;display:flex;position:absolute;inset:0}.art-mini-popup .art-mini-state .art-icon{opacity:.75;cursor:pointer;pointer-events:auto;transition:transform .2s;transform:scale(3)}.art-mini-popup .art-mini-state .art-icon:active{transform:scale(2.5)}.art-mini-popup.art-mini-dragging{opacity:.9}.art-mini-popup:hover .art-mini-close,.art-mini-popup:hover .art-mini-state{opacity:1}.art-video-player[data-flip=horizontal] .art-video{transform:scaleX(-1)}.art-video-player[data-flip=vertical] .art-video{transform:scaleY(-1)}.art-video-player .art-layer-lock{height:var(--art-lock-size);width:var(--art-lock-size);top:50%;left:var(--art-padding);background-color:var(--art-tip-background);border-radius:50%;justify-content:center;align-items:center;display:none;position:absolute;transform:translateY(-50%)}.art-video-player .art-layer-auto-playback{border-radius:var(--art-border-radius);left:var(--art-padding);bottom:calc(var(--art-control-height) + var(--art-bottom-gap) + 10px);background-color:var(--art-widget-background);align-items:center;gap:10px;padding:10px;line-height:1;display:none;position:absolute}.art-video-player .art-layer-auto-playback .art-auto-playback-close{cursor:pointer;justify-content:center;align-items:center;display:flex}.art-video-player .art-layer-auto-playback .art-auto-playback-close svg{width:15px;height:15px;fill:var(--art-theme)}.art-video-player .art-layer-auto-playback .art-auto-playback-jump{color:var(--art-theme);cursor:pointer}.art-video-player.art-lock .art-subtitle{bottom:var(--art-subtitle-bottom)!important}.art-video-player.art-mini-progress-bar .art-bottom,.art-video-player.art-lock .art-bottom{opacity:1;background-image:none;padding:0}.art-video-player.art-mini-progress-bar .art-bottom .art-controls,.art-video-player.art-lock .art-bottom .art-controls,.art-video-player.art-mini-progress-bar .art-bottom .art-progress,.art-video-player.art-lock .art-bottom .art-progress{transform:translateY(calc(var(--art-control-height) + var(--art-bottom-gap) + var(--art-progress-height)/4))}.art-video-player.art-mini-progress-bar .art-bottom .art-progress-indicator,.art-video-player.art-lock .art-bottom .art-progress-indicator{display:none!important}.art-video-player.art-control-show .art-layer-lock{display:flex}.art-control-selector{justify-content:center;display:flex;position:relative}.art-control-selector .art-selector-list{text-align:center;border-radius:var(--art-border-radius);opacity:0;pointer-events:none;bottom:var(--art-control-height);max-height:var(--art-selector-max-height);background-color:var(--art-widget-background);transition:all var(--art-transition-duration)ease;flex-direction:column;align-items:center;display:flex;position:absolute;overflow:hidden auto;transform:translateY(10px)}.art-control-selector .art-selector-list .art-selector-item{flex-shrink:0;justify-content:center;align-items:center;width:100%;padding:10px 15px;line-height:1;display:flex}.art-control-selector .art-selector-list .art-selector-item:hover{background-color:#ffffff1a}.art-control-selector .art-selector-list .art-selector-item:hover,.art-control-selector .art-selector-list .art-selector-item.art-current{color:var(--art-theme)}.art-control-selector:hover .art-selector-list{opacity:1;pointer-events:auto;transform:translateY(0)}[class*=hint--]{font-style:normal;display:inline-block;position:relative}[class*=hint--]:before,[class*=hint--]:after{visibility:hidden;opacity:0;z-index:1000000;pointer-events:none;transition:all .3s;position:absolute;transform:translate(0,0)}[class*=hint--]:hover:before,[class*=hint--]:hover:after{visibility:visible;opacity:1;transition-delay:.1s}[class*=hint--]:before{content:"";z-index:1000001;background:0 0;border:6px solid #0000;position:absolute}[class*=hint--]:after{color:#fff;white-space:nowrap;background:#000;padding:8px 10px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:12px;line-height:12px}[class*=hint--][aria-label]:after{content:attr(aria-label)}[class*=hint--][data-hint]:after{content:attr(data-hint)}[aria-label=""]:before,[aria-label=""]:after,[data-hint=""]:before,[data-hint=""]:after{display:none!important}.hint--top-left:before,.hint--top-right:before,.hint--top:before{border-top-color:#000}.hint--bottom-left:before,.hint--bottom-right:before,.hint--bottom:before{border-bottom-color:#000}.hint--left:before{border-left-color:#000}.hint--right:before{border-right-color:#000}.hint--top:before{margin-bottom:-11px}.hint--top:before,.hint--top:after{bottom:100%;left:50%}.hint--top:before{left:calc(50% - 6px)}.hint--top:after{transform:translate(-50%)}.hint--top:hover:before{transform:translateY(-8px)}.hint--top:hover:after{transform:translate(-50%)translateY(-8px)}.hint--bottom:before{margin-top:-11px}.hint--bottom:before,.hint--bottom:after{top:100%;left:50%}.hint--bottom:before{left:calc(50% - 6px)}.hint--bottom:after{transform:translate(-50%)}.hint--bottom:hover:before{transform:translateY(8px)}.hint--bottom:hover:after{transform:translate(-50%)translateY(8px)}.hint--right:before{margin-bottom:-6px;margin-left:-11px}.hint--right:after{margin-bottom:-14px}.hint--right:before,.hint--right:after{bottom:50%;left:100%}.hint--right:hover:before,.hint--right:hover:after{transform:translate(8px)}.hint--left:before{margin-bottom:-6px;margin-right:-11px}.hint--left:after{margin-bottom:-14px}.hint--left:before,.hint--left:after{bottom:50%;right:100%}.hint--left:hover:before,.hint--left:hover:after{transform:translate(-8px)}.hint--top-left:before{margin-bottom:-11px}.hint--top-left:before,.hint--top-left:after{bottom:100%;left:50%}.hint--top-left:before{left:calc(50% - 6px)}.hint--top-left:after{margin-left:12px;transform:translate(-100%)}.hint--top-left:hover:before{transform:translateY(-8px)}.hint--top-left:hover:after{transform:translate(-100%)translateY(-8px)}.hint--top-right:before{margin-bottom:-11px}.hint--top-right:before,.hint--top-right:after{bottom:100%;left:50%}.hint--top-right:before{left:calc(50% - 6px)}.hint--top-right:after{margin-left:-12px;transform:translate(0)}.hint--top-right:hover:before,.hint--top-right:hover:after{transform:translateY(-8px)}.hint--bottom-left:before{margin-top:-11px}.hint--bottom-left:before,.hint--bottom-left:after{top:100%;left:50%}.hint--bottom-left:before{left:calc(50% - 6px)}.hint--bottom-left:after{margin-left:12px;transform:translate(-100%)}.hint--bottom-left:hover:before{transform:translateY(8px)}.hint--bottom-left:hover:after{transform:translate(-100%)translateY(8px)}.hint--bottom-right:before{margin-top:-11px}.hint--bottom-right:before,.hint--bottom-right:after{top:100%;left:50%}.hint--bottom-right:before{left:calc(50% - 6px)}.hint--bottom-right:after{margin-left:-12px;transform:translate(0)}.hint--bottom-right:hover:before,.hint--bottom-right:hover:after{transform:translateY(8px)}.hint--small:after,.hint--medium:after,.hint--large:after{white-space:normal;word-wrap:break-word;line-height:1.4em}.hint--small:after{width:80px}.hint--medium:after{width:150px}.hint--large:after{width:300px}[class*=hint--]:after{text-shadow:0 -1px #000;box-shadow:4px 4px 8px #0000004d}.hint--error:after{text-shadow:0 -1px #592726;background-color:#b34e4d}.hint--error.hint--top-left:before,.hint--error.hint--top-right:before,.hint--error.hint--top:before{border-top-color:#b34e4d}.hint--error.hint--bottom-left:before,.hint--error.hint--bottom-right:before,.hint--error.hint--bottom:before{border-bottom-color:#b34e4d}.hint--error.hint--left:before{border-left-color:#b34e4d}.hint--error.hint--right:before{border-right-color:#b34e4d}.hint--warning:after{text-shadow:0 -1px #6c5328;background-color:#c09854}.hint--warning.hint--top-left:before,.hint--warning.hint--top-right:before,.hint--warning.hint--top:before{border-top-color:#c09854}.hint--warning.hint--bottom-left:before,.hint--warning.hint--bottom-right:before,.hint--warning.hint--bottom:before{border-bottom-color:#c09854}.hint--warning.hint--left:before{border-left-color:#c09854}.hint--warning.hint--right:before{border-right-color:#c09854}.hint--info:after{text-shadow:0 -1px #1a3c4d;background-color:#3986ac}.hint--info.hint--top-left:before,.hint--info.hint--top-right:before,.hint--info.hint--top:before{border-top-color:#3986ac}.hint--info.hint--bottom-left:before,.hint--info.hint--bottom-right:before,.hint--info.hint--bottom:before{border-bottom-color:#3986ac}.hint--info.hint--left:before{border-left-color:#3986ac}.hint--info.hint--right:before{border-right-color:#3986ac}.hint--success:after{text-shadow:0 -1px #1a321a;background-color:#458746}.hint--success.hint--top-left:before,.hint--success.hint--top-right:before,.hint--success.hint--top:before{border-top-color:#458746}.hint--success.hint--bottom-left:before,.hint--success.hint--bottom-right:before,.hint--success.hint--bottom:before{border-bottom-color:#458746}.hint--success.hint--left:before{border-left-color:#458746}.hint--success.hint--right:before{border-right-color:#458746}.hint--always:after,.hint--always:before{opacity:1;visibility:visible}.hint--always.hint--top:before{transform:translateY(-8px)}.hint--always.hint--top:after{transform:translate(-50%)translateY(-8px)}.hint--always.hint--top-left:before{transform:translateY(-8px)}.hint--always.hint--top-left:after{transform:translate(-100%)translateY(-8px)}.hint--always.hint--top-right:before,.hint--always.hint--top-right:after{transform:translateY(-8px)}.hint--always.hint--bottom:before{transform:translateY(8px)}.hint--always.hint--bottom:after{transform:translate(-50%)translateY(8px)}.hint--always.hint--bottom-left:before{transform:translateY(8px)}.hint--always.hint--bottom-left:after{transform:translate(-100%)translateY(8px)}.hint--always.hint--bottom-right:before,.hint--always.hint--bottom-right:after{transform:translateY(8px)}.hint--always.hint--left:before,.hint--always.hint--left:after{transform:translate(-8px)}.hint--always.hint--right:before,.hint--always.hint--right:after{transform:translate(8px)}.hint--rounded:after{border-radius:4px}.hint--no-animate:before,.hint--no-animate:after{transition-duration:0s}.hint--bounce:before,.hint--bounce:after{-webkit-transition:opacity .3s,visibility .3s,-webkit-transform .3s cubic-bezier(.71,1.7,.77,1.24);-moz-transition:opacity .3s,visibility .3s,-moz-transform .3s cubic-bezier(.71,1.7,.77,1.24);transition:opacity .3s,visibility .3s,transform .3s cubic-bezier(.71,1.7,.77,1.24)}.hint--no-shadow:before,.hint--no-shadow:after{text-shadow:initial;box-shadow:initial}.hint--no-arrow:before{display:none}.art-video-player.art-mobile{--art-bottom-gap:10px;--art-control-height:38px;--art-control-icon-scale:1;--art-state-size:60px;--art-settings-max-height:180px;--art-selector-max-height:180px;--art-indicator-scale:1;--art-control-opacity:1}.art-video-player.art-mobile .art-controls-left{margin-left:calc(var(--art-padding)/-1)}.art-video-player.art-mobile .art-controls-right{margin-right:calc(var(--art-padding)/-1)}'},{}],g7VGh:[function(a,h,o,m){h.exports=function(){function e(l){return(e=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(c){return typeof c}:function(c){return c&&typeof Symbol=="function"&&c.constructor===Symbol&&c!==Symbol.prototype?"symbol":typeof c})(l)}var t=Object.prototype.toString,u=function(l){if(l===void 0)return"undefined";if(l===null)return"null";var c=e(l);if(c==="boolean")return"boolean";if(c==="string")return"string";if(c==="number")return"number";if(c==="symbol")return"symbol";if(c==="function")return r(l)==="GeneratorFunction"?"generatorfunction":"function";if(Array.isArray?Array.isArray(l):l instanceof Array)return"array";if(l.constructor&&typeof l.constructor.isBuffer=="function"&&l.constructor.isBuffer(l))return"buffer";if(function(p){try{if(typeof p.length=="number"&&typeof p.callee=="function")return!0}catch(d){if(d.message.indexOf("callee")!==-1)return!0}return!1}(l))return"arguments";if(l instanceof Date||typeof l.toDateString=="function"&&typeof l.getDate=="function"&&typeof l.setDate=="function")return"date";if(l instanceof Error||typeof l.message=="string"&&l.constructor&&typeof l.constructor.stackTraceLimit=="number")return"error";if(l instanceof RegExp||typeof l.flags=="string"&&typeof l.ignoreCase=="boolean"&&typeof l.multiline=="boolean"&&typeof l.global=="boolean")return"regexp";switch(r(l)){case"Symbol":return"symbol";case"Promise":return"promise";case"WeakMap":return"weakmap";case"WeakSet":return"weakset";case"Map":return"map";case"Set":return"set";case"Int8Array":return"int8array";case"Uint8Array":return"uint8array";case"Uint8ClampedArray":return"uint8clampedarray";case"Int16Array":return"int16array";case"Uint16Array":return"uint16array";case"Int32Array":return"int32array";case"Uint32Array":return"uint32array";case"Float32Array":return"float32array";case"Float64Array":return"float64array"}if(typeof l.throw=="function"&&typeof l.return=="function"&&typeof l.next=="function")return"generator";switch(c=t.call(l)){case"[object Object]":return"object";case"[object Map Iterator]":return"mapiterator";case"[object Set Iterator]":return"setiterator";case"[object String Iterator]":return"stringiterator";case"[object Array Iterator]":return"arrayiterator"}return c.slice(8,-1).toLowerCase().replace(/\s/g,"")};function r(l){return l.constructor?l.constructor.name:null}function i(l,c){var p=2","license":"MIT","homepage":"https://artplayer.org","repository":{"type":"git","url":"git+https://github.com/zhw2590582/ArtPlayer.git"},"bugs":{"url":"https://github.com/zhw2590582/ArtPlayer/issues"},"keywords":["html5","video","player"],"exports":{".":{"types":"./types/artplayer.d.ts","import":"./dist/artplayer.mjs","require":"./dist/artplayer.js"},"./legacy":{"types":"./types/artplayer.d.ts","import":"./dist/artplayer.legacy.js","require":"./dist/artplayer.legacy.js"},"./i18n/*":{"types":"./types/i18n.d.ts","import":"./dist/i18n/*.mjs","require":"./dist/i18n/*.js"}},"main":"./dist/artplayer.js","module":"./dist/artplayer.mjs","types":"./types/artplayer.d.ts","typesVersions":{"*":{"i18n/*":["types/i18n.d.ts"],"legacy":["types/artplayer.d.ts"]}},"legacy":"./dist/artplayer.legacy.js","browserslist":"last 1 Chrome version","dependencies":{"option-validator":"^2.0.6"}}')},{}],eJfh8:[function(a,h,o,m){a("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(o),o.default={properties:["audioTracks","autoplay","buffered","controller","controls","crossOrigin","currentSrc","currentTime","defaultMuted","defaultPlaybackRate","duration","ended","error","loop","mediaGroup","muted","networkState","paused","playbackRate","played","preload","readyState","seekable","seeking","src","startDate","textTracks","videoTracks","volume"],methods:["addTextTrack","canPlayType","load","play","pause"],events:["abort","canplay","canplaythrough","durationchange","emptied","ended","error","loadeddata","loadedmetadata","loadstart","pause","play","playing","progress","ratechange","seeked","seeking","stalled","suspend","timeupdate","volumechange","waiting"],prototypes:["width","height","videoWidth","videoHeight","poster","webkitDecodedFrameCount","webkitDroppedFrameCount","playsInline","webkitSupportsFullscreen","webkitDisplayingFullscreen","onenterpictureinpicture","onleavepictureinpicture","disablePictureInPicture","cancelVideoFrameCallback","requestVideoFrameCallback","getVideoPlaybackQuality","requestPictureInPicture","webkitEnterFullScreen","webkitEnterFullscreen","webkitExitFullScreen","webkitExitFullscreen"]}},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],loqXi:[function(a,h,o,m){o.interopDefault=function(e){return e&&e.__esModule?e:{default:e}},o.defineInteropFlag=function(e){Object.defineProperty(e,"__esModule",{value:!0})},o.exportAll=function(e,t){return Object.keys(e).forEach(function(u){u==="default"||u==="__esModule"||Object.prototype.hasOwnProperty.call(t,u)||Object.defineProperty(t,u,{enumerable:!0,get:function(){return e[u]}})}),t},o.export=function(e,t,u){Object.defineProperty(e,t,{enumerable:!0,get:u})}},{}],"9zso8":[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o);var t=a("../utils"),u=a("../utils/component"),r=e.interopDefault(u),i=a("./aspectRatio"),n=e.interopDefault(i),s=a("./close"),l=e.interopDefault(s),c=a("./flip"),p=e.interopDefault(c),d=a("./info"),g=e.interopDefault(d),y=a("./playbackRate"),x=e.interopDefault(y),f=a("./version"),v=e.interopDefault(f);class w extends r.default{constructor(E){super(E),this.name="contextmenu",this.$parent=E.template.$contextmenu,t.isMobile||this.init()}init(){let{option:E,proxy:S,template:{$player:$,$contextmenu:C}}=this.art;E.playbackRate&&this.add((0,x.default)({name:"playbackRate",index:10})),E.aspectRatio&&this.add((0,n.default)({name:"aspectRatio",index:20})),E.flip&&this.add((0,p.default)({name:"flip",index:30})),this.add((0,g.default)({name:"info",index:40})),this.add((0,v.default)({name:"version",index:50})),this.add((0,l.default)({name:"close",index:60}));for(let T=0;T{if(!this.art.constructor.CONTEXTMENU)return;T.preventDefault(),this.show=!0;let q=T.clientX,B=T.clientY,{height:k,width:b,left:I,top:F}=(0,t.getRect)($),{height:D,width:M}=(0,t.getRect)(C),L=q-I,O=B-F;q+M>I+b&&(L=b-M),B+D>F+k&&(O=k-D),(0,t.setStyles)(C,{top:`${O}px`,left:`${L}px`})}),S($,"click",T=>{(0,t.includeFromEvent)(T,C)||(this.show=!1)}),this.art.on("blur",()=>{this.show=!1})}}o.default=w},{"../utils":"aBlEo","../utils/component":"idCEj","./aspectRatio":"6XHP2","./close":"eF6AX","./flip":"7Wg1P","./info":"fjRnU","./playbackRate":"hm1DY","./version":"aJBeL","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],aBlEo:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o);var t=a("./compatibility");e.exportAll(t,o);var u=a("./dom");e.exportAll(u,o);var r=a("./error");e.exportAll(r,o);var i=a("./file");e.exportAll(i,o);var n=a("./format");e.exportAll(n,o);var s=a("./property");e.exportAll(s,o);var l=a("./subtitle");e.exportAll(l,o);var c=a("./time");e.exportAll(c,o)},{"./compatibility":"jg0yq","./dom":"eANXw","./error":"4FwTI","./file":"i2JbS","./format":"dy9GH","./property":"jY49c","./subtitle":"ke7ox","./time":"f7gsx","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],jg0yq:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"userAgent",()=>t),e.export(o,"isSafari",()=>u),e.export(o,"isIOS",()=>r),e.export(o,"isIOS13",()=>i),e.export(o,"isMobile",()=>n),e.export(o,"isBrowser",()=>s);let t=(globalThis==null?void 0:globalThis.CUSTOM_USER_AGENT)??(typeof navigator<"u"?navigator.userAgent:""),u=/^(?:(?!chrome|android).)*safari/i.test(t),r=/iPad|iPhone|iPod/i.test(t)&&!window.MSStream,i=r||t.includes("Macintosh")&&navigator.maxTouchPoints>=1,n=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(t)||i,s=typeof window<"u"&&typeof document<"u"},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],eANXw:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"query",()=>u),e.export(o,"queryAll",()=>r),e.export(o,"addClass",()=>i),e.export(o,"removeClass",()=>n),e.export(o,"hasClass",()=>s),e.export(o,"append",()=>l),e.export(o,"remove",()=>c),e.export(o,"setStyle",()=>p),e.export(o,"setStyles",()=>d),e.export(o,"getStyle",()=>g),e.export(o,"siblings",()=>y),e.export(o,"inverseClass",()=>x),e.export(o,"tooltip",()=>f),e.export(o,"isInViewport",()=>v),e.export(o,"includeFromEvent",()=>w),e.export(o,"replaceElement",()=>j),e.export(o,"createElement",()=>E),e.export(o,"getIcon",()=>S),e.export(o,"setStyleText",()=>$),e.export(o,"supportsFlex",()=>C),e.export(o,"getRect",()=>T),e.export(o,"loadImg",()=>q),e.export(o,"getComposedPath",()=>B);var t=a("./compatibility");function u(k,b=document){return b.querySelector(k)}function r(k,b=document){return Array.from(b.querySelectorAll(k))}function i(k,b){return k.classList.add(b)}function n(k,b){return k.classList.remove(b)}function s(k,b){return k.classList.contains(b)}function l(k,b){return b instanceof Element?k.appendChild(b):k.insertAdjacentHTML("beforeend",String(b)),k.lastElementChild||k.lastChild}function c(k){return k.parentNode.removeChild(k)}function p(k,b,I){return k.style[b]=I,k}function d(k,b){for(let I in b)p(k,I,b[I]);return k}function g(k,b,I=!0){let F=window.getComputedStyle(k,null).getPropertyValue(b);return I?Number.parseFloat(F):F}function y(k){return Array.from(k.parentElement.children).filter(b=>b!==k)}function x(k,b){y(k).forEach(I=>n(I,b)),i(k,b)}function f(k,b,I="top"){t.isMobile||(k.setAttribute("aria-label",b),i(k,"hint--rounded"),i(k,`hint--${I}`))}function v(k,b=0){let I=k.getBoundingClientRect(),F=window.innerHeight||document.documentElement.clientHeight,D=window.innerWidth||document.documentElement.clientWidth,M=I.top-b<=F&&I.top+I.height+b>=0,L=I.left-b<=D+b&&I.left+I.width+b>=0;return M&&L}function w(k,b){return B(k).includes(b)}function j(k,b){return b.parentNode.replaceChild(k,b),k}function E(k){return document.createElement(k)}function S(k="",b=""){let I=E("i");return i(I,"art-icon"),i(I,`art-icon-${k}`),l(I,b),I}function $(k,b){let I=document.getElementById(k);I||((I=document.createElement("style")).id=k,document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{document.head.appendChild(I)}):(document.head||document.documentElement).appendChild(I)),I.textContent=b}function C(){let k=document.createElement("div");return k.style.display="flex",k.style.display==="flex"}function T(k){return k.getBoundingClientRect()}function q(k,b){return new Promise((I,F)=>{let D=new Image;D.onload=function(){if(b&&b!==1){let M=document.createElement("canvas"),L=M.getContext("2d");M.width=D.width*b,M.height=D.height*b,L.drawImage(D,0,0,M.width,M.height),M.toBlob(O=>{let P=URL.createObjectURL(O),_=new Image;_.onload=function(){I(_)},_.onerror=function(){URL.revokeObjectURL(P),F(Error(`Image load failed: ${k}`))},_.src=P})}else I(D)},D.onerror=function(){F(Error(`Image load failed: ${k}`))},D.src=k})}function B(k){if(k.composedPath)return k.composedPath();let b=[],I=k.target;for(;I;)b.push(I),I=I.parentNode;return b.includes(window)||window===void 0||b.push(window),b}},{"./compatibility":"jg0yq","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"4FwTI":[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"ArtPlayerError",()=>t),e.export(o,"errorHandle",()=>u);class t extends Error{constructor(i,n){super(i),typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,n||this.constructor),this.name="ArtPlayerError"}}function u(r,i){if(!r)throw new t(i);return r}},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],i2JbS:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");function t(u,r){let i=document.createElement("a");i.style.display="none",i.href=u,i.download=r,document.body.appendChild(i),i.click(),document.body.removeChild(i)}e.defineInteropFlag(o),e.export(o,"getExt",()=>function u(r){return r.includes("?")?u(r.split("?")[0]):r.includes("#")?u(r.split("#")[0]):r.trim().toLowerCase().split(".").pop()}),e.export(o,"download",()=>t)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],dy9GH:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");function t(s,l,c){return Math.max(Math.min(s,Math.max(l,c)),Math.min(l,c))}function u(s){return s.charAt(0).toUpperCase()+s.slice(1)}function r(s){if(!s)return"00:00";let l=Math.floor(s/3600),c=Math.floor((s-3600*l)/60),p=Math.floor(s-3600*l-60*c);return(l>0?[l,c,p]:[c,p]).map(d=>d<10?`0${d}`:String(d)).join(":")}function i(s){return s.replace(/[&<>'"]/g,l=>({"&":"&","<":"<",">":">","'":"'",'"':"""})[l]||l)}function n(s){let l={"&":"&","<":"<",">":">","'":"'",""":'"'},c=RegExp(`(${Object.keys(l).join("|")})`,"g");return s.replace(c,p=>l[p]||p)}e.defineInteropFlag(o),e.export(o,"clamp",()=>t),e.export(o,"capitalize",()=>u),e.export(o,"secondToTime",()=>r),e.export(o,"escape",()=>i),e.export(o,"unescape",()=>n)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],jY49c:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"def",()=>t),e.export(o,"has",()=>r),e.export(o,"get",()=>i),e.export(o,"mergeDeep",()=>function n(...s){let l=c=>c&&typeof c=="object"&&!Array.isArray(c);return s.reduce((c,p)=>(Object.keys(p).forEach(d=>{let g=c[d],y=p[d];Array.isArray(g)&&Array.isArray(y)?c[d]=g.concat(...y):l(g)&&l(y)?c[d]=n(g,y):c[d]=y}),c),{})});let t=Object.defineProperty,{hasOwnProperty:u}=Object.prototype;function r(n,s){return u.call(n,s)}function i(n,s){return Object.getOwnPropertyDescriptor(n,s)}},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],ke7ox:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");function t(i){return`WEBVTT \r -\r -`.concat(i.replace(/(\d\d:\d\d:\d\d)[,.](\d+)/g,(n,s,l)=>{let c=l.slice(0,3);return l.length===1&&(c=`${l}00`),l.length===2&&(c=`${l}0`),`${s},${c}`}).replace(/\{\\([ibu])\}/g,"").replace(/\{\\([ibu])1\}/g,"<$1>").replace(/\{([ibu])\}/g,"<$1>").replace(/\{\/([ibu])\}/g,"").replace(/(\d\d:\d\d:\d\d),(\d\d\d)/g,"$1.$2").replace(/\{[\s\S]*?\}/g,"").concat(`\r -\r -`))}function u(i){return URL.createObjectURL(new Blob([i],{type:"text/vtt"}))}function r(i){let n=RegExp("Dialogue:\\s\\d,(\\d+:\\d\\d:\\d\\d.\\d\\d),(\\d+:\\d\\d:\\d\\d.\\d\\d),([^,]*),([^,]*),(?:[^,]*,){4}([\\s\\S]*)$","i");function s(l=""){return l.split(/[:.]/).map((c,p,d)=>{if(p===d.length-1){if(c.length===1)return`.${c}00`;if(c.length===2)return`.${c}0`}else if(c.length===1)return(p===0?"0":":0")+c;return p===0?c:p===d.length-1?`.${c}`:`:${c}`}).join("")}return`WEBVTT ${i.split(/\r?\n/).map(l=>{let c=l.match(n);return c?{start:s(c[1].trim()),end:s(c[2].trim()),text:c[5].replace(/\{[\s\S]*?\}/g,"").replace(/(\\N)/g,` -`).trim().split(/\r?\n/).map(p=>p.trim()).join(` -`)}:null}).filter(l=>l).map((l,c)=>l?`${c+1} ${l.start} --> ${l.end} ${l.text}`:"").filter(l=>l.trim()).join(` - -`)}`}e.defineInteropFlag(o),e.export(o,"srtToVtt",()=>t),e.export(o,"vttToBlob",()=>u),e.export(o,"assToVtt",()=>r)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],f7gsx:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");function t(i=0){return new Promise(n=>setTimeout(n,i))}function u(i,n){let s;return function(...l){let c=()=>(s=null,i.apply(this,l));clearTimeout(s),s=setTimeout(c,n)}}function r(i,n){let s=!1;return function(...l){s||(i.apply(this,l),s=!0,setTimeout(()=>{s=!1},n))}}e.defineInteropFlag(o),e.export(o,"sleep",()=>t),e.export(o,"debounce",()=>u),e.export(o,"throttle",()=>r)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],idCEj:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o);var t=a("option-validator"),u=e.interopDefault(t),r=a("../scheme"),i=a("./dom"),n=a("./error");o.default=class{constructor(s){this.id=0,this.art=s,this.cache=new Map,this.add=this.add.bind(this),this.remove=this.remove.bind(this),this.update=this.update.bind(this)}get show(){return(0,i.hasClass)(this.art.template.$player,`art-${this.name}-show`)}set show(s){let{$player:l}=this.art.template,c=`art-${this.name}-show`;s?(0,i.addClass)(l,c):(0,i.removeClass)(l,c),this.art.emit(this.name,s)}toggle(){this.show=!this.show}add(s){let l=typeof s=="function"?s(this.art):s;if(l.html=l.html||"",(0,u.default)(l,r.ComponentOption),!this.$parent||!this.name||l.disable)return;let c=l.name||`${this.name}${this.id}`,p=this.cache.get(c);(0,n.errorHandle)(!p,`Can't add an existing [${c}] to the [${this.name}]`),this.id+=1;let d=(0,i.createElement)("div");(0,i.addClass)(d,`art-${this.name}`),(0,i.addClass)(d,`art-${this.name}-${c}`);let g=Array.from(this.$parent.children);d.dataset.index=l.index||this.id;let y=g.find(f=>Number(f.dataset.index)>=Number(d.dataset.index));y?y.insertAdjacentElement("beforebegin",d):(0,i.append)(this.$parent,d),l.html&&(0,i.append)(d,l.html),l.style&&(0,i.setStyles)(d,l.style),l.tooltip&&(0,i.tooltip)(d,l.tooltip);let x=[];if(l.click){let f=this.art.events.proxy(d,"click",v=>{v.preventDefault(),l.click.call(this.art,this,v)});x.push(f)}return l.selector&&["left","right"].includes(l.position)&&this.selector(l,d,x),this[c]=d,this.cache.set(c,{$ref:d,events:x,option:l}),l.mounted&&l.mounted.call(this.art,d),d}remove(s){let l=this.cache.get(s);(0,n.errorHandle)(l,`Can't find [${s}] from the [${this.name}]`),l.option.beforeUnmount&&l.option.beforeUnmount.call(this.art,l.$ref);for(let c=0;cp);var t=a("../utils");let u="array",r="boolean",i="string",n="number",s="object",l="function";function c(d,g,y){return(0,t.errorHandle)(g===i||g===n||d instanceof Element,`${y.join(".")} require '${i}' or 'Element' type`)}let p={html:c,disable:`?${r}`,name:`?${i}`,index:`?${n}`,style:`?${s}`,click:`?${l}`,mounted:`?${l}`,tooltip:`?${i}|${n}`,width:`?${n}`,selector:`?${u}`,onSelect:`?${l}`,switch:`?${r}`,onSwitch:`?${l}`,range:`?${u}`,onRange:`?${l}`,onChange:`?${l}`};o.default={id:i,container:c,url:i,poster:i,type:i,theme:i,lang:i,volume:n,isLive:r,muted:r,autoplay:r,autoSize:r,autoMini:r,loop:r,flip:r,playbackRate:r,aspectRatio:r,screenshot:r,setting:r,hotkey:r,pip:r,mutex:r,backdrop:r,fullscreen:r,fullscreenWeb:r,subtitleOffset:r,miniProgressBar:r,useSSR:r,playsInline:r,lock:r,gesture:r,fastForward:r,autoPlayback:r,autoOrientation:r,airplay:r,proxy:`?${l}`,plugins:[l],layers:[p],contextmenu:[p],settings:[p],controls:[{...p,position:(d,g,y)=>{let x=["top","left","right"];return(0,t.errorHandle)(x.includes(d),`${y.join(".")} only accept ${x.toString()} as parameters`)}}],quality:[{default:`?${r}`,html:i,url:i}],highlight:[{time:n,text:i}],thumbnails:{url:i,number:n,column:n,width:n,height:n,scale:n},subtitle:{url:i,name:i,type:i,style:s,escape:r,encoding:i,onVttLoad:l},moreVideoAttr:s,i18n:s,icons:s,cssVar:s,customType:s}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"6XHP2":[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){return i=>{let{i18n:n,constructor:{ASPECT_RATIO:s}}=i,l=s.map(c=>`${c==="default"?n.get("Default"):c}`).join("");return{...r,html:`${n.get("Aspect Ratio")}: ${l}`,click:(c,p)=>{let{value:d}=p.target.dataset;d&&(i.aspectRatio=d,c.show=!1)},mounted:c=>{let p=(0,t.query)('[data-value="default"]',c);p&&(0,t.inverseClass)(p,"art-current"),i.on("aspectRatio",d=>{let g=(0,t.queryAll)("span",c).find(y=>y.dataset.value===d);g&&(0,t.inverseClass)(g,"art-current")})}}}}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],eF6AX:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");function t(u){return r=>({...u,html:r.i18n.get("Close"),click:i=>{i.show=!1}})}e.defineInteropFlag(o),e.export(o,"default",()=>t)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"7Wg1P":[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){return i=>{let{i18n:n,constructor:{FLIP:s}}=i,l=s.map(c=>`${n.get((0,t.capitalize)(c))}`).join("");return{...r,html:`${n.get("Video Flip")}: ${l}`,click:(c,p)=>{let{value:d}=p.target.dataset;d&&(i.flip=d.toLowerCase(),c.show=!1)},mounted:c=>{let p=(0,t.query)('[data-value="normal"]',c);p&&(0,t.inverseClass)(p,"art-current"),i.on("flip",d=>{let g=(0,t.queryAll)("span",c).find(y=>y.dataset.value===d);g&&(0,t.inverseClass)(g,"art-current")})}}}}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],fjRnU:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");function t(u){return r=>({...u,html:r.i18n.get("Video Info"),click:i=>{r.info.show=!0,i.show=!1}})}e.defineInteropFlag(o),e.export(o,"default",()=>t)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],hm1DY:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){return i=>{let{i18n:n,constructor:{PLAYBACK_RATE:s}}=i,l=s.map(c=>`${c===1?n.get("Normal"):c.toFixed(1)}`).join("");return{...r,html:`${n.get("Play Speed")}: ${l}`,click:(c,p)=>{let{value:d}=p.target.dataset;d&&(i.playbackRate=Number(d),c.show=!1)},mounted:c=>{let p=(0,t.query)('[data-value="1"]',c);p&&(0,t.inverseClass)(p,"art-current"),i.on("video:ratechange",()=>{let d=(0,t.queryAll)("span",c).find(g=>Number(g.dataset.value)===i.playbackRate);d&&(0,t.inverseClass)(d,"art-current")})}}}}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],aJBeL:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>function(u){return{...u,html:`ArtPlayer ${t.version}`}});var t=a("../../package.json")},{"../../package.json":"lh3R5","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],dp1yk:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o);var t=a("../utils"),u=a("../utils/component"),r=e.interopDefault(u),i=a("./airplay"),n=e.interopDefault(i),s=a("./fullscreen"),l=e.interopDefault(s),c=a("./fullscreenWeb"),p=e.interopDefault(c),d=a("./pip"),g=e.interopDefault(d),y=a("./playAndPause"),x=e.interopDefault(y),f=a("./progress"),v=e.interopDefault(f),w=a("./screenshot"),j=e.interopDefault(w),E=a("./setting"),S=e.interopDefault(E),$=a("./time"),C=e.interopDefault($),T=a("./volume"),q=e.interopDefault(T);class B extends r.default{constructor(b){super(b),this.isHover=!1,this.name="control",this.timer=Date.now();let{constructor:I}=b,{$player:F,$bottom:D}=this.art.template;b.on("mousemove",()=>{t.isMobile||(this.show=!0)}),b.on("click",()=>{t.isMobile?this.toggle():this.show=!0}),b.on("document:mousemove",M=>{this.isHover=(0,t.includeFromEvent)(M,D)}),b.on("video:timeupdate",()=>{!b.setting.show&&!this.isHover&&!b.isInput&&b.playing&&this.show&&Date.now()-this.timer>=I.CONTROL_HIDE_TIME&&(this.show=!1)}),b.on("control",M=>{M?((0,t.removeClass)(F,"art-hide-cursor"),(0,t.addClass)(F,"art-hover"),this.timer=Date.now()):((0,t.addClass)(F,"art-hide-cursor"),(0,t.removeClass)(F,"art-hover"))}),this.init()}init(){let{option:b}=this.art;b.isLive||this.add((0,v.default)({name:"progress",position:"top",index:10})),this.add({name:"thumbnails",position:"top",index:20}),this.add((0,x.default)({name:"playAndPause",position:"left",index:10})),this.add((0,q.default)({name:"volume",position:"left",index:20})),b.isLive||this.add((0,C.default)({name:"time",position:"left",index:30})),b.quality.length&&(0,t.sleep)().then(()=>{this.art.quality=b.quality}),b.screenshot&&!t.isMobile&&this.add((0,j.default)({name:"screenshot",position:"right",index:20})),b.setting&&this.add((0,S.default)({name:"setting",position:"right",index:30})),b.pip&&this.add((0,g.default)({name:"pip",position:"right",index:40})),b.airplay&&window.WebKitPlaybackTargetAvailabilityEvent&&this.add((0,n.default)({name:"airplay",position:"right",index:50})),b.fullscreenWeb&&this.add((0,p.default)({name:"fullscreenWeb",position:"right",index:60})),b.fullscreen&&this.add((0,l.default)({name:"fullscreen",position:"right",index:70}));for(let I=0;Ib.selector}),(0,t.def)(_,"$control_item",{get:()=>H}),(0,t.def)(_,"$control_value",{get:()=>M})}let O=D(L,"click",async P=>{let _=(0,t.getComposedPath)(P),H=b.selector.find(U=>U.$control_item===_.find(Z=>U.$control_item===Z));this.check(H),b.onSelect&&(M.innerHTML=await b.onSelect.call(this.art,H,H.$control_item,P))});F.push(O)}}o.default=B},{"../utils":"aBlEo","../utils/component":"idCEj","./airplay":"amOzz","./fullscreen":"3GuBU","./fullscreenWeb":"jj1KV","./pip":"jMeHN","./playAndPause":"u3h8M","./progress":"1XZSS","./screenshot":"dIscA","./setting":"aqA0g","./time":"ihweO","./volume":"fJVWn","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],amOzz:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){return i=>({...r,tooltip:i.i18n.get("AirPlay"),mounted:n=>{let{proxy:s,icons:l}=i;(0,t.append)(n,l.airplay),s(n,"click",()=>i.airplay())}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"3GuBU":[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){return i=>({...r,tooltip:i.i18n.get("Fullscreen"),mounted:n=>{let{proxy:s,icons:l,i18n:c}=i,p=(0,t.append)(n,l.fullscreenOn),d=(0,t.append)(n,l.fullscreenOff);(0,t.setStyle)(d,"display","none"),s(n,"click",()=>{i.fullscreen=!i.fullscreen}),i.on("fullscreen",g=>{g?((0,t.tooltip)(n,c.get("Exit Fullscreen")),(0,t.setStyle)(p,"display","none"),(0,t.setStyle)(d,"display","inline-flex")):((0,t.tooltip)(n,c.get("Fullscreen")),(0,t.setStyle)(p,"display","inline-flex"),(0,t.setStyle)(d,"display","none"))})}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],jj1KV:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){return i=>({...r,tooltip:i.i18n.get("Web Fullscreen"),mounted:n=>{let{proxy:s,icons:l,i18n:c}=i,p=(0,t.append)(n,l.fullscreenWebOn),d=(0,t.append)(n,l.fullscreenWebOff);(0,t.setStyle)(d,"display","none"),s(n,"click",()=>{i.fullscreenWeb=!i.fullscreenWeb}),i.on("fullscreenWeb",g=>{g?((0,t.tooltip)(n,c.get("Exit Web Fullscreen")),(0,t.setStyle)(p,"display","none"),(0,t.setStyle)(d,"display","inline-flex")):((0,t.tooltip)(n,c.get("Web Fullscreen")),(0,t.setStyle)(p,"display","inline-flex"),(0,t.setStyle)(d,"display","none"))})}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],jMeHN:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){return i=>({...r,tooltip:i.i18n.get("PIP Mode"),mounted:n=>{let{proxy:s,icons:l,i18n:c}=i;(0,t.append)(n,l.pip),s(n,"click",()=>{i.pip=!i.pip}),i.on("pip",p=>{(0,t.tooltip)(n,c.get(p?"Exit PIP Mode":"PIP Mode"))})}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],u3h8M:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){return i=>({...r,mounted:n=>{let{proxy:s,icons:l,i18n:c}=i,p=(0,t.append)(n,l.play),d=(0,t.append)(n,l.pause);function g(){(0,t.setStyle)(p,"display","flex"),(0,t.setStyle)(d,"display","none")}function y(){(0,t.setStyle)(p,"display","none"),(0,t.setStyle)(d,"display","flex")}(0,t.tooltip)(p,c.get("Play")),(0,t.tooltip)(d,c.get("Pause")),s(p,"click",()=>{i.play()}),s(d,"click",()=>{i.pause()}),i.playing?y():g(),i.on("video:playing",()=>{y()}),i.on("video:pause",()=>{g()})}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"1XZSS":[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"getPosFromEvent",()=>u),e.export(o,"setCurrentTime",()=>r),e.export(o,"default",()=>i);var t=a("../utils");function u(n,s){let{$progress:l}=n.template,{left:c}=(0,t.getRect)(l),p=t.isMobile?s.touches[0].clientX:s.clientX,d=(0,t.clamp)(p-c,0,l.clientWidth),g=d/l.clientWidth*n.duration,y=(0,t.secondToTime)(g),x=(0,t.clamp)(d/l.clientWidth,0,1);return{second:g,time:y,width:d,percentage:x}}function r(n,s){if(n.isRotate){let l=s.touches[0].clientY/n.height,c=l*n.duration;n.emit("setBar","played",l,s),n.seek=c}else{let{second:l,percentage:c}=u(n,s);n.emit("setBar","played",c,s),n.seek=l}}function i(n){return s=>{let{icons:l,option:c,proxy:p}=s;return{...n,html:'
',mounted:d=>{let g=null,y=!1,x=(0,t.query)(".art-progress-hover",d),f=(0,t.query)(".art-progress-loaded",d),v=(0,t.query)(".art-progress-played",d),w=(0,t.query)(".art-progress-highlight",d),j=(0,t.query)(".art-progress-indicator",d),E=(0,t.query)(".art-progress-tip",d);function S($,C){let{width:T,time:q}=C||u(s,$);E.textContent=q;let B=E.clientWidth;T<=B/2?(0,t.setStyle)(E,"left",0):T>d.clientWidth-B/2?(0,t.setStyle)(E,"left",`${d.clientWidth-B}px`):(0,t.setStyle)(E,"left",`${T-B/2}px`)}l.indicator?(0,t.append)(j,l.indicator):(0,t.setStyle)(j,"backgroundColor","var(--art-theme)"),s.on("setBar",function($,C,T){let q=$==="played"&&T&&t.isMobile;$==="loaded"&&(0,t.setStyle)(f,"width",`${100*C}%`),$==="hover"&&(0,t.setStyle)(x,"width",`${100*C}%`),$==="played"&&((0,t.setStyle)(v,"width",`${100*C}%`),(0,t.setStyle)(j,"left",`${100*C}%`)),q&&((0,t.setStyle)(E,"display","flex"),S(T,{width:d.clientWidth*C,time:(0,t.secondToTime)(C*s.duration)}),clearTimeout(g),g=setTimeout(()=>{(0,t.setStyle)(E,"display","none")},500))}),s.on("video:loadedmetadata",function(){w.textContent="";for(let $=0;$`;(0,t.append)(w,q)}}),s.constructor.USE_RAF?s.on("raf",()=>{s.emit("setBar","played",s.played),s.emit("setBar","loaded",s.loaded)}):(s.on("video:timeupdate",()=>{s.emit("setBar","played",s.played)}),s.on("video:progress",()=>{s.emit("setBar","loaded",s.loaded)}),s.on("video:ended",()=>{s.emit("setBar","played",1)})),s.emit("setBar","loaded",s.loaded||0),t.isMobile||(p(d,"click",$=>{$.target!==j&&r(s,$)}),p(d,"mousemove",$=>{let{percentage:C}=u(s,$);if(s.emit("setBar","hover",C,$),(0,t.setStyle)(E,"display","flex"),(0,t.includeFromEvent)($,w)){let{width:T}=u(s,$),{text:q}=$.target.dataset;E.textContent=q;let B=E.clientWidth;T<=B/2?(0,t.setStyle)(E,"left",0):T>d.clientWidth-B/2?(0,t.setStyle)(E,"left",`${d.clientWidth-B}px`):(0,t.setStyle)(E,"left",`${T-B/2}px`)}else S($)}),p(d,"mouseleave",$=>{(0,t.setStyle)(E,"display","none"),s.emit("setBar","hover",0,$)}),p(d,"mousedown",$=>{y=$.button===0}),s.on("document:mousemove",$=>{if(y){let{second:C,percentage:T}=u(s,$);s.emit("setBar","played",T,$),s.seek=C}}),s.on("document:mouseup",()=>{y&&(y=!1)}))}}}}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],dIscA:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){return i=>({...r,tooltip:i.i18n.get("Screenshot"),mounted:n=>{let{proxy:s,icons:l}=i;(0,t.append)(n,l.screenshot),s(n,"click",()=>{i.screenshot()})}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],aqA0g:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){return i=>({...r,tooltip:i.i18n.get("Show Setting"),mounted:n=>{let{proxy:s,icons:l,i18n:c}=i;(0,t.append)(n,l.setting),s(n,"click",()=>{i.setting.toggle(),i.setting.resize()}),i.on("setting",p=>{(0,t.tooltip)(n,c.get(p?"Hide Setting":"Show Setting"))})}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],ihweO:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){return i=>({...r,style:t.isMobile?{fontSize:"12px",padding:"0 5px"}:{cursor:"auto",padding:"0 10px"},mounted:n=>{function s(){let c=`${(0,t.secondToTime)(i.currentTime)} / ${(0,t.secondToTime)(i.duration)}`;c!==n.textContent&&(n.textContent=c)}s();let l=["video:loadedmetadata","video:timeupdate","video:progress"];for(let c=0;cu);var t=a("../utils");function u(r){return i=>({...r,mounted:n=>{let{proxy:s,icons:l}=i,c=(0,t.append)(n,l.volume),p=(0,t.append)(n,l.volumeClose),d=(0,t.append)(n,'
'),g=(0,t.append)(d,'
'),y=(0,t.append)(g,'
'),x=(0,t.append)(g,'
'),f=(0,t.append)(x,'
'),v=(0,t.append)(f,'
'),w=(0,t.append)(x,'
');function j(S){let{top:$,height:C}=(0,t.getRect)(x);return 1-(S.clientY-$)/C}function E(){if(i.muted||i.volume===0)(0,t.setStyle)(c,"display","none"),(0,t.setStyle)(p,"display","flex"),(0,t.setStyle)(w,"top","100%"),(0,t.setStyle)(v,"top","100%"),y.textContent=0;else{let S=100*i.volume;(0,t.setStyle)(c,"display","flex"),(0,t.setStyle)(p,"display","none"),(0,t.setStyle)(w,"top",`${100-S}%`),(0,t.setStyle)(v,"top",`${100-S}%`),y.textContent=Math.floor(S)}}if(E(),i.on("video:volumechange",E),s(c,"click",()=>{i.muted=!0}),s(p,"click",()=>{i.muted=!1}),t.isMobile)(0,t.setStyle)(d,"display","none");else{let S=!1;s(x,"mousedown",$=>{S=$.button===0,i.volume=j($)}),i.on("document:mousemove",$=>{S&&(i.muted=!1,i.volume=j($))}),i.on("document:mouseup",()=>{S&&(S=!1)})}}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],jmVSD:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o);var t=a("./clickInit"),u=e.interopDefault(t),r=a("./gestureInit"),i=e.interopDefault(r),n=a("./globalInit"),s=e.interopDefault(n),l=a("./hoverInit"),c=e.interopDefault(l),p=a("./moveInit"),d=e.interopDefault(p),g=a("./resizeInit"),y=e.interopDefault(g),x=a("./updateInit"),f=e.interopDefault(x),v=a("./viewInit"),w=e.interopDefault(v);o.default=class{constructor(j){this.destroyEvents=[],this.proxy=this.proxy.bind(this),this.hover=this.hover.bind(this),(0,u.default)(j,this),(0,c.default)(j,this),(0,d.default)(j,this),(0,y.default)(j,this),(0,i.default)(j,this),(0,w.default)(j,this),(0,s.default)(j,this),(0,f.default)(j,this)}proxy(j,E,S,$={}){if(Array.isArray(E))return E.map(T=>this.proxy(j,T,S,$));j.addEventListener(E,S,$);let C=()=>j.removeEventListener(E,S,$);return this.destroyEvents.push(C),C}hover(j,E,S){E&&this.proxy(j,"mouseenter",E),S&&this.proxy(j,"mouseleave",S)}remove(j){let E=this.destroyEvents.indexOf(j);E>-1&&(j(),this.destroyEvents.splice(E,1))}destroy(){for(let j=0;ju);var t=a("../utils");function u(r,i){let{constructor:n,template:{$player:s,$video:l}}=r;function c(d){(0,t.includeFromEvent)(d,s)?(r.isInput=d.target.tagName==="INPUT",r.isFocus=!0,r.emit("focus",d)):(r.isInput=!1,r.isFocus=!1,r.emit("blur",d))}r.on("document:click",c),r.on("document:contextmenu",c);let p=[];i.proxy(l,"click",d=>{let g=Date.now();p.push(g);let{MOBILE_CLICK_PLAY:y,DBCLICK_TIME:x,MOBILE_DBCLICK_PLAY:f,DBCLICK_FULLSCREEN:v}=n,w=p.filter(j=>g-j<=x);switch(w.length){case 1:r.emit("click",d),t.isMobile?!r.isLock&&y&&r.toggle():r.toggle(),p=w;break;case 2:r.emit("dblclick",d),t.isMobile?!r.isLock&&f&&r.toggle():v&&(r.fullscreen=!r.fullscreen),p=[];break;default:p=[]}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"9wEzB":[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>r);var t=a("../control/progress"),u=a("../utils");function r(i,n){if(u.isMobile&&!i.option.isLive){let{$video:s,$progress:l}=i.template,c=null,p=!1,d=0,g=0,y=0,x=v=>{if(v.touches.length===1&&!i.isLock){c===l&&(0,t.setCurrentTime)(i,v),p=!0;let{pageX:w,pageY:j}=v.touches[0];d=w,g=j,y=i.currentTime}},f=v=>{if(v.touches.length===1&&p&&i.duration){let{pageX:w,pageY:j}=v.touches[0],E=function(C,T,q,B){let k=T-B,b=q-C,I=0;if(2>Math.abs(b)&&2>Math.abs(k))return I;let F=180*Math.atan2(k,b)/Math.PI;return F>=-45&&F<45?I=4:F>=45&&F<135?I=1:F>=-135&&F<-45?I=2:(F>=135&&F<=180||F>=-180&&F<-135)&&(I=3),I}(d,g,w,j),S=[3,4].includes(E),$=[1,2].includes(E);if(S&&!i.isRotate||$&&i.isRotate){let C=(0,u.clamp)((w-d)/i.width,-1,1),T=(0,u.clamp)((j-g)/i.height,-1,1),q=i.isRotate?T:C,B=c===s?i.constructor.TOUCH_MOVE_RATIO:1,k=(0,u.clamp)(y+i.duration*q*B,0,i.duration);i.seek=k,i.emit("setBar","played",(0,u.clamp)(k/i.duration,0,1),v),i.notice.show=`${(0,u.secondToTime)(k)} / ${(0,u.secondToTime)(i.duration)}`}}};i.option.gesture&&(n.proxy(s,"touchstart",v=>{c=s,x(v)}),n.proxy(s,"touchmove",f)),n.proxy(l,"touchstart",v=>{c=l,x(v)}),n.proxy(l,"touchmove",f),i.on("document:touchend",()=>{p&&(d=0,g=0,y=0,p=!1,c=null)})}}},{"../control/progress":"1XZSS","../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],ikBrS:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");function t(u,r){let i=["click","mouseup","keydown","touchend","touchmove","mousemove","pointerup","contextmenu","pointermove","visibilitychange","webkitfullscreenchange"],n=["resize","scroll","orientationchange"],s=[];function l(c={}){for(let d=0;d{let g=c.document||p.ownerDocument||document,y=r.proxy(g,d,x=>{u.emit(`document:${d}`,x)});s.push(y)}),n.forEach(d=>{var x;let g=c.window||((x=p.ownerDocument)==null?void 0:x.defaultView)||window,y=r.proxy(g,d,f=>{u.emit(`window:${d}`,f)});s.push(y)})}l(),r.bindGlobalEvents=l}e.defineInteropFlag(o),e.export(o,"default",()=>t)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],jwNq0:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r,i){let{$player:n}=r.template;i.hover(n,s=>{(0,t.addClass)(n,"art-hover"),r.emit("hover",!0,s)},s=>{(0,t.removeClass)(n,"art-hover"),r.emit("hover",!1,s)})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],eqSsP:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");function t(u,r){let{$player:i}=u.template;r.proxy(i,"mousemove",n=>{u.emit("mousemove",n)})}e.defineInteropFlag(o),e.export(o,"default",()=>t)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"42JNz":[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r,i){let{option:n,constructor:s}=r;r.on("resize",()=>{let{aspectRatio:c,notice:p}=r;r.state==="standard"&&n.autoSize&&r.autoSize(),r.aspectRatio=c,p.show=""});let l=(0,t.debounce)(()=>r.emit("resize"),s.RESIZE_TIME);r.on("window:orientationchange",()=>l()),r.on("window:resize",()=>l()),screen&&screen.orientation&&screen.orientation.onchange&&i.proxy(screen.orientation,"change",()=>l())}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"7kM1M":[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");function t(u){if(u.constructor.USE_RAF){let r=null;(function i(){u.playing&&u.emit("raf"),u.isDestroy||(r=requestAnimationFrame(i))})(),u.on("destroy",()=>{cancelAnimationFrame(r)})}}e.defineInteropFlag(o),e.export(o,"default",()=>t)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"2IW9m":[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){let{option:i,constructor:n,template:{$container:s}}=r,l=(0,t.throttle)(()=>{r.emit("view",(0,t.isInViewport)(s,n.SCROLL_GAP))},n.SCROLL_TIME);r.on("window:scroll",()=>l()),r.on("view",c=>{i.autoMini&&(r.mini=!c)})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],dswts:[function(a,h,o,m){a("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(o);var e=a("./utils");o.default=class{constructor(t){this.art=t,this.keys={},t.option.hotkey&&!e.isMobile&&this.init()}init(){let{constructor:t}=this.art;this.add("Escape",()=>{this.art.fullscreenWeb&&(this.art.fullscreenWeb=!1)}),this.add("Space",()=>{this.art.toggle()}),this.add("ArrowLeft",()=>{this.art.backward=t.SEEK_STEP}),this.add("ArrowUp",()=>{this.art.volume+=t.VOLUME_STEP}),this.add("ArrowRight",()=>{this.art.forward=t.SEEK_STEP}),this.add("ArrowDown",()=>{this.art.volume-=t.VOLUME_STEP}),this.art.on("document:keydown",u=>{if(this.art.isFocus){let r=document.activeElement.tagName.toUpperCase(),i=document.activeElement.getAttribute("contenteditable");if(r!=="INPUT"&&r!=="TEXTAREA"&&i!==""&&i!=="true"&&!u.altKey&&!u.ctrlKey&&!u.metaKey&&!u.shiftKey){let n=this.keys[u.code];if(n){u.preventDefault();for(let s=0;s(0,W.getIcon)(ut,ft[ut])})}}},{"bundle-text:./airplay.svg":"gkZgZ","bundle-text:./arrow-left.svg":"kQyD4","bundle-text:./arrow-right.svg":"64ztm","bundle-text:./aspect-ratio.svg":"72LvA","bundle-text:./check.svg":"4QmBo","bundle-text:./close.svg":"j1hoe","bundle-text:./config.svg":"hNZaT","bundle-text:./error.svg":"dKh4l","bundle-text:./flip.svg":"lIEIE","bundle-text:./fullscreen-off.svg":"1533e","bundle-text:./fullscreen-on.svg":"76ut3","bundle-text:./fullscreen-web-off.svg":"3NzMk","bundle-text:./fullscreen-web-on.svg":"12xHc","bundle-text:./loading.svg":"iVcUF","bundle-text:./lock.svg":"1J4so","bundle-text:./pause.svg":"1KgkK","bundle-text:./pip.svg":"4h4tM","bundle-text:./play.svg":"jecAY","bundle-text:./playback-rate.svg":"anPe9","bundle-text:./screenshot.svg":"9BPYQ","bundle-text:./setting.svg":"hsI9k","bundle-text:./state.svg":"gr1ZU","bundle-text:./switch-off.svg":"6kdAr","bundle-text:./switch-on.svg":"ksdMo","bundle-text:./unlock.svg":"iz5Qc","bundle-text:./volume-close.svg":"3OZoa","bundle-text:./volume.svg":"hRYA4","../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],gkZgZ:[function(a,h,o,m){h.exports=''},{}],kQyD4:[function(a,h,o,m){h.exports=''},{}],"64ztm":[function(a,h,o,m){h.exports=''},{}],"72LvA":[function(a,h,o,m){h.exports=''},{}],"4QmBo":[function(a,h,o,m){h.exports=''},{}],j1hoe:[function(a,h,o,m){h.exports=''},{}],hNZaT:[function(a,h,o,m){h.exports=''},{}],dKh4l:[function(a,h,o,m){h.exports=''},{}],lIEIE:[function(a,h,o,m){h.exports=''},{}],"1533e":[function(a,h,o,m){h.exports=''},{}],"76ut3":[function(a,h,o,m){h.exports=''},{}],"3NzMk":[function(a,h,o,m){h.exports=''},{}],"12xHc":[function(a,h,o,m){h.exports=''},{}],iVcUF:[function(a,h,o,m){h.exports=''},{}],"1J4so":[function(a,h,o,m){h.exports=''},{}],"1KgkK":[function(a,h,o,m){h.exports=''},{}],"4h4tM":[function(a,h,o,m){h.exports=''},{}],jecAY:[function(a,h,o,m){h.exports=''},{}],anPe9:[function(a,h,o,m){h.exports=''},{}],"9BPYQ":[function(a,h,o,m){h.exports=''},{}],hsI9k:[function(a,h,o,m){h.exports=''},{}],gr1ZU:[function(a,h,o,m){h.exports=''},{}],"6kdAr":[function(a,h,o,m){h.exports=''},{}],ksdMo:[function(a,h,o,m){h.exports=''},{}],iz5Qc:[function(a,h,o,m){h.exports=''},{}],"3OZoa":[function(a,h,o,m){h.exports=''},{}],hRYA4:[function(a,h,o,m){h.exports=''},{}],kZ0F8:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o);var t=a("./utils"),u=a("./utils/component"),r=e.interopDefault(u);class i extends r.default{constructor(s){super(s),this.name="info",t.isMobile||this.init()}init(){let{proxy:s,constructor:l,template:{$infoPanel:c,$infoClose:p,$video:d}}=this.art;s(p,"click",()=>{this.show=!1});let g=null,y=(0,t.queryAll)("[data-video]",c)||[];this.art.on("destroy",()=>clearTimeout(g)),function x(){for(let f=0;f{(0,t.setStyle)(d,"display","none"),(0,t.setStyle)(g,"display",null)}),p.proxy(l.$state,"click",()=>s.play())}}o.default=i},{"./utils":"aBlEo","./utils/component":"idCEj","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],fPVaU:[function(a,h,o,m){a("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(o);var e=a("./utils");o.default=class{constructor(t){this.art=t,this.timer=null}set show(t){let{constructor:u,template:{$player:r,$noticeInner:i}}=this.art;t?(i.textContent=t instanceof Error?t.message.trim():t,(0,e.addClass)(r,"art-notice-show"),clearTimeout(this.timer),this.timer=setTimeout(()=>{i.textContent="",(0,e.removeClass)(r,"art-notice-show")},u.NOTICE_TIME)):(0,e.removeClass)(r,"art-notice-show")}get show(){let{template:{$player:t}}=this.art;return t.classList.contains("art-notice-show")}}},{"./utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],uR0Sw:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o);var t=a("./airplayMix"),u=e.interopDefault(t),r=a("./aspectRatioMix"),i=e.interopDefault(r),n=a("./attrMix"),s=e.interopDefault(n),l=a("./autoHeightMix"),c=e.interopDefault(l),p=a("./autoSizeMix"),d=e.interopDefault(p),g=a("./cssVarMix"),y=e.interopDefault(g),x=a("./currentTimeMix"),f=e.interopDefault(x),v=a("./durationMix"),w=e.interopDefault(v),j=a("./eventInit"),E=e.interopDefault(j),S=a("./flipMix"),$=e.interopDefault(S),C=a("./fullscreenMix"),T=e.interopDefault(C),q=a("./fullscreenWebMix"),B=e.interopDefault(q),k=a("./loadedMix"),b=e.interopDefault(k),I=a("./miniMix"),F=e.interopDefault(I),D=a("./optionInit"),M=e.interopDefault(D),L=a("./pauseMix"),O=e.interopDefault(L),P=a("./pipMix"),_=e.interopDefault(P),H=a("./playbackRateMix"),U=e.interopDefault(H),Z=a("./playedMix"),rt=e.interopDefault(Z),at=a("./playingMix"),ot=e.interopDefault(at),it=a("./playMix"),nt=e.interopDefault(it),G=a("./posterMix"),V=e.interopDefault(G),st=a("./qualityMix"),J=e.interopDefault(st),lt=a("./rectMix"),Y=e.interopDefault(lt),R=a("./screenshotMix"),ht=e.interopDefault(R),X=a("./seekMix"),Q=e.interopDefault(X),tt=a("./stateMix"),et=e.interopDefault(tt),W=a("./subtitleOffsetMix"),ct=e.interopDefault(W),ft=a("./switchMix"),ut=e.interopDefault(ft),kt=a("./themeMix"),Et=e.interopDefault(kt),$t=a("./thumbnailsMix"),St=e.interopDefault($t),It=a("./toggleMix"),Tt=e.interopDefault(It),Mt=a("./typeMix"),Ct=e.interopDefault(Mt),Ft=a("./urlMix"),Rt=e.interopDefault(Ft),Lt=a("./volumeMix"),qt=e.interopDefault(Lt);o.default=class{constructor(A){(0,Rt.default)(A),(0,s.default)(A),(0,nt.default)(A),(0,O.default)(A),(0,Tt.default)(A),(0,Q.default)(A),(0,qt.default)(A),(0,f.default)(A),(0,w.default)(A),(0,ut.default)(A),(0,U.default)(A),(0,i.default)(A),(0,ht.default)(A),(0,T.default)(A),(0,B.default)(A),(0,_.default)(A),(0,b.default)(A),(0,rt.default)(A),(0,ot.default)(A),(0,d.default)(A),(0,Y.default)(A),(0,$.default)(A),(0,F.default)(A),(0,V.default)(A),(0,c.default)(A),(0,y.default)(A),(0,Et.default)(A),(0,Ct.default)(A),(0,et.default)(A),(0,ct.default)(A),(0,u.default)(A),(0,J.default)(A),(0,St.default)(A),(0,E.default)(A),(0,M.default)(A)}}},{"./airplayMix":"d8BTB","./aspectRatioMix":"aQNJl","./attrMix":"5DA9e","./autoHeightMix":"1swKn","./autoSizeMix":"lSbiD","./cssVarMix":"32Hp1","./currentTimeMix":"kfZbu","./durationMix":"eV1ag","./eventInit":"f8NQq","./flipMix":"ea3Qm","./fullscreenMix":"ffXE3","./fullscreenWebMix":"8tarF","./loadedMix":"f9syH","./miniMix":"dLuS7","./optionInit":"d1F69","./pauseMix":"kewk9","./pipMix":"4XzDs","./playbackRateMix":"jphfi","./playedMix":"iNpeS","./playingMix":"aBIWL","./playMix":"hRBri","./posterMix":"fgfXC","./qualityMix":"17rUP","./rectMix":"55qzI","./screenshotMix":"bC6TG","./seekMix":"j8GRO","./stateMix":"cn7iR","./subtitleOffsetMix":"2k4nP","./switchMix":"6SU6j","./themeMix":"7iMuh","./thumbnailsMix":"6P0RS","./toggleMix":"eNi78","./typeMix":"7AUBD","./urlMix":"cnlLL","./volumeMix":"iX66j","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],d8BTB:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){let{i18n:i,notice:n,proxy:s,template:{$video:l}}=r,c=!0;window.WebKitPlaybackTargetAvailabilityEvent&&l.webkitShowPlaybackTargetPicker?s(l,"webkitplaybacktargetavailabilitychanged",p=>{switch(p.availability){case"available":c=!0;break;case"not-available":c=!1}}):c=!1,(0,t.def)(r,"airplay",{value(){c?(l.webkitShowPlaybackTargetPicker(),r.emit("airplay")):n.show=i.get("AirPlay Not Available")}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],aQNJl:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){let{i18n:i,notice:n,template:{$video:s,$player:l}}=r;(0,t.def)(r,"aspectRatio",{get:()=>l.dataset.aspectRatio||"default",set(c){if(c||(c="default"),c==="default")(0,t.setStyle)(s,"width",null),(0,t.setStyle)(s,"height",null),(0,t.setStyle)(s,"margin",null),delete l.dataset.aspectRatio;else{let p=c.split(":").map(Number),{clientWidth:d,clientHeight:g}=l,y=p[0]/p[1];d/g>y?((0,t.setStyle)(s,"width",`${y*g}px`),(0,t.setStyle)(s,"height","100%"),(0,t.setStyle)(s,"margin","0 auto")):((0,t.setStyle)(s,"width","100%"),(0,t.setStyle)(s,"height",`${d/y}px`),(0,t.setStyle)(s,"margin","auto 0")),l.dataset.aspectRatio=c}n.show=`${i.get("Aspect Ratio")}: ${c==="default"?i.get("Default"):c}`,r.emit("aspectRatio",c)}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"5DA9e":[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){let{template:{$video:i}}=r;(0,t.def)(r,"attr",{value(n,s){if(s===void 0)return i[n];i[n]=s}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"1swKn":[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){let{template:{$container:i,$video:n}}=r;(0,t.def)(r,"autoHeight",{value(){let{clientWidth:s}=i,{videoHeight:l,videoWidth:c}=n,p=s/c*l;(0,t.setStyle)(i,"height",`${p}px`),r.emit("autoHeight",p)}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],lSbiD:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){let{$container:i,$player:n,$video:s}=r.template;(0,t.def)(r,"autoSize",{value(){let{videoWidth:l,videoHeight:c}=s,{width:p,height:d}=(0,t.getRect)(i),g=l/c;p/d>g?((0,t.setStyle)(n,"width",`${d*g/p*100}%`),(0,t.setStyle)(n,"height","100%")):((0,t.setStyle)(n,"width","100%"),(0,t.setStyle)(n,"height",`${p/g/d*100}%`)),r.emit("autoSize",{width:r.width,height:r.height})}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"32Hp1":[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){let{$player:i}=r.template;(0,t.def)(r,"cssVar",{value:(n,s)=>s?i.style.setProperty(n,s):getComputedStyle(i).getPropertyValue(n)})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],kfZbu:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){let{$video:i}=r.template;(0,t.def)(r,"currentTime",{get:()=>i.currentTime||0,set:n=>{Number.isNaN(n=Number.parseFloat(n))||(i.currentTime=(0,t.clamp)(n,0,r.duration))}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],eV1ag:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){(0,t.def)(r,"duration",{get:()=>{let{duration:i}=r.template.$video;return i===1/0?0:i||0}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],f8NQq:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>i);var t=a("../config"),u=e.interopDefault(t),r=a("../utils");function i(n){let{i18n:s,notice:l,option:c,constructor:p,proxy:d,template:{$player:g,$video:y,$poster:x}}=n,f=0;for(let v=0;v{n.emit(`video:${w.type}`,w)});n.on("video:canplay",()=>{f=0,n.loading.show=!1}),n.once("video:canplay",()=>{n.loading.show=!1,n.controls.show=!0,n.mask.show=!0,n.isReady=!0,n.emit("ready")}),n.on("video:ended",()=>{c.loop?(n.seek=0,n.play(),n.controls.show=!1,n.mask.show=!1):(n.controls.show=!0,n.mask.show=!0)}),n.on("video:error",async v=>{f{n.emit("resize"),r.isMobile&&(n.loading.show=!1,n.controls.show=!0,n.mask.show=!0)}),n.on("video:loadstart",()=>{n.loading.show=!0,n.mask.show=!1,n.controls.show=!0}),n.on("video:pause",()=>{n.controls.show=!0,n.mask.show=!0}),n.on("video:play",()=>{n.mask.show=!1,(0,r.setStyle)(x,"display","none")}),n.on("video:playing",()=>{n.mask.show=!1}),n.on("video:progress",()=>{n.playing&&(n.loading.show=!1)}),n.on("video:seeked",()=>{n.loading.show=!1,n.mask.show=!0}),n.on("video:seeking",()=>{n.loading.show=!0,n.mask.show=!1}),n.on("video:timeupdate",()=>{n.mask.show=!1}),n.on("video:waiting",()=>{n.loading.show=!0,n.mask.show=!1})}},{"../config":"eJfh8","../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],ea3Qm:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){let{template:{$player:i},i18n:n,notice:s}=r;(0,t.def)(r,"flip",{get:()=>i.dataset.flip||"normal",set(l){l||(l="normal"),l==="normal"?delete i.dataset.flip:i.dataset.flip=l,s.show=`${n.get("Video Flip")}: ${n.get((0,t.capitalize)(l))}`,r.emit("flip",l)}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],ffXE3:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>i);var t=a("../libs/screenfull"),u=e.interopDefault(t),r=a("../utils");function i(n){let{i18n:s,notice:l,template:{$video:c,$player:p}}=n;n.once("video:loadedmetadata",()=>{u.default.isEnabled?(u.default.on("change",()=>{n.emit("fullscreen",u.default.isFullscreen),u.default.isFullscreen?(n.state="fullscreen",(0,r.addClass)(p,"art-fullscreen")):(0,r.removeClass)(p,"art-fullscreen"),n.emit("resize")}),u.default.on("error",d=>{n.emit("fullscreenError",d)}),(0,r.def)(n,"fullscreen",{get:()=>u.default.isFullscreen,async set(d){d?await u.default.request(p):await u.default.exit()}})):c.webkitSupportsFullscreen?(n.on("document:webkitfullscreenchange",()=>{n.emit("fullscreen",n.fullscreen),n.emit("resize")}),(0,r.def)(n,"fullscreen",{get:()=>document.fullscreenElement===c,set(d){d?(n.state="fullscreen",c.webkitEnterFullscreen()):c.webkitExitFullscreen()}})):(0,r.def)(n,"fullscreen",{get:()=>!1,set(){l.show=s.get("Fullscreen Not Supported")}}),(0,r.def)(n,"fullscreen",(0,r.get)(n,"fullscreen"))})}},{"../libs/screenfull":"iSPAQ","../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],iSPAQ:[function(a,h,o,m){a("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(o);let e=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],t=(()=>{if(typeof document>"u")return!1;let i=e[0],n={};for(let s of e)if(s[1]in document){for(let[l,c]of s.entries())n[i[l]]=c;return n}return!1})(),u={change:t.fullscreenchange,error:t.fullscreenerror},r={request:(i=document.documentElement,n)=>new Promise((s,l)=>{let c=()=>{r.off("change",c),s()};r.on("change",c);let p=i[t.requestFullscreen](n);p instanceof Promise&&p.then(c).catch(l)}),exit:()=>new Promise((i,n)=>{if(!r.isFullscreen)return void i();let s=()=>{r.off("change",s),i()};r.on("change",s);let l=document[t.exitFullscreen]();l instanceof Promise&&l.then(s).catch(n)}),toggle:(i,n)=>r.isFullscreen?r.exit():r.request(i,n),onchange(i){r.on("change",i)},onerror(i){r.on("error",i)},on(i,n){let s=u[i];s&&document.addEventListener(s,n,!1)},off(i,n){let s=u[i];s&&document.removeEventListener(s,n,!1)},raw:t};Object.defineProperties(r,{isFullscreen:{get:()=>!!document[t.fullscreenElement]},element:{enumerable:!0,get:()=>document[t.fullscreenElement]},isEnabled:{enumerable:!0,get:()=>!!document[t.fullscreenEnabled]}}),o.default=r},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"8tarF":[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){let{constructor:i,template:{$container:n,$player:s}}=r,l="";(0,t.def)(r,"fullscreenWeb",{get:()=>(0,t.hasClass)(s,"art-fullscreen-web"),set(c){c?(l=s.style.cssText,i.FULLSCREEN_WEB_IN_BODY&&(0,t.append)(document.body,s),r.state="fullscreenWeb",(0,t.setStyle)(s,"width","100%"),(0,t.setStyle)(s,"height","100%"),(0,t.addClass)(s,"art-fullscreen-web"),r.emit("fullscreenWeb",!0)):(i.FULLSCREEN_WEB_IN_BODY&&(0,t.append)(n,s),l&&(s.style.cssText=l,l=""),(0,t.removeClass)(s,"art-fullscreen-web"),r.emit("fullscreenWeb",!1)),r.emit("resize")}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],f9syH:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){let{$video:i}=r.template;(0,t.def)(r,"loaded",{get:()=>r.loadedTime/i.duration}),(0,t.def)(r,"loadedTime",{get:()=>i.buffered.length?i.buffered.end(i.buffered.length-1):0})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],dLuS7:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){let{icons:i,proxy:n,storage:s,template:{$player:l,$video:c}}=r,p=!1,d=0,g=0;function y(){let{$mini:v}=r.template;v&&((0,t.removeClass)(l,"art-mini"),(0,t.setStyle)(v,"display","none"),l.prepend(c),r.emit("mini",!1))}function x(v,w){r.playing?((0,t.setStyle)(v,"display","none"),(0,t.setStyle)(w,"display","flex")):((0,t.setStyle)(v,"display","flex"),(0,t.setStyle)(w,"display","none"))}function f(){let{$mini:v}=r.template,w=(0,t.getRect)(v),j=window.innerHeight-w.height-50,E=window.innerWidth-w.width-50;s.set("top",j),s.set("left",E),(0,t.setStyle)(v,"top",`${j}px`),(0,t.setStyle)(v,"left",`${E}px`)}(0,t.def)(r,"mini",{get:()=>(0,t.hasClass)(l,"art-mini"),set(v){if(v){r.state="mini",(0,t.addClass)(l,"art-mini");let w=function(){let{$mini:S}=r.template;if(S)return(0,t.append)(S,c),(0,t.setStyle)(S,"display","flex");{let $=(0,t.createElement)("div");(0,t.addClass)($,"art-mini-popup"),(0,t.append)(document.body,$),r.template.$mini=$,(0,t.append)($,c);let C=(0,t.append)($,'
');(0,t.append)(C,i.close),n(C,"click",y);let T=(0,t.append)($,'
'),q=(0,t.append)(T,i.play),B=(0,t.append)(T,i.pause);return n(q,"click",()=>r.play()),n(B,"click",()=>r.pause()),x(q,B),r.on("video:playing",()=>x(q,B)),r.on("video:pause",()=>x(q,B)),r.on("video:timeupdate",()=>x(q,B)),n($,"mousedown",k=>{p=k.button===0,d=k.pageX,g=k.pageY}),r.on("document:mousemove",k=>{if(p){(0,t.addClass)($,"art-mini-dragging");let b=k.pageX-d,I=k.pageY-g;(0,t.setStyle)($,"transform",`translate(${b}px, ${I}px)`)}}),r.on("document:mouseup",()=>{if(p){p=!1,(0,t.removeClass)($,"art-mini-dragging");let k=(0,t.getRect)($);s.set("left",k.left),s.set("top",k.top),(0,t.setStyle)($,"left",`${k.left}px`),(0,t.setStyle)($,"top",`${k.top}px`),(0,t.setStyle)($,"transform",null)}}),$}}(),j=s.get("top"),E=s.get("left");typeof j=="number"&&typeof E=="number"?((0,t.setStyle)(w,"top",`${j}px`),(0,t.setStyle)(w,"left",`${E}px`),(0,t.isInViewport)(w)||f()):f(),r.emit("mini",!0)}else y()}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],d1F69:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){let{option:i,storage:n,template:{$video:s,$poster:l}}=r;for(let p in i.moreVideoAttr)r.attr(p,i.moreVideoAttr[p]);i.muted&&(r.muted=i.muted),i.volume&&(s.volume=(0,t.clamp)(i.volume,0,1));let c=n.get("volume");for(let p in typeof c=="number"&&(s.volume=(0,t.clamp)(c,0,1)),i.poster&&(0,t.setStyle)(l,"backgroundImage",`url(${i.poster})`),i.autoplay&&(s.autoplay=i.autoplay),i.playsInline&&(s.playsInline=!0,s["webkit-playsinline"]=!0),i.theme&&(i.cssVar["--art-theme"]=i.theme),i.cssVar)r.cssVar(p,i.cssVar[p]);r.url=i.url}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],kewk9:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){let{template:{$video:i},i18n:n,notice:s}=r;(0,t.def)(r,"pause",{value(){let l=i.pause();return s.show=n.get("Pause"),r.emit("pause"),l}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"4XzDs":[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){let{i18n:i,notice:n,template:{$video:s}}=r;if(document.pictureInPictureEnabled){let{template:{$video:l},proxy:c,notice:p}=r;l.disablePictureInPicture=!1,(0,t.def)(r,"pip",{get:()=>document.pictureInPictureElement,set(d){d?(r.state="pip",l.requestPictureInPicture().catch(g=>{throw p.show=g,g})):document.exitPictureInPicture().catch(g=>{throw p.show=g,g})}}),c(l,"enterpictureinpicture",()=>{r.emit("pip",!0)}),c(l,"leavepictureinpicture",()=>{r.emit("pip",!1)})}else if(s.webkitSupportsPresentationMode){let{$video:l}=r.template;l.webkitSetPresentationMode("inline"),(0,t.def)(r,"pip",{get:()=>l.webkitPresentationMode==="picture-in-picture",set(c){c?(r.state="pip",l.webkitSetPresentationMode("picture-in-picture"),r.emit("pip",!0)):(l.webkitSetPresentationMode("inline"),r.emit("pip",!1))}})}else(0,t.def)(r,"pip",{get:()=>!1,set(){n.show=i.get("PIP Not Supported")}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],jphfi:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){let{template:{$video:i},i18n:n,notice:s}=r;(0,t.def)(r,"playbackRate",{get:()=>i.playbackRate,set(l){l?l!==i.playbackRate&&(i.playbackRate=l,s.show=`${n.get("Rate")}: ${l===1?n.get("Normal"):`${l}x`}`):r.playbackRate=1}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],iNpeS:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){(0,t.def)(r,"played",{get:()=>r.currentTime/r.duration})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],aBIWL:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){let{$video:i}=r.template;(0,t.def)(r,"playing",{get:()=>typeof i.playing=="boolean"?i.playing:i.currentTime>0&&!i.paused&&!i.ended&&i.readyState>2})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],hRBri:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){let{i18n:i,notice:n,option:s,constructor:{instances:l},template:{$video:c}}=r;(0,t.def)(r,"play",{async value(){let p=await c.play();if(n.show=i.get("Play"),r.emit("play"),s.mutex)for(let d=0;du);var t=a("../utils");function u(r){let{template:{$poster:i}}=r;(0,t.def)(r,"poster",{get:()=>{try{return i.style.backgroundImage.match(/"(.*)"/)[1]}catch{return""}},set(n){(0,t.setStyle)(i,"backgroundImage",`url(${n})`)}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"17rUP":[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){(0,t.def)(r,"quality",{set(i){let{controls:n,notice:s,i18n:l}=r,c=i.find(p=>p.default)||i[0];n.update({name:"quality",position:"right",index:10,style:{marginRight:"10px"},html:(c==null?void 0:c.html)||"",selector:i,onSelect:async p=>(await r.switchQuality(p.url),s.show=`${l.get("Switch Video")}: ${p.html}`,p.html)})}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"55qzI":[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){(0,t.def)(r,"rect",{get:()=>(0,t.getRect)(r.template.$player)});let i=["bottom","height","left","right","top","width"];for(let n=0;nr.rect[s]})}(0,t.def)(r,"x",{get:()=>r.left+window.pageXOffset}),(0,t.def)(r,"y",{get:()=>r.top+window.pageYOffset})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],bC6TG:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){let{notice:i,template:{$video:n}}=r,s=(0,t.createElement)("canvas");(0,t.def)(r,"getDataURL",{value:()=>new Promise((l,c)=>{try{s.width=n.videoWidth,s.height=n.videoHeight,s.getContext("2d").drawImage(n,0,0),l(s.toDataURL("image/png"))}catch(p){i.show=p,c(p)}})}),(0,t.def)(r,"getBlobUrl",{value:()=>new Promise((l,c)=>{try{s.width=n.videoWidth,s.height=n.videoHeight,s.getContext("2d").drawImage(n,0,0),s.toBlob(p=>{l(URL.createObjectURL(p))})}catch(p){i.show=p,c(p)}})}),(0,t.def)(r,"screenshot",{value:async l=>{let c=await r.getDataURL(),p=l||`artplayer_${(0,t.secondToTime)(n.currentTime)}`;return(0,t.download)(c,`${p}.png`),r.emit("screenshot",c),c}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],j8GRO:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){let{notice:i}=r;(0,t.def)(r,"seek",{set(n){r.currentTime=n,r.duration&&(i.show=`${(0,t.secondToTime)(r.currentTime)} / ${(0,t.secondToTime)(r.duration)}`),r.emit("seek",r.currentTime)}}),(0,t.def)(r,"forward",{set(n){r.seek=r.currentTime+n}}),(0,t.def)(r,"backward",{set(n){r.seek=r.currentTime-n}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],cn7iR:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){let i=["mini","pip","fullscreen","fullscreenWeb"];(0,t.def)(r,"state",{get:()=>i.find(n=>r[n])||"standard",set(n){for(let s=0;su);var t=a("../utils");function u(r){let{notice:i,i18n:n,template:s}=r;(0,t.def)(r,"subtitleOffset",{get:()=>{var l;return((l=s.$track)==null?void 0:l.offset)||0},set(l){let{cues:c}=r.subtitle;if(!s.$track||c.length===0)return;let p=(0,t.clamp)(l,-10,10);s.$track.offset=p;for(let d=0;du);var t=a("../utils");function u(r){function i(n,s){return new Promise((l,c)=>{if(n===r.url)return;let{playing:p,aspectRatio:d,playbackRate:g}=r;r.pause(),r.url=n,r.notice.show="",r.once("video:error",c),r.once("video:loadedmetadata",()=>{r.currentTime=s}),r.once("video:canplay",async()=>{r.playbackRate=g,r.aspectRatio=d,p&&await r.play(),r.notice.show="",l()})})}(0,t.def)(r,"switchQuality",{value:n=>i(n,r.currentTime)}),(0,t.def)(r,"switchUrl",{value:n=>i(n,0)}),(0,t.def)(r,"switch",{set:r.switchUrl})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"7iMuh":[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){(0,t.def)(r,"theme",{get:()=>r.cssVar("--art-theme"),set(i){r.cssVar("--art-theme",i)}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"6P0RS":[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){let{events:i,option:n,template:{$progress:s,$video:l}}=r,c=null,p=null,d=!1,g=!1,y=!1;i.hover(s,()=>{y=!0},()=>{y=!1}),r.on("setBar",async(x,f,v)=>{var $;let w=($=r.controls)==null?void 0:$.thumbnails,{url:j,scale:E}=n.thumbnails;if(!w||!j)return;let S=x==="played"&&v&&t.isMobile;if(x==="hover"||S){if(d||(d=!0,p=await(0,t.loadImg)(j,E),g=!0),!g||!y)return;let C=s.clientWidth*f;(0,t.setStyle)(w,"display","flex"),C>0&&Cs.clientWidth-D/2?(0,t.setStyle)(q,"left",`${s.clientWidth-D}px`):(0,t.setStyle)(q,"left",`${T-D/2}px`)}(C):t.isMobile||(0,t.setStyle)(w,"display","none"),S&&(clearTimeout(c),c=setTimeout(()=>{(0,t.setStyle)(w,"display","none")},500))}}),(0,t.def)(r,"thumbnails",{get:()=>r.option.thumbnails,set(x){x.url&&!r.option.isLive&&(r.option.thumbnails=x,clearTimeout(c),c=null,p=null,d=!1,g=!1)}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],eNi78:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){(0,t.def)(r,"toggle",{value:()=>r.playing?r.pause():r.play()})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"7AUBD":[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){(0,t.def)(r,"type",{get:()=>r.option.type,set(i){r.option.type=i}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],cnlLL:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){let{option:i,template:{$video:n}}=r;(0,t.def)(r,"url",{get:()=>n.src,async set(s){if(s){let l=r.url,c=i.type||(0,t.getExt)(s),p=i.customType[c];c&&p?(await(0,t.sleep)(),r.loading.show=!0,p.call(r,n,s,r)):(URL.revokeObjectURL(l),n.src=s),l!==r.url&&(r.option.url=s,r.isReady&&l&&r.once("video:canplay",()=>{r.emit("restart",s)}))}else await(0,t.sleep)(),r.loading.show=!0}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],iX66j:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){let{template:{$video:i},i18n:n,notice:s,storage:l}=r;(0,t.def)(r,"volume",{get:()=>i.volume||0,set:c=>{i.volume=(0,t.clamp)(c,0,1),s.show=`${n.get("Volume")}: ${Number.parseInt(100*i.volume,10)}`,i.volume!==0&&l.set("volume",i.volume)}}),(0,t.def)(r,"muted",{get:()=>i.muted,set:c=>{i.muted=c,r.emit("muted",c)}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],cjxJL:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o);var t=a("../utils"),u=a("./autoOrientation"),r=e.interopDefault(u),i=a("./autoPlayback"),n=e.interopDefault(i),s=a("./fastForward"),l=e.interopDefault(s),c=a("./lock"),p=e.interopDefault(c),d=a("./miniProgressBar"),g=e.interopDefault(d);o.default=class{constructor(y){this.art=y,this.id=0;let{option:x}=y;x.miniProgressBar&&!x.isLive&&this.add(g.default),x.lock&&t.isMobile&&this.add(p.default),x.autoPlayback&&!x.isLive&&this.add(n.default),x.autoOrientation&&t.isMobile&&this.add(r.default),x.fastForward&&t.isMobile&&!x.isLive&&this.add(l.default);for(let f=0;fthis.next(y,f)):this.next(y,x)}next(y,x){let f=x&&x.name||y.name||`plugin${this.id}`;return(0,t.errorHandle)(!(0,t.has)(this,f),`Cannot add a plugin that already has the same name: ${f}`),(0,t.def)(this,f,{value:x}),this}}},{"../utils":"aBlEo","./autoOrientation":"jb9jb","./autoPlayback":"21HWM","./fastForward":"4sxBO","./lock":"fjy9V","./miniProgressBar":"d0xRp","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],jb9jb:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){let{notice:i,constructor:n,template:{$player:s,$video:l}}=r,c="art-auto-orientation",p="art-auto-orientation-fullscreen",d=!1;function g(){let{videoWidth:y,videoHeight:x}=l,f=document.documentElement.clientWidth,v=document.documentElement.clientHeight;return y>x&&fv}return r.on("fullscreenWeb",y=>{y?g()&&setTimeout(()=>{r.fullscreenWeb&&!(0,t.hasClass)(s,c)&&function(){let x=document.documentElement.clientWidth,f=document.documentElement.clientHeight;(0,t.setStyle)(s,"width",`${f}px`),(0,t.setStyle)(s,"height",`${x}px`),(0,t.setStyle)(s,"transform-origin","0 0"),(0,t.setStyle)(s,"transform",`rotate(90deg) translate(0, -${x}px)`),(0,t.addClass)(s,c),r.isRotate=!0,r.emit("resize")}()},Number(n.AUTO_ORIENTATION_TIME??0)):(0,t.hasClass)(s,c)&&((0,t.setStyle)(s,"width",""),(0,t.setStyle)(s,"height",""),(0,t.setStyle)(s,"transform-origin",""),(0,t.setStyle)(s,"transform",""),(0,t.removeClass)(s,c),r.isRotate=!1,r.emit("resize"))}),r.on("fullscreen",async y=>{var f;let x=!!((f=screen==null?void 0:screen.orientation)!=null&&f.lock);if(y){if(x&&g())try{let v=screen.orientation.type.startsWith("portrait")?"landscape":"portrait";await screen.orientation.lock(v),d=!0,(0,t.addClass)(s,p)}catch(v){d=!1,i.show=v}}else if((0,t.hasClass)(s,p)&&(0,t.removeClass)(s,p),x&&d){try{screen.orientation.unlock()}catch{}d=!1}}),{name:"autoOrientation",get state(){return(0,t.hasClass)(s,c)}}}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"21HWM":[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){let{i18n:i,icons:n,storage:s,constructor:l,proxy:c,template:{$poster:p}}=r,d=r.layers.add({name:"auto-playback",html:'
'}),g=(0,t.query)(".art-auto-playback-last",d),y=(0,t.query)(".art-auto-playback-jump",d),x=(0,t.query)(".art-auto-playback-close",d);(0,t.append)(x,n.close);let f=null;function v(){let w=(s.get("times")||{})[r.option.id||r.option.url];clearTimeout(f),(0,t.setStyle)(d,"display","none"),w&&w>=l.AUTO_PLAYBACK_MIN&&((0,t.setStyle)(d,"display","flex"),g.textContent=`${i.get("Last Seen")} ${(0,t.secondToTime)(w)}`,y.textContent=i.get("Jump Play"),c(x,"click",()=>{(0,t.setStyle)(d,"display","none")}),c(y,"click",()=>{r.seek=w,r.play(),(0,t.setStyle)(p,"display","none"),(0,t.setStyle)(d,"display","none")}),r.once("video:timeupdate",()=>{f=setTimeout(()=>{(0,t.setStyle)(d,"display","none")},l.AUTO_PLAYBACK_TIMEOUT)}))}return r.on("video:timeupdate",()=>{if(r.playing){let w=s.get("times")||{},j=Object.keys(w);j.length>l.AUTO_PLAYBACK_MAX&&delete w[j[0]],w[r.option.id||r.option.url]=r.currentTime,s.set("times",w)}}),r.on("ready",v),r.on("restart",v),{name:"auto-playback",get times(){return s.get("times")||{}},clear:()=>s.del("times"),delete(w){let j=s.get("times")||{};return delete j[w],s.set("times",j),j}}}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"4sxBO":[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){let{constructor:i,proxy:n,template:{$player:s,$video:l}}=r,c=null,p=!1,d=1,g=()=>{clearTimeout(c),p&&(p=!1,r.playbackRate=d,(0,t.removeClass)(s,"art-fast-forward"))};return n(l,"touchstart",y=>{y.touches.length===1&&r.playing&&!r.isLock&&(c=setTimeout(()=>{p=!0,d=r.playbackRate,r.playbackRate=i.FAST_FORWARD_VALUE,(0,t.addClass)(s,"art-fast-forward")},i.FAST_FORWARD_TIME))}),r.on("document:touchmove",g),r.on("document:touchend",g),{name:"fastForward",get state(){return(0,t.hasClass)(s,"art-fast-forward")}}}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],fjy9V:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){let{layers:i,icons:n,template:{$player:s}}=r;function l(){return(0,t.hasClass)(s,"art-lock")}function c(){(0,t.addClass)(s,"art-lock"),r.isLock=!0,r.emit("lock",!0)}function p(){(0,t.removeClass)(s,"art-lock"),r.isLock=!1,r.emit("lock",!1)}return i.add({name:"lock",mounted(d){let g=(0,t.append)(d,n.lock),y=(0,t.append)(d,n.unlock);(0,t.setStyle)(g,"display","none"),r.on("lock",x=>{x?((0,t.setStyle)(g,"display","inline-flex"),(0,t.setStyle)(y,"display","none")):((0,t.setStyle)(g,"display","none"),(0,t.setStyle)(y,"display","inline-flex"))})},click(){l()?p():c()}}),{name:"lock",get state(){return l()},set state(d){d?c():p()}}}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],d0xRp:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){return r.on("control",i=>{i?(0,t.removeClass)(r.template.$player,"art-mini-progress-bar"):(0,t.addClass)(r.template.$player,"art-mini-progress-bar")}),{name:"mini-progress-bar"}}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],bwLGT:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o);var t=a("../utils"),u=a("../utils/component"),r=e.interopDefault(u),i=a("./aspectRatio"),n=e.interopDefault(i),s=a("./flip"),l=e.interopDefault(s),c=a("./playbackRate"),p=e.interopDefault(c),d=a("./subtitleOffset"),g=e.interopDefault(d);class y extends r.default{constructor(f){super(f);let{option:v,controls:w,template:{$setting:j}}=f;this.name="setting",this.$parent=j,this.id=0,this.active=null,this.cache=new Map,this.option=[...this.builtin,...v.settings],v.setting&&(this.format(),this.render(),f.on("blur",()=>{this.show&&(this.show=!1,this.render())}),f.on("focus",E=>{let S=(0,t.includeFromEvent)(E,w.setting),$=(0,t.includeFromEvent)(E,this.$parent);!this.show||S||$||(this.show=!1,this.render())}),f.on("resize",()=>this.resize()))}get builtin(){let f=[],{option:v}=this.art;return v.playbackRate&&f.push((0,p.default)(this.art)),v.aspectRatio&&f.push((0,n.default)(this.art)),v.flip&&f.push((0,l.default)(this.art)),v.subtitleOffset&&f.push((0,g.default)(this.art)),f}traverse(f,v=this.option){var w;for(let j=0;j{v.default=v===f,v.default&&v.$item&&(0,t.inverseClass)(v.$item,"art-current")},f.$option),this.render(f.$parents)}format(f=this.option,v,w,j=[]){for(let E=0;Ev}),(0,t.def)(S,"$parents",{get:()=>w}),(0,t.def)(S,"$option",{get:()=>f});let $=[];(0,t.def)(S,"$events",{get:()=>$}),(0,t.def)(S,"$formatted",{get:()=>!0})}this.format(S.selector||[],S,f,j)}this.option=f}find(f=""){let v=null;return this.traverse(w=>{w.name===f&&(v=w)}),v}resize(){var S,$;let{controls:f,constructor:{SETTING_WIDTH:v,SETTING_ITEM_HEIGHT:w},template:{$player:j,$setting:E}}=this.art;if(f.setting&&this.show){let C=(($=(S=this.active[0])==null?void 0:S.$parent)==null?void 0:$.width)||v,{left:T,width:q}=(0,t.getRect)(f.setting),{left:B,width:k}=(0,t.getRect)(j),b=T-B+q/2-C/2,I=this.active===this.option?this.active.length*w:(this.active.length+1)*w;if((0,t.setStyle)(E,"height",`${I}px`),(0,t.setStyle)(E,"width",`${C}px`),this.art.isRotate||t.isMobile)return;b+C>k?((0,t.setStyle)(E,"left",null),(0,t.setStyle)(E,"right",null)):((0,t.setStyle)(E,"left",`${b}px`),(0,t.setStyle)(E,"right","auto"))}}inactivate(f){for(let v=0;v'),C=(0,t.createElement)("div");(0,t.addClass)(C,"art-setting-item-left-icon"),(0,t.append)(C,j),(0,t.append)($,C),(0,t.append)($,f.$parent.html);let T=w(S,"click",()=>this.render(f.$parents));f.$parent.$events.push(T),(0,t.append)(v,S)}createItem(f,v=!1){var F,D;if(!this.cache.has(f.$option))return;let w=this.cache.get(f.$option),j=f.$item,E="selector";(0,t.has)(f,"switch")&&(E="switch"),(0,t.has)(f,"range")&&(E="range"),(0,t.has)(f,"onClick")&&(E="button");let{icons:S,proxy:$,constructor:C}=this.art,T=(0,t.createElement)("div");(0,t.addClass)(T,"art-setting-item"),(0,t.setStyle)(T,"height",`${C.SETTING_ITEM_HEIGHT}px`),T.dataset.name=f.name||"",T.dataset.value=f.value||"";let q=(0,t.append)(T,'
'),B=(0,t.append)(T,'
'),k=(0,t.createElement)("div");switch((0,t.addClass)(k,"art-setting-item-left-icon"),E){case"button":case"switch":case"range":(0,t.append)(k,f.icon||S.config);break;case"selector":(F=f.selector)!=null&&F.length?(0,t.append)(k,f.icon||S.config):(0,t.append)(k,S.check)}(0,t.append)(q,k),(0,t.def)(f,"$icon",{configurable:!0,get:()=>k}),(0,t.def)(f,"icon",{configurable:!0,get:()=>k.innerHTML,set(M){k.innerHTML="",(0,t.append)(k,M)}});let b=(0,t.createElement)("div");(0,t.addClass)(b,"art-setting-item-left-text"),(0,t.append)(b,f.html||""),(0,t.append)(q,b),(0,t.def)(f,"$html",{configurable:!0,get:()=>b}),(0,t.def)(f,"html",{configurable:!0,get:()=>b.innerHTML,set(M){b.innerHTML="",(0,t.append)(b,M)}});let I=(0,t.createElement)("div");switch((0,t.addClass)(I,"art-setting-item-right-tooltip"),(0,t.append)(I,f.tooltip||""),(0,t.append)(B,I),(0,t.def)(f,"$tooltip",{configurable:!0,get:()=>I}),(0,t.def)(f,"tooltip",{configurable:!0,get:()=>I.innerHTML,set(M){I.innerHTML="",(0,t.append)(I,M)}}),E){case"switch":{let M=(0,t.createElement)("div");(0,t.addClass)(M,"art-setting-item-right-icon");let L=(0,t.append)(M,S.switchOn),O=(0,t.append)(M,S.switchOff);(0,t.setStyle)(f.switch?O:L,"display","none"),(0,t.append)(B,M),(0,t.def)(f,"$switch",{configurable:!0,get:()=>M});let P=f.switch;(0,t.def)(f,"switch",{configurable:!0,get:()=>P,set(_){P=_,_?((0,t.setStyle)(O,"display","none"),(0,t.setStyle)(L,"display",null)):((0,t.setStyle)(O,"display",null),(0,t.setStyle)(L,"display","none"))}});break}case"range":{let M=(0,t.createElement)("div");(0,t.addClass)(M,"art-setting-item-right-icon");let L=(0,t.append)(M,'');L.value=f.range[0],L.min=f.range[1],L.max=f.range[2],L.step=f.range[3],(0,t.addClass)(L,"art-setting-range"),(0,t.append)(B,M),(0,t.def)(f,"$range",{configurable:!0,get:()=>L});let O=[...f.range];(0,t.def)(f,"range",{configurable:!0,get:()=>O,set(P){O=[...P],L.value=P[0],L.min=P[1],L.max=P[2],L.step=P[3]}})}break;case"selector":if((D=f.selector)!=null&&D.length){let M=(0,t.createElement)("div");(0,t.addClass)(M,"art-setting-item-right-icon"),(0,t.append)(M,S.arrowRight),(0,t.append)(B,M)}}switch(E){case"switch":if(f.onSwitch){let M=$(T,"click",async L=>{f.switch=await f.onSwitch.call(this.art,f,T,L)});f.$events.push(M)}break;case"range":if(f.$range){if(f.onRange){let M=$(f.$range,"change",async L=>{f.range[0]=f.$range.valueAsNumber,f.tooltip=await f.onRange.call(this.art,f,T,L)});f.$events.push(M)}if(f.onChange){let M=$(f.$range,"input",async L=>{f.range[0]=f.$range.valueAsNumber,f.tooltip=await f.onChange.call(this.art,f,T,L)});f.$events.push(M)}}break;case"selector":{let M=$(T,"click",async L=>{var O;(O=f.selector)!=null&&O.length?this.render(f.selector):(this.check(f),f.$parent.onSelect&&(f.$parent.tooltip=await f.$parent.onSelect.call(this.art,f,T,L)))});f.$events.push(M),f.default&&(0,t.addClass)(T,"art-current")}break;case"button":if(f.onClick){let M=$(T,"click",async L=>{f.tooltip=await f.onClick.call(this.art,f,T,L)});f.$events.push(M)}}(0,t.def)(f,"$item",{configurable:!0,get:()=>T}),v?(0,t.replaceElement)(T,j):(0,t.append)(w,T),f.mounted&&setTimeout(()=>f.mounted.call(this.art,f.$item,f),0)}render(f=this.option){var v;if(this.active=f,this.cache.has(f)){let w=this.cache.get(f);(0,t.inverseClass)(w,"art-current")}else{let w=(0,t.createElement)("div");this.cache.set(f,w),(0,t.addClass)(w,"art-setting-panel"),(0,t.append)(this.$parent,w),(0,t.inverseClass)(w,"art-current"),(v=f[0])!=null&&v.$parent&&this.createHeader(f[0]);for(let j=0;j({value:p,name:`aspect-ratio-${p}`,default:p===u.aspectRatio,html:l(p)})),onSelect:p=>(u.aspectRatio=p.value,p.html),mounted:()=>{c(),u.on("aspectRatio",()=>c())}}}e.defineInteropFlag(o),e.export(o,"default",()=>t)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],ljJTO:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>u);var t=a("../utils");function u(r){let{i18n:i,icons:n,constructor:{SETTING_ITEM_WIDTH:s,FLIP:l}}=r;function c(d){return i.get((0,t.capitalize)(d))}function p(){let d=r.setting.find(`flip-${r.flip}`);r.setting.check(d)}return{width:s,name:"flip",html:i.get("Video Flip"),tooltip:c(r.flip),icon:n.flip,selector:l.map(d=>({value:d,name:`flip-${d}`,default:d===r.flip,html:c(d)})),onSelect:d=>(r.flip=d.value,d.html),mounted:()=>{p(),r.on("flip",()=>p())}}}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"3QcSQ":[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");function t(u){let{i18n:r,icons:i,constructor:{SETTING_ITEM_WIDTH:n,PLAYBACK_RATE:s}}=u;function l(p){return p===1?r.get("Normal"):p.toFixed(1)}function c(){let p=u.setting.find(`playback-rate-${u.playbackRate}`);u.setting.check(p)}return{width:n,name:"playback-rate",html:r.get("Play Speed"),tooltip:l(u.playbackRate),icon:i.playbackRate,selector:s.map(p=>({value:p,name:`playback-rate-${p}`,default:p===u.playbackRate,html:l(p)})),onSelect:p=>(u.playbackRate=p.value,p.html),mounted:()=>{c(),u.on("video:ratechange",()=>c())}}}e.defineInteropFlag(o),e.export(o,"default",()=>t)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],eB5hg:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");function t(u){let{i18n:r,icons:i,constructor:n}=u;return{width:n.SETTING_ITEM_WIDTH,name:"subtitle-offset",html:r.get("Subtitle Offset"),icon:i.subtitle,tooltip:"0s",range:[0,-10,10,.1],onChange:s=>(u.subtitleOffset=s.range[0],`${s.range[0]}s`),mounted:(s,l)=>{u.on("subtitleOffset",c=>{l.$range.value=c,l.tooltip=`${c}s`})}}}e.defineInteropFlag(o),e.export(o,"default",()=>t)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],kwqbK:[function(a,h,o,m){a("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(o),o.default=class{constructor(){this.name="artplayer_settings",this.settings={}}get(e){try{let t=JSON.parse(window.localStorage.getItem(this.name))||{};return e?t[e]:t}catch{return e?this.settings[e]:this.settings}}set(e,t){try{let u=Object.assign({},this.get(),{[e]:t});window.localStorage.setItem(this.name,JSON.stringify(u))}catch{this.settings[e]=t}}del(e){try{let t=this.get();delete t[e],window.localStorage.setItem(this.name,JSON.stringify(t))}catch{delete this.settings[e]}}clear(){try{window.localStorage.removeItem(this.name)}catch{this.settings={}}}}},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],k5613:[function(a,h,o,m){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o);var t=a("option-validator"),u=e.interopDefault(t),r=a("./scheme"),i=e.interopDefault(r),n=a("./utils"),s=a("./utils/component"),l=e.interopDefault(s);class c extends l.default{constructor(d){super(d),this.name="subtitle",this.option=null,this.destroyEvent=()=>null,this.init(d.option.subtitle);let g=!1;d.on("video:timeupdate",()=>{if(!this.url)return;let y=this.art.template.$video.webkitDisplayingFullscreen;typeof y=="boolean"&&y!==g&&(g=y,this.createTrack(y?"subtitles":"metadata",this.url))})}get url(){return this.art.template.$track.src}set url(d){this.switch(d)}get textTrack(){var d,g;return(g=(d=this.art.template.$video)==null?void 0:d.textTracks)==null?void 0:g[0]}get activeCues(){return this.textTrack?Array.from(this.textTrack.activeCues):[]}get cues(){return this.textTrack?Array.from(this.textTrack.cues):[]}style(d,g){let{$subtitle:y}=this.art.template;return typeof d=="object"?(0,n.setStyles)(y,d):(0,n.setStyle)(y,d,g)}update(){let{option:{subtitle:d},template:{$subtitle:g}}=this.art;g.innerHTML="",this.activeCues.length&&(this.art.emit("subtitleBeforeUpdate",this.activeCues),g.innerHTML=this.activeCues.map((y,x)=>y.text.split(/\r?\n/).filter(f=>f.trim()).map(f=>`
${d.escape?(0,n.escape)(f):f}
`).join("")).join(""),this.art.emit("subtitleAfterUpdate",this.activeCues))}async switch(d,g={}){let{i18n:y,notice:x,option:f}=this.art,v={...f.subtitle,...g,url:d},w=await this.init(v);return g.name&&(x.show=`${y.get("Switch Subtitle")}: ${g.name}`),w}createTrack(d,g){let{template:y,proxy:x,option:f}=this.art,{$video:v,$track:w}=y,j=(0,n.createElement)("track");j.default=!0,j.kind=d,j.src=g,j.label=f.subtitle.name||"Artplayer",j.track.mode="hidden",j.onload=()=>{this.art.emit("subtitleLoad",this.cues,this.option)},this.art.events.remove(this.destroyEvent),w.onload=null,(0,n.remove)(w),(0,n.append)(v,j),y.$track=j,this.destroyEvent=x(this.textTrack,"cuechange",()=>this.update())}async init(d){let{notice:g,template:{$subtitle:y}}=this.art;return this.textTrack?((0,u.default)(d,i.default.subtitle),d.url?(this.option=d,this.style(d.style),fetch(d.url).then(x=>x.arrayBuffer()).then(x=>{let f=new TextDecoder(d.encoding).decode(x);switch(d.type||(0,n.getExt)(d.url)){case"srt":{let v=(0,n.srtToVtt)(f),w=d.onVttLoad(v);return(0,n.vttToBlob)(w)}case"ass":{let v=(0,n.assToVtt)(f),w=d.onVttLoad(v);return(0,n.vttToBlob)(w)}case"vtt":{let v=d.onVttLoad(f);return(0,n.vttToBlob)(v)}default:return d.url}}).then(x=>(y.innerHTML="",this.url===x||(URL.revokeObjectURL(this.url),this.createTrack("metadata",x)),x)).catch(x=>{throw y.innerHTML="",g.show=x,x})):void 0):null}}o.default=c},{"option-validator":"g7VGh","./scheme":"biLjm","./utils":"aBlEo","./utils/component":"idCEj","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],fwOA1:[function(a,h,o,m){a("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(o);var e=a("../package.json"),t=a("./utils");class u{constructor(i){this.art=i;let{option:n,constructor:s}=i;n.container instanceof Element?this.$container=n.container:(this.$container=(0,t.query)(n.container),(0,t.errorHandle)(this.$container,`No container element found by ${n.container}`)),(0,t.errorHandle)((0,t.supportsFlex)(),"The current browser does not support flex layout");let l=this.$container.tagName.toLowerCase();(0,t.errorHandle)(l==="div",`Unsupported container element type, only support 'div' but got '${l}'`),(0,t.errorHandle)(s.instances.every(c=>c.template.$container!==this.$container),"Cannot mount multiple instances on the same dom element"),this.query=this.query.bind(this),this.$container.dataset.artId=i.id,this.init()}static get html(){return`
Player version:
${e.version}
Video url:
Video volume:
Video time:
Video duration:
Video resolution:
x
[x]
`}query(i){return(0,t.query)(i,this.$container)}init(){let{option:i}=this.art;if(i.useSSR||(this.$container.innerHTML=u.html),this.$player=this.query(".art-video-player"),this.$video=this.query(".art-video"),this.$track=this.query("track"),this.$poster=this.query(".art-poster"),this.$subtitle=this.query(".art-subtitle"),this.$danmuku=this.query(".art-danmuku"),this.$bottom=this.query(".art-bottom"),this.$progress=this.query(".art-progress"),this.$controls=this.query(".art-controls"),this.$controlsLeft=this.query(".art-controls-left"),this.$controlsCenter=this.query(".art-controls-center"),this.$controlsRight=this.query(".art-controls-right"),this.$layer=this.query(".art-layers"),this.$loading=this.query(".art-loading"),this.$notice=this.query(".art-notice"),this.$noticeInner=this.query(".art-notice-inner"),this.$mask=this.query(".art-mask"),this.$state=this.query(".art-state"),this.$setting=this.query(".art-settings"),this.$info=this.query(".art-info"),this.$infoPanel=this.query(".art-info-panel"),this.$infoClose=this.query(".art-info-close"),this.$contextmenu=this.query(".art-contextmenus"),i.proxy){let n=i.proxy.call(this.art,this.art);(0,t.errorHandle)(n instanceof HTMLVideoElement||n instanceof HTMLCanvasElement,"Function 'option.proxy' needs to return 'HTMLVideoElement' or 'HTMLCanvasElement'"),(0,t.replaceElement)(n,this.$video),n.className="art-video",this.$video=n}i.backdrop&&(0,t.addClass)(this.$player,"art-backdrop"),t.isMobile&&(0,t.addClass)(this.$player,"art-mobile")}destroy(i){i?this.$container.innerHTML="":(0,t.addClass)(this.$player,"art-destroy")}}o.default=u},{"../package.json":"lh3R5","./utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"4NM7P":[function(a,h,o,m){a("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(o),o.default=class{on(e,t,u){let r=this.e||(this.e={});return(r[e]||(r[e]=[])).push({fn:t,ctx:u}),this}once(e,t,u){let r=this;function i(...n){r.off(e,i),t.apply(u,n)}return i._=t,this.on(e,i,u)}emit(e,...t){let u=((this.e||(this.e={}))[e]||[]).slice();for(let r=0;rc.destroy()),c.on(Hls.Events.ERROR,(p,d)=>{if(d.fatal)switch(d.type){case Hls.ErrorTypes.NETWORK_ERROR:console.warn("HLS network error, trying to recover..."),c.startLoad();break;case Hls.ErrorTypes.MEDIA_ERROR:console.warn("HLS media error, trying to recover..."),c.recoverMediaError();break;default:console.error("Fatal HLS error");break}})}else n.canPlayType("application/vnd.apple.mpegurl")&&(n.src=s)}},settings:[{html:"Speed",selector:[{html:"0.5x",value:.5},{html:"0.75x",value:.75},{html:"Normal",value:1,default:!0},{html:"1.25x",value:1.25},{html:"1.5x",value:1.5},{html:"2x",value:2}],onSelect(i){return N&&(N.playbackRate=i.value),i.html}}],icons:{loading:'
',state:''},cssVar:{"--art-theme":"#f5c518","--art-background-color":"#0f0f0f","--art-progress-color":"#f5c518","--art-control-background-color":"rgba(0, 0, 0, 0.8)","--art-control-height":"48px","--art-bottom-gap":"12px"}};return u.length>0&&(r.quality=u.map((i,n)=>({default:n===0,html:i,url:o}))),N=new Pt(r),N.on("ready",()=>{console.log("Player ready"),N.video&&(N.video.preload="auto")}),N.on("video:waiting",()=>{console.log("Buffering...")}),N.on("video:canplay",()=>{console.log("Can play")}),N.on("error",i=>{console.error("Player error:",i)}),N}function Ot(){N&&(N.destroy(),N=null)}const _t=4e3;function Vt(a,h="info"){const o=document.getElementById("toastContainer");if(!o)return;const m=document.createElement("div");m.className=`toast toast--${h}`,m.innerHTML=` - - ${Ht(h)} - - ${zt(a)} - `,o.appendChild(m),setTimeout(()=>{m.style.animation="slideIn 0.3s ease reverse",setTimeout(()=>m.remove(),300)},_t)}function Ht(a){switch(a){case"success":return'';case"error":return'';default:return''}}function zt(a){if(!a)return"";const h=document.createElement("div");return h.textContent=a,h.innerHTML}export{Dt as a,Ot as d,Nt as i,Vt as s}; diff --git a/backend/static/assets/keyboard-nav-CZ5sEhKF.js b/backend/static/assets/keyboard-nav-CZ5sEhKF.js new file mode 100644 index 0000000..65bc152 --- /dev/null +++ b/backend/static/assets/keyboard-nav-CZ5sEhKF.js @@ -0,0 +1,47 @@ +(function(){const u=document.createElement("link").relList;if(u&&u.supports&&u.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))h(e);new MutationObserver(e=>{for(const t of e)if(t.type==="childList")for(const c of t.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&h(c)}).observe(document,{childList:!0,subtree:!0});function o(e){const t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?t.credentials="include":e.crossOrigin==="anonymous"?t.credentials="omit":t.credentials="same-origin",t}function h(e){if(e.ep)return;e.ep=!0;const t=o(e);fetch(e.href,t)}})();const _=window.location.origin.includes("localhost")||window.location.origin.includes("127.0.0.1")?"/api":"https://nf.khoavo.myds.me/api",Yt=[121,111,117,114,45,115,117,112,101,114,45,115,101,99,114,101,116,45,107,101,121,45,99,104,97,110,103,101,45,116,104,105,115],Gt=String.fromCharCode(...Yt);class Zt{async signRequest(u,o="GET"){const h=Math.floor(Date.now()/1e3).toString(),e=u.startsWith("/api")?u:`/api${u}`,t=`${h}${e}${o.toUpperCase()}`,c=new TextEncoder,r=c.encode(Gt),i=c.encode(t),n=await crypto.subtle.importKey("raw",r,{name:"HMAC",hash:"SHA-256"},!1,["sign"]),l=await crypto.subtle.sign("HMAC",n,i);return{"X-Signature":Array.from(new Uint8Array(l)).map(f=>f.toString(16).padStart(2,"0")).join(""),"X-Timestamp":h}}getProxyUrl(u,o=200){return u?`${_}/images/proxy?url=${encodeURIComponent(u)}&width=${o}`:""}async extractVideo(u,o=null){const e=await this.signRequest("/api/extract","POST"),t=await fetch(`${_}/extract`,{method:"POST",headers:{"Content-Type":"application/json",...e},body:JSON.stringify({url:u,quality:o})});if(!t.ok){const c=await t.json();throw new Error(c.detail||"Extraction failed")}return t.json()}async updateHeaders(u={},o,h="GET"){const e=await this.signRequest(o,h);return{...u,headers:{...u.headers,...e}}}async getQualities(u){const h=await this.signRequest("/api/qualities","GET"),e=await fetch(`${_}/qualities?url=${encodeURIComponent(u)}`,{headers:h});if(!e.ok)throw new Error("Failed to get qualities");return(await e.json()).qualities}async listVideos({skip:u=0,limit:o=50,category:h=null}={}){let e=`${_}/videos?skip=${u}&limit=${o}`;h&&h!=="all"&&(e+=`&category=${encodeURIComponent(h)}`);const c=await this.signRequest("/api/videos","GET"),r=await fetch(e,{headers:c});if(!r.ok)throw new Error("Failed to fetch videos");return r.json()}async addVideo(u){const h=await this.signRequest("/api/videos","POST"),e=await fetch(`${_}/videos`,{method:"POST",headers:{"Content-Type":"application/json",...h},body:JSON.stringify(u)});if(!e.ok){const t=await e.json();throw new Error(t.detail||"Failed to add video")}return e.json()}async deleteVideo(u){const o=`/api/videos/${u}`,h=await this.signRequest(o,"DELETE");if(!(await fetch(`${_}/videos/${u}`,{method:"DELETE",headers:h})).ok)throw new Error("Failed to delete video")}async searchVideos(u,o=20){const h=`${_}/search?q=${encodeURIComponent(u)}&limit=${o}`,t=await this.signRequest("/api/search","GET"),c=await fetch(h,{headers:t});if(!c.ok)throw new Error("Search failed");return c.json()}async health(){return(await fetch(`${_}/health`)).json()}async getRophimCatalog({category:u=null,country:o=null,genre:h=null,page:e=1,limit:t=24,sort:c="modified"}={}){let r=`${_}/rophim/catalog?page=${e}&limit=${t}&sort=${c}`;u&&(r+=`&category=${encodeURIComponent(u)}`),o&&(r+=`&country=${encodeURIComponent(o)}`),h&&(r+=`&genre=${encodeURIComponent(h)}`);const n=await this.signRequest("/api/rophim/catalog","GET"),l=await fetch(r,{headers:n});if(!l.ok)throw new Error("Failed to fetch RoPhim catalog");return l.json()}async getCuratedSections(){const o=await this.signRequest("/api/rophim/home/curated","GET"),h=await fetch(`${_}/rophim/home/curated`,{headers:o});if(!h.ok)throw new Error("Failed to fetch curated sections");return h.json()}async searchRophim(u,o=20){const h=`${_}/rophim/search?q=${encodeURIComponent(u)}&limit=${o}`,t=await this.signRequest("/api/rophim/search","GET"),c=await fetch(h,{headers:t});if(!c.ok)throw new Error("RoPhim search failed");return c.json()}async getHomeSections(u=2,o="home"){const e=await this.signRequest("/api/rophim/home/sections","GET"),t=await fetch(`${_}/rophim/home/sections?page=${u}&view=${o}`,{headers:e});if(!t.ok)throw new Error("Failed to fetch home sections");return t.json()}async getRophimMovie(u){const o=`/api/rophim/movie/${encodeURIComponent(u)}`,h=await this.signRequest(o,"GET"),e=await fetch(`${_}/rophim/movie/${encodeURIComponent(u)}`,{headers:h});if(!e.ok)throw new Error("Failed to fetch movie details");return e.json()}async getRophimStream(u,o=1){const h=`/api/rophim/stream/${encodeURIComponent(u)}`,e=await this.signRequest(h,"GET"),t=await fetch(`${_}/rophim/stream/${encodeURIComponent(u)}?episode=${o}`,{headers:e});if(!t.ok)throw new Error("Failed to get stream");return t.json()}async getRophimStreamByUrl(u,o="",h=1,e=0){const c=await this.signRequest("/api/rophim/stream","POST"),r=await fetch(`${_}/rophim/stream`,{method:"POST",headers:{"Content-Type":"application/json",...c},body:JSON.stringify({source_url:u,slug:o||"",episode:h,server:e})});if(!r.ok){const i=await r.json();throw new Error(i.detail||"Failed to get stream")}return r.json()}async discoverCategories(){const o=await this.signRequest("/api/rophim/categories/discover","GET"),h=await fetch(`${_}/rophim/categories/discover`,{headers:o});if(!h.ok)throw new Error("Failed to discover categories");return h.json()}async getMoviesByCategory(u,o=1,h=24){const t=await this.signRequest("/api/rophim/category","GET"),c=await fetch(`${_}/rophim/category?slug=${encodeURIComponent(u)}&page=${o}&limit=${h}`,{headers:t});if(!c.ok)throw new Error("Failed to fetch category");return c.json()}async getHotMovies(u=24){const h=await this.signRequest("/api/rophim/categories/hot","GET"),e=await fetch(`${_}/rophim/categories/hot?limit=${u}`,{headers:h});if(!e.ok)throw new Error("Failed to fetch hot movies");return e.json()}async getNewReleases(u=24){const h=await this.signRequest("/api/rophim/categories/new-releases","GET"),e=await fetch(`${_}/rophim/categories/new-releases?limit=${u}`,{headers:h});if(!e.ok)throw new Error("Failed to fetch new releases");return e.json()}async getTop10(){const o=await this.signRequest("/api/rophim/categories/top10","GET"),h=await fetch(`${_}/rophim/categories/top10`,{headers:o});if(!h.ok)throw new Error("Failed to fetch top 10");return h.json()}async getCinemaReleases(u=24){const h=await this.signRequest("/api/rophim/categories/cinema","GET"),e=await fetch(`${_}/rophim/categories/cinema?limit=${u}`,{headers:h});if(!e.ok)throw new Error("Failed to fetch cinema releases");return e.json()}}const Kt=new Zt;let yt=null;const Jt=300,Et=document.getElementById("searchModal"),St=document.getElementById("searchBackdrop"),Z=document.getElementById("searchInput"),Tt=document.getElementById("closeSearch"),pt=document.getElementById("searchLoading"),ft=document.getElementById("searchGrid");document.querySelector('[data-view="search"]');function bt(){Et.classList.add("active"),setTimeout(()=>Z.focus(),100)}function wt(){Et.classList.remove("active"),Z.value="",ft.innerHTML="",pt.style.display="none"}async function xt(a){if(!a||a.trim().length<2){ft.innerHTML="",pt.style.display="none";return}pt.style.display="flex";try{const u=await Kt.searchRophim(a);pt.style.display="none",u&&u.movies&&u.movies.length>0?ft.innerHTML=u.movies.map(o=>` +
+
+
+ ${o.title} +
+
+
+

${o.title}

+
+ ${o.year||""} + ${o.quality?`${o.quality}`:""} +
+
+
+
+
+ `).join(""):ft.innerHTML=` +
+ + + +

No results found for "${a}"

+
+ `}catch(u){console.error("Search failed:",u),pt.style.display="none",ft.innerHTML=` +
+

Search failed. Please try again.

+
+ `}}function It(){[document.getElementById("headerSearchBtn"),document.getElementById("mobileSearchBtn"),document.querySelector('[data-view="search"]'),document.querySelector('button[data-view="search"]')].forEach(h=>{h&&h.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation(),bt()})}),Tt&&Tt.addEventListener("click",wt),St&&St.addEventListener("click",wt),Z&&(Z.addEventListener("input",h=>{clearTimeout(yt);const e=h.target.value;yt=setTimeout(()=>{xt(e)},Jt)}),Z.addEventListener("keydown",h=>{h.key==="Enter"&&(clearTimeout(yt),xt(h.target.value))})),document.addEventListener("keydown",h=>{(h.metaKey||h.ctrlKey)&&h.key==="k"&&(h.preventDefault(),bt()),h.key==="Escape"&&Et.classList.contains("active")&&wt()});const o=new URLSearchParams(window.location.search).get("search");o&&o.trim()&&setTimeout(()=>{bt(),Z&&(Z.value=o),xt(o);const h=window.location.pathname;window.history.replaceState({},"",h)},300)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",It):It();/*! + * artplayer.js v5.3.0 + * Github: https://github.com/zhw2590582/ArtPlayer + * (c) 2017-2025 Harvey Zack + * Released under the MIT License. + */(function(a,u,o,h,e,t,c,r){var i=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{},n=typeof i[h]=="function"&&i[h],l=n.i||{},s=n.cache||{},d=typeof module<"u"&&typeof module.require=="function"&&module.require.bind(module);function f(v,x){if(!s[v]){if(!a[v]){if(e[v])return e[v];var m=typeof i[h]=="function"&&i[h];if(!x&&m)return m(v,!0);if(n)return n(v,!0);if(d&&typeof v=="string")return d(v);var y=Error("Cannot find module '"+v+"'");throw y.code="MODULE_NOT_FOUND",y}k.resolve=function($){var S=a[v][1][$];return S??$},k.cache={};var j=s[v]=new f.Module(v);a[v][0].call(j.exports,k,j,j.exports,i)}return s[v].exports;function k($){var S=k.resolve($);return S===!1?{}:f(S)}}f.isParcelRequire=!0,f.Module=function(v){this.id=v,this.bundle=f,this.require=d,this.exports={}},f.modules=a,f.cache=s,f.parent=n,f.distDir=void 0,f.publicUrl=void 0,f.devServer=void 0,f.i=l,f.register=function(v,x){a[v]=[function(m,y){y.exports=x},{}]},Object.defineProperty(f,"root",{get:function(){return i[h]}}),i[h]=f;for(var p=0;pQ.call(this,this)),A.DEBUG){let et=N=>console.log(`[ART.${this.id}] -> ${N}`);et(`Version@${A.version}`);for(let N=0;Net(`Event@${ut.type}`))}Y.push(this)}static get instances(){return Y}static get version(){return n.version}static get config(){return s.default}static get utils(){return X}static get scheme(){return z.default}static get Emitter(){return J.default}static get validator(){return i.default}static get kindOf(){return i.default.kindOf}static get html(){return K.default.html}static get option(){return{id:"",container:"#artplayer",url:"",poster:"",type:"",theme:"#f00",volume:.7,isLive:!1,muted:!1,autoplay:!1,autoSize:!1,autoMini:!1,loop:!1,flip:!1,playbackRate:!1,aspectRatio:!1,screenshot:!1,setting:!1,hotkey:!0,pip:!1,mutex:!0,backdrop:!0,fullscreen:!1,fullscreenWeb:!1,subtitleOffset:!1,miniProgressBar:!1,useSSR:!1,playsInline:!0,lock:!1,gesture:!0,fastForward:!1,autoPlayback:!1,autoOrientation:!1,airplay:!1,proxy:void 0,layers:[],contextmenu:[],controls:[],settings:[],quality:[],highlight:[],plugins:[],thumbnails:{url:"",number:60,column:10,width:0,height:0,scale:1},subtitle:{url:"",type:"",style:{},name:"",escape:!0,encoding:"utf-8",onVttLoad:U=>U},moreVideoAttr:{controls:!1,preload:X.isSafari?"auto":"metadata"},i18n:{},icons:{},cssVar:{},customType:{},lang:navigator==null?void 0:navigator.language.toLowerCase()}}get proxy(){return this.events.proxy}get query(){return this.template.query}get video(){return this.template.$video}destroy(U=!0){A.REMOVE_SRC_WHEN_DESTROY&&this.video.removeAttribute("src"),this.events.destroy(),this.template.destroy(U),Y.splice(Y.indexOf(this),1),this.isDestroy=!0,this.emit("destroy")}}o.default=A,A.STYLE=c.default,A.DEBUG=!1,A.CONTEXTMENU=!0,A.NOTICE_TIME=2e3,A.SETTING_WIDTH=250,A.SETTING_ITEM_WIDTH=200,A.SETTING_ITEM_HEIGHT=35,A.RESIZE_TIME=200,A.SCROLL_TIME=200,A.SCROLL_GAP=50,A.AUTO_PLAYBACK_MAX=10,A.AUTO_PLAYBACK_MIN=5,A.AUTO_PLAYBACK_TIMEOUT=3e3,A.RECONNECT_TIME_MAX=5,A.RECONNECT_SLEEP_TIME=1e3,A.CONTROL_HIDE_TIME=3e3,A.DBCLICK_TIME=300,A.DBCLICK_FULLSCREEN=!0,A.MOBILE_DBCLICK_PLAY=!0,A.MOBILE_CLICK_PLAY=!1,A.AUTO_ORIENTATION_TIME=200,A.INFO_LOOP_TIME=1e3,A.FAST_FORWARD_VALUE=3,A.FAST_FORWARD_TIME=1e3,A.TOUCH_MOVE_RATIO=.5,A.VOLUME_STEP=.1,A.SEEK_STEP=5,A.PLAYBACK_RATE=[.5,.75,1,1.25,1.5,2],A.ASPECT_RATIO=["default","4:3","16:9"],A.FLIP=["normal","horizontal","vertical"],A.FULLSCREEN_WEB_IN_BODY=!1,A.LOG_VERSION=!0,A.USE_RAF=!1,A.REMOVE_SRC_WHEN_DESTROY=!0,X.isBrowser&&(window.Artplayer=A,X.setStyleText("artplayer-style",c.default),setTimeout(()=>{A.LOG_VERSION&&console.log(`%c ArtPlayer %c ${A.version} %c https://artplayer.org`,"color: #fff; background: #5f5f5f","color: #fff; background: #4bc729","")},100))},{"bundle-text:./style/index.less":"2wh8D","option-validator":"g7VGh","../package.json":"lh3R5","./config":"eJfh8","./contextmenu":"9zso8","./control":"dp1yk","./events":"jmVSD","./hotkey":"dswts","./i18n":"d9ktO","./icons":"fFHY0","./info":"kZ0F8","./layer":"j9lbi","./loading":"bMjWd","./mask":"k1nkQ","./notice":"fPVaU","./player":"uR0Sw","./plugins":"cjxJL","./scheme":"biLjm","./setting":"bwLGT","./storage":"kwqbK","./subtitle":"k5613","./template":"fwOA1","./utils":"aBlEo","./utils/emitter":"4NM7P","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"2wh8D":[function(a,u,o,h){u.exports='.art-video-player{--art-theme:red;--art-font-color:#fff;--art-background-color:#000;--art-text-shadow-color:#00000080;--art-transition-duration:.2s;--art-padding:10px;--art-border-radius:3px;--art-progress-height:6px;--art-progress-color:#ffffff40;--art-hover-color:#ffffff40;--art-loaded-color:#ffffff40;--art-state-size:80px;--art-state-opacity:.8;--art-bottom-height:100px;--art-bottom-offset:20px;--art-bottom-gap:5px;--art-highlight-width:8px;--art-highlight-color:#ffffff80;--art-control-height:46px;--art-control-opacity:.75;--art-control-icon-size:36px;--art-control-icon-scale:1.1;--art-volume-height:120px;--art-volume-handle-size:14px;--art-lock-size:36px;--art-indicator-scale:0;--art-indicator-size:16px;--art-fullscreen-web-index:9999;--art-settings-icon-size:24px;--art-settings-max-height:300px;--art-selector-max-height:300px;--art-contextmenus-min-width:250px;--art-subtitle-font-size:20px;--art-subtitle-gap:5px;--art-subtitle-bottom:15px;--art-subtitle-border:#000;--art-widget-background:#000000d9;--art-tip-background:#000000b3;--art-scrollbar-size:4px;--art-scrollbar-background:#ffffff40;--art-scrollbar-background-hover:#ffffff80;--art-mini-progress-height:2px}.art-bg-cover{background-position:50%;background-repeat:no-repeat;background-size:cover}.art-bottom-gradient{background-image:linear-gradient(#0000,#0006,#000);background-position:bottom;background-repeat:repeat-x}.art-backdrop-filter{backdrop-filter:saturate(180%)blur(20px);background-color:#000000bf!important}.art-truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.art-video-player{zoom:1;text-align:left;user-select:none;box-sizing:border-box;width:100%;height:100%;color:var(--art-font-color);background-color:var(--art-background-color);text-shadow:0 0 2px var(--art-text-shadow-color);-webkit-tap-highlight-color:#0000;-ms-touch-action:manipulation;touch-action:manipulation;-ms-high-contrast-adjust:none;direction:ltr;outline:0;margin:0 auto;padding:0;font-family:PingFang SC,Helvetica Neue,Microsoft YaHei,Roboto,Arial,sans-serif;font-size:14px;line-height:1.3;position:relative}.art-video-player *,.art-video-player :before,.art-video-player :after{box-sizing:border-box}.art-video-player ::-webkit-scrollbar{width:var(--art-scrollbar-size);height:var(--art-scrollbar-size)}.art-video-player ::-webkit-scrollbar-thumb{background-color:var(--art-scrollbar-background)}.art-video-player ::-webkit-scrollbar-thumb:hover{background-color:var(--art-scrollbar-background-hover)}.art-video-player img{vertical-align:top;max-width:100%}.art-video-player svg{fill:var(--art-font-color)}.art-video-player a{color:var(--art-font-color);text-decoration:none}.art-icon{justify-content:center;align-items:center;line-height:1;display:flex}.art-video-player.art-backdrop .art-contextmenus,.art-video-player.art-backdrop .art-info,.art-video-player.art-backdrop .art-settings,.art-video-player.art-backdrop .art-layer-auto-playback,.art-video-player.art-backdrop .art-selector-list,.art-video-player.art-backdrop .art-volume-inner{backdrop-filter:saturate(180%)blur(20px);background-color:#000000bf!important}.art-video{z-index:10;cursor:pointer;width:100%;height:100%;position:absolute;inset:0}.art-poster{z-index:11;pointer-events:none;background-position:50%;background-repeat:no-repeat;background-size:cover;width:100%;height:100%;position:absolute;inset:0}.art-video-player .art-subtitle{z-index:20;text-align:center;pointer-events:none;justify-content:center;align-items:center;gap:var(--art-subtitle-gap);width:100%;bottom:var(--art-subtitle-bottom);font-size:var(--art-subtitle-font-size);transition:bottom var(--art-transition-duration)ease;text-shadow:var(--art-subtitle-border)1px 0 1px,var(--art-subtitle-border)0 1px 1px,var(--art-subtitle-border)-1px 0 1px,var(--art-subtitle-border)0 -1px 1px,var(--art-subtitle-border)1px 1px 1px,var(--art-subtitle-border)-1px -1px 1px,var(--art-subtitle-border)1px -1px 1px,var(--art-subtitle-border)-1px 1px 1px;flex-direction:column;padding:0 5%;display:none;position:absolute}.art-video-player.art-subtitle-show .art-subtitle{display:flex}.art-video-player.art-control-show .art-subtitle{bottom:calc(var(--art-control-height) + var(--art-subtitle-bottom))}.art-danmuku{z-index:30;pointer-events:none;width:100%;height:100%;position:absolute;inset:0;overflow:hidden}.art-video-player .art-layers{z-index:40;pointer-events:none;width:100%;height:100%;display:none;position:absolute;inset:0}.art-video-player .art-layers .art-layer{pointer-events:auto}.art-video-player.art-layer-show .art-layers{display:flex}.art-video-player .art-mask{z-index:50;pointer-events:none;justify-content:center;align-items:center;width:100%;height:100%;display:flex;position:absolute;inset:0}.art-video-player .art-mask .art-state{opacity:0;width:var(--art-state-size);height:var(--art-state-size);transition:all var(--art-transition-duration)ease;justify-content:center;align-items:center;display:flex;transform:scale(2)}.art-video-player.art-mask-show .art-state{cursor:pointer;pointer-events:auto;opacity:var(--art-state-opacity);transform:scale(1)}.art-video-player.art-loading-show .art-state{display:none}.art-video-player .art-loading{z-index:70;pointer-events:none;justify-content:center;align-items:center;width:100%;height:100%;display:none;position:absolute;inset:0}.art-video-player.art-loading-show .art-loading{display:flex}.art-video-player .art-bottom{z-index:60;opacity:0;pointer-events:none;width:100%;height:100%;padding:0 var(--art-padding);transition:all var(--art-transition-duration)ease;background-size:100% var(--art-bottom-height);background-image:linear-gradient(#0000,#0006,#000);background-position:bottom;background-repeat:repeat-x;flex-direction:column;justify-content:flex-end;display:flex;position:absolute;inset:0;overflow:hidden}.art-video-player .art-bottom .art-controls,.art-video-player .art-bottom .art-progress{transform:translateY(var(--art-bottom-offset));transition:transform var(--art-transition-duration)ease}.art-video-player.art-control-show .art-bottom,.art-video-player.art-hover .art-bottom{opacity:1}.art-video-player.art-control-show .art-bottom .art-controls,.art-video-player.art-hover .art-bottom .art-controls,.art-video-player.art-control-show .art-bottom .art-progress,.art-video-player.art-hover .art-bottom .art-progress{transform:translateY(0)}.art-bottom .art-progress{z-index:0;pointer-events:auto;padding-bottom:var(--art-bottom-gap);position:relative}.art-bottom .art-progress .art-control-progress{cursor:pointer;height:var(--art-progress-height);justify-content:center;align-items:center;display:flex;position:relative}.art-bottom .art-progress .art-control-progress .art-control-progress-inner{width:100%;height:50%;transition:height var(--art-transition-duration)ease;background-color:var(--art-progress-color);align-items:center;display:flex;position:relative}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-hover{z-index:0;background-color:var(--art-hover-color);width:0%;height:100%;position:absolute;inset:0}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-loaded{z-index:10;background-color:var(--art-loaded-color);width:0%;height:100%;position:absolute;inset:0}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-played{z-index:20;background-color:var(--art-theme);width:0%;height:100%;position:absolute;inset:0}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-highlight{z-index:30;pointer-events:none;width:100%;height:100%;position:absolute;inset:0}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-highlight span{z-index:0;pointer-events:auto;width:100%;height:100%;transform:translateX(calc(var(--art-highlight-width)/-2));background-color:var(--art-highlight-color);position:absolute;inset:0 auto 0 0;width:var(--art-highlight-width)!important}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator{z-index:40;width:var(--art-indicator-size);height:var(--art-indicator-size);transform:scale(var(--art-indicator-scale));margin-left:calc(var(--art-indicator-size)/-2);transition:transform var(--art-transition-duration)ease;border-radius:50%;justify-content:center;align-items:center;display:flex;position:absolute;left:0}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator .art-icon{pointer-events:none;width:100%;height:100%}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator:hover{transform:scale(1.2)!important}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator:active{transform:scale(1)!important}.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-tip{z-index:50;border-radius:var(--art-border-radius);white-space:nowrap;background-color:var(--art-tip-background);padding:3px 5px;font-size:12px;line-height:1;display:none;position:absolute;top:-25px;left:0}.art-bottom .art-progress .art-control-progress:hover .art-control-progress-inner{height:100%}.art-bottom .art-progress .art-control-thumbnails{bottom:calc(var(--art-bottom-gap) + 10px);border-radius:var(--art-border-radius);pointer-events:none;background-color:var(--art-widget-background);display:none;position:absolute;left:0;box-shadow:0 1px 3px #0003,0 1px 2px -1px #0003}.art-bottom:hover .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator{transform:scale(1)}.art-controls{z-index:10;pointer-events:auto;height:var(--art-control-height);justify-content:space-between;align-items:center;display:flex;position:relative}.art-controls .art-controls-left,.art-controls .art-controls-right{height:100%;display:flex}.art-controls .art-controls-center{flex:1;justify-content:center;align-items:center;height:100%;padding:0 10px;display:none}.art-controls .art-controls-right{justify-content:flex-end}.art-controls .art-control{cursor:pointer;white-space:nowrap;opacity:var(--art-control-opacity);min-height:var(--art-control-height);min-width:var(--art-control-height);transition:opacity var(--art-transition-duration)ease;flex-shrink:0;justify-content:center;align-items:center;display:flex}.art-controls .art-control .art-icon{height:var(--art-control-icon-size);width:var(--art-control-icon-size);transform:scale(var(--art-control-icon-scale));transition:transform var(--art-transition-duration)ease}.art-controls .art-control .art-icon:active{transform:scale(calc(var(--art-control-icon-scale)*.8))}.art-controls .art-control:hover{opacity:1}.art-control-volume{position:relative}.art-control-volume .art-volume-panel{text-align:center;cursor:default;opacity:0;pointer-events:none;left:0;right:0;bottom:var(--art-control-height);width:var(--art-control-height);height:var(--art-volume-height);transition:all var(--art-transition-duration)ease;justify-content:center;align-items:center;padding:0 5px;font-size:12px;display:flex;position:absolute;transform:translateY(10px)}.art-control-volume .art-volume-panel .art-volume-inner{border-radius:var(--art-border-radius);background-color:var(--art-widget-background);flex-direction:column;align-items:center;gap:10px;width:100%;height:100%;padding:10px 0 12px;display:flex}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider{cursor:pointer;flex:1;justify-content:center;width:100%;display:flex;position:relative}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-handle{border-radius:var(--art-border-radius);background-color:#ffffff40;justify-content:center;width:2px;display:flex;position:relative;overflow:hidden}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-handle .art-volume-loaded{z-index:0;background-color:var(--art-theme);width:100%;height:100%;position:absolute;inset:0}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-indicator{width:var(--art-volume-handle-size);height:var(--art-volume-handle-size);margin-top:calc(var(--art-volume-handle-size)/-2);background-color:var(--art-theme);transition:transform var(--art-transition-duration)ease;border-radius:100%;flex-shrink:0;position:absolute;transform:scale(1)}.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider:active .art-volume-indicator{transform:scale(.9)}.art-control-volume:hover .art-volume-panel{opacity:1;pointer-events:auto;transform:translateY(0)}.art-video-player .art-notice{z-index:80;width:100%;height:auto;padding:var(--art-padding);pointer-events:none;display:none;position:absolute;inset:0 0 auto}.art-video-player .art-notice .art-notice-inner{border-radius:var(--art-border-radius);background-color:var(--art-tip-background);padding:5px;line-height:1;display:inline-flex}.art-video-player.art-notice-show .art-notice{display:flex}.art-video-player .art-contextmenus{z-index:120;border-radius:var(--art-border-radius);background-color:var(--art-widget-background);min-width:var(--art-contextmenus-min-width);flex-direction:column;padding:5px 0;font-size:12px;display:none;position:absolute}.art-video-player .art-contextmenus .art-contextmenu{cursor:pointer;border-bottom:1px solid #ffffff1a;padding:10px 15px;display:flex}.art-video-player .art-contextmenus .art-contextmenu span{padding:0 8px}.art-video-player .art-contextmenus .art-contextmenu span:hover,.art-video-player .art-contextmenus .art-contextmenu span.art-current{color:var(--art-theme)}.art-video-player .art-contextmenus .art-contextmenu:hover{background-color:#ffffff1a}.art-video-player .art-contextmenus .art-contextmenu:last-child{border-bottom:none}.art-video-player.art-contextmenu-show .art-contextmenus{display:flex}.art-video-player .art-settings{z-index:90;border-radius:var(--art-border-radius);max-height:var(--art-settings-max-height);left:auto;right:var(--art-padding);bottom:var(--art-control-height);transition:all var(--art-transition-duration)ease;background-color:var(--art-widget-background);flex-direction:column;display:none;position:absolute;overflow:hidden auto}.art-video-player .art-settings .art-setting-panel{flex-direction:column;display:none}.art-video-player .art-settings .art-setting-panel.art-current{display:flex}.art-video-player .art-settings .art-setting-panel .art-setting-item{cursor:pointer;transition:background-color var(--art-transition-duration)ease;justify-content:space-between;align-items:center;padding:0 5px;display:flex;overflow:hidden}.art-video-player .art-settings .art-setting-panel .art-setting-item:hover{background-color:#ffffff1a}.art-video-player .art-settings .art-setting-panel .art-setting-item.art-current{color:var(--art-theme)}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-icon-check{visibility:hidden;height:15px}.art-video-player .art-settings .art-setting-panel .art-setting-item.art-current .art-icon-check{visibility:visible}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left{flex-shrink:0;justify-content:center;align-items:center;gap:5px;display:flex}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left .art-setting-item-left-icon{height:var(--art-settings-icon-size);width:var(--art-settings-icon-size);justify-content:center;align-items:center;display:flex}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right{justify-content:center;align-items:center;gap:5px;font-size:12px;display:flex}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-item-right-tooltip{white-space:nowrap;color:#ffffff80}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-item-right-icon{justify-content:center;align-items:center;min-width:32px;height:24px;display:flex}.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-range{appearance:none;background-color:#fff3;outline:none;width:80px;height:3px}.art-video-player .art-settings .art-setting-panel .art-setting-item-back{border-bottom:1px solid #ffffff1a}.art-video-player.art-setting-show .art-settings{display:flex}.art-video-player .art-info{left:var(--art-padding);top:var(--art-padding);z-index:100;border-radius:var(--art-border-radius);background-color:var(--art-widget-background);padding:10px;font-size:12px;display:none;position:absolute}.art-video-player .art-info .art-info-panel{flex-direction:column;gap:5px;display:flex}.art-video-player .art-info .art-info-panel .art-info-item{align-items:center;gap:5px;display:flex}.art-video-player .art-info .art-info-panel .art-info-item .art-info-title{text-align:right;width:100px}.art-video-player .art-info .art-info-panel .art-info-item .art-info-content{text-overflow:ellipsis;white-space:nowrap;user-select:all;width:250px;overflow:hidden}.art-video-player .art-info .art-info-close{cursor:pointer;position:absolute;top:5px;right:5px}.art-video-player.art-info-show .art-info{display:flex}.art-hide-cursor *{cursor:none!important}.art-video-player[data-aspect-ratio]{overflow:hidden}.art-video-player[data-aspect-ratio] .art-video{object-fit:fill;box-sizing:content-box}.art-fullscreen{--art-progress-height:8px;--art-indicator-size:20px;--art-control-height:60px;--art-control-icon-scale:1.3}.art-fullscreen-web{--art-progress-height:8px;--art-indicator-size:20px;--art-control-height:60px;--art-control-icon-scale:1.3;z-index:var(--art-fullscreen-web-index);width:100%;height:100%;position:fixed;inset:0}.art-mini-popup{z-index:9999;border-radius:var(--art-border-radius);cursor:move;user-select:none;background:#000;width:320px;height:180px;transition:opacity .2s;position:fixed;overflow:hidden;box-shadow:0 0 5px #00000080}.art-mini-popup svg{fill:#fff}.art-mini-popup .art-video{pointer-events:none}.art-mini-popup .art-mini-close{z-index:20;cursor:pointer;opacity:0;transition:opacity .2s;position:absolute;top:10px;right:10px}.art-mini-popup .art-mini-state{z-index:30;pointer-events:none;opacity:0;background-color:#00000040;justify-content:center;align-items:center;width:100%;height:100%;transition:opacity .2s;display:flex;position:absolute;inset:0}.art-mini-popup .art-mini-state .art-icon{opacity:.75;cursor:pointer;pointer-events:auto;transition:transform .2s;transform:scale(3)}.art-mini-popup .art-mini-state .art-icon:active{transform:scale(2.5)}.art-mini-popup.art-mini-dragging{opacity:.9}.art-mini-popup:hover .art-mini-close,.art-mini-popup:hover .art-mini-state{opacity:1}.art-video-player[data-flip=horizontal] .art-video{transform:scaleX(-1)}.art-video-player[data-flip=vertical] .art-video{transform:scaleY(-1)}.art-video-player .art-layer-lock{height:var(--art-lock-size);width:var(--art-lock-size);top:50%;left:var(--art-padding);background-color:var(--art-tip-background);border-radius:50%;justify-content:center;align-items:center;display:none;position:absolute;transform:translateY(-50%)}.art-video-player .art-layer-auto-playback{border-radius:var(--art-border-radius);left:var(--art-padding);bottom:calc(var(--art-control-height) + var(--art-bottom-gap) + 10px);background-color:var(--art-widget-background);align-items:center;gap:10px;padding:10px;line-height:1;display:none;position:absolute}.art-video-player .art-layer-auto-playback .art-auto-playback-close{cursor:pointer;justify-content:center;align-items:center;display:flex}.art-video-player .art-layer-auto-playback .art-auto-playback-close svg{width:15px;height:15px;fill:var(--art-theme)}.art-video-player .art-layer-auto-playback .art-auto-playback-jump{color:var(--art-theme);cursor:pointer}.art-video-player.art-lock .art-subtitle{bottom:var(--art-subtitle-bottom)!important}.art-video-player.art-mini-progress-bar .art-bottom,.art-video-player.art-lock .art-bottom{opacity:1;background-image:none;padding:0}.art-video-player.art-mini-progress-bar .art-bottom .art-controls,.art-video-player.art-lock .art-bottom .art-controls,.art-video-player.art-mini-progress-bar .art-bottom .art-progress,.art-video-player.art-lock .art-bottom .art-progress{transform:translateY(calc(var(--art-control-height) + var(--art-bottom-gap) + var(--art-progress-height)/4))}.art-video-player.art-mini-progress-bar .art-bottom .art-progress-indicator,.art-video-player.art-lock .art-bottom .art-progress-indicator{display:none!important}.art-video-player.art-control-show .art-layer-lock{display:flex}.art-control-selector{justify-content:center;display:flex;position:relative}.art-control-selector .art-selector-list{text-align:center;border-radius:var(--art-border-radius);opacity:0;pointer-events:none;bottom:var(--art-control-height);max-height:var(--art-selector-max-height);background-color:var(--art-widget-background);transition:all var(--art-transition-duration)ease;flex-direction:column;align-items:center;display:flex;position:absolute;overflow:hidden auto;transform:translateY(10px)}.art-control-selector .art-selector-list .art-selector-item{flex-shrink:0;justify-content:center;align-items:center;width:100%;padding:10px 15px;line-height:1;display:flex}.art-control-selector .art-selector-list .art-selector-item:hover{background-color:#ffffff1a}.art-control-selector .art-selector-list .art-selector-item:hover,.art-control-selector .art-selector-list .art-selector-item.art-current{color:var(--art-theme)}.art-control-selector:hover .art-selector-list{opacity:1;pointer-events:auto;transform:translateY(0)}[class*=hint--]{font-style:normal;display:inline-block;position:relative}[class*=hint--]:before,[class*=hint--]:after{visibility:hidden;opacity:0;z-index:1000000;pointer-events:none;transition:all .3s;position:absolute;transform:translate(0,0)}[class*=hint--]:hover:before,[class*=hint--]:hover:after{visibility:visible;opacity:1;transition-delay:.1s}[class*=hint--]:before{content:"";z-index:1000001;background:0 0;border:6px solid #0000;position:absolute}[class*=hint--]:after{color:#fff;white-space:nowrap;background:#000;padding:8px 10px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:12px;line-height:12px}[class*=hint--][aria-label]:after{content:attr(aria-label)}[class*=hint--][data-hint]:after{content:attr(data-hint)}[aria-label=""]:before,[aria-label=""]:after,[data-hint=""]:before,[data-hint=""]:after{display:none!important}.hint--top-left:before,.hint--top-right:before,.hint--top:before{border-top-color:#000}.hint--bottom-left:before,.hint--bottom-right:before,.hint--bottom:before{border-bottom-color:#000}.hint--left:before{border-left-color:#000}.hint--right:before{border-right-color:#000}.hint--top:before{margin-bottom:-11px}.hint--top:before,.hint--top:after{bottom:100%;left:50%}.hint--top:before{left:calc(50% - 6px)}.hint--top:after{transform:translate(-50%)}.hint--top:hover:before{transform:translateY(-8px)}.hint--top:hover:after{transform:translate(-50%)translateY(-8px)}.hint--bottom:before{margin-top:-11px}.hint--bottom:before,.hint--bottom:after{top:100%;left:50%}.hint--bottom:before{left:calc(50% - 6px)}.hint--bottom:after{transform:translate(-50%)}.hint--bottom:hover:before{transform:translateY(8px)}.hint--bottom:hover:after{transform:translate(-50%)translateY(8px)}.hint--right:before{margin-bottom:-6px;margin-left:-11px}.hint--right:after{margin-bottom:-14px}.hint--right:before,.hint--right:after{bottom:50%;left:100%}.hint--right:hover:before,.hint--right:hover:after{transform:translate(8px)}.hint--left:before{margin-bottom:-6px;margin-right:-11px}.hint--left:after{margin-bottom:-14px}.hint--left:before,.hint--left:after{bottom:50%;right:100%}.hint--left:hover:before,.hint--left:hover:after{transform:translate(-8px)}.hint--top-left:before{margin-bottom:-11px}.hint--top-left:before,.hint--top-left:after{bottom:100%;left:50%}.hint--top-left:before{left:calc(50% - 6px)}.hint--top-left:after{margin-left:12px;transform:translate(-100%)}.hint--top-left:hover:before{transform:translateY(-8px)}.hint--top-left:hover:after{transform:translate(-100%)translateY(-8px)}.hint--top-right:before{margin-bottom:-11px}.hint--top-right:before,.hint--top-right:after{bottom:100%;left:50%}.hint--top-right:before{left:calc(50% - 6px)}.hint--top-right:after{margin-left:-12px;transform:translate(0)}.hint--top-right:hover:before,.hint--top-right:hover:after{transform:translateY(-8px)}.hint--bottom-left:before{margin-top:-11px}.hint--bottom-left:before,.hint--bottom-left:after{top:100%;left:50%}.hint--bottom-left:before{left:calc(50% - 6px)}.hint--bottom-left:after{margin-left:12px;transform:translate(-100%)}.hint--bottom-left:hover:before{transform:translateY(8px)}.hint--bottom-left:hover:after{transform:translate(-100%)translateY(8px)}.hint--bottom-right:before{margin-top:-11px}.hint--bottom-right:before,.hint--bottom-right:after{top:100%;left:50%}.hint--bottom-right:before{left:calc(50% - 6px)}.hint--bottom-right:after{margin-left:-12px;transform:translate(0)}.hint--bottom-right:hover:before,.hint--bottom-right:hover:after{transform:translateY(8px)}.hint--small:after,.hint--medium:after,.hint--large:after{white-space:normal;word-wrap:break-word;line-height:1.4em}.hint--small:after{width:80px}.hint--medium:after{width:150px}.hint--large:after{width:300px}[class*=hint--]:after{text-shadow:0 -1px #000;box-shadow:4px 4px 8px #0000004d}.hint--error:after{text-shadow:0 -1px #592726;background-color:#b34e4d}.hint--error.hint--top-left:before,.hint--error.hint--top-right:before,.hint--error.hint--top:before{border-top-color:#b34e4d}.hint--error.hint--bottom-left:before,.hint--error.hint--bottom-right:before,.hint--error.hint--bottom:before{border-bottom-color:#b34e4d}.hint--error.hint--left:before{border-left-color:#b34e4d}.hint--error.hint--right:before{border-right-color:#b34e4d}.hint--warning:after{text-shadow:0 -1px #6c5328;background-color:#c09854}.hint--warning.hint--top-left:before,.hint--warning.hint--top-right:before,.hint--warning.hint--top:before{border-top-color:#c09854}.hint--warning.hint--bottom-left:before,.hint--warning.hint--bottom-right:before,.hint--warning.hint--bottom:before{border-bottom-color:#c09854}.hint--warning.hint--left:before{border-left-color:#c09854}.hint--warning.hint--right:before{border-right-color:#c09854}.hint--info:after{text-shadow:0 -1px #1a3c4d;background-color:#3986ac}.hint--info.hint--top-left:before,.hint--info.hint--top-right:before,.hint--info.hint--top:before{border-top-color:#3986ac}.hint--info.hint--bottom-left:before,.hint--info.hint--bottom-right:before,.hint--info.hint--bottom:before{border-bottom-color:#3986ac}.hint--info.hint--left:before{border-left-color:#3986ac}.hint--info.hint--right:before{border-right-color:#3986ac}.hint--success:after{text-shadow:0 -1px #1a321a;background-color:#458746}.hint--success.hint--top-left:before,.hint--success.hint--top-right:before,.hint--success.hint--top:before{border-top-color:#458746}.hint--success.hint--bottom-left:before,.hint--success.hint--bottom-right:before,.hint--success.hint--bottom:before{border-bottom-color:#458746}.hint--success.hint--left:before{border-left-color:#458746}.hint--success.hint--right:before{border-right-color:#458746}.hint--always:after,.hint--always:before{opacity:1;visibility:visible}.hint--always.hint--top:before{transform:translateY(-8px)}.hint--always.hint--top:after{transform:translate(-50%)translateY(-8px)}.hint--always.hint--top-left:before{transform:translateY(-8px)}.hint--always.hint--top-left:after{transform:translate(-100%)translateY(-8px)}.hint--always.hint--top-right:before,.hint--always.hint--top-right:after{transform:translateY(-8px)}.hint--always.hint--bottom:before{transform:translateY(8px)}.hint--always.hint--bottom:after{transform:translate(-50%)translateY(8px)}.hint--always.hint--bottom-left:before{transform:translateY(8px)}.hint--always.hint--bottom-left:after{transform:translate(-100%)translateY(8px)}.hint--always.hint--bottom-right:before,.hint--always.hint--bottom-right:after{transform:translateY(8px)}.hint--always.hint--left:before,.hint--always.hint--left:after{transform:translate(-8px)}.hint--always.hint--right:before,.hint--always.hint--right:after{transform:translate(8px)}.hint--rounded:after{border-radius:4px}.hint--no-animate:before,.hint--no-animate:after{transition-duration:0s}.hint--bounce:before,.hint--bounce:after{-webkit-transition:opacity .3s,visibility .3s,-webkit-transform .3s cubic-bezier(.71,1.7,.77,1.24);-moz-transition:opacity .3s,visibility .3s,-moz-transform .3s cubic-bezier(.71,1.7,.77,1.24);transition:opacity .3s,visibility .3s,transform .3s cubic-bezier(.71,1.7,.77,1.24)}.hint--no-shadow:before,.hint--no-shadow:after{text-shadow:initial;box-shadow:initial}.hint--no-arrow:before{display:none}.art-video-player.art-mobile{--art-bottom-gap:10px;--art-control-height:38px;--art-control-icon-scale:1;--art-state-size:60px;--art-settings-max-height:180px;--art-selector-max-height:180px;--art-indicator-scale:1;--art-control-opacity:1}.art-video-player.art-mobile .art-controls-left{margin-left:calc(var(--art-padding)/-1)}.art-video-player.art-mobile .art-controls-right{margin-right:calc(var(--art-padding)/-1)}'},{}],g7VGh:[function(a,u,o,h){u.exports=function(){function e(s){return(e=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(d){return typeof d}:function(d){return d&&typeof Symbol=="function"&&d.constructor===Symbol&&d!==Symbol.prototype?"symbol":typeof d})(s)}var t=Object.prototype.toString,c=function(s){if(s===void 0)return"undefined";if(s===null)return"null";var d=e(s);if(d==="boolean")return"boolean";if(d==="string")return"string";if(d==="number")return"number";if(d==="symbol")return"symbol";if(d==="function")return r(s)==="GeneratorFunction"?"generatorfunction":"function";if(Array.isArray?Array.isArray(s):s instanceof Array)return"array";if(s.constructor&&typeof s.constructor.isBuffer=="function"&&s.constructor.isBuffer(s))return"buffer";if(function(f){try{if(typeof f.length=="number"&&typeof f.callee=="function")return!0}catch(p){if(p.message.indexOf("callee")!==-1)return!0}return!1}(s))return"arguments";if(s instanceof Date||typeof s.toDateString=="function"&&typeof s.getDate=="function"&&typeof s.setDate=="function")return"date";if(s instanceof Error||typeof s.message=="string"&&s.constructor&&typeof s.constructor.stackTraceLimit=="number")return"error";if(s instanceof RegExp||typeof s.flags=="string"&&typeof s.ignoreCase=="boolean"&&typeof s.multiline=="boolean"&&typeof s.global=="boolean")return"regexp";switch(r(s)){case"Symbol":return"symbol";case"Promise":return"promise";case"WeakMap":return"weakmap";case"WeakSet":return"weakset";case"Map":return"map";case"Set":return"set";case"Int8Array":return"int8array";case"Uint8Array":return"uint8array";case"Uint8ClampedArray":return"uint8clampedarray";case"Int16Array":return"int16array";case"Uint16Array":return"uint16array";case"Int32Array":return"int32array";case"Uint32Array":return"uint32array";case"Float32Array":return"float32array";case"Float64Array":return"float64array"}if(typeof s.throw=="function"&&typeof s.return=="function"&&typeof s.next=="function")return"generator";switch(d=t.call(s)){case"[object Object]":return"object";case"[object Map Iterator]":return"mapiterator";case"[object Set Iterator]":return"setiterator";case"[object String Iterator]":return"stringiterator";case"[object Array Iterator]":return"arrayiterator"}return d.slice(8,-1).toLowerCase().replace(/\s/g,"")};function r(s){return s.constructor?s.constructor.name:null}function i(s,d){var f=2","license":"MIT","homepage":"https://artplayer.org","repository":{"type":"git","url":"git+https://github.com/zhw2590582/ArtPlayer.git"},"bugs":{"url":"https://github.com/zhw2590582/ArtPlayer/issues"},"keywords":["html5","video","player"],"exports":{".":{"types":"./types/artplayer.d.ts","import":"./dist/artplayer.mjs","require":"./dist/artplayer.js"},"./legacy":{"types":"./types/artplayer.d.ts","import":"./dist/artplayer.legacy.js","require":"./dist/artplayer.legacy.js"},"./i18n/*":{"types":"./types/i18n.d.ts","import":"./dist/i18n/*.mjs","require":"./dist/i18n/*.js"}},"main":"./dist/artplayer.js","module":"./dist/artplayer.mjs","types":"./types/artplayer.d.ts","typesVersions":{"*":{"i18n/*":["types/i18n.d.ts"],"legacy":["types/artplayer.d.ts"]}},"legacy":"./dist/artplayer.legacy.js","browserslist":"last 1 Chrome version","dependencies":{"option-validator":"^2.0.6"}}')},{}],eJfh8:[function(a,u,o,h){a("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(o),o.default={properties:["audioTracks","autoplay","buffered","controller","controls","crossOrigin","currentSrc","currentTime","defaultMuted","defaultPlaybackRate","duration","ended","error","loop","mediaGroup","muted","networkState","paused","playbackRate","played","preload","readyState","seekable","seeking","src","startDate","textTracks","videoTracks","volume"],methods:["addTextTrack","canPlayType","load","play","pause"],events:["abort","canplay","canplaythrough","durationchange","emptied","ended","error","loadeddata","loadedmetadata","loadstart","pause","play","playing","progress","ratechange","seeked","seeking","stalled","suspend","timeupdate","volumechange","waiting"],prototypes:["width","height","videoWidth","videoHeight","poster","webkitDecodedFrameCount","webkitDroppedFrameCount","playsInline","webkitSupportsFullscreen","webkitDisplayingFullscreen","onenterpictureinpicture","onleavepictureinpicture","disablePictureInPicture","cancelVideoFrameCallback","requestVideoFrameCallback","getVideoPlaybackQuality","requestPictureInPicture","webkitEnterFullScreen","webkitEnterFullscreen","webkitExitFullScreen","webkitExitFullscreen"]}},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],loqXi:[function(a,u,o,h){o.interopDefault=function(e){return e&&e.__esModule?e:{default:e}},o.defineInteropFlag=function(e){Object.defineProperty(e,"__esModule",{value:!0})},o.exportAll=function(e,t){return Object.keys(e).forEach(function(c){c==="default"||c==="__esModule"||Object.prototype.hasOwnProperty.call(t,c)||Object.defineProperty(t,c,{enumerable:!0,get:function(){return e[c]}})}),t},o.export=function(e,t,c){Object.defineProperty(e,t,{enumerable:!0,get:c})}},{}],"9zso8":[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o);var t=a("../utils"),c=a("../utils/component"),r=e.interopDefault(c),i=a("./aspectRatio"),n=e.interopDefault(i),l=a("./close"),s=e.interopDefault(l),d=a("./flip"),f=e.interopDefault(d),p=a("./info"),g=e.interopDefault(p),v=a("./playbackRate"),x=e.interopDefault(v),m=a("./version"),y=e.interopDefault(m);class j extends r.default{constructor($){super($),this.name="contextmenu",this.$parent=$.template.$contextmenu,t.isMobile||this.init()}init(){let{option:$,proxy:S,template:{$player:E,$contextmenu:C}}=this.art;$.playbackRate&&this.add((0,x.default)({name:"playbackRate",index:10})),$.aspectRatio&&this.add((0,n.default)({name:"aspectRatio",index:20})),$.flip&&this.add((0,f.default)({name:"flip",index:30})),this.add((0,g.default)({name:"info",index:40})),this.add((0,y.default)({name:"version",index:50})),this.add((0,s.default)({name:"close",index:60}));for(let I=0;I<$.contextmenu.length;I++)this.add($.contextmenu[I]);S(E,"contextmenu",I=>{if(!this.art.constructor.CONTEXTMENU)return;I.preventDefault(),this.show=!0;let L=I.clientX,R=I.clientY,{height:w,width:b,left:T,top:F}=(0,t.getRect)(E),{height:P,width:M}=(0,t.getRect)(C),q=L-T,O=R-F;L+M>T+b&&(q=b-M),R+P>F+w&&(O=w-P),(0,t.setStyles)(C,{top:`${O}px`,left:`${q}px`})}),S(E,"click",I=>{(0,t.includeFromEvent)(I,C)||(this.show=!1)}),this.art.on("blur",()=>{this.show=!1})}}o.default=j},{"../utils":"aBlEo","../utils/component":"idCEj","./aspectRatio":"6XHP2","./close":"eF6AX","./flip":"7Wg1P","./info":"fjRnU","./playbackRate":"hm1DY","./version":"aJBeL","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],aBlEo:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o);var t=a("./compatibility");e.exportAll(t,o);var c=a("./dom");e.exportAll(c,o);var r=a("./error");e.exportAll(r,o);var i=a("./file");e.exportAll(i,o);var n=a("./format");e.exportAll(n,o);var l=a("./property");e.exportAll(l,o);var s=a("./subtitle");e.exportAll(s,o);var d=a("./time");e.exportAll(d,o)},{"./compatibility":"jg0yq","./dom":"eANXw","./error":"4FwTI","./file":"i2JbS","./format":"dy9GH","./property":"jY49c","./subtitle":"ke7ox","./time":"f7gsx","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],jg0yq:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"userAgent",()=>t),e.export(o,"isSafari",()=>c),e.export(o,"isIOS",()=>r),e.export(o,"isIOS13",()=>i),e.export(o,"isMobile",()=>n),e.export(o,"isBrowser",()=>l);let t=(globalThis==null?void 0:globalThis.CUSTOM_USER_AGENT)??(typeof navigator<"u"?navigator.userAgent:""),c=/^(?:(?!chrome|android).)*safari/i.test(t),r=/iPad|iPhone|iPod/i.test(t)&&!window.MSStream,i=r||t.includes("Macintosh")&&navigator.maxTouchPoints>=1,n=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(t)||i,l=typeof window<"u"&&typeof document<"u"},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],eANXw:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"query",()=>c),e.export(o,"queryAll",()=>r),e.export(o,"addClass",()=>i),e.export(o,"removeClass",()=>n),e.export(o,"hasClass",()=>l),e.export(o,"append",()=>s),e.export(o,"remove",()=>d),e.export(o,"setStyle",()=>f),e.export(o,"setStyles",()=>p),e.export(o,"getStyle",()=>g),e.export(o,"siblings",()=>v),e.export(o,"inverseClass",()=>x),e.export(o,"tooltip",()=>m),e.export(o,"isInViewport",()=>y),e.export(o,"includeFromEvent",()=>j),e.export(o,"replaceElement",()=>k),e.export(o,"createElement",()=>$),e.export(o,"getIcon",()=>S),e.export(o,"setStyleText",()=>E),e.export(o,"supportsFlex",()=>C),e.export(o,"getRect",()=>I),e.export(o,"loadImg",()=>L),e.export(o,"getComposedPath",()=>R);var t=a("./compatibility");function c(w,b=document){return b.querySelector(w)}function r(w,b=document){return Array.from(b.querySelectorAll(w))}function i(w,b){return w.classList.add(b)}function n(w,b){return w.classList.remove(b)}function l(w,b){return w.classList.contains(b)}function s(w,b){return b instanceof Element?w.appendChild(b):w.insertAdjacentHTML("beforeend",String(b)),w.lastElementChild||w.lastChild}function d(w){return w.parentNode.removeChild(w)}function f(w,b,T){return w.style[b]=T,w}function p(w,b){for(let T in b)f(w,T,b[T]);return w}function g(w,b,T=!0){let F=window.getComputedStyle(w,null).getPropertyValue(b);return T?Number.parseFloat(F):F}function v(w){return Array.from(w.parentElement.children).filter(b=>b!==w)}function x(w,b){v(w).forEach(T=>n(T,b)),i(w,b)}function m(w,b,T="top"){t.isMobile||(w.setAttribute("aria-label",b),i(w,"hint--rounded"),i(w,`hint--${T}`))}function y(w,b=0){let T=w.getBoundingClientRect(),F=window.innerHeight||document.documentElement.clientHeight,P=window.innerWidth||document.documentElement.clientWidth,M=T.top-b<=F&&T.top+T.height+b>=0,q=T.left-b<=P+b&&T.left+T.width+b>=0;return M&&q}function j(w,b){return R(w).includes(b)}function k(w,b){return b.parentNode.replaceChild(w,b),w}function $(w){return document.createElement(w)}function S(w="",b=""){let T=$("i");return i(T,"art-icon"),i(T,`art-icon-${w}`),s(T,b),T}function E(w,b){let T=document.getElementById(w);T||((T=document.createElement("style")).id=w,document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{document.head.appendChild(T)}):(document.head||document.documentElement).appendChild(T)),T.textContent=b}function C(){let w=document.createElement("div");return w.style.display="flex",w.style.display==="flex"}function I(w){return w.getBoundingClientRect()}function L(w,b){return new Promise((T,F)=>{let P=new Image;P.onload=function(){if(b&&b!==1){let M=document.createElement("canvas"),q=M.getContext("2d");M.width=P.width*b,M.height=P.height*b,q.drawImage(P,0,0,M.width,M.height),M.toBlob(O=>{let B=URL.createObjectURL(O),H=new Image;H.onload=function(){T(H)},H.onerror=function(){URL.revokeObjectURL(B),F(Error(`Image load failed: ${w}`))},H.src=B})}else T(P)},P.onerror=function(){F(Error(`Image load failed: ${w}`))},P.src=w})}function R(w){if(w.composedPath)return w.composedPath();let b=[],T=w.target;for(;T;)b.push(T),T=T.parentNode;return b.includes(window)||window===void 0||b.push(window),b}},{"./compatibility":"jg0yq","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"4FwTI":[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"ArtPlayerError",()=>t),e.export(o,"errorHandle",()=>c);class t extends Error{constructor(i,n){super(i),typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,n||this.constructor),this.name="ArtPlayerError"}}function c(r,i){if(!r)throw new t(i);return r}},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],i2JbS:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");function t(c,r){let i=document.createElement("a");i.style.display="none",i.href=c,i.download=r,document.body.appendChild(i),i.click(),document.body.removeChild(i)}e.defineInteropFlag(o),e.export(o,"getExt",()=>function c(r){return r.includes("?")?c(r.split("?")[0]):r.includes("#")?c(r.split("#")[0]):r.trim().toLowerCase().split(".").pop()}),e.export(o,"download",()=>t)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],dy9GH:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");function t(l,s,d){return Math.max(Math.min(l,Math.max(s,d)),Math.min(s,d))}function c(l){return l.charAt(0).toUpperCase()+l.slice(1)}function r(l){if(!l)return"00:00";let s=Math.floor(l/3600),d=Math.floor((l-3600*s)/60),f=Math.floor(l-3600*s-60*d);return(s>0?[s,d,f]:[d,f]).map(p=>p<10?`0${p}`:String(p)).join(":")}function i(l){return l.replace(/[&<>'"]/g,s=>({"&":"&","<":"<",">":">","'":"'",'"':"""})[s]||s)}function n(l){let s={"&":"&","<":"<",">":">","'":"'",""":'"'},d=RegExp(`(${Object.keys(s).join("|")})`,"g");return l.replace(d,f=>s[f]||f)}e.defineInteropFlag(o),e.export(o,"clamp",()=>t),e.export(o,"capitalize",()=>c),e.export(o,"secondToTime",()=>r),e.export(o,"escape",()=>i),e.export(o,"unescape",()=>n)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],jY49c:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"def",()=>t),e.export(o,"has",()=>r),e.export(o,"get",()=>i),e.export(o,"mergeDeep",()=>function n(...l){let s=d=>d&&typeof d=="object"&&!Array.isArray(d);return l.reduce((d,f)=>(Object.keys(f).forEach(p=>{let g=d[p],v=f[p];Array.isArray(g)&&Array.isArray(v)?d[p]=g.concat(...v):s(g)&&s(v)?d[p]=n(g,v):d[p]=v}),d),{})});let t=Object.defineProperty,{hasOwnProperty:c}=Object.prototype;function r(n,l){return c.call(n,l)}function i(n,l){return Object.getOwnPropertyDescriptor(n,l)}},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],ke7ox:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");function t(i){return`WEBVTT \r +\r +`.concat(i.replace(/(\d\d:\d\d:\d\d)[,.](\d+)/g,(n,l,s)=>{let d=s.slice(0,3);return s.length===1&&(d=`${s}00`),s.length===2&&(d=`${s}0`),`${l},${d}`}).replace(/\{\\([ibu])\}/g,"").replace(/\{\\([ibu])1\}/g,"<$1>").replace(/\{([ibu])\}/g,"<$1>").replace(/\{\/([ibu])\}/g,"").replace(/(\d\d:\d\d:\d\d),(\d\d\d)/g,"$1.$2").replace(/\{[\s\S]*?\}/g,"").concat(`\r +\r +`))}function c(i){return URL.createObjectURL(new Blob([i],{type:"text/vtt"}))}function r(i){let n=RegExp("Dialogue:\\s\\d,(\\d+:\\d\\d:\\d\\d.\\d\\d),(\\d+:\\d\\d:\\d\\d.\\d\\d),([^,]*),([^,]*),(?:[^,]*,){4}([\\s\\S]*)$","i");function l(s=""){return s.split(/[:.]/).map((d,f,p)=>{if(f===p.length-1){if(d.length===1)return`.${d}00`;if(d.length===2)return`.${d}0`}else if(d.length===1)return(f===0?"0":":0")+d;return f===0?d:f===p.length-1?`.${d}`:`:${d}`}).join("")}return`WEBVTT ${i.split(/\r?\n/).map(s=>{let d=s.match(n);return d?{start:l(d[1].trim()),end:l(d[2].trim()),text:d[5].replace(/\{[\s\S]*?\}/g,"").replace(/(\\N)/g,` +`).trim().split(/\r?\n/).map(f=>f.trim()).join(` +`)}:null}).filter(s=>s).map((s,d)=>s?`${d+1} ${s.start} --> ${s.end} ${s.text}`:"").filter(s=>s.trim()).join(` + +`)}`}e.defineInteropFlag(o),e.export(o,"srtToVtt",()=>t),e.export(o,"vttToBlob",()=>c),e.export(o,"assToVtt",()=>r)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],f7gsx:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");function t(i=0){return new Promise(n=>setTimeout(n,i))}function c(i,n){let l;return function(...s){let d=()=>(l=null,i.apply(this,s));clearTimeout(l),l=setTimeout(d,n)}}function r(i,n){let l=!1;return function(...s){l||(i.apply(this,s),l=!0,setTimeout(()=>{l=!1},n))}}e.defineInteropFlag(o),e.export(o,"sleep",()=>t),e.export(o,"debounce",()=>c),e.export(o,"throttle",()=>r)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],idCEj:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o);var t=a("option-validator"),c=e.interopDefault(t),r=a("../scheme"),i=a("./dom"),n=a("./error");o.default=class{constructor(l){this.id=0,this.art=l,this.cache=new Map,this.add=this.add.bind(this),this.remove=this.remove.bind(this),this.update=this.update.bind(this)}get show(){return(0,i.hasClass)(this.art.template.$player,`art-${this.name}-show`)}set show(l){let{$player:s}=this.art.template,d=`art-${this.name}-show`;l?(0,i.addClass)(s,d):(0,i.removeClass)(s,d),this.art.emit(this.name,l)}toggle(){this.show=!this.show}add(l){let s=typeof l=="function"?l(this.art):l;if(s.html=s.html||"",(0,c.default)(s,r.ComponentOption),!this.$parent||!this.name||s.disable)return;let d=s.name||`${this.name}${this.id}`,f=this.cache.get(d);(0,n.errorHandle)(!f,`Can't add an existing [${d}] to the [${this.name}]`),this.id+=1;let p=(0,i.createElement)("div");(0,i.addClass)(p,`art-${this.name}`),(0,i.addClass)(p,`art-${this.name}-${d}`);let g=Array.from(this.$parent.children);p.dataset.index=s.index||this.id;let v=g.find(m=>Number(m.dataset.index)>=Number(p.dataset.index));v?v.insertAdjacentElement("beforebegin",p):(0,i.append)(this.$parent,p),s.html&&(0,i.append)(p,s.html),s.style&&(0,i.setStyles)(p,s.style),s.tooltip&&(0,i.tooltip)(p,s.tooltip);let x=[];if(s.click){let m=this.art.events.proxy(p,"click",y=>{y.preventDefault(),s.click.call(this.art,this,y)});x.push(m)}return s.selector&&["left","right"].includes(s.position)&&this.selector(s,p,x),this[d]=p,this.cache.set(d,{$ref:p,events:x,option:s}),s.mounted&&s.mounted.call(this.art,p),p}remove(l){let s=this.cache.get(l);(0,n.errorHandle)(s,`Can't find [${l}] from the [${this.name}]`),s.option.beforeUnmount&&s.option.beforeUnmount.call(this.art,s.$ref);for(let d=0;df);var t=a("../utils");let c="array",r="boolean",i="string",n="number",l="object",s="function";function d(p,g,v){return(0,t.errorHandle)(g===i||g===n||p instanceof Element,`${v.join(".")} require '${i}' or 'Element' type`)}let f={html:d,disable:`?${r}`,name:`?${i}`,index:`?${n}`,style:`?${l}`,click:`?${s}`,mounted:`?${s}`,tooltip:`?${i}|${n}`,width:`?${n}`,selector:`?${c}`,onSelect:`?${s}`,switch:`?${r}`,onSwitch:`?${s}`,range:`?${c}`,onRange:`?${s}`,onChange:`?${s}`};o.default={id:i,container:d,url:i,poster:i,type:i,theme:i,lang:i,volume:n,isLive:r,muted:r,autoplay:r,autoSize:r,autoMini:r,loop:r,flip:r,playbackRate:r,aspectRatio:r,screenshot:r,setting:r,hotkey:r,pip:r,mutex:r,backdrop:r,fullscreen:r,fullscreenWeb:r,subtitleOffset:r,miniProgressBar:r,useSSR:r,playsInline:r,lock:r,gesture:r,fastForward:r,autoPlayback:r,autoOrientation:r,airplay:r,proxy:`?${s}`,plugins:[s],layers:[f],contextmenu:[f],settings:[f],controls:[{...f,position:(p,g,v)=>{let x=["top","left","right"];return(0,t.errorHandle)(x.includes(p),`${v.join(".")} only accept ${x.toString()} as parameters`)}}],quality:[{default:`?${r}`,html:i,url:i}],highlight:[{time:n,text:i}],thumbnails:{url:i,number:n,column:n,width:n,height:n,scale:n},subtitle:{url:i,name:i,type:i,style:l,escape:r,encoding:i,onVttLoad:s},moreVideoAttr:l,i18n:l,icons:l,cssVar:l,customType:l}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"6XHP2":[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){return i=>{let{i18n:n,constructor:{ASPECT_RATIO:l}}=i,s=l.map(d=>`${d==="default"?n.get("Default"):d}`).join("");return{...r,html:`${n.get("Aspect Ratio")}: ${s}`,click:(d,f)=>{let{value:p}=f.target.dataset;p&&(i.aspectRatio=p,d.show=!1)},mounted:d=>{let f=(0,t.query)('[data-value="default"]',d);f&&(0,t.inverseClass)(f,"art-current"),i.on("aspectRatio",p=>{let g=(0,t.queryAll)("span",d).find(v=>v.dataset.value===p);g&&(0,t.inverseClass)(g,"art-current")})}}}}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],eF6AX:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");function t(c){return r=>({...c,html:r.i18n.get("Close"),click:i=>{i.show=!1}})}e.defineInteropFlag(o),e.export(o,"default",()=>t)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"7Wg1P":[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){return i=>{let{i18n:n,constructor:{FLIP:l}}=i,s=l.map(d=>`${n.get((0,t.capitalize)(d))}`).join("");return{...r,html:`${n.get("Video Flip")}: ${s}`,click:(d,f)=>{let{value:p}=f.target.dataset;p&&(i.flip=p.toLowerCase(),d.show=!1)},mounted:d=>{let f=(0,t.query)('[data-value="normal"]',d);f&&(0,t.inverseClass)(f,"art-current"),i.on("flip",p=>{let g=(0,t.queryAll)("span",d).find(v=>v.dataset.value===p);g&&(0,t.inverseClass)(g,"art-current")})}}}}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],fjRnU:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");function t(c){return r=>({...c,html:r.i18n.get("Video Info"),click:i=>{r.info.show=!0,i.show=!1}})}e.defineInteropFlag(o),e.export(o,"default",()=>t)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],hm1DY:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){return i=>{let{i18n:n,constructor:{PLAYBACK_RATE:l}}=i,s=l.map(d=>`${d===1?n.get("Normal"):d.toFixed(1)}`).join("");return{...r,html:`${n.get("Play Speed")}: ${s}`,click:(d,f)=>{let{value:p}=f.target.dataset;p&&(i.playbackRate=Number(p),d.show=!1)},mounted:d=>{let f=(0,t.query)('[data-value="1"]',d);f&&(0,t.inverseClass)(f,"art-current"),i.on("video:ratechange",()=>{let p=(0,t.queryAll)("span",d).find(g=>Number(g.dataset.value)===i.playbackRate);p&&(0,t.inverseClass)(p,"art-current")})}}}}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],aJBeL:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>function(c){return{...c,html:`ArtPlayer ${t.version}`}});var t=a("../../package.json")},{"../../package.json":"lh3R5","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],dp1yk:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o);var t=a("../utils"),c=a("../utils/component"),r=e.interopDefault(c),i=a("./airplay"),n=e.interopDefault(i),l=a("./fullscreen"),s=e.interopDefault(l),d=a("./fullscreenWeb"),f=e.interopDefault(d),p=a("./pip"),g=e.interopDefault(p),v=a("./playAndPause"),x=e.interopDefault(v),m=a("./progress"),y=e.interopDefault(m),j=a("./screenshot"),k=e.interopDefault(j),$=a("./setting"),S=e.interopDefault($),E=a("./time"),C=e.interopDefault(E),I=a("./volume"),L=e.interopDefault(I);class R extends r.default{constructor(b){super(b),this.isHover=!1,this.name="control",this.timer=Date.now();let{constructor:T}=b,{$player:F,$bottom:P}=this.art.template;b.on("mousemove",()=>{t.isMobile||(this.show=!0)}),b.on("click",()=>{t.isMobile?this.toggle():this.show=!0}),b.on("document:mousemove",M=>{this.isHover=(0,t.includeFromEvent)(M,P)}),b.on("video:timeupdate",()=>{!b.setting.show&&!this.isHover&&!b.isInput&&b.playing&&this.show&&Date.now()-this.timer>=T.CONTROL_HIDE_TIME&&(this.show=!1)}),b.on("control",M=>{M?((0,t.removeClass)(F,"art-hide-cursor"),(0,t.addClass)(F,"art-hover"),this.timer=Date.now()):((0,t.addClass)(F,"art-hide-cursor"),(0,t.removeClass)(F,"art-hover"))}),this.init()}init(){let{option:b}=this.art;b.isLive||this.add((0,y.default)({name:"progress",position:"top",index:10})),this.add({name:"thumbnails",position:"top",index:20}),this.add((0,x.default)({name:"playAndPause",position:"left",index:10})),this.add((0,L.default)({name:"volume",position:"left",index:20})),b.isLive||this.add((0,C.default)({name:"time",position:"left",index:30})),b.quality.length&&(0,t.sleep)().then(()=>{this.art.quality=b.quality}),b.screenshot&&!t.isMobile&&this.add((0,k.default)({name:"screenshot",position:"right",index:20})),b.setting&&this.add((0,S.default)({name:"setting",position:"right",index:30})),b.pip&&this.add((0,g.default)({name:"pip",position:"right",index:40})),b.airplay&&window.WebKitPlaybackTargetAvailabilityEvent&&this.add((0,n.default)({name:"airplay",position:"right",index:50})),b.fullscreenWeb&&this.add((0,f.default)({name:"fullscreenWeb",position:"right",index:60})),b.fullscreen&&this.add((0,s.default)({name:"fullscreen",position:"right",index:70}));for(let T=0;Tb.selector}),(0,t.def)(H,"$control_item",{get:()=>z}),(0,t.def)(H,"$control_value",{get:()=>M})}let O=P(q,"click",async B=>{let H=(0,t.getComposedPath)(B),z=b.selector.find(W=>W.$control_item===H.find(G=>W.$control_item===G));this.check(z),b.onSelect&&(M.innerHTML=await b.onSelect.call(this.art,z,z.$control_item,B))});F.push(O)}}o.default=R},{"../utils":"aBlEo","../utils/component":"idCEj","./airplay":"amOzz","./fullscreen":"3GuBU","./fullscreenWeb":"jj1KV","./pip":"jMeHN","./playAndPause":"u3h8M","./progress":"1XZSS","./screenshot":"dIscA","./setting":"aqA0g","./time":"ihweO","./volume":"fJVWn","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],amOzz:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){return i=>({...r,tooltip:i.i18n.get("AirPlay"),mounted:n=>{let{proxy:l,icons:s}=i;(0,t.append)(n,s.airplay),l(n,"click",()=>i.airplay())}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"3GuBU":[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){return i=>({...r,tooltip:i.i18n.get("Fullscreen"),mounted:n=>{let{proxy:l,icons:s,i18n:d}=i,f=(0,t.append)(n,s.fullscreenOn),p=(0,t.append)(n,s.fullscreenOff);(0,t.setStyle)(p,"display","none"),l(n,"click",()=>{i.fullscreen=!i.fullscreen}),i.on("fullscreen",g=>{g?((0,t.tooltip)(n,d.get("Exit Fullscreen")),(0,t.setStyle)(f,"display","none"),(0,t.setStyle)(p,"display","inline-flex")):((0,t.tooltip)(n,d.get("Fullscreen")),(0,t.setStyle)(f,"display","inline-flex"),(0,t.setStyle)(p,"display","none"))})}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],jj1KV:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){return i=>({...r,tooltip:i.i18n.get("Web Fullscreen"),mounted:n=>{let{proxy:l,icons:s,i18n:d}=i,f=(0,t.append)(n,s.fullscreenWebOn),p=(0,t.append)(n,s.fullscreenWebOff);(0,t.setStyle)(p,"display","none"),l(n,"click",()=>{i.fullscreenWeb=!i.fullscreenWeb}),i.on("fullscreenWeb",g=>{g?((0,t.tooltip)(n,d.get("Exit Web Fullscreen")),(0,t.setStyle)(f,"display","none"),(0,t.setStyle)(p,"display","inline-flex")):((0,t.tooltip)(n,d.get("Web Fullscreen")),(0,t.setStyle)(f,"display","inline-flex"),(0,t.setStyle)(p,"display","none"))})}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],jMeHN:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){return i=>({...r,tooltip:i.i18n.get("PIP Mode"),mounted:n=>{let{proxy:l,icons:s,i18n:d}=i;(0,t.append)(n,s.pip),l(n,"click",()=>{i.pip=!i.pip}),i.on("pip",f=>{(0,t.tooltip)(n,d.get(f?"Exit PIP Mode":"PIP Mode"))})}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],u3h8M:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){return i=>({...r,mounted:n=>{let{proxy:l,icons:s,i18n:d}=i,f=(0,t.append)(n,s.play),p=(0,t.append)(n,s.pause);function g(){(0,t.setStyle)(f,"display","flex"),(0,t.setStyle)(p,"display","none")}function v(){(0,t.setStyle)(f,"display","none"),(0,t.setStyle)(p,"display","flex")}(0,t.tooltip)(f,d.get("Play")),(0,t.tooltip)(p,d.get("Pause")),l(f,"click",()=>{i.play()}),l(p,"click",()=>{i.pause()}),i.playing?v():g(),i.on("video:playing",()=>{v()}),i.on("video:pause",()=>{g()})}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"1XZSS":[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"getPosFromEvent",()=>c),e.export(o,"setCurrentTime",()=>r),e.export(o,"default",()=>i);var t=a("../utils");function c(n,l){let{$progress:s}=n.template,{left:d}=(0,t.getRect)(s),f=t.isMobile?l.touches[0].clientX:l.clientX,p=(0,t.clamp)(f-d,0,s.clientWidth),g=p/s.clientWidth*n.duration,v=(0,t.secondToTime)(g),x=(0,t.clamp)(p/s.clientWidth,0,1);return{second:g,time:v,width:p,percentage:x}}function r(n,l){if(n.isRotate){let s=l.touches[0].clientY/n.height,d=s*n.duration;n.emit("setBar","played",s,l),n.seek=d}else{let{second:s,percentage:d}=c(n,l);n.emit("setBar","played",d,l),n.seek=s}}function i(n){return l=>{let{icons:s,option:d,proxy:f}=l;return{...n,html:'
',mounted:p=>{let g=null,v=!1,x=(0,t.query)(".art-progress-hover",p),m=(0,t.query)(".art-progress-loaded",p),y=(0,t.query)(".art-progress-played",p),j=(0,t.query)(".art-progress-highlight",p),k=(0,t.query)(".art-progress-indicator",p),$=(0,t.query)(".art-progress-tip",p);function S(E,C){let{width:I,time:L}=C||c(l,E);$.textContent=L;let R=$.clientWidth;I<=R/2?(0,t.setStyle)($,"left",0):I>p.clientWidth-R/2?(0,t.setStyle)($,"left",`${p.clientWidth-R}px`):(0,t.setStyle)($,"left",`${I-R/2}px`)}s.indicator?(0,t.append)(k,s.indicator):(0,t.setStyle)(k,"backgroundColor","var(--art-theme)"),l.on("setBar",function(E,C,I){let L=E==="played"&&I&&t.isMobile;E==="loaded"&&(0,t.setStyle)(m,"width",`${100*C}%`),E==="hover"&&(0,t.setStyle)(x,"width",`${100*C}%`),E==="played"&&((0,t.setStyle)(y,"width",`${100*C}%`),(0,t.setStyle)(k,"left",`${100*C}%`)),L&&((0,t.setStyle)($,"display","flex"),S(I,{width:p.clientWidth*C,time:(0,t.secondToTime)(C*l.duration)}),clearTimeout(g),g=setTimeout(()=>{(0,t.setStyle)($,"display","none")},500))}),l.on("video:loadedmetadata",function(){j.textContent="";for(let E=0;E`;(0,t.append)(j,L)}}),l.constructor.USE_RAF?l.on("raf",()=>{l.emit("setBar","played",l.played),l.emit("setBar","loaded",l.loaded)}):(l.on("video:timeupdate",()=>{l.emit("setBar","played",l.played)}),l.on("video:progress",()=>{l.emit("setBar","loaded",l.loaded)}),l.on("video:ended",()=>{l.emit("setBar","played",1)})),l.emit("setBar","loaded",l.loaded||0),t.isMobile||(f(p,"click",E=>{E.target!==k&&r(l,E)}),f(p,"mousemove",E=>{let{percentage:C}=c(l,E);if(l.emit("setBar","hover",C,E),(0,t.setStyle)($,"display","flex"),(0,t.includeFromEvent)(E,j)){let{width:I}=c(l,E),{text:L}=E.target.dataset;$.textContent=L;let R=$.clientWidth;I<=R/2?(0,t.setStyle)($,"left",0):I>p.clientWidth-R/2?(0,t.setStyle)($,"left",`${p.clientWidth-R}px`):(0,t.setStyle)($,"left",`${I-R/2}px`)}else S(E)}),f(p,"mouseleave",E=>{(0,t.setStyle)($,"display","none"),l.emit("setBar","hover",0,E)}),f(p,"mousedown",E=>{v=E.button===0}),l.on("document:mousemove",E=>{if(v){let{second:C,percentage:I}=c(l,E);l.emit("setBar","played",I,E),l.seek=C}}),l.on("document:mouseup",()=>{v&&(v=!1)}))}}}}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],dIscA:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){return i=>({...r,tooltip:i.i18n.get("Screenshot"),mounted:n=>{let{proxy:l,icons:s}=i;(0,t.append)(n,s.screenshot),l(n,"click",()=>{i.screenshot()})}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],aqA0g:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){return i=>({...r,tooltip:i.i18n.get("Show Setting"),mounted:n=>{let{proxy:l,icons:s,i18n:d}=i;(0,t.append)(n,s.setting),l(n,"click",()=>{i.setting.toggle(),i.setting.resize()}),i.on("setting",f=>{(0,t.tooltip)(n,d.get(f?"Hide Setting":"Show Setting"))})}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],ihweO:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){return i=>({...r,style:t.isMobile?{fontSize:"12px",padding:"0 5px"}:{cursor:"auto",padding:"0 10px"},mounted:n=>{function l(){let d=`${(0,t.secondToTime)(i.currentTime)} / ${(0,t.secondToTime)(i.duration)}`;d!==n.textContent&&(n.textContent=d)}l();let s=["video:loadedmetadata","video:timeupdate","video:progress"];for(let d=0;dc);var t=a("../utils");function c(r){return i=>({...r,mounted:n=>{let{proxy:l,icons:s}=i,d=(0,t.append)(n,s.volume),f=(0,t.append)(n,s.volumeClose),p=(0,t.append)(n,'
'),g=(0,t.append)(p,'
'),v=(0,t.append)(g,'
'),x=(0,t.append)(g,'
'),m=(0,t.append)(x,'
'),y=(0,t.append)(m,'
'),j=(0,t.append)(x,'
');function k(S){let{top:E,height:C}=(0,t.getRect)(x);return 1-(S.clientY-E)/C}function $(){if(i.muted||i.volume===0)(0,t.setStyle)(d,"display","none"),(0,t.setStyle)(f,"display","flex"),(0,t.setStyle)(j,"top","100%"),(0,t.setStyle)(y,"top","100%"),v.textContent=0;else{let S=100*i.volume;(0,t.setStyle)(d,"display","flex"),(0,t.setStyle)(f,"display","none"),(0,t.setStyle)(j,"top",`${100-S}%`),(0,t.setStyle)(y,"top",`${100-S}%`),v.textContent=Math.floor(S)}}if($(),i.on("video:volumechange",$),l(d,"click",()=>{i.muted=!0}),l(f,"click",()=>{i.muted=!1}),t.isMobile)(0,t.setStyle)(p,"display","none");else{let S=!1;l(x,"mousedown",E=>{S=E.button===0,i.volume=k(E)}),i.on("document:mousemove",E=>{S&&(i.muted=!1,i.volume=k(E))}),i.on("document:mouseup",()=>{S&&(S=!1)})}}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],jmVSD:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o);var t=a("./clickInit"),c=e.interopDefault(t),r=a("./gestureInit"),i=e.interopDefault(r),n=a("./globalInit"),l=e.interopDefault(n),s=a("./hoverInit"),d=e.interopDefault(s),f=a("./moveInit"),p=e.interopDefault(f),g=a("./resizeInit"),v=e.interopDefault(g),x=a("./updateInit"),m=e.interopDefault(x),y=a("./viewInit"),j=e.interopDefault(y);o.default=class{constructor(k){this.destroyEvents=[],this.proxy=this.proxy.bind(this),this.hover=this.hover.bind(this),(0,c.default)(k,this),(0,d.default)(k,this),(0,p.default)(k,this),(0,v.default)(k,this),(0,i.default)(k,this),(0,j.default)(k,this),(0,l.default)(k,this),(0,m.default)(k,this)}proxy(k,$,S,E={}){if(Array.isArray($))return $.map(I=>this.proxy(k,I,S,E));k.addEventListener($,S,E);let C=()=>k.removeEventListener($,S,E);return this.destroyEvents.push(C),C}hover(k,$,S){$&&this.proxy(k,"mouseenter",$),S&&this.proxy(k,"mouseleave",S)}remove(k){let $=this.destroyEvents.indexOf(k);$>-1&&(k(),this.destroyEvents.splice($,1))}destroy(){for(let k=0;kc);var t=a("../utils");function c(r,i){let{constructor:n,template:{$player:l,$video:s}}=r;function d(p){(0,t.includeFromEvent)(p,l)?(r.isInput=p.target.tagName==="INPUT",r.isFocus=!0,r.emit("focus",p)):(r.isInput=!1,r.isFocus=!1,r.emit("blur",p))}r.on("document:click",d),r.on("document:contextmenu",d);let f=[];i.proxy(s,"click",p=>{let g=Date.now();f.push(g);let{MOBILE_CLICK_PLAY:v,DBCLICK_TIME:x,MOBILE_DBCLICK_PLAY:m,DBCLICK_FULLSCREEN:y}=n,j=f.filter(k=>g-k<=x);switch(j.length){case 1:r.emit("click",p),t.isMobile?!r.isLock&&v&&r.toggle():r.toggle(),f=j;break;case 2:r.emit("dblclick",p),t.isMobile?!r.isLock&&m&&r.toggle():y&&(r.fullscreen=!r.fullscreen),f=[];break;default:f=[]}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"9wEzB":[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>r);var t=a("../control/progress"),c=a("../utils");function r(i,n){if(c.isMobile&&!i.option.isLive){let{$video:l,$progress:s}=i.template,d=null,f=!1,p=0,g=0,v=0,x=y=>{if(y.touches.length===1&&!i.isLock){d===s&&(0,t.setCurrentTime)(i,y),f=!0;let{pageX:j,pageY:k}=y.touches[0];p=j,g=k,v=i.currentTime}},m=y=>{if(y.touches.length===1&&f&&i.duration){let{pageX:j,pageY:k}=y.touches[0],$=function(C,I,L,R){let w=I-R,b=L-C,T=0;if(2>Math.abs(b)&&2>Math.abs(w))return T;let F=180*Math.atan2(w,b)/Math.PI;return F>=-45&&F<45?T=4:F>=45&&F<135?T=1:F>=-135&&F<-45?T=2:(F>=135&&F<=180||F>=-180&&F<-135)&&(T=3),T}(p,g,j,k),S=[3,4].includes($),E=[1,2].includes($);if(S&&!i.isRotate||E&&i.isRotate){let C=(0,c.clamp)((j-p)/i.width,-1,1),I=(0,c.clamp)((k-g)/i.height,-1,1),L=i.isRotate?I:C,R=d===l?i.constructor.TOUCH_MOVE_RATIO:1,w=(0,c.clamp)(v+i.duration*L*R,0,i.duration);i.seek=w,i.emit("setBar","played",(0,c.clamp)(w/i.duration,0,1),y),i.notice.show=`${(0,c.secondToTime)(w)} / ${(0,c.secondToTime)(i.duration)}`}}};i.option.gesture&&(n.proxy(l,"touchstart",y=>{d=l,x(y)}),n.proxy(l,"touchmove",m)),n.proxy(s,"touchstart",y=>{d=s,x(y)}),n.proxy(s,"touchmove",m),i.on("document:touchend",()=>{f&&(p=0,g=0,v=0,f=!1,d=null)})}}},{"../control/progress":"1XZSS","../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],ikBrS:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");function t(c,r){let i=["click","mouseup","keydown","touchend","touchmove","mousemove","pointerup","contextmenu","pointermove","visibilitychange","webkitfullscreenchange"],n=["resize","scroll","orientationchange"],l=[];function s(d={}){for(let p=0;p{let g=d.document||f.ownerDocument||document,v=r.proxy(g,p,x=>{c.emit(`document:${p}`,x)});l.push(v)}),n.forEach(p=>{var x;let g=d.window||((x=f.ownerDocument)==null?void 0:x.defaultView)||window,v=r.proxy(g,p,m=>{c.emit(`window:${p}`,m)});l.push(v)})}s(),r.bindGlobalEvents=s}e.defineInteropFlag(o),e.export(o,"default",()=>t)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],jwNq0:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r,i){let{$player:n}=r.template;i.hover(n,l=>{(0,t.addClass)(n,"art-hover"),r.emit("hover",!0,l)},l=>{(0,t.removeClass)(n,"art-hover"),r.emit("hover",!1,l)})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],eqSsP:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");function t(c,r){let{$player:i}=c.template;r.proxy(i,"mousemove",n=>{c.emit("mousemove",n)})}e.defineInteropFlag(o),e.export(o,"default",()=>t)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"42JNz":[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r,i){let{option:n,constructor:l}=r;r.on("resize",()=>{let{aspectRatio:d,notice:f}=r;r.state==="standard"&&n.autoSize&&r.autoSize(),r.aspectRatio=d,f.show=""});let s=(0,t.debounce)(()=>r.emit("resize"),l.RESIZE_TIME);r.on("window:orientationchange",()=>s()),r.on("window:resize",()=>s()),screen&&screen.orientation&&screen.orientation.onchange&&i.proxy(screen.orientation,"change",()=>s())}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"7kM1M":[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");function t(c){if(c.constructor.USE_RAF){let r=null;(function i(){c.playing&&c.emit("raf"),c.isDestroy||(r=requestAnimationFrame(i))})(),c.on("destroy",()=>{cancelAnimationFrame(r)})}}e.defineInteropFlag(o),e.export(o,"default",()=>t)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"2IW9m":[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){let{option:i,constructor:n,template:{$container:l}}=r,s=(0,t.throttle)(()=>{r.emit("view",(0,t.isInViewport)(l,n.SCROLL_GAP))},n.SCROLL_TIME);r.on("window:scroll",()=>s()),r.on("view",d=>{i.autoMini&&(r.mini=!d)})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],dswts:[function(a,u,o,h){a("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(o);var e=a("./utils");o.default=class{constructor(t){this.art=t,this.keys={},t.option.hotkey&&!e.isMobile&&this.init()}init(){let{constructor:t}=this.art;this.add("Escape",()=>{this.art.fullscreenWeb&&(this.art.fullscreenWeb=!1)}),this.add("Space",()=>{this.art.toggle()}),this.add("ArrowLeft",()=>{this.art.backward=t.SEEK_STEP}),this.add("ArrowUp",()=>{this.art.volume+=t.VOLUME_STEP}),this.add("ArrowRight",()=>{this.art.forward=t.SEEK_STEP}),this.add("ArrowDown",()=>{this.art.volume-=t.VOLUME_STEP}),this.art.on("document:keydown",c=>{if(this.art.isFocus){let r=document.activeElement.tagName.toUpperCase(),i=document.activeElement.getAttribute("contenteditable");if(r!=="INPUT"&&r!=="TEXTAREA"&&i!==""&&i!=="true"&&!c.altKey&&!c.ctrlKey&&!c.metaKey&&!c.shiftKey){let n=this.keys[c.code];if(n){c.preventDefault();for(let l=0;l(0,N.getIcon)(dt,ht[dt])})}}},{"bundle-text:./airplay.svg":"gkZgZ","bundle-text:./arrow-left.svg":"kQyD4","bundle-text:./arrow-right.svg":"64ztm","bundle-text:./aspect-ratio.svg":"72LvA","bundle-text:./check.svg":"4QmBo","bundle-text:./close.svg":"j1hoe","bundle-text:./config.svg":"hNZaT","bundle-text:./error.svg":"dKh4l","bundle-text:./flip.svg":"lIEIE","bundle-text:./fullscreen-off.svg":"1533e","bundle-text:./fullscreen-on.svg":"76ut3","bundle-text:./fullscreen-web-off.svg":"3NzMk","bundle-text:./fullscreen-web-on.svg":"12xHc","bundle-text:./loading.svg":"iVcUF","bundle-text:./lock.svg":"1J4so","bundle-text:./pause.svg":"1KgkK","bundle-text:./pip.svg":"4h4tM","bundle-text:./play.svg":"jecAY","bundle-text:./playback-rate.svg":"anPe9","bundle-text:./screenshot.svg":"9BPYQ","bundle-text:./setting.svg":"hsI9k","bundle-text:./state.svg":"gr1ZU","bundle-text:./switch-off.svg":"6kdAr","bundle-text:./switch-on.svg":"ksdMo","bundle-text:./unlock.svg":"iz5Qc","bundle-text:./volume-close.svg":"3OZoa","bundle-text:./volume.svg":"hRYA4","../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],gkZgZ:[function(a,u,o,h){u.exports=''},{}],kQyD4:[function(a,u,o,h){u.exports=''},{}],"64ztm":[function(a,u,o,h){u.exports=''},{}],"72LvA":[function(a,u,o,h){u.exports=''},{}],"4QmBo":[function(a,u,o,h){u.exports=''},{}],j1hoe:[function(a,u,o,h){u.exports=''},{}],hNZaT:[function(a,u,o,h){u.exports=''},{}],dKh4l:[function(a,u,o,h){u.exports=''},{}],lIEIE:[function(a,u,o,h){u.exports=''},{}],"1533e":[function(a,u,o,h){u.exports=''},{}],"76ut3":[function(a,u,o,h){u.exports=''},{}],"3NzMk":[function(a,u,o,h){u.exports=''},{}],"12xHc":[function(a,u,o,h){u.exports=''},{}],iVcUF:[function(a,u,o,h){u.exports=''},{}],"1J4so":[function(a,u,o,h){u.exports=''},{}],"1KgkK":[function(a,u,o,h){u.exports=''},{}],"4h4tM":[function(a,u,o,h){u.exports=''},{}],jecAY:[function(a,u,o,h){u.exports=''},{}],anPe9:[function(a,u,o,h){u.exports=''},{}],"9BPYQ":[function(a,u,o,h){u.exports=''},{}],hsI9k:[function(a,u,o,h){u.exports=''},{}],gr1ZU:[function(a,u,o,h){u.exports=''},{}],"6kdAr":[function(a,u,o,h){u.exports=''},{}],ksdMo:[function(a,u,o,h){u.exports=''},{}],iz5Qc:[function(a,u,o,h){u.exports=''},{}],"3OZoa":[function(a,u,o,h){u.exports=''},{}],hRYA4:[function(a,u,o,h){u.exports=''},{}],kZ0F8:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o);var t=a("./utils"),c=a("./utils/component"),r=e.interopDefault(c);class i extends r.default{constructor(l){super(l),this.name="info",t.isMobile||this.init()}init(){let{proxy:l,constructor:s,template:{$infoPanel:d,$infoClose:f,$video:p}}=this.art;l(f,"click",()=>{this.show=!1});let g=null,v=(0,t.queryAll)("[data-video]",d)||[];this.art.on("destroy",()=>clearTimeout(g)),function x(){for(let m=0;m{(0,t.setStyle)(p,"display","none"),(0,t.setStyle)(g,"display",null)}),f.proxy(s.$state,"click",()=>l.play())}}o.default=i},{"./utils":"aBlEo","./utils/component":"idCEj","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],fPVaU:[function(a,u,o,h){a("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(o);var e=a("./utils");o.default=class{constructor(t){this.art=t,this.timer=null}set show(t){let{constructor:c,template:{$player:r,$noticeInner:i}}=this.art;t?(i.textContent=t instanceof Error?t.message.trim():t,(0,e.addClass)(r,"art-notice-show"),clearTimeout(this.timer),this.timer=setTimeout(()=>{i.textContent="",(0,e.removeClass)(r,"art-notice-show")},c.NOTICE_TIME)):(0,e.removeClass)(r,"art-notice-show")}get show(){let{template:{$player:t}}=this.art;return t.classList.contains("art-notice-show")}}},{"./utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],uR0Sw:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o);var t=a("./airplayMix"),c=e.interopDefault(t),r=a("./aspectRatioMix"),i=e.interopDefault(r),n=a("./attrMix"),l=e.interopDefault(n),s=a("./autoHeightMix"),d=e.interopDefault(s),f=a("./autoSizeMix"),p=e.interopDefault(f),g=a("./cssVarMix"),v=e.interopDefault(g),x=a("./currentTimeMix"),m=e.interopDefault(x),y=a("./durationMix"),j=e.interopDefault(y),k=a("./eventInit"),$=e.interopDefault(k),S=a("./flipMix"),E=e.interopDefault(S),C=a("./fullscreenMix"),I=e.interopDefault(C),L=a("./fullscreenWebMix"),R=e.interopDefault(L),w=a("./loadedMix"),b=e.interopDefault(w),T=a("./miniMix"),F=e.interopDefault(T),P=a("./optionInit"),M=e.interopDefault(P),q=a("./pauseMix"),O=e.interopDefault(q),B=a("./pipMix"),H=e.interopDefault(B),z=a("./playbackRateMix"),W=e.interopDefault(z),G=a("./playedMix"),at=e.interopDefault(G),ot=a("./playingMix"),it=e.interopDefault(ot),nt=a("./playMix"),st=e.interopDefault(nt),K=a("./posterMix"),X=e.interopDefault(K),lt=a("./qualityMix"),J=e.interopDefault(lt),ct=a("./rectMix"),Y=e.interopDefault(ct),A=a("./screenshotMix"),vt=e.interopDefault(A),U=a("./seekMix"),Q=e.interopDefault(U),tt=a("./stateMix"),et=e.interopDefault(tt),N=a("./subtitleOffsetMix"),ut=e.interopDefault(N),ht=a("./switchMix"),dt=e.interopDefault(ht),Pt=a("./themeMix"),Dt=e.interopDefault(Pt),Bt=a("./thumbnailsMix"),Ot=e.interopDefault(Bt),Ht=a("./toggleMix"),_t=e.interopDefault(Ht),zt=a("./typeMix"),Vt=e.interopDefault(zt),Xt=a("./urlMix"),Ut=e.interopDefault(Xt),Nt=a("./volumeMix"),Wt=e.interopDefault(Nt);o.default=class{constructor(D){(0,Ut.default)(D),(0,l.default)(D),(0,st.default)(D),(0,O.default)(D),(0,_t.default)(D),(0,Q.default)(D),(0,Wt.default)(D),(0,m.default)(D),(0,j.default)(D),(0,dt.default)(D),(0,W.default)(D),(0,i.default)(D),(0,vt.default)(D),(0,I.default)(D),(0,R.default)(D),(0,H.default)(D),(0,b.default)(D),(0,at.default)(D),(0,it.default)(D),(0,p.default)(D),(0,Y.default)(D),(0,E.default)(D),(0,F.default)(D),(0,X.default)(D),(0,d.default)(D),(0,v.default)(D),(0,Dt.default)(D),(0,Vt.default)(D),(0,et.default)(D),(0,ut.default)(D),(0,c.default)(D),(0,J.default)(D),(0,Ot.default)(D),(0,$.default)(D),(0,M.default)(D)}}},{"./airplayMix":"d8BTB","./aspectRatioMix":"aQNJl","./attrMix":"5DA9e","./autoHeightMix":"1swKn","./autoSizeMix":"lSbiD","./cssVarMix":"32Hp1","./currentTimeMix":"kfZbu","./durationMix":"eV1ag","./eventInit":"f8NQq","./flipMix":"ea3Qm","./fullscreenMix":"ffXE3","./fullscreenWebMix":"8tarF","./loadedMix":"f9syH","./miniMix":"dLuS7","./optionInit":"d1F69","./pauseMix":"kewk9","./pipMix":"4XzDs","./playbackRateMix":"jphfi","./playedMix":"iNpeS","./playingMix":"aBIWL","./playMix":"hRBri","./posterMix":"fgfXC","./qualityMix":"17rUP","./rectMix":"55qzI","./screenshotMix":"bC6TG","./seekMix":"j8GRO","./stateMix":"cn7iR","./subtitleOffsetMix":"2k4nP","./switchMix":"6SU6j","./themeMix":"7iMuh","./thumbnailsMix":"6P0RS","./toggleMix":"eNi78","./typeMix":"7AUBD","./urlMix":"cnlLL","./volumeMix":"iX66j","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],d8BTB:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){let{i18n:i,notice:n,proxy:l,template:{$video:s}}=r,d=!0;window.WebKitPlaybackTargetAvailabilityEvent&&s.webkitShowPlaybackTargetPicker?l(s,"webkitplaybacktargetavailabilitychanged",f=>{switch(f.availability){case"available":d=!0;break;case"not-available":d=!1}}):d=!1,(0,t.def)(r,"airplay",{value(){d?(s.webkitShowPlaybackTargetPicker(),r.emit("airplay")):n.show=i.get("AirPlay Not Available")}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],aQNJl:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){let{i18n:i,notice:n,template:{$video:l,$player:s}}=r;(0,t.def)(r,"aspectRatio",{get:()=>s.dataset.aspectRatio||"default",set(d){if(d||(d="default"),d==="default")(0,t.setStyle)(l,"width",null),(0,t.setStyle)(l,"height",null),(0,t.setStyle)(l,"margin",null),delete s.dataset.aspectRatio;else{let f=d.split(":").map(Number),{clientWidth:p,clientHeight:g}=s,v=f[0]/f[1];p/g>v?((0,t.setStyle)(l,"width",`${v*g}px`),(0,t.setStyle)(l,"height","100%"),(0,t.setStyle)(l,"margin","0 auto")):((0,t.setStyle)(l,"width","100%"),(0,t.setStyle)(l,"height",`${p/v}px`),(0,t.setStyle)(l,"margin","auto 0")),s.dataset.aspectRatio=d}n.show=`${i.get("Aspect Ratio")}: ${d==="default"?i.get("Default"):d}`,r.emit("aspectRatio",d)}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"5DA9e":[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){let{template:{$video:i}}=r;(0,t.def)(r,"attr",{value(n,l){if(l===void 0)return i[n];i[n]=l}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"1swKn":[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){let{template:{$container:i,$video:n}}=r;(0,t.def)(r,"autoHeight",{value(){let{clientWidth:l}=i,{videoHeight:s,videoWidth:d}=n,f=l/d*s;(0,t.setStyle)(i,"height",`${f}px`),r.emit("autoHeight",f)}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],lSbiD:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){let{$container:i,$player:n,$video:l}=r.template;(0,t.def)(r,"autoSize",{value(){let{videoWidth:s,videoHeight:d}=l,{width:f,height:p}=(0,t.getRect)(i),g=s/d;f/p>g?((0,t.setStyle)(n,"width",`${p*g/f*100}%`),(0,t.setStyle)(n,"height","100%")):((0,t.setStyle)(n,"width","100%"),(0,t.setStyle)(n,"height",`${f/g/p*100}%`)),r.emit("autoSize",{width:r.width,height:r.height})}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"32Hp1":[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){let{$player:i}=r.template;(0,t.def)(r,"cssVar",{value:(n,l)=>l?i.style.setProperty(n,l):getComputedStyle(i).getPropertyValue(n)})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],kfZbu:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){let{$video:i}=r.template;(0,t.def)(r,"currentTime",{get:()=>i.currentTime||0,set:n=>{Number.isNaN(n=Number.parseFloat(n))||(i.currentTime=(0,t.clamp)(n,0,r.duration))}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],eV1ag:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){(0,t.def)(r,"duration",{get:()=>{let{duration:i}=r.template.$video;return i===1/0?0:i||0}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],f8NQq:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>i);var t=a("../config"),c=e.interopDefault(t),r=a("../utils");function i(n){let{i18n:l,notice:s,option:d,constructor:f,proxy:p,template:{$player:g,$video:v,$poster:x}}=n,m=0;for(let y=0;y{n.emit(`video:${j.type}`,j)});n.on("video:canplay",()=>{m=0,n.loading.show=!1}),n.once("video:canplay",()=>{n.loading.show=!1,n.controls.show=!0,n.mask.show=!0,n.isReady=!0,n.emit("ready")}),n.on("video:ended",()=>{d.loop?(n.seek=0,n.play(),n.controls.show=!1,n.mask.show=!1):(n.controls.show=!0,n.mask.show=!0)}),n.on("video:error",async y=>{m{n.emit("resize"),r.isMobile&&(n.loading.show=!1,n.controls.show=!0,n.mask.show=!0)}),n.on("video:loadstart",()=>{n.loading.show=!0,n.mask.show=!1,n.controls.show=!0}),n.on("video:pause",()=>{n.controls.show=!0,n.mask.show=!0}),n.on("video:play",()=>{n.mask.show=!1,(0,r.setStyle)(x,"display","none")}),n.on("video:playing",()=>{n.mask.show=!1}),n.on("video:progress",()=>{n.playing&&(n.loading.show=!1)}),n.on("video:seeked",()=>{n.loading.show=!1,n.mask.show=!0}),n.on("video:seeking",()=>{n.loading.show=!0,n.mask.show=!1}),n.on("video:timeupdate",()=>{n.mask.show=!1}),n.on("video:waiting",()=>{n.loading.show=!0,n.mask.show=!1})}},{"../config":"eJfh8","../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],ea3Qm:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){let{template:{$player:i},i18n:n,notice:l}=r;(0,t.def)(r,"flip",{get:()=>i.dataset.flip||"normal",set(s){s||(s="normal"),s==="normal"?delete i.dataset.flip:i.dataset.flip=s,l.show=`${n.get("Video Flip")}: ${n.get((0,t.capitalize)(s))}`,r.emit("flip",s)}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],ffXE3:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>i);var t=a("../libs/screenfull"),c=e.interopDefault(t),r=a("../utils");function i(n){let{i18n:l,notice:s,template:{$video:d,$player:f}}=n;n.once("video:loadedmetadata",()=>{c.default.isEnabled?(c.default.on("change",()=>{n.emit("fullscreen",c.default.isFullscreen),c.default.isFullscreen?(n.state="fullscreen",(0,r.addClass)(f,"art-fullscreen")):(0,r.removeClass)(f,"art-fullscreen"),n.emit("resize")}),c.default.on("error",p=>{n.emit("fullscreenError",p)}),(0,r.def)(n,"fullscreen",{get:()=>c.default.isFullscreen,async set(p){p?await c.default.request(f):await c.default.exit()}})):d.webkitSupportsFullscreen?(n.on("document:webkitfullscreenchange",()=>{n.emit("fullscreen",n.fullscreen),n.emit("resize")}),(0,r.def)(n,"fullscreen",{get:()=>document.fullscreenElement===d,set(p){p?(n.state="fullscreen",d.webkitEnterFullscreen()):d.webkitExitFullscreen()}})):(0,r.def)(n,"fullscreen",{get:()=>!1,set(){s.show=l.get("Fullscreen Not Supported")}}),(0,r.def)(n,"fullscreen",(0,r.get)(n,"fullscreen"))})}},{"../libs/screenfull":"iSPAQ","../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],iSPAQ:[function(a,u,o,h){a("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(o);let e=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],t=(()=>{if(typeof document>"u")return!1;let i=e[0],n={};for(let l of e)if(l[1]in document){for(let[s,d]of l.entries())n[i[s]]=d;return n}return!1})(),c={change:t.fullscreenchange,error:t.fullscreenerror},r={request:(i=document.documentElement,n)=>new Promise((l,s)=>{let d=()=>{r.off("change",d),l()};r.on("change",d);let f=i[t.requestFullscreen](n);f instanceof Promise&&f.then(d).catch(s)}),exit:()=>new Promise((i,n)=>{if(!r.isFullscreen)return void i();let l=()=>{r.off("change",l),i()};r.on("change",l);let s=document[t.exitFullscreen]();s instanceof Promise&&s.then(l).catch(n)}),toggle:(i,n)=>r.isFullscreen?r.exit():r.request(i,n),onchange(i){r.on("change",i)},onerror(i){r.on("error",i)},on(i,n){let l=c[i];l&&document.addEventListener(l,n,!1)},off(i,n){let l=c[i];l&&document.removeEventListener(l,n,!1)},raw:t};Object.defineProperties(r,{isFullscreen:{get:()=>!!document[t.fullscreenElement]},element:{enumerable:!0,get:()=>document[t.fullscreenElement]},isEnabled:{enumerable:!0,get:()=>!!document[t.fullscreenEnabled]}}),o.default=r},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"8tarF":[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){let{constructor:i,template:{$container:n,$player:l}}=r,s="";(0,t.def)(r,"fullscreenWeb",{get:()=>(0,t.hasClass)(l,"art-fullscreen-web"),set(d){d?(s=l.style.cssText,i.FULLSCREEN_WEB_IN_BODY&&(0,t.append)(document.body,l),r.state="fullscreenWeb",(0,t.setStyle)(l,"width","100%"),(0,t.setStyle)(l,"height","100%"),(0,t.addClass)(l,"art-fullscreen-web"),r.emit("fullscreenWeb",!0)):(i.FULLSCREEN_WEB_IN_BODY&&(0,t.append)(n,l),s&&(l.style.cssText=s,s=""),(0,t.removeClass)(l,"art-fullscreen-web"),r.emit("fullscreenWeb",!1)),r.emit("resize")}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],f9syH:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){let{$video:i}=r.template;(0,t.def)(r,"loaded",{get:()=>r.loadedTime/i.duration}),(0,t.def)(r,"loadedTime",{get:()=>i.buffered.length?i.buffered.end(i.buffered.length-1):0})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],dLuS7:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){let{icons:i,proxy:n,storage:l,template:{$player:s,$video:d}}=r,f=!1,p=0,g=0;function v(){let{$mini:y}=r.template;y&&((0,t.removeClass)(s,"art-mini"),(0,t.setStyle)(y,"display","none"),s.prepend(d),r.emit("mini",!1))}function x(y,j){r.playing?((0,t.setStyle)(y,"display","none"),(0,t.setStyle)(j,"display","flex")):((0,t.setStyle)(y,"display","flex"),(0,t.setStyle)(j,"display","none"))}function m(){let{$mini:y}=r.template,j=(0,t.getRect)(y),k=window.innerHeight-j.height-50,$=window.innerWidth-j.width-50;l.set("top",k),l.set("left",$),(0,t.setStyle)(y,"top",`${k}px`),(0,t.setStyle)(y,"left",`${$}px`)}(0,t.def)(r,"mini",{get:()=>(0,t.hasClass)(s,"art-mini"),set(y){if(y){r.state="mini",(0,t.addClass)(s,"art-mini");let j=function(){let{$mini:S}=r.template;if(S)return(0,t.append)(S,d),(0,t.setStyle)(S,"display","flex");{let E=(0,t.createElement)("div");(0,t.addClass)(E,"art-mini-popup"),(0,t.append)(document.body,E),r.template.$mini=E,(0,t.append)(E,d);let C=(0,t.append)(E,'
');(0,t.append)(C,i.close),n(C,"click",v);let I=(0,t.append)(E,'
'),L=(0,t.append)(I,i.play),R=(0,t.append)(I,i.pause);return n(L,"click",()=>r.play()),n(R,"click",()=>r.pause()),x(L,R),r.on("video:playing",()=>x(L,R)),r.on("video:pause",()=>x(L,R)),r.on("video:timeupdate",()=>x(L,R)),n(E,"mousedown",w=>{f=w.button===0,p=w.pageX,g=w.pageY}),r.on("document:mousemove",w=>{if(f){(0,t.addClass)(E,"art-mini-dragging");let b=w.pageX-p,T=w.pageY-g;(0,t.setStyle)(E,"transform",`translate(${b}px, ${T}px)`)}}),r.on("document:mouseup",()=>{if(f){f=!1,(0,t.removeClass)(E,"art-mini-dragging");let w=(0,t.getRect)(E);l.set("left",w.left),l.set("top",w.top),(0,t.setStyle)(E,"left",`${w.left}px`),(0,t.setStyle)(E,"top",`${w.top}px`),(0,t.setStyle)(E,"transform",null)}}),E}}(),k=l.get("top"),$=l.get("left");typeof k=="number"&&typeof $=="number"?((0,t.setStyle)(j,"top",`${k}px`),(0,t.setStyle)(j,"left",`${$}px`),(0,t.isInViewport)(j)||m()):m(),r.emit("mini",!0)}else v()}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],d1F69:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){let{option:i,storage:n,template:{$video:l,$poster:s}}=r;for(let f in i.moreVideoAttr)r.attr(f,i.moreVideoAttr[f]);i.muted&&(r.muted=i.muted),i.volume&&(l.volume=(0,t.clamp)(i.volume,0,1));let d=n.get("volume");for(let f in typeof d=="number"&&(l.volume=(0,t.clamp)(d,0,1)),i.poster&&(0,t.setStyle)(s,"backgroundImage",`url(${i.poster})`),i.autoplay&&(l.autoplay=i.autoplay),i.playsInline&&(l.playsInline=!0,l["webkit-playsinline"]=!0),i.theme&&(i.cssVar["--art-theme"]=i.theme),i.cssVar)r.cssVar(f,i.cssVar[f]);r.url=i.url}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],kewk9:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){let{template:{$video:i},i18n:n,notice:l}=r;(0,t.def)(r,"pause",{value(){let s=i.pause();return l.show=n.get("Pause"),r.emit("pause"),s}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"4XzDs":[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){let{i18n:i,notice:n,template:{$video:l}}=r;if(document.pictureInPictureEnabled){let{template:{$video:s},proxy:d,notice:f}=r;s.disablePictureInPicture=!1,(0,t.def)(r,"pip",{get:()=>document.pictureInPictureElement,set(p){p?(r.state="pip",s.requestPictureInPicture().catch(g=>{throw f.show=g,g})):document.exitPictureInPicture().catch(g=>{throw f.show=g,g})}}),d(s,"enterpictureinpicture",()=>{r.emit("pip",!0)}),d(s,"leavepictureinpicture",()=>{r.emit("pip",!1)})}else if(l.webkitSupportsPresentationMode){let{$video:s}=r.template;s.webkitSetPresentationMode("inline"),(0,t.def)(r,"pip",{get:()=>s.webkitPresentationMode==="picture-in-picture",set(d){d?(r.state="pip",s.webkitSetPresentationMode("picture-in-picture"),r.emit("pip",!0)):(s.webkitSetPresentationMode("inline"),r.emit("pip",!1))}})}else(0,t.def)(r,"pip",{get:()=>!1,set(){n.show=i.get("PIP Not Supported")}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],jphfi:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){let{template:{$video:i},i18n:n,notice:l}=r;(0,t.def)(r,"playbackRate",{get:()=>i.playbackRate,set(s){s?s!==i.playbackRate&&(i.playbackRate=s,l.show=`${n.get("Rate")}: ${s===1?n.get("Normal"):`${s}x`}`):r.playbackRate=1}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],iNpeS:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){(0,t.def)(r,"played",{get:()=>r.currentTime/r.duration})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],aBIWL:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){let{$video:i}=r.template;(0,t.def)(r,"playing",{get:()=>typeof i.playing=="boolean"?i.playing:i.currentTime>0&&!i.paused&&!i.ended&&i.readyState>2})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],hRBri:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){let{i18n:i,notice:n,option:l,constructor:{instances:s},template:{$video:d}}=r;(0,t.def)(r,"play",{async value(){let f=await d.play();if(n.show=i.get("Play"),r.emit("play"),l.mutex)for(let p=0;pc);var t=a("../utils");function c(r){let{template:{$poster:i}}=r;(0,t.def)(r,"poster",{get:()=>{try{return i.style.backgroundImage.match(/"(.*)"/)[1]}catch{return""}},set(n){(0,t.setStyle)(i,"backgroundImage",`url(${n})`)}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"17rUP":[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){(0,t.def)(r,"quality",{set(i){let{controls:n,notice:l,i18n:s}=r,d=i.find(f=>f.default)||i[0];n.update({name:"quality",position:"right",index:10,style:{marginRight:"10px"},html:(d==null?void 0:d.html)||"",selector:i,onSelect:async f=>(await r.switchQuality(f.url),l.show=`${s.get("Switch Video")}: ${f.html}`,f.html)})}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"55qzI":[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){(0,t.def)(r,"rect",{get:()=>(0,t.getRect)(r.template.$player)});let i=["bottom","height","left","right","top","width"];for(let n=0;nr.rect[l]})}(0,t.def)(r,"x",{get:()=>r.left+window.pageXOffset}),(0,t.def)(r,"y",{get:()=>r.top+window.pageYOffset})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],bC6TG:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){let{notice:i,template:{$video:n}}=r,l=(0,t.createElement)("canvas");(0,t.def)(r,"getDataURL",{value:()=>new Promise((s,d)=>{try{l.width=n.videoWidth,l.height=n.videoHeight,l.getContext("2d").drawImage(n,0,0),s(l.toDataURL("image/png"))}catch(f){i.show=f,d(f)}})}),(0,t.def)(r,"getBlobUrl",{value:()=>new Promise((s,d)=>{try{l.width=n.videoWidth,l.height=n.videoHeight,l.getContext("2d").drawImage(n,0,0),l.toBlob(f=>{s(URL.createObjectURL(f))})}catch(f){i.show=f,d(f)}})}),(0,t.def)(r,"screenshot",{value:async s=>{let d=await r.getDataURL(),f=s||`artplayer_${(0,t.secondToTime)(n.currentTime)}`;return(0,t.download)(d,`${f}.png`),r.emit("screenshot",d),d}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],j8GRO:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){let{notice:i}=r;(0,t.def)(r,"seek",{set(n){r.currentTime=n,r.duration&&(i.show=`${(0,t.secondToTime)(r.currentTime)} / ${(0,t.secondToTime)(r.duration)}`),r.emit("seek",r.currentTime)}}),(0,t.def)(r,"forward",{set(n){r.seek=r.currentTime+n}}),(0,t.def)(r,"backward",{set(n){r.seek=r.currentTime-n}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],cn7iR:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){let i=["mini","pip","fullscreen","fullscreenWeb"];(0,t.def)(r,"state",{get:()=>i.find(n=>r[n])||"standard",set(n){for(let l=0;lc);var t=a("../utils");function c(r){let{notice:i,i18n:n,template:l}=r;(0,t.def)(r,"subtitleOffset",{get:()=>{var s;return((s=l.$track)==null?void 0:s.offset)||0},set(s){let{cues:d}=r.subtitle;if(!l.$track||d.length===0)return;let f=(0,t.clamp)(s,-10,10);l.$track.offset=f;for(let p=0;pc);var t=a("../utils");function c(r){function i(n,l){return new Promise((s,d)=>{if(n===r.url)return;let{playing:f,aspectRatio:p,playbackRate:g}=r;r.pause(),r.url=n,r.notice.show="",r.once("video:error",d),r.once("video:loadedmetadata",()=>{r.currentTime=l}),r.once("video:canplay",async()=>{r.playbackRate=g,r.aspectRatio=p,f&&await r.play(),r.notice.show="",s()})})}(0,t.def)(r,"switchQuality",{value:n=>i(n,r.currentTime)}),(0,t.def)(r,"switchUrl",{value:n=>i(n,0)}),(0,t.def)(r,"switch",{set:r.switchUrl})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"7iMuh":[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){(0,t.def)(r,"theme",{get:()=>r.cssVar("--art-theme"),set(i){r.cssVar("--art-theme",i)}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"6P0RS":[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){let{events:i,option:n,template:{$progress:l,$video:s}}=r,d=null,f=null,p=!1,g=!1,v=!1;i.hover(l,()=>{v=!0},()=>{v=!1}),r.on("setBar",async(x,m,y)=>{var E;let j=(E=r.controls)==null?void 0:E.thumbnails,{url:k,scale:$}=n.thumbnails;if(!j||!k)return;let S=x==="played"&&y&&t.isMobile;if(x==="hover"||S){if(p||(p=!0,f=await(0,t.loadImg)(k,$),g=!0),!g||!v)return;let C=l.clientWidth*m;(0,t.setStyle)(j,"display","flex"),C>0&&Cl.clientWidth-P/2?(0,t.setStyle)(L,"left",`${l.clientWidth-P}px`):(0,t.setStyle)(L,"left",`${I-P/2}px`)}(C):t.isMobile||(0,t.setStyle)(j,"display","none"),S&&(clearTimeout(d),d=setTimeout(()=>{(0,t.setStyle)(j,"display","none")},500))}}),(0,t.def)(r,"thumbnails",{get:()=>r.option.thumbnails,set(x){x.url&&!r.option.isLive&&(r.option.thumbnails=x,clearTimeout(d),d=null,f=null,p=!1,g=!1)}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],eNi78:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){(0,t.def)(r,"toggle",{value:()=>r.playing?r.pause():r.play()})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"7AUBD":[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){(0,t.def)(r,"type",{get:()=>r.option.type,set(i){r.option.type=i}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],cnlLL:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){let{option:i,template:{$video:n}}=r;(0,t.def)(r,"url",{get:()=>n.src,async set(l){if(l){let s=r.url,d=i.type||(0,t.getExt)(l),f=i.customType[d];d&&f?(await(0,t.sleep)(),r.loading.show=!0,f.call(r,n,l,r)):(URL.revokeObjectURL(s),n.src=l),s!==r.url&&(r.option.url=l,r.isReady&&s&&r.once("video:canplay",()=>{r.emit("restart",l)}))}else await(0,t.sleep)(),r.loading.show=!0}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],iX66j:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){let{template:{$video:i},i18n:n,notice:l,storage:s}=r;(0,t.def)(r,"volume",{get:()=>i.volume||0,set:d=>{i.volume=(0,t.clamp)(d,0,1),l.show=`${n.get("Volume")}: ${Number.parseInt(100*i.volume,10)}`,i.volume!==0&&s.set("volume",i.volume)}}),(0,t.def)(r,"muted",{get:()=>i.muted,set:d=>{i.muted=d,r.emit("muted",d)}})}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],cjxJL:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o);var t=a("../utils"),c=a("./autoOrientation"),r=e.interopDefault(c),i=a("./autoPlayback"),n=e.interopDefault(i),l=a("./fastForward"),s=e.interopDefault(l),d=a("./lock"),f=e.interopDefault(d),p=a("./miniProgressBar"),g=e.interopDefault(p);o.default=class{constructor(v){this.art=v,this.id=0;let{option:x}=v;x.miniProgressBar&&!x.isLive&&this.add(g.default),x.lock&&t.isMobile&&this.add(f.default),x.autoPlayback&&!x.isLive&&this.add(n.default),x.autoOrientation&&t.isMobile&&this.add(r.default),x.fastForward&&t.isMobile&&!x.isLive&&this.add(s.default);for(let m=0;mthis.next(v,m)):this.next(v,x)}next(v,x){let m=x&&x.name||v.name||`plugin${this.id}`;return(0,t.errorHandle)(!(0,t.has)(this,m),`Cannot add a plugin that already has the same name: ${m}`),(0,t.def)(this,m,{value:x}),this}}},{"../utils":"aBlEo","./autoOrientation":"jb9jb","./autoPlayback":"21HWM","./fastForward":"4sxBO","./lock":"fjy9V","./miniProgressBar":"d0xRp","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],jb9jb:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){let{notice:i,constructor:n,template:{$player:l,$video:s}}=r,d="art-auto-orientation",f="art-auto-orientation-fullscreen",p=!1;function g(){let{videoWidth:v,videoHeight:x}=s,m=document.documentElement.clientWidth,y=document.documentElement.clientHeight;return v>x&&my}return r.on("fullscreenWeb",v=>{v?g()&&setTimeout(()=>{r.fullscreenWeb&&!(0,t.hasClass)(l,d)&&function(){let x=document.documentElement.clientWidth,m=document.documentElement.clientHeight;(0,t.setStyle)(l,"width",`${m}px`),(0,t.setStyle)(l,"height",`${x}px`),(0,t.setStyle)(l,"transform-origin","0 0"),(0,t.setStyle)(l,"transform",`rotate(90deg) translate(0, -${x}px)`),(0,t.addClass)(l,d),r.isRotate=!0,r.emit("resize")}()},Number(n.AUTO_ORIENTATION_TIME??0)):(0,t.hasClass)(l,d)&&((0,t.setStyle)(l,"width",""),(0,t.setStyle)(l,"height",""),(0,t.setStyle)(l,"transform-origin",""),(0,t.setStyle)(l,"transform",""),(0,t.removeClass)(l,d),r.isRotate=!1,r.emit("resize"))}),r.on("fullscreen",async v=>{var m;let x=!!((m=screen==null?void 0:screen.orientation)!=null&&m.lock);if(v){if(x&&g())try{let y=screen.orientation.type.startsWith("portrait")?"landscape":"portrait";await screen.orientation.lock(y),p=!0,(0,t.addClass)(l,f)}catch(y){p=!1,i.show=y}}else if((0,t.hasClass)(l,f)&&(0,t.removeClass)(l,f),x&&p){try{screen.orientation.unlock()}catch{}p=!1}}),{name:"autoOrientation",get state(){return(0,t.hasClass)(l,d)}}}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"21HWM":[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){let{i18n:i,icons:n,storage:l,constructor:s,proxy:d,template:{$poster:f}}=r,p=r.layers.add({name:"auto-playback",html:'
'}),g=(0,t.query)(".art-auto-playback-last",p),v=(0,t.query)(".art-auto-playback-jump",p),x=(0,t.query)(".art-auto-playback-close",p);(0,t.append)(x,n.close);let m=null;function y(){let j=(l.get("times")||{})[r.option.id||r.option.url];clearTimeout(m),(0,t.setStyle)(p,"display","none"),j&&j>=s.AUTO_PLAYBACK_MIN&&((0,t.setStyle)(p,"display","flex"),g.textContent=`${i.get("Last Seen")} ${(0,t.secondToTime)(j)}`,v.textContent=i.get("Jump Play"),d(x,"click",()=>{(0,t.setStyle)(p,"display","none")}),d(v,"click",()=>{r.seek=j,r.play(),(0,t.setStyle)(f,"display","none"),(0,t.setStyle)(p,"display","none")}),r.once("video:timeupdate",()=>{m=setTimeout(()=>{(0,t.setStyle)(p,"display","none")},s.AUTO_PLAYBACK_TIMEOUT)}))}return r.on("video:timeupdate",()=>{if(r.playing){let j=l.get("times")||{},k=Object.keys(j);k.length>s.AUTO_PLAYBACK_MAX&&delete j[k[0]],j[r.option.id||r.option.url]=r.currentTime,l.set("times",j)}}),r.on("ready",y),r.on("restart",y),{name:"auto-playback",get times(){return l.get("times")||{}},clear:()=>l.del("times"),delete(j){let k=l.get("times")||{};return delete k[j],l.set("times",k),k}}}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"4sxBO":[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){let{constructor:i,proxy:n,template:{$player:l,$video:s}}=r,d=null,f=!1,p=1,g=()=>{clearTimeout(d),f&&(f=!1,r.playbackRate=p,(0,t.removeClass)(l,"art-fast-forward"))};return n(s,"touchstart",v=>{v.touches.length===1&&r.playing&&!r.isLock&&(d=setTimeout(()=>{f=!0,p=r.playbackRate,r.playbackRate=i.FAST_FORWARD_VALUE,(0,t.addClass)(l,"art-fast-forward")},i.FAST_FORWARD_TIME))}),r.on("document:touchmove",g),r.on("document:touchend",g),{name:"fastForward",get state(){return(0,t.hasClass)(l,"art-fast-forward")}}}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],fjy9V:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){let{layers:i,icons:n,template:{$player:l}}=r;function s(){return(0,t.hasClass)(l,"art-lock")}function d(){(0,t.addClass)(l,"art-lock"),r.isLock=!0,r.emit("lock",!0)}function f(){(0,t.removeClass)(l,"art-lock"),r.isLock=!1,r.emit("lock",!1)}return i.add({name:"lock",mounted(p){let g=(0,t.append)(p,n.lock),v=(0,t.append)(p,n.unlock);(0,t.setStyle)(g,"display","none"),r.on("lock",x=>{x?((0,t.setStyle)(g,"display","inline-flex"),(0,t.setStyle)(v,"display","none")):((0,t.setStyle)(g,"display","none"),(0,t.setStyle)(v,"display","inline-flex"))})},click(){s()?f():d()}}),{name:"lock",get state(){return s()},set state(p){p?d():f()}}}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],d0xRp:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){return r.on("control",i=>{i?(0,t.removeClass)(r.template.$player,"art-mini-progress-bar"):(0,t.addClass)(r.template.$player,"art-mini-progress-bar")}),{name:"mini-progress-bar"}}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],bwLGT:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o);var t=a("../utils"),c=a("../utils/component"),r=e.interopDefault(c),i=a("./aspectRatio"),n=e.interopDefault(i),l=a("./flip"),s=e.interopDefault(l),d=a("./playbackRate"),f=e.interopDefault(d),p=a("./subtitleOffset"),g=e.interopDefault(p);class v extends r.default{constructor(m){super(m);let{option:y,controls:j,template:{$setting:k}}=m;this.name="setting",this.$parent=k,this.id=0,this.active=null,this.cache=new Map,this.option=[...this.builtin,...y.settings],y.setting&&(this.format(),this.render(),m.on("blur",()=>{this.show&&(this.show=!1,this.render())}),m.on("focus",$=>{let S=(0,t.includeFromEvent)($,j.setting),E=(0,t.includeFromEvent)($,this.$parent);!this.show||S||E||(this.show=!1,this.render())}),m.on("resize",()=>this.resize()))}get builtin(){let m=[],{option:y}=this.art;return y.playbackRate&&m.push((0,f.default)(this.art)),y.aspectRatio&&m.push((0,n.default)(this.art)),y.flip&&m.push((0,s.default)(this.art)),y.subtitleOffset&&m.push((0,g.default)(this.art)),m}traverse(m,y=this.option){var j;for(let k=0;k{y.default=y===m,y.default&&y.$item&&(0,t.inverseClass)(y.$item,"art-current")},m.$option),this.render(m.$parents)}format(m=this.option,y,j,k=[]){for(let $=0;$y}),(0,t.def)(S,"$parents",{get:()=>j}),(0,t.def)(S,"$option",{get:()=>m});let E=[];(0,t.def)(S,"$events",{get:()=>E}),(0,t.def)(S,"$formatted",{get:()=>!0})}this.format(S.selector||[],S,m,k)}this.option=m}find(m=""){let y=null;return this.traverse(j=>{j.name===m&&(y=j)}),y}resize(){var S,E;let{controls:m,constructor:{SETTING_WIDTH:y,SETTING_ITEM_HEIGHT:j},template:{$player:k,$setting:$}}=this.art;if(m.setting&&this.show){let C=((E=(S=this.active[0])==null?void 0:S.$parent)==null?void 0:E.width)||y,{left:I,width:L}=(0,t.getRect)(m.setting),{left:R,width:w}=(0,t.getRect)(k),b=I-R+L/2-C/2,T=this.active===this.option?this.active.length*j:(this.active.length+1)*j;if((0,t.setStyle)($,"height",`${T}px`),(0,t.setStyle)($,"width",`${C}px`),this.art.isRotate||t.isMobile)return;b+C>w?((0,t.setStyle)($,"left",null),(0,t.setStyle)($,"right",null)):((0,t.setStyle)($,"left",`${b}px`),(0,t.setStyle)($,"right","auto"))}}inactivate(m){for(let y=0;y'),C=(0,t.createElement)("div");(0,t.addClass)(C,"art-setting-item-left-icon"),(0,t.append)(C,k),(0,t.append)(E,C),(0,t.append)(E,m.$parent.html);let I=j(S,"click",()=>this.render(m.$parents));m.$parent.$events.push(I),(0,t.append)(y,S)}createItem(m,y=!1){var F,P;if(!this.cache.has(m.$option))return;let j=this.cache.get(m.$option),k=m.$item,$="selector";(0,t.has)(m,"switch")&&($="switch"),(0,t.has)(m,"range")&&($="range"),(0,t.has)(m,"onClick")&&($="button");let{icons:S,proxy:E,constructor:C}=this.art,I=(0,t.createElement)("div");(0,t.addClass)(I,"art-setting-item"),(0,t.setStyle)(I,"height",`${C.SETTING_ITEM_HEIGHT}px`),I.dataset.name=m.name||"",I.dataset.value=m.value||"";let L=(0,t.append)(I,'
'),R=(0,t.append)(I,'
'),w=(0,t.createElement)("div");switch((0,t.addClass)(w,"art-setting-item-left-icon"),$){case"button":case"switch":case"range":(0,t.append)(w,m.icon||S.config);break;case"selector":(F=m.selector)!=null&&F.length?(0,t.append)(w,m.icon||S.config):(0,t.append)(w,S.check)}(0,t.append)(L,w),(0,t.def)(m,"$icon",{configurable:!0,get:()=>w}),(0,t.def)(m,"icon",{configurable:!0,get:()=>w.innerHTML,set(M){w.innerHTML="",(0,t.append)(w,M)}});let b=(0,t.createElement)("div");(0,t.addClass)(b,"art-setting-item-left-text"),(0,t.append)(b,m.html||""),(0,t.append)(L,b),(0,t.def)(m,"$html",{configurable:!0,get:()=>b}),(0,t.def)(m,"html",{configurable:!0,get:()=>b.innerHTML,set(M){b.innerHTML="",(0,t.append)(b,M)}});let T=(0,t.createElement)("div");switch((0,t.addClass)(T,"art-setting-item-right-tooltip"),(0,t.append)(T,m.tooltip||""),(0,t.append)(R,T),(0,t.def)(m,"$tooltip",{configurable:!0,get:()=>T}),(0,t.def)(m,"tooltip",{configurable:!0,get:()=>T.innerHTML,set(M){T.innerHTML="",(0,t.append)(T,M)}}),$){case"switch":{let M=(0,t.createElement)("div");(0,t.addClass)(M,"art-setting-item-right-icon");let q=(0,t.append)(M,S.switchOn),O=(0,t.append)(M,S.switchOff);(0,t.setStyle)(m.switch?O:q,"display","none"),(0,t.append)(R,M),(0,t.def)(m,"$switch",{configurable:!0,get:()=>M});let B=m.switch;(0,t.def)(m,"switch",{configurable:!0,get:()=>B,set(H){B=H,H?((0,t.setStyle)(O,"display","none"),(0,t.setStyle)(q,"display",null)):((0,t.setStyle)(O,"display",null),(0,t.setStyle)(q,"display","none"))}});break}case"range":{let M=(0,t.createElement)("div");(0,t.addClass)(M,"art-setting-item-right-icon");let q=(0,t.append)(M,'');q.value=m.range[0],q.min=m.range[1],q.max=m.range[2],q.step=m.range[3],(0,t.addClass)(q,"art-setting-range"),(0,t.append)(R,M),(0,t.def)(m,"$range",{configurable:!0,get:()=>q});let O=[...m.range];(0,t.def)(m,"range",{configurable:!0,get:()=>O,set(B){O=[...B],q.value=B[0],q.min=B[1],q.max=B[2],q.step=B[3]}})}break;case"selector":if((P=m.selector)!=null&&P.length){let M=(0,t.createElement)("div");(0,t.addClass)(M,"art-setting-item-right-icon"),(0,t.append)(M,S.arrowRight),(0,t.append)(R,M)}}switch($){case"switch":if(m.onSwitch){let M=E(I,"click",async q=>{m.switch=await m.onSwitch.call(this.art,m,I,q)});m.$events.push(M)}break;case"range":if(m.$range){if(m.onRange){let M=E(m.$range,"change",async q=>{m.range[0]=m.$range.valueAsNumber,m.tooltip=await m.onRange.call(this.art,m,I,q)});m.$events.push(M)}if(m.onChange){let M=E(m.$range,"input",async q=>{m.range[0]=m.$range.valueAsNumber,m.tooltip=await m.onChange.call(this.art,m,I,q)});m.$events.push(M)}}break;case"selector":{let M=E(I,"click",async q=>{var O;(O=m.selector)!=null&&O.length?this.render(m.selector):(this.check(m),m.$parent.onSelect&&(m.$parent.tooltip=await m.$parent.onSelect.call(this.art,m,I,q)))});m.$events.push(M),m.default&&(0,t.addClass)(I,"art-current")}break;case"button":if(m.onClick){let M=E(I,"click",async q=>{m.tooltip=await m.onClick.call(this.art,m,I,q)});m.$events.push(M)}}(0,t.def)(m,"$item",{configurable:!0,get:()=>I}),y?(0,t.replaceElement)(I,k):(0,t.append)(j,I),m.mounted&&setTimeout(()=>m.mounted.call(this.art,m.$item,m),0)}render(m=this.option){var y;if(this.active=m,this.cache.has(m)){let j=this.cache.get(m);(0,t.inverseClass)(j,"art-current")}else{let j=(0,t.createElement)("div");this.cache.set(m,j),(0,t.addClass)(j,"art-setting-panel"),(0,t.append)(this.$parent,j),(0,t.inverseClass)(j,"art-current"),(y=m[0])!=null&&y.$parent&&this.createHeader(m[0]);for(let k=0;k({value:f,name:`aspect-ratio-${f}`,default:f===c.aspectRatio,html:s(f)})),onSelect:f=>(c.aspectRatio=f.value,f.html),mounted:()=>{d(),c.on("aspectRatio",()=>d())}}}e.defineInteropFlag(o),e.export(o,"default",()=>t)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],ljJTO:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o),e.export(o,"default",()=>c);var t=a("../utils");function c(r){let{i18n:i,icons:n,constructor:{SETTING_ITEM_WIDTH:l,FLIP:s}}=r;function d(p){return i.get((0,t.capitalize)(p))}function f(){let p=r.setting.find(`flip-${r.flip}`);r.setting.check(p)}return{width:l,name:"flip",html:i.get("Video Flip"),tooltip:d(r.flip),icon:n.flip,selector:s.map(p=>({value:p,name:`flip-${p}`,default:p===r.flip,html:d(p)})),onSelect:p=>(r.flip=p.value,p.html),mounted:()=>{f(),r.on("flip",()=>f())}}}},{"../utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"3QcSQ":[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");function t(c){let{i18n:r,icons:i,constructor:{SETTING_ITEM_WIDTH:n,PLAYBACK_RATE:l}}=c;function s(f){return f===1?r.get("Normal"):f.toFixed(1)}function d(){let f=c.setting.find(`playback-rate-${c.playbackRate}`);c.setting.check(f)}return{width:n,name:"playback-rate",html:r.get("Play Speed"),tooltip:s(c.playbackRate),icon:i.playbackRate,selector:l.map(f=>({value:f,name:`playback-rate-${f}`,default:f===c.playbackRate,html:s(f)})),onSelect:f=>(c.playbackRate=f.value,f.html),mounted:()=>{d(),c.on("video:ratechange",()=>d())}}}e.defineInteropFlag(o),e.export(o,"default",()=>t)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],eB5hg:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");function t(c){let{i18n:r,icons:i,constructor:n}=c;return{width:n.SETTING_ITEM_WIDTH,name:"subtitle-offset",html:r.get("Subtitle Offset"),icon:i.subtitle,tooltip:"0s",range:[0,-10,10,.1],onChange:l=>(c.subtitleOffset=l.range[0],`${l.range[0]}s`),mounted:(l,s)=>{c.on("subtitleOffset",d=>{s.$range.value=d,s.tooltip=`${d}s`})}}}e.defineInteropFlag(o),e.export(o,"default",()=>t)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],kwqbK:[function(a,u,o,h){a("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(o),o.default=class{constructor(){this.name="artplayer_settings",this.settings={}}get(e){try{let t=JSON.parse(window.localStorage.getItem(this.name))||{};return e?t[e]:t}catch{return e?this.settings[e]:this.settings}}set(e,t){try{let c=Object.assign({},this.get(),{[e]:t});window.localStorage.setItem(this.name,JSON.stringify(c))}catch{this.settings[e]=t}}del(e){try{let t=this.get();delete t[e],window.localStorage.setItem(this.name,JSON.stringify(t))}catch{delete this.settings[e]}}clear(){try{window.localStorage.removeItem(this.name)}catch{this.settings={}}}}},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],k5613:[function(a,u,o,h){var e=a("@parcel/transformer-js/src/esmodule-helpers.js");e.defineInteropFlag(o);var t=a("option-validator"),c=e.interopDefault(t),r=a("./scheme"),i=e.interopDefault(r),n=a("./utils"),l=a("./utils/component"),s=e.interopDefault(l);class d extends s.default{constructor(p){super(p),this.name="subtitle",this.option=null,this.destroyEvent=()=>null,this.init(p.option.subtitle);let g=!1;p.on("video:timeupdate",()=>{if(!this.url)return;let v=this.art.template.$video.webkitDisplayingFullscreen;typeof v=="boolean"&&v!==g&&(g=v,this.createTrack(v?"subtitles":"metadata",this.url))})}get url(){return this.art.template.$track.src}set url(p){this.switch(p)}get textTrack(){var p,g;return(g=(p=this.art.template.$video)==null?void 0:p.textTracks)==null?void 0:g[0]}get activeCues(){return this.textTrack?Array.from(this.textTrack.activeCues):[]}get cues(){return this.textTrack?Array.from(this.textTrack.cues):[]}style(p,g){let{$subtitle:v}=this.art.template;return typeof p=="object"?(0,n.setStyles)(v,p):(0,n.setStyle)(v,p,g)}update(){let{option:{subtitle:p},template:{$subtitle:g}}=this.art;g.innerHTML="",this.activeCues.length&&(this.art.emit("subtitleBeforeUpdate",this.activeCues),g.innerHTML=this.activeCues.map((v,x)=>v.text.split(/\r?\n/).filter(m=>m.trim()).map(m=>`
${p.escape?(0,n.escape)(m):m}
`).join("")).join(""),this.art.emit("subtitleAfterUpdate",this.activeCues))}async switch(p,g={}){let{i18n:v,notice:x,option:m}=this.art,y={...m.subtitle,...g,url:p},j=await this.init(y);return g.name&&(x.show=`${v.get("Switch Subtitle")}: ${g.name}`),j}createTrack(p,g){let{template:v,proxy:x,option:m}=this.art,{$video:y,$track:j}=v,k=(0,n.createElement)("track");k.default=!0,k.kind=p,k.src=g,k.label=m.subtitle.name||"Artplayer",k.track.mode="hidden",k.onload=()=>{this.art.emit("subtitleLoad",this.cues,this.option)},this.art.events.remove(this.destroyEvent),j.onload=null,(0,n.remove)(j),(0,n.append)(y,k),v.$track=k,this.destroyEvent=x(this.textTrack,"cuechange",()=>this.update())}async init(p){let{notice:g,template:{$subtitle:v}}=this.art;return this.textTrack?((0,c.default)(p,i.default.subtitle),p.url?(this.option=p,this.style(p.style),fetch(p.url).then(x=>x.arrayBuffer()).then(x=>{let m=new TextDecoder(p.encoding).decode(x);switch(p.type||(0,n.getExt)(p.url)){case"srt":{let y=(0,n.srtToVtt)(m),j=p.onVttLoad(y);return(0,n.vttToBlob)(j)}case"ass":{let y=(0,n.assToVtt)(m),j=p.onVttLoad(y);return(0,n.vttToBlob)(j)}case"vtt":{let y=p.onVttLoad(m);return(0,n.vttToBlob)(y)}default:return p.url}}).then(x=>(v.innerHTML="",this.url===x||(URL.revokeObjectURL(this.url),this.createTrack("metadata",x)),x)).catch(x=>{throw v.innerHTML="",g.show=x,x})):void 0):null}}o.default=d},{"option-validator":"g7VGh","./scheme":"biLjm","./utils":"aBlEo","./utils/component":"idCEj","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],fwOA1:[function(a,u,o,h){a("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(o);var e=a("../package.json"),t=a("./utils");class c{constructor(i){this.art=i;let{option:n,constructor:l}=i;n.container instanceof Element?this.$container=n.container:(this.$container=(0,t.query)(n.container),(0,t.errorHandle)(this.$container,`No container element found by ${n.container}`)),(0,t.errorHandle)((0,t.supportsFlex)(),"The current browser does not support flex layout");let s=this.$container.tagName.toLowerCase();(0,t.errorHandle)(s==="div",`Unsupported container element type, only support 'div' but got '${s}'`),(0,t.errorHandle)(l.instances.every(d=>d.template.$container!==this.$container),"Cannot mount multiple instances on the same dom element"),this.query=this.query.bind(this),this.$container.dataset.artId=i.id,this.init()}static get html(){return`
Player version:
${e.version}
Video url:
Video volume:
Video time:
Video duration:
Video resolution:
x
[x]
`}query(i){return(0,t.query)(i,this.$container)}init(){let{option:i}=this.art;if(i.useSSR||(this.$container.innerHTML=c.html),this.$player=this.query(".art-video-player"),this.$video=this.query(".art-video"),this.$track=this.query("track"),this.$poster=this.query(".art-poster"),this.$subtitle=this.query(".art-subtitle"),this.$danmuku=this.query(".art-danmuku"),this.$bottom=this.query(".art-bottom"),this.$progress=this.query(".art-progress"),this.$controls=this.query(".art-controls"),this.$controlsLeft=this.query(".art-controls-left"),this.$controlsCenter=this.query(".art-controls-center"),this.$controlsRight=this.query(".art-controls-right"),this.$layer=this.query(".art-layers"),this.$loading=this.query(".art-loading"),this.$notice=this.query(".art-notice"),this.$noticeInner=this.query(".art-notice-inner"),this.$mask=this.query(".art-mask"),this.$state=this.query(".art-state"),this.$setting=this.query(".art-settings"),this.$info=this.query(".art-info"),this.$infoPanel=this.query(".art-info-panel"),this.$infoClose=this.query(".art-info-close"),this.$contextmenu=this.query(".art-contextmenus"),i.proxy){let n=i.proxy.call(this.art,this.art);(0,t.errorHandle)(n instanceof HTMLVideoElement||n instanceof HTMLCanvasElement,"Function 'option.proxy' needs to return 'HTMLVideoElement' or 'HTMLCanvasElement'"),(0,t.replaceElement)(n,this.$video),n.className="art-video",this.$video=n}i.backdrop&&(0,t.addClass)(this.$player,"art-backdrop"),t.isMobile&&(0,t.addClass)(this.$player,"art-mobile")}destroy(i){i?this.$container.innerHTML="":(0,t.addClass)(this.$player,"art-destroy")}}o.default=c},{"../package.json":"lh3R5","./utils":"aBlEo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"4NM7P":[function(a,u,o,h){a("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(o),o.default=class{on(e,t,c){let r=this.e||(this.e={});return(r[e]||(r[e]=[])).push({fn:t,ctx:c}),this}once(e,t,c){let r=this;function i(...n){r.off(e,i),t.apply(c,n)}return i._=t,this.on(e,i,c)}emit(e,...t){let c=((this.e||(this.e={}))[e]||[]).slice();for(let r=0;rd.destroy()),d.on(Hls.Events.ERROR,(f,p)=>{if(p.fatal)switch(p.type){case Hls.ErrorTypes.NETWORK_ERROR:console.warn("HLS network error, trying to recover..."),d.startLoad();break;case Hls.ErrorTypes.MEDIA_ERROR:console.warn("HLS media error, trying to recover..."),d.recoverMediaError();break;default:console.error("Fatal HLS error");break}})}else n.canPlayType("application/vnd.apple.mpegurl")&&(n.src=l)}},settings:[{html:"Speed",selector:[{html:"0.5x",value:.5},{html:"0.75x",value:.75},{html:"Normal",value:1,default:!0},{html:"1.25x",value:1.25},{html:"1.5x",value:1.5},{html:"2x",value:2}],onSelect(i){return V&&(V.playbackRate=i.value),i.html}}],icons:{loading:'
',state:''},cssVar:{"--art-theme":"#f5c518","--art-background-color":"#0f0f0f","--art-progress-color":"#f5c518","--art-control-background-color":"rgba(0, 0, 0, 0.8)","--art-control-height":"48px","--art-bottom-gap":"12px"}};return c.length>0&&(r.quality=c.map((i,n)=>({default:n===0,html:i,url:o}))),V=new Qt(r),V.on("ready",()=>{console.log("Player ready"),V.video&&(V.video.preload="auto")}),V.on("video:waiting",()=>{console.log("Buffering...")}),V.on("video:canplay",()=>{console.log("Can play")}),V.on("error",i=>{console.error("Player error:",i)}),V}function te(){V&&(V.destroy(),V=null)}const ee=4e3;function ye(a,u="info"){const o=document.getElementById("toastContainer");if(!o)return;const h=document.createElement("div");h.className=`toast toast--${u}`,h.innerHTML=` + + ${re(u)} + + ${ae(a)} + `,o.appendChild(h),setTimeout(()=>{h.style.animation="slideIn 0.3s ease reverse",setTimeout(()=>h.remove(),300)},ee)}function re(a){switch(a){case"success":return'';case"error":return'';default:return''}}function ae(a){if(!a)return"";const u=document.createElement("div");return u.textContent=a,u.innerHTML}const oe="modulepreload",ie=function(a){return"/"+a},Ct={},ne=function(u,o,h){let e=Promise.resolve();if(o&&o.length>0){document.getElementsByTagName("link");const c=document.querySelector("meta[property=csp-nonce]"),r=(c==null?void 0:c.nonce)||(c==null?void 0:c.getAttribute("nonce"));e=Promise.allSettled(o.map(i=>{if(i=ie(i),i in Ct)return;Ct[i]=!0;const n=i.endsWith(".css"),l=n?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${i}"]${l}`))return;const s=document.createElement("link");if(s.rel=n?"stylesheet":oe,n||(s.as="script"),s.crossOrigin="",s.href=i,r&&s.setAttribute("nonce",r),document.head.appendChild(s),n)return new Promise((d,f)=>{s.addEventListener("load",d),s.addEventListener("error",()=>f(new Error(`Unable to preload CSS for ${i}`)))})}))}function t(c){const r=new Event("vite:preloadError",{cancelable:!0});if(r.payload=c,window.dispatchEvent(r),!r.defaultPrevented)throw c}return e.then(c=>{for(const r of c||[])r.status==="rejected"&&t(r.reason);return u().catch(t)})};/*! Capacitor: https://capacitorjs.com/ - MIT License */var rt;(function(a){a.Unimplemented="UNIMPLEMENTED",a.Unavailable="UNAVAILABLE"})(rt||(rt={}));class jt extends Error{constructor(u,o,h){super(u),this.message=u,this.code=o,this.data=h}}const se=a=>{var u,o;return a!=null&&a.androidBridge?"android":!((o=(u=a==null?void 0:a.webkit)===null||u===void 0?void 0:u.messageHandlers)===null||o===void 0)&&o.bridge?"ios":"web"},le=a=>{const u=a.CapacitorCustomPlatform||null,o=a.Capacitor||{},h=o.Plugins=o.Plugins||{},e=()=>u!==null?u.name:se(a),t=()=>e()!=="web",c=s=>{const d=n.get(s);return!!(d!=null&&d.platforms.has(e())||r(s))},r=s=>{var d;return(d=o.PluginHeaders)===null||d===void 0?void 0:d.find(f=>f.name===s)},i=s=>a.console.error(s),n=new Map,l=(s,d={})=>{const f=n.get(s);if(f)return console.warn(`Capacitor plugin "${s}" already registered. Cannot register plugins twice.`),f.proxy;const p=e(),g=r(s);let v;const x=async()=>(!v&&p in d?v=typeof d[p]=="function"?v=await d[p]():v=d[p]:u!==null&&!v&&"web"in d&&(v=typeof d.web=="function"?v=await d.web():v=d.web),v),m=(E,C)=>{var I,L;if(g){const R=g==null?void 0:g.methods.find(w=>C===w.name);if(R)return R.rtype==="promise"?w=>o.nativePromise(s,C.toString(),w):(w,b)=>o.nativeCallback(s,C.toString(),w,b);if(E)return(I=E[C])===null||I===void 0?void 0:I.bind(E)}else{if(E)return(L=E[C])===null||L===void 0?void 0:L.bind(E);throw new jt(`"${s}" plugin is not implemented on ${p}`,rt.Unimplemented)}},y=E=>{let C;const I=(...L)=>{const R=x().then(w=>{const b=m(w,E);if(b){const T=b(...L);return C=T==null?void 0:T.remove,T}else throw new jt(`"${s}.${E}()" is not implemented on ${p}`,rt.Unimplemented)});return E==="addListener"&&(R.remove=async()=>C()),R};return I.toString=()=>`${E.toString()}() { [capacitor code] }`,Object.defineProperty(I,"name",{value:E,writable:!1,configurable:!1}),I},j=y("addListener"),k=y("removeListener"),$=(E,C)=>{const I=j({eventName:E},C),L=async()=>{const w=await I;k({eventName:E,callbackId:w},C)},R=new Promise(w=>I.then(()=>w({remove:L})));return R.remove=async()=>{console.warn("Using addListener() without 'await' is deprecated."),await L()},R},S=new Proxy({},{get(E,C){switch(C){case"$$typeof":return;case"toJSON":return()=>({});case"addListener":return g?$:j;case"removeListener":return k;default:return y(C)}}});return h[s]=S,n.set(s,{name:s,proxy:S,platforms:new Set([...Object.keys(d),...g?[p]:[]])}),S};return o.convertFileSrc||(o.convertFileSrc=s=>s),o.getPlatform=e,o.handleError=i,o.isNativePlatform=t,o.isPluginAvailable=c,o.registerPlugin=l,o.Exception=jt,o.DEBUG=!!o.DEBUG,o.isLoggingEnabled=!!o.isLoggingEnabled,o},ce=a=>a.Capacitor=le(a),kt=ce(typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}),gt=kt.registerPlugin;class $t{constructor(){this.listeners={},this.retainedEventArguments={},this.windowListeners={}}addListener(u,o){let h=!1;this.listeners[u]||(this.listeners[u]=[],h=!0),this.listeners[u].push(o);const t=this.windowListeners[u];t&&!t.registered&&this.addWindowListener(t),h&&this.sendRetainedArgumentsForEvent(u);const c=async()=>this.removeListener(u,o);return Promise.resolve({remove:c})}async removeAllListeners(){this.listeners={};for(const u in this.windowListeners)this.removeWindowListener(this.windowListeners[u]);this.windowListeners={}}notifyListeners(u,o,h){const e=this.listeners[u];if(!e){if(h){let t=this.retainedEventArguments[u];t||(t=[]),t.push(o),this.retainedEventArguments[u]=t}return}e.forEach(t=>t(o))}hasListeners(u){var o;return!!(!((o=this.listeners[u])===null||o===void 0)&&o.length)}registerWindowListener(u,o){this.windowListeners[o]={registered:!1,windowEventName:u,pluginEventName:o,handler:h=>{this.notifyListeners(o,h)}}}unimplemented(u="not implemented"){return new kt.Exception(u,rt.Unimplemented)}unavailable(u="not available"){return new kt.Exception(u,rt.Unavailable)}async removeListener(u,o){const h=this.listeners[u];if(!h)return;const e=h.indexOf(o);this.listeners[u].splice(e,1),this.listeners[u].length||this.removeWindowListener(this.windowListeners[u])}addWindowListener(u){window.addEventListener(u.windowEventName,u.handler),u.registered=!0}removeWindowListener(u){u&&(window.removeEventListener(u.windowEventName,u.handler),u.registered=!1)}sendRetainedArgumentsForEvent(u){const o=this.retainedEventArguments[u];o&&(delete this.retainedEventArguments[u],o.forEach(h=>{this.notifyListeners(u,h)}))}}const Mt=a=>encodeURIComponent(a).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape),Lt=a=>a.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent);class ue extends $t{async getCookies(){const u=document.cookie,o={};return u.split(";").forEach(h=>{if(h.length<=0)return;let[e,t]=h.replace(/=/,"CAP_COOKIE").split("CAP_COOKIE");e=Lt(e).trim(),t=Lt(t).trim(),o[e]=t}),o}async setCookie(u){try{const o=Mt(u.key),h=Mt(u.value),e=`; expires=${(u.expires||"").replace("expires=","")}`,t=(u.path||"/").replace("path=",""),c=u.url!=null&&u.url.length>0?`domain=${u.url}`:"";document.cookie=`${o}=${h||""}${e}; path=${t}; ${c};`}catch(o){return Promise.reject(o)}}async deleteCookie(u){try{document.cookie=`${u.key}=; Max-Age=0`}catch(o){return Promise.reject(o)}}async clearCookies(){try{const u=document.cookie.split(";")||[];for(const o of u)document.cookie=o.replace(/^ +/,"").replace(/=.*/,`=;expires=${new Date().toUTCString()};path=/`)}catch(u){return Promise.reject(u)}}async clearAllCookies(){try{await this.clearCookies()}catch(u){return Promise.reject(u)}}}gt("CapacitorCookies",{web:()=>new ue});const de=async a=>new Promise((u,o)=>{const h=new FileReader;h.onload=()=>{const e=h.result;u(e.indexOf(",")>=0?e.split(",")[1]:e)},h.onerror=e=>o(e),h.readAsDataURL(a)}),pe=(a={})=>{const u=Object.keys(a);return Object.keys(a).map(e=>e.toLocaleLowerCase()).reduce((e,t,c)=>(e[t]=a[u[c]],e),{})},fe=(a,u=!0)=>a?Object.entries(a).reduce((h,e)=>{const[t,c]=e;let r,i;return Array.isArray(c)?(i="",c.forEach(n=>{r=u?encodeURIComponent(n):n,i+=`${t}=${r}&`}),i.slice(0,-1)):(r=u?encodeURIComponent(c):c,i=`${t}=${r}`),`${h}&${i}`},"").substr(1):null,he=(a,u={})=>{const o=Object.assign({method:a.method||"GET",headers:a.headers},u),e=pe(a.headers)["content-type"]||"";if(typeof a.data=="string")o.body=a.data;else if(e.includes("application/x-www-form-urlencoded")){const t=new URLSearchParams;for(const[c,r]of Object.entries(a.data||{}))t.set(c,r);o.body=t.toString()}else if(e.includes("multipart/form-data")||a.data instanceof FormData){const t=new FormData;if(a.data instanceof FormData)a.data.forEach((r,i)=>{t.append(i,r)});else for(const r of Object.keys(a.data))t.append(r,a.data[r]);o.body=t;const c=new Headers(o.headers);c.delete("content-type"),o.headers=c}else(e.includes("application/json")||typeof a.data=="object")&&(o.body=JSON.stringify(a.data));return o};class me extends $t{async request(u){const o=he(u,u.webFetchExtra),h=fe(u.params,u.shouldEncodeUrlParams),e=h?`${u.url}?${h}`:u.url,t=await fetch(e,o),c=t.headers.get("content-type")||"";let{responseType:r="text"}=t.ok?u:{};c.includes("application/json")&&(r="json");let i,n;switch(r){case"arraybuffer":case"blob":n=await t.blob(),i=await de(n);break;case"json":i=await t.json();break;case"document":case"text":default:i=await t.text()}const l={};return t.headers.forEach((s,d)=>{l[d]=s}),{data:i,headers:l,status:t.status,url:t.url}}async get(u){return this.request(Object.assign(Object.assign({},u),{method:"GET"}))}async post(u){return this.request(Object.assign(Object.assign({},u),{method:"POST"}))}async put(u){return this.request(Object.assign(Object.assign({},u),{method:"PUT"}))}async patch(u){return this.request(Object.assign(Object.assign({},u),{method:"PATCH"}))}async delete(u){return this.request(Object.assign(Object.assign({},u),{method:"DELETE"}))}}gt("CapacitorHttp",{web:()=>new me});var Rt;(function(a){a.Dark="DARK",a.Light="LIGHT",a.Default="DEFAULT"})(Rt||(Rt={}));var Ft;(function(a){a.StatusBar="StatusBar",a.NavigationBar="NavigationBar"})(Ft||(Ft={}));class ge extends $t{async setStyle(){this.unavailable("not available for web")}async setAnimation(){this.unavailable("not available for web")}async show(){this.unavailable("not available for web")}async hide(){this.unavailable("not available for web")}}gt("SystemBars",{web:()=>new ge});var mt;(function(a){a.Heavy="HEAVY",a.Medium="MEDIUM",a.Light="LIGHT"})(mt||(mt={}));var At;(function(a){a.Success="SUCCESS",a.Warning="WARNING",a.Error="ERROR"})(At||(At={}));const qt=gt("Haptics",{web:()=>ne(()=>import("./web-Bp6c6Vk9.js"),[]).then(a=>new a.HapticsWeb)}),be=async()=>{try{await qt.impact({style:mt.Light})}catch{}},we=async()=>{try{await qt.impact({style:mt.Medium})}catch{}};class xe{constructor(){this.currentFocus=null,this.isEnabled=!1,this.selectors=[".video-card",".hero__btn",".slider-btn","#topSearchBtn",".nav-item",".category-card",".tab-btn",".episode-row",".recommendation-card"]}init(){this.isEnabled=!0,document.addEventListener("keydown",this.handleKey.bind(this)),document.addEventListener("mousemove",this.handleMouseMove.bind(this))}handleMouseMove(){this.currentFocus&&(this.currentFocus.blur(),this.currentFocus.classList.remove("keyboard-focused"),this.currentFocus=null)}handleKey(u){if(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"].includes(u.key)){if(u.preventDefault(),!this.currentFocus){this.focusFirstVisible();return}let o=null;switch(u.key){case"ArrowRight":o=this.moveHorizontal(1);break;case"ArrowLeft":o=this.moveHorizontal(-1);break;case"ArrowUp":o=this.moveVertical(-1);break;case"ArrowDown":o=this.moveVertical(1);break}o&&this.setFocus(o)}else u.key==="Enter"&&this.currentFocus&&this.currentFocus.click()}focusFirstVisible(){const u=document.querySelectorAll(".video-card");u.length>0&&this.setFocus(u[0])}setFocus(u){this.currentFocus&&this.currentFocus.classList.remove("keyboard-focused"),this.currentFocus=u,u.classList.add("keyboard-focused"),u.focus({preventScroll:!0}),u.scrollIntoView({behavior:"smooth",block:"center",inline:"center"})}moveHorizontal(u){if(!this.currentFocus)return null;const o=Array.from(document.querySelectorAll(this.selectors.join(","))),h=o.indexOf(this.currentFocus);if(h===-1)return null;const e=h+u;if(e>=0&&et.height*.5,c}return null}moveVertical(u){if(!this.currentFocus)return null;const o=this.currentFocus.getBoundingClientRect(),h=o.left+o.width/2,t=Array.from(document.querySelectorAll(this.selectors.join(","))).filter(i=>{if(i===this.currentFocus)return!1;const n=i.getBoundingClientRect();return u===1?n.top>=o.bottom-o.height*.2:n.bottom<=o.top+o.height*.2});if(t.length===0)return null;let c=null,r=1/0;return t.forEach(i=>{const n=i.getBoundingClientRect(),l=n.left+n.width/2;n.top+n.height/2;const s=Math.abs(n.top-o.top),d=Math.abs(l-h),f=Math.sqrt(Math.pow(s,2)+Math.pow(d,2));fthis.getCachedImage(d)))}}createCachedImage(e,r="",i=""){const s=document.createElement("img");return s.alt=r,s.className=i,s.loading="lazy",s.decoding="async",s.src='data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 450"%3E%3Crect fill="%23222"%3E%3C/rect%3E%3C/svg%3E',e&&this.getCachedImage(e).then(d=>{s.src=d}),s}async _cleanupCache(e){try{const r=await e.keys();if(r.length>te){const i=Math.floor(r.length*.2);for(let s=0;sd)return!0}return!1}function se(t){var s;const e=(t.quality||"").toLowerCase(),r=((s=t.episodes)==null?void 0:s.length)||0,i=(t.category||t.type||"").toLowerCase();return e.includes("trailer")||i.includes("trailer")?"trailer":r>1||i.includes("series")||i.includes("phim-bo")||e.includes("tập")||e.includes("ep")?"series":i.includes("hoathinh")||i.includes("animation")||i.includes("anime")?"animation":"movie"}function oe(t){var s;const e=t.quality||"";if(e.match(/(?:tập\s*)?(\d+)(?:\s*\/\s*(\d+))?/i))return e;const i=((s=t.episodes)==null?void 0:s.length)||0;return i>1?`${i} Tập`:null}function ne(t,e,r){var I;const i=document.createElement("div");i.className="video-card",i.dataset.videoId=t.id;const s=t.thumbnail||"",d=t.year||new Date().getFullYear(),m=ie(t),a=se(t),o=oe(t);let u=t.quality||"HD";u=u.replace(/(?:tập\s*)?\d+(?:\s*\/\s*\d+)?/gi,"").trim()||"HD",u.length>6&&(u="HD");const n=parseFloat(t.rating||0),c=n>=7,g=Math.round(n*10);let h="";n>0&&(h=` -
- ${n.toFixed(1)} -
- `);let f="";n>0&&(f=` -
- ${c?"🍅":"🥀"} - ${g}% -
- `);const x='data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 450"%3E%3Crect width="300" height="450" fill="%2314141c"/%3E%3C/svg%3E';let b="";m&&(b+='MỚI'),a==="trailer"?b+='TRAILER':a==="series"?b+='PHIM BỘ':a==="animation"&&(b+='HOẠT HÌNH'),i.innerHTML=` -
-
- ${G(t.title)} - - -
- ${b} -
- - -
- ${f} - ${h} - ${u} -
- - -
- ${d} - ${o?`${o}`:""} -
- - - ${t.progress&&t.progress.percentage>0?` -
-
-
- `:""} - - -
- -
-
-
- - -
- ${G(t.title)} -
- `;const y=i.querySelector(".video-card__img");if(y&&s){const B=new IntersectionObserver(Y=>{Y.forEach(J=>{J.isIntersecting&&(re.getCachedImage(s).then(Q=>{y.src=Q,y.classList.add("loaded")}).catch(()=>{y.src=s,y.onload=()=>y.classList.add("loaded"),y.onerror=()=>y.classList.add("loaded")}),B.unobserve(y))})},{rootMargin:"800px",threshold:0});B.observe(y)}return(I=i.querySelector('[data-action="play"]'))==null||I.addEventListener("click",B=>{B.stopPropagation(),e==null||e(t)}),i.addEventListener("click",()=>{e==null||e(t)}),i}function G(t){if(!t)return"";const e=document.createElement("div");return e.textContent=t,e.innerHTML}function le(t,e){let r;return function(...s){const d=()=>{clearTimeout(r),t(...s)};clearTimeout(r),r=setTimeout(d,e)}}function ce(t,e,r){if(!t||!e)return;const i=300;let s="";async function d(a){if(s=a,!a||a.length<2){e.classList.remove("active"),e.innerHTML="";return}try{const o=await k.searchRophim(a),u=(o==null?void 0:o.movies)||[];if(a!==s)return;u.length===0?e.innerHTML=` -
- No results found for "${$(a)}" -
- `:(e.innerHTML=u.map(n=>` -
- ${$(n.name||n.title)} -
-
${$(n.name||n.title)}
-
- ${n.quality?`${n.quality} • `:""} - ${n.year||""} -
-
-
- `).join(""),e.querySelectorAll(".search__result[data-video-slug]").forEach(n=>{n.addEventListener("click",()=>{const c=n.dataset.videoSlug;window.location.href=`/watch.html?id=${c}&slug=${c}`})})),e.classList.add("active")}catch(o){console.error("Search error:",o),e.innerHTML=` -
- Search failed. Please try again. -
- `,e.classList.add("active")}}const m=le(d,i);t.addEventListener("input",a=>{m(a.target.value.trim())}),document.addEventListener("click",a=>{t&&e&&!t.contains(a.target)&&!e.contains(a.target)&&e.classList.remove("active")}),t.addEventListener("keydown",a=>{a.key==="Escape"&&(t.blur(),e.classList.remove("active"))}),t.addEventListener("focus",()=>{t.value.trim().length>=2&&e.classList.add("active")})}function $(t){if(!t)return"";const e=document.createElement("div");return e.textContent=t,e.innerHTML}class de{constructor(){this.currentFocus=null,this.isEnabled=!1,this.selectors=[".video-card",".hero__btn",".slider-btn","#topSearchBtn"]}init(){this.isEnabled=!0,document.addEventListener("keydown",this.handleKey.bind(this)),document.addEventListener("mousemove",this.handleMouseMove.bind(this))}handleMouseMove(){this.currentFocus&&(this.currentFocus.blur(),this.currentFocus.classList.remove("keyboard-focused"),this.currentFocus=null)}handleKey(e){if(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"].includes(e.key)){if(e.preventDefault(),!this.currentFocus){this.focusFirstVisible();return}let r=null;switch(e.key){case"ArrowRight":r=this.moveHorizontal(1);break;case"ArrowLeft":r=this.moveHorizontal(-1);break;case"ArrowUp":r=this.moveVertical(-1);break;case"ArrowDown":r=this.moveVertical(1);break}r&&this.setFocus(r)}else e.key==="Enter"&&this.currentFocus&&this.currentFocus.click()}focusFirstVisible(){const e=document.querySelectorAll(".video-card");e.length>0&&this.setFocus(e[0])}setFocus(e){this.currentFocus&&this.currentFocus.classList.remove("keyboard-focused"),this.currentFocus=e,e.classList.add("keyboard-focused"),e.focus({preventScroll:!0}),e.scrollIntoView({behavior:"smooth",block:"center",inline:"center"})}moveHorizontal(e){if(!this.currentFocus)return null;const r=Array.from(document.querySelectorAll(this.selectors.join(","))),i=r.indexOf(this.currentFocus);if(i===-1)return null;const s=i+e;if(s>=0&&sd.height*.5,m}return null}moveVertical(e){if(!this.currentFocus)return null;const r=this.currentFocus.getBoundingClientRect(),i=r.left+r.width/2,d=Array.from(document.querySelectorAll(this.selectors.join(","))).filter(o=>{if(o===this.currentFocus)return!1;const u=o.getBoundingClientRect();return e===1?u.top>=r.bottom-r.height*.2:u.bottom<=r.top+r.height*.2});if(d.length===0)return null;let m=null,a=1/0;return d.forEach(o=>{const u=o.getBoundingClientRect(),n=u.left+u.width/2;u.top+u.height/2;const c=Math.abs(u.top-r.top),g=Math.abs(n-i),h=Math.sqrt(Math.pow(c,2)+Math.pow(g,2));h{const i=r.dataset.view===t;r.classList.toggle("active",i),r.classList.toggle("text-white",i),r.classList.toggle("text-gray-400",!i);const s=r.querySelector(".material-symbols-outlined");s&&(s.style.fontVariationSettings=i?"'FILL' 1":"'FILL' 0")})}async function q(){ce(l.searchInput,l.searchResults),l.mobileBottomNavButtons&&l.mobileBottomNavButtons.forEach(i=>{i.addEventListener("click",s=>{s.preventDefault();const d=i.dataset.view;if(d){if(l.mobileBottomNavButtons.forEach(m=>m.classList.remove("active")),i.classList.add("active"),d==="home")ye();else if(d==="search")if(window.innerWidth<768)try{R()}catch(m){console.error("Search render failed",m)}else l.searchWrapper.classList.add("active"),l.searchInput.focus();else d==="mylist"?window.innerWidth<768?z():H("mylist"):d==="downloads"?T("Downloads feature coming soon!","info"):d==="profile"?fe():d==="cinema"?(_("cinema"),L("cinema")):L(d);window.scrollTo({top:0,behavior:"smooth"})}})}),me(),await L("home"),await E();const e=new URLSearchParams(window.location.search).get("view");e&&window.innerWidth<768&&(e==="search"?R():e==="mylist"?z():e==="cinema"&&L("cinema")),new de().init(),"serviceWorker"in navigator&&window.addEventListener("load",()=>{navigator.serviceWorker.register("/sw.js")})}function E(t=null){const e=document.getElementById("heroTitle"),r=document.getElementById("heroDescription"),i=document.getElementById("heroBg"),s=document.getElementById("heroTag"),d=document.getElementById("heroTagContainer"),m=document.getElementById("heroPlayBtn"),a=document.getElementById("heroInfoBtn"),o=document.getElementById("heroContent"),u=t||p.featuredVideo||p.videos[0];u&&(i&&(i.style.opacity="0.5"),o&&(o.style.opacity="0"),setTimeout(()=>{e&&(e.textContent=u.name||u.title||"Featured Movie"),r&&(r.textContent=u.description||u.content||"Watch now on StreamFlix");const n=u.backdrop||u.poster_url||u.thumb_url||u.thumbnail||"";if(i&&n&&(i.style.backgroundImage=`url('${n}')`),s&&d){const c=u.genres||u.category;d.classList.remove("hidden"),c&&Array.isArray(c)&&c.length>0?s.textContent=c[0]:typeof c=="string"?s.textContent=c:s.textContent="#1 in Movies Today"}if(m){const c=m.cloneNode(!0);m.parentNode.replaceChild(c,m),c.addEventListener("click",()=>w(u))}if(a){const c=a.cloneNode(!0);a.parentNode.replaceChild(c,a),c.addEventListener("click",()=>U(u))}i&&(i.style.opacity="1"),o&&(o.style.opacity="1")},300),p.featuredVideo=u)}function ue(){p.heroInterval&&clearInterval(p.heroInterval),!(!p.heroMovies||p.heroMovies.length<=1)&&(p.heroInterval=setInterval(()=>{p.currentHeroIndex++,p.currentHeroIndex>=p.heroMovies.length&&(p.currentHeroIndex=0),E(p.heroMovies[p.currentHeroIndex])},8e3))}function me(){var a,o,u,n;const t=document.getElementById("backToTop"),e=()=>{const c=window.scrollY;l.mainHeader&&(c>100?(l.mainHeader.classList.add("scrolled"),l.mainHeader.style.backgroundColor="#141414"):(l.mainHeader.classList.remove("scrolled"),l.mainHeader.style.backgroundColor="transparent")),t&&(c>500?t.classList.add("visible"):t.classList.remove("visible"))};window.addEventListener("scroll",e,{passive:!0}),e(),t&&t.addEventListener("click",()=>{window.scrollTo({top:0,behavior:"smooth"})}),(a=l.navLinks)==null||a.forEach(c=>{c.addEventListener("click",g=>{g.preventDefault();const h=c.dataset.category;l.navLinks.forEach(f=>f.classList.remove("active")),c.classList.add("active"),p.currentCategory=h,S(h,!0)})}),(o=l.mobileNavItems)==null||o.forEach(c=>{c.addEventListener("click",g=>{g.preventDefault();const h=c.dataset.view;if(l.mobileNavItems.forEach(f=>f.classList.remove("active")),c.classList.add("active"),l.mobileNavItems.forEach(f=>{f.dataset.view===h&&f.classList.add("active")}),h==="home"){l.videoGrid.style.display="block";const f=document.getElementById("newHotContainer");f&&(f.style.display="none"),p.currentCategory="all",S("all",!0)}else if(["movies","series","animation","cinema"].includes(h)){l.videoGrid.style.display="block";const f=document.getElementById("newHotContainer");f&&(f.style.display="none"),p.currentCategory=h,S(h,!0)}else if(h==="history"){l.videoGrid.style.display="block";const f=document.getElementById("newHotContainer");f&&(f.style.display="none"),H()}else if(h==="search"){const f=document.getElementById("headerSearchBtn");f&&f.click()}window.scrollTo({top:0,behavior:"smooth"})})});const r=document.querySelectorAll(".netflix-header__nav-link");r.forEach(c=>{c.addEventListener("click",g=>{g.preventDefault();const h=c.dataset.view;r.forEach(x=>x.classList.remove("active")),c.classList.add("active"),l.mobileNavItems.forEach(x=>{x.classList.remove("active"),x.dataset.view===h&&x.classList.add("active")}),l.videoGrid.style.display="block";const f=document.getElementById("newHotContainer");f&&(f.style.display="none"),h==="home"?(p.currentCategory="all",S("all",!0)):["movies","series","animation","cinema"].includes(h)?(p.currentCategory=h,S(h,!0)):h==="history"&&H(),window.scrollTo({top:0,behavior:"smooth"})})});const i=document.getElementById("headerSearchBtn");i&&i.addEventListener("click",c=>{c.preventDefault();const g=document.getElementById("searchModal"),h=document.getElementById("searchInput");g&&(g.classList.add("active"),h&&setTimeout(()=>h.focus(),100))});const s=document.getElementById("mobileSearchBtn");s&&s.addEventListener("click",c=>{c.preventDefault();const g=document.getElementById("searchModal"),h=document.getElementById("searchInput");g&&(g.classList.add("active"),h&&setTimeout(()=>h.focus(),100))});const d=document.getElementById("closeSearch");d&&d.addEventListener("click",()=>{const c=document.getElementById("searchModal");c&&c.classList.remove("active")});const m=document.querySelectorAll(".nav-link");m.forEach(c=>{c.addEventListener("click",g=>{g.preventDefault();const h=c.dataset.view;m.forEach(f=>{f.classList.remove("active","text-white"),f.classList.add("text-gray-300")}),c.classList.add("active","text-white"),c.classList.remove("text-gray-300"),h==="home"?(p.currentCategory="all",L("home")):h==="series"?(p.currentCategory="series",L("series")):h==="movies"?(p.currentCategory="movies",L("movies")):h==="cinema"?(p.currentCategory="cinema",L("cinema")):h==="history"&&H(),window.scrollTo({top:0,behavior:"smooth"})})}),(u=l.closePlayer)==null||u.addEventListener("click",F),(n=l.modalBackdrop)==null||n.addEventListener("click",F),document.addEventListener("keydown",c=>{var g,h;if(c.key==="Escape"){(g=l.playerModal)!=null&&g.classList.contains("active")&&F(),(h=l.searchWrapper)!=null&&h.classList.contains("active")&&l.searchWrapper.classList.remove("active");const f=document.getElementById("searchModal");f!=null&&f.classList.contains("active")&&f.classList.remove("active")}})}async function S(t="all",e=!1){if(p.isLoading||(e&&(p.page=1,p.hasMore=!0,p.videos=[],l.videoGrid.innerHTML=""),!p.hasMore))return;p.isLoading=!0,C(p.page===1);const r=(s,d=12e3)=>Promise.race([s,new Promise((m,a)=>setTimeout(()=>a(new Error("Timeout")),d))]),i=document.getElementById("topSearchBtn");i&&i.addEventListener("click",s=>{s.preventDefault();const d=document.getElementById("searchModal"),m=document.getElementById("searchInput");d&&(d.classList.add("active"),m&&setTimeout(()=>m.focus(),100))});try{let s=null,d=!1;if(s||(s=await r(k.getRophimCatalog({category:t!=="all"?t:null,page:p.page,limit:24}),12e3)),s&&s.movies&&s.movies.length>0){const m=s.movies.map(n=>({id:n.id||`api_${Date.now()}_${Math.random()}`,title:n.title||"Unknown Title",thumbnail:n.thumbnail||"https://via.placeholder.com/300x450?text=No+Image",backdrop:n.backdrop||n.thumbnail||"https://via.placeholder.com/1920x1080?text=No+Backdrop",preview_url:n.preview_url||"",duration:n.duration||0,resolution:n.quality||"HD",category:n.category||"movies",year:n.year||new Date().getFullYear(),description:n.description||"",matchScore:Math.floor(Math.random()*15)+85,source_url:n.source_url,slug:n.slug,cast:n.cast||[],director:n.director,country:n.country,episodes:n.episodes||[]})),a=new Set(p.videos.map(n=>n.id)),o=m.filter(n=>!a.has(n.id));p.videos=[...p.videos,...o],p.page+=1,m.length<24,p.page===2?D(p.videos,!1):D(o,!0),ge(),v&&v.classList.remove("loading"),p.isLoading=!1,C(!1);return}else p.hasMore=!1,v&&(v.classList.remove("loading"),v.style.display="none"),p.isLoading=!1,C(!1)}catch(s){if(console.warn("API load failed:",s),p.page===1){T("Using offline mode","info");const d=K();p.videos=d,p.featuredVideo=d[0],D(d)}p.isLoading=!1,C(!1)}}function A(t,e,r="poster"){const i=document.createElement("section");i.className="flex flex-col gap-4 mb-12 relative";const s=document.createElement("h2");s.className="text-xl md:text-2xl font-bold text-white hover:text-primary cursor-pointer transition-colors flex items-center gap-2 group px-4 md:px-12",s.innerHTML=` - ${t} - arrow_forward_ios - `,i.appendChild(s);const d=document.createElement("div");d.className="relative group/slider";const m=document.createElement("button");m.className="absolute left-0 top-1/2 -translate-y-1/2 z-20 w-12 h-full bg-gradient-to-r from-black/80 to-transparent opacity-0 group-hover/slider:opacity-100 transition-opacity flex items-center justify-start pl-2",m.innerHTML='chevron_left';const a=document.createElement("button");a.className="absolute right-0 top-1/2 -translate-y-1/2 z-20 w-12 h-full bg-gradient-to-l from-black/80 to-transparent opacity-0 group-hover/slider:opacity-100 transition-opacity flex items-center justify-end pr-2",a.innerHTML='chevron_right';const o=document.createElement("div");o.className="flex gap-3 overflow-x-auto scroll-smooth no-scrollbar px-4 md:px-12 pb-4",e.forEach((n,c)=>{let g;r==="landscape"?g=pe(n):g=he(n,!1,0,"horizontal"),g.className=g.className.replace("w-full",""),g.style.minWidth="280px",g.style.maxWidth="380px",g.style.flex="0 0 auto",o.appendChild(g)});const u=600;return m.addEventListener("click",()=>{o.scrollBy({left:-u,behavior:"smooth"})}),a.addEventListener("click",()=>{o.scrollBy({left:u,behavior:"smooth"})}),d.appendChild(m),d.appendChild(o),d.appendChild(a),i.appendChild(d),i}function he(t,e=!1,r=0,i="vertical"){const s=document.createElement("div"),d=i==="horizontal"?"aspect-video":"aspect-[2/3]";s.className="w-full cursor-pointer snap-start group relative transition-all duration-300 ease-in-out hover:z-30 hover:scale-105";let m=t.poster_url||t.thumb_url||t.thumbnail||"";i==="horizontal"&&t.backdrop&&(m=t.backdrop);const a=t.name||t.title||"Untitled",o=t.year||"",u=t.quality||"HD",n=t.slug||t.id||"",c=t.matchScore||Math.floor(Math.random()*10+90),g=Math.floor(Math.random()*19+80);s.innerHTML=` -
-
- - -
- - -
- ${!e&&o===new Date().getFullYear().toString()?'NEW':""} - ${t.quality?`${t.quality.replace("FHD","HD")}`:""} - ${t.current_episode?`EP ${t.current_episode}`:""} -
- - - ${e?`${r}`:""} - - -
- - -
-
- - -
- -
- - -
-
- ${c}% Match - ${u} - ${o} -
- - -
-
- - local_pizza ${g}% - -
- ${t.genres&&t.genres.length>0?`${t.genres[0]}`:""} -
- -

- ${a} -

-
-
-
- `,s.addEventListener("click",b=>{b.target.closest("button")||w(t)});const h=s.querySelector(".btn-play");h&&h.addEventListener("click",b=>{b.stopPropagation(),w(t)});const f=s.querySelector(".btn-add-list");f&&f.addEventListener("click",b=>{if(b.stopPropagation(),window.historyService){const y=window.historyService.toggleFavorite(t),I=f.querySelector("span");y?(I.textContent="check",T("Added to My List","success")):(I.textContent="add",T("Removed from My List","info"))}});const x=s.querySelector(".btn-info");return x&&x.addEventListener("click",b=>{b.stopPropagation(),U(t)}),s}function pe(t){var m,a;const e=document.createElement("div");e.className="flex-none w-[280px] group/card cursor-pointer snap-start";const r=t.backdrop||t.thumb_url||t.thumbnail||"",i=t.name||t.title||"Untitled",s=((m=t.progress)==null?void 0:m.percentage)||0,d=(a=t.progress)!=null&&a.episode?`S${t.season||1}:E${t.progress.episode}`:"";return e.innerHTML=` -
-
-
- play_arrow -
-
-
-
-
-
- ${i} - ${d?`${d}`:""} -
- `,e.addEventListener("click",()=>w(t)),e}function D(t,e=!1){if(e||(l.videoGrid.innerHTML="",l.videoGrid.innerHTML="",l.videoGrid.className="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 gap-x-4 gap-y-10"),t.length===0&&!e){l.emptyState&&(l.emptyState.style.display="flex");return}l.emptyState&&(l.emptyState.style.display="none"),t.forEach(r=>{const i=ne(r,w);l.videoGrid.appendChild(i)})}let M,v=null,j=0;function ge(){if(!p.hasMore){v&&(v.classList.remove("loading"),v.style.display="none"),M&&M.disconnect();return}M&&M.disconnect(),document.querySelectorAll(".scroll-sentinel").forEach(r=>r.remove()),v=null;const t={root:null,rootMargin:"50px",threshold:0};M=new IntersectionObserver(r=>{r.forEach(i=>{const s=Date.now();s-j<1500||i.isIntersecting&&!p.isLoading&&p.hasMore&&(j=s,v&&v.classList.add("loading"),S(p.currentCategory))})},t),v=document.createElement("div"),v.className="scroll-sentinel",v.id="scrollSentinel";const e=document.getElementById("infinite-scroll-container");e?e.parentNode.insertBefore(v,e.nextSibling):l.videoGrid.appendChild(v),M.observe(v)}function U(t){O(t)}function H(t="history"){if(l.mainHeader&&(l.mainHeader.style.display=""),!window.historyService){console.error("HistoryService not initialized");return}l.videoGrid.innerHTML="",l.emptyState&&(l.emptyState.style.display="none");const e=document.querySelector(".view-tabs");e&&e.remove();const r=document.createElement("div");r.className="view-tabs",r.innerHTML=` - - - `,l.videoGrid.before(r),r.querySelectorAll(".view-tab").forEach(a=>{a.addEventListener("click",()=>{r.remove(),H(a.dataset.tab)})});let i=[];if(t==="history"?i=window.historyService.getHistory():i=window.historyService.getFavorites(),i.length===0){if(l.emptyState){l.emptyState.style.display="flex";const a=l.emptyState.querySelector("h2"),o=l.emptyState.querySelector("p");t==="history"?(a&&(a.textContent="No history yet"),o&&(o.textContent="Movies you watch will appear here.")):(a&&(a.textContent="My List is empty"),o&&(o.textContent="Add movies to your list to watch later."))}return}i.sort((a,o)=>{const u=a.timestamp||a.year||0;return(o.timestamp||o.year||0)-u});const s=i.map((a,o)=>({...a,id:a.id||a.slug,orientation:"horizontal"}));l.mainHeader&&(l.mainHeader.style.display="block");const m=A(t==="history"?"Continue Watching":"My List",s,"poster");l.videoGrid.appendChild(m)}function w(t){sessionStorage.setItem("currentVideo",JSON.stringify(t)),sessionStorage.setItem("allVideos",JSON.stringify(p.videos)),O(t)}function O(t){window.location.href=`/watch.html?slug=${t.slug}`}function F(){l.playerModal.classList.remove("active"),Z(),l.playerContainer.innerHTML="",p.currentVideo=null}function C(t){l.loading&&(l.loading.style.display=t?"flex":"none"),l.videoGrid&&(l.videoGrid.style.display=t?"none":"block")}async function L(t){const e=document.querySelector(".view-tabs");e&&e.remove(),l.mainHeader&&(l.mainHeader.style.display=""),C(!0),l.videoGrid.innerHTML="",l.videoGrid.className="space-y-12";const r={home:[{title:"Continue Watching",type:"history",limit:12,cardType:"landscape"},{title:"Cinema Releases",category:"phim-chieu-rap",limit:12,isHeroSource:!0},{title:"Top Rated",category:"phim-le",sort:"rating",limit:12},{title:"Action & Adventure",category:"hanh-dong",limit:12},{title:"Animation",category:"hoat-hinh",limit:12},{title:"Korean Hits",category:"han-quoc",limit:12},{title:"Horror & Thriller",category:"kinh-di",limit:12},{title:"Romance",category:"tinh-cam",limit:12}],series:[{title:"Popular TV Shows",category:"phim-bo",limit:12,isHeroSource:!0},{title:"Korean Dramas",category:"korean",limit:12},{title:"Chinese Dramas",category:"china",limit:12},{title:"Anime Series",category:"hoat-hinh",limit:12},{title:"Documentaries",category:"tai-lieu",limit:12}],movies:[{title:"Blockbuster Movies",category:"phim-le",sort:"year",limit:12,isHeroSource:!0},{title:"Action & Adventure",category:"action",limit:12},{title:"Comedy Films",category:"comedy",limit:12},{title:"Cinema Releases",category:"phim-chieu-rap",limit:12},{title:"Horror Movies",category:"kinh-di",limit:12},{title:"Sci-Fi & Fantasy",category:"vien-tuong",limit:12}],cinema:[{title:"Now Showing",category:"phim-chieu-rap",limit:12,isHeroSource:!0},{title:"New Releases",category:"phim-le",sort:"year",limit:12},{title:"Top Rated",category:"phim-le",sort:"rating",limit:12},{title:"Action Blockbusters",category:"action",limit:12},{title:"Animated Features",category:"hoat-hinh",limit:12}]},i=r[t]||r.home;if(t==="home"||t==="cinema"){const d=sessionStorage.getItem(`view_cache_${t}`);if(d&&(l.videoGrid.innerHTML=d,C(!1),l.heroContainer&&(l.heroContainer.style.display=""),l.videoGrid.children.length>0))return}const s=3;try{let d=null;for(let a=0;a0){d||(d=u),o.isHeroSource&&(!p.heroMovies||p.heroMovies.length===0)&&u.length>0&&(p.heroMovies=u.slice(0,10),p.featuredVideo=u[0],p.videos=u,p.currentHeroIndex=0,E(p.heroMovies[0]),ue());const n=A(o.title,u,o.cardType||"poster");l.videoGrid.appendChild(n)}}(t==="home"||t==="cinema")&&sessionStorage.setItem(`view_cache_${t}`,l.videoGrid.innerHTML);const m=new IntersectionObserver(async(a,o)=>{for(const u of a)if(u.isIntersecting){const n=u.target,c=parseInt(n.dataset.configIndex),g=i[c];o.unobserve(n),n.innerHTML='
';const h=await P(g);if(h&&h.length>0){const f=A(g.title,h,g.cardType||"poster");n.replaceWith(f),(t==="home"||t==="cinema")&&sessionStorage.setItem(`view_cache_${t}`,l.videoGrid.innerHTML)}else n.remove()}},{rootMargin:"800px"});for(let a=s;a${i[a].title}`,l.videoGrid.appendChild(o),m.observe(o)}if(!p.featuredVideo)if(d&&d.length>0)p.featuredVideo=d[0],p.videos=d,E();else try{const a=K();a&&a.length>0&&(p.featuredVideo=a[0],p.videos=a,E())}catch(a){console.warn("Demo content fallback failed",a)}l.videoGrid.children.length===0&&(l.videoGrid.innerHTML=` -
- movie -

No content available for this category

-
- `)}catch(d){console.error("Error rendering category view:",d),l.videoGrid.innerHTML=` -
- error -

Failed to load content. Please try again.

-
- `}C(!1)}async function P(t){try{if(t.type==="history")return window.historyService?window.historyService.getHistory().slice(0,t.limit).map(o=>({id:o.slug||o.id,title:o.title,thumbnail:o.thumbnail||o.poster_url,slug:o.slug,year:o.year,quality:o.quality||"HD",view_progress:o.view_progress||0})):[];const e={category:t.category||null,limit:t.limit||40,sort:t.sort||"year"};t.country&&(e.country=t.country),t.genre&&(e.genre=t.genre);const r=async a=>{const o=[1,2,3,4,5,6,7,8].map(n=>k.getRophimCatalog({...a,page:n}).catch(c=>({movies:[]})));return(await Promise.all(o)).flatMap(n=>n.movies||[])};let i=await r(e);if(i.length<20&&t.sort&&t.sort!=="modified"){const a=await r({...e,sort:"modified"});i=[...i,...a]}const s=[],d=new Set;for(const a of i){if(!a)continue;const o=a.slug||a.id;d.has(o)||(d.add(o),s.push({id:a.id||a.slug,title:a.title,thumbnail:a.thumbnail,poster_url:a.poster_url||a.thumbnail,backdrop:a.backdrop||a.poster_url||a.thumbnail,slug:a.slug,year:a.year,quality:a.quality||"HD",rating:a.rating,category:a.category}))}const m=Math.max(t.limit||40,48);return s.slice(0,m)}catch(e){return console.error(`Error fetching section "${t.title}":`,e),[]}}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",q):q();function K(){const t="https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",e={VENOM:"https://image.tmdb.org/t/p/w500/aosm8NMQ3UyoBVpSxyimorCQykC.jpg",SQUID:"https://images.unsplash.com/photo-1536440136628-849c177e76a1?w=800&auto=format&fit=crop",ARCANE:"https://images.unsplash.com/photo-1542751371-adc38448a05e?w=800&auto=format&fit=crop",PENGUIN:"https://images.unsplash.com/photo-1478720568477-152d9b164e63?w=800&auto=format&fit=crop",GLADIATOR:"https://images.unsplash.com/photo-1565060416-522204c35613?w=800&auto=format&fit=crop",MOANA:"https://images.unsplash.com/photo-1507525428034-b723cf961d3e?w=800&auto=format&fit=crop",WICKED:"https://images.unsplash.com/photo-1518709268805-4e9042af9f23?w=800&auto=format&fit=crop",DBZ:"https://images.unsplash.com/photo-1578632767115-351597cf2477?w=800&auto=format&fit=crop"};return[{id:"d1",title:"Venom: The Last Dance",thumbnail:e.VENOM,backdrop:"https://image.tmdb.org/t/p/original/3V4kLQg0kSqPLctI5ziYWabAZYF.jpg",preview_url:t,duration:7200,resolution:"4K",category:"action",year:2024,matchScore:98,director:"Kelly Marcel",country:"USA",cast:["Tom Hardy","Chiwetel Ejiofor","Juno Temple"],description:"Eddie and Venom are on the run. Hunted by both of their worlds and with the net closing in, the duo are forced into a devastating decision.",episodes:[]},{id:"d2",title:"Squid Game Season 2",thumbnail:e.SQUID,backdrop:e.SQUID,preview_url:"https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4",duration:3600,resolution:"HD",category:"series",year:2024,matchScore:99,director:"Hwang Dong-hyuk",country:"Korea",cast:["Lee Jung-jae","Lee Byung-hun","Wi Ha-jun"],description:"Gi-hun returns to the death games after three years with a new resolution: to find the people behind and to put an end to the sport.",episodes:[{number:1,title:"Red Light, Green Light",url:t},{number:2,title:"The Man with the Umbrella",url:t},{number:3,title:"Stick to the Team",url:t}]},{id:"d3",title:"Arcane Season 2",thumbnail:e.ARCANE,backdrop:e.ARCANE,preview_url:"https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerBlazes.mp4",duration:2400,resolution:"4K",category:"anime",year:2024,matchScore:97,director:"Christian Linke",country:"USA, France",cast:["Hailee Steinfeld","Ella Purnell","Katie Leung"],description:"As conflict between Piltover and Zaun reaches a boiling point, Jinx and Vi must decide what kind of future they are fighting for.",episodes:[{number:1,title:"Heavy Is the Crown",url:t},{number:2,title:"Watch It All Burn",url:t},{number:3,title:"Finally Got It Right",url:t}]},{id:"d4",title:"The Penguin",thumbnail:e.PENGUIN,backdrop:e.PENGUIN,preview_url:"https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerEscapes.mp4",duration:3600,resolution:"HD",category:"series",year:2024,matchScore:95,director:"Craig Zobel",country:"USA",cast:["Colin Farrell","Cristin Milioti","Rhenzy Feliz"],description:"Following the events of The Batman, Oz Cobb makes a play for power in the underworld of Gotham City.",episodes:[]},{id:"d5",title:"Gladiator II",thumbnail:e.GLADIATOR,backdrop:e.GLADIATOR,preview_url:"https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerFun.mp4",duration:8400,resolution:"4K",category:"action",year:2024,matchScore:96,director:"Ridley Scott",country:"USA, UK",cast:["Paul Mescal","Pedro Pascal","Denzel Washington"],description:"Years after witnessing the death of the revered hero Maximus at the hands of his uncle, Lucius is forced to enter the Colosseum.",episodes:[]},{id:"d6",title:"Moana 2",thumbnail:e.MOANA,backdrop:e.MOANA,preview_url:"https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerJoyrides.mp4",duration:6e3,resolution:"HD",category:"theater",year:2024,matchScore:94,director:"David G. Derrick Jr.",country:"USA",cast:["Auliʻi Cravalho","Dwayne Johnson","Alan Tudyk"],description:"After receiving an unexpected call from her wayfinding ancestors, Moana must journey to the far seas of Oceania.",episodes:[]},{id:"d7",title:"Wicked",thumbnail:e.WICKED,backdrop:e.WICKED,preview_url:"https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerMeltdowns.mp4",duration:9e3,resolution:"4K",category:"theater",year:2024,matchScore:93,director:"Jon M. Chu",country:"USA",cast:["Cynthia Erivo","Ariana Grande","Jeff Goldblum"],description:"Elphaba, a misunderstood young woman with green skin, and Glinda, a popular blonde, forge an unlikely friendship.",episodes:[]},{id:"d8",title:"Dragon Ball Daima",thumbnail:e.DBZ,backdrop:e.DBZ,preview_url:"https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/Sintel.mp4",duration:1440,resolution:"HD",category:"anime",year:2024,matchScore:98,director:"Yoshitaka Yashima",country:"Japan",cast:["Masako Nozawa","Ryō Horikawa"],description:"Goku and his friends are turned small due to a conspiracy. To fix things, they head off to a new world.",episodes:[{number:1,title:"Conspiracy",url:t}]}]}function fe(){l.mainHeader&&(l.mainHeader.style.display="");const t=document.getElementById("heroContainer");t&&(t.style.display="",E()),_("profile"),l.videoGrid.innerHTML="",l.videoGrid.className="profile-view pb-24 bg-background-light dark:bg-background-dark min-h-screen";const e=` - -
- -

Profile

- -
- -
- -
-
-
-
-
- edit -
-
-

Isabella Hall

- -
- - -
-
-

42

-

Movies

-
-
-

128h

-

Streamed

-
-
-

15

-

Reviews

-
-
- - -
- - - - - -
- -

Version 4.12.0

-
-
- `;if(l.videoGrid.innerHTML=e,window.historyService){const r=window.historyService.getHistory().slice(0,10);if(r.length>0){const i=document.getElementById("profileHistoryContainer"),s=A("Continue Watching",r,"landscape");i.appendChild(s)}}}async function ye(){l.mainHeader&&(l.mainHeader.style.display="");const t=document.getElementById("heroContainer");if(t&&(t.style.display=""),_("home"),window.innerWidth<768){document.querySelectorAll("footer").forEach(r=>r.style.display="none");const e=document.getElementById("searchModal");e&&e.classList.remove("active")}else document.querySelectorAll("footer").forEach(e=>e.style.display="");await L("home")}async function R(){l.mainHeader&&(l.mainHeader.style.display="");const t=document.getElementById("heroContainer");t&&(t.style.display="",E()),document.querySelectorAll("footer").forEach(o=>o.style.display="none");const e=document.getElementById("searchModal");e&&e.classList.remove("active"),_("search"),l.videoGrid.innerHTML="",l.videoGrid.className="mobile-search-view bg-background-light dark:bg-background-dark";const r=` - -
-
-
-
- search -
- -
- mic -
-
- -
- -
- - - - - -
-
- - -
-
-

Top Searches

-
-
- -
-

Recommended for You

-
-
-
- `;l.videoGrid.innerHTML=r;const i=document.getElementById("mobileSearchInput"),s=document.getElementById("mobileSearchResults");let d=null;i&&s&&(i.addEventListener("input",o=>{clearTimeout(d);const u=o.target.value.trim();d=setTimeout(async()=>{if(!(u.length<2)){s.innerHTML='
';try{const n=await k.searchRophim(u);if(n&&n.movies&&n.movies.length>0){s.innerHTML=` -

Results for "${u}"

-
- `;const c=s.querySelector(".grid");n.movies.forEach(g=>{const h=document.createElement("div");h.className="relative group aspect-[2/3] overflow-hidden rounded-lg cursor-pointer",h.innerHTML=` -
-
-
-

${g.title}

-
-
- `,h.addEventListener("click",()=>w(g)),c.appendChild(h)})}else s.innerHTML=` -
- search_off -

No results for "${u}"

-
- `}catch(n){console.error("Mobile search failed:",n),s.innerHTML='
Search failed. Try again.
'}}},300)}),i.focus());const m=document.getElementById("mobileSearchCancel");m&&m.addEventListener("click",()=>{const o=document.getElementById("mobileSearchInput");o&&(o.value="",o.focus()),R()});try{const o=await k.getRophimCatalog({category:"trending",limit:5});if(o&&o.movies){const n=document.getElementById("topSearchesList");o.movies.forEach(c=>{const g=document.createElement("div");g.className="group flex items-center gap-3 px-4 py-2 hover:bg-gray-100 dark:hover:bg-white/5 cursor-pointer transition-colors",g.innerHTML=` -
-
-
-
-

${c.title}

-

${c.year||"2024"}

-
-
- play_circle -
- `,g.addEventListener("click",()=>w(c)),n.appendChild(g)})}const u=await k.getRophimCatalog({category:"phim-le",limit:9});if(u&&u.movies){const n=document.getElementById("recommendedGrid");u.movies.forEach(c=>{const g=document.createElement("div");g.className="relative group aspect-[2/3] overflow-hidden rounded-lg cursor-pointer",g.innerHTML=` -
- `,g.addEventListener("click",()=>w(c)),n.appendChild(g)})}}catch(o){console.error("Failed to load mobile search content",o)}const a=document.querySelectorAll(".search-chip");a.forEach(o=>{o.addEventListener("click",async()=>{var g;const u=o.dataset.genre;if(!u)return;a.forEach(h=>{h.classList.remove("active","bg-white","text-black"),h.classList.add("bg-gray-200","dark:bg-surface-dark");const f=h.querySelector("p");f&&(f.classList.remove("font-bold"),f.classList.add("font-medium","text-slate-700","dark:text-gray-300"))}),o.classList.add("active","bg-white","text-black"),o.classList.remove("bg-gray-200","dark:bg-surface-dark");const n=o.querySelector("p");n&&(n.classList.add("font-bold"),n.classList.remove("font-medium","text-slate-700","dark:text-gray-300"));const c=document.getElementById("mobileSearchResults");if(c){c.innerHTML='
';try{const h=await k.getRophimCatalog({category:u,limit:12});if(h&&h.movies&&h.movies.length>0){const f=((g=o.querySelector("p"))==null?void 0:g.textContent)||u;c.innerHTML=` -

${f}

-
- `;const x=c.querySelector(".grid");h.movies.forEach(b=>{const y=document.createElement("div");y.className="relative group aspect-[2/3] overflow-hidden rounded-lg cursor-pointer",y.innerHTML=` -
- `,y.addEventListener("click",()=>w(b)),x.appendChild(y)})}else c.innerHTML='

No results found

'}catch(h){console.error("Genre filter error:",h),c.innerHTML='

Failed to load content

'}}})})}async function z(){l.mainHeader&&(l.mainHeader.style.display="");const t=document.getElementById("heroContainer");t&&(t.style.display="",E()),document.querySelectorAll("footer").forEach(m=>m.style.display="none");const e=document.getElementById("searchModal");e&&e.classList.remove("active"),_("mylist");const r=window.historyService?window.historyService.getFavorites():[];l.videoGrid.innerHTML="",l.videoGrid.className="mobile-mylist-view min-h-screen bg-background-dark pb-24";const i=` - -
-
-

My List

- -
- -
- - - - -
-
- - -
-
-
- `;l.videoGrid.innerHTML=i;const s=document.getElementById("mylistGrid");if(r.length>0)r.forEach(m=>{const a=document.createElement("div");a.className="group relative flex flex-col gap-2 cursor-pointer",a.innerHTML=` -
-
-
-
- `,a.addEventListener("click",()=>w(m)),s.appendChild(a)});else try{const m=await k.getRophimCatalog({category:"trending",limit:12});m&&m.movies&&m.movies.forEach((a,o)=>{const u=document.createElement("div");u.className="group relative flex flex-col gap-2 cursor-pointer",u.innerHTML=` -
-
- ${o===0?'
New
':""} -
-
- `,u.addEventListener("click",()=>w(a)),s.appendChild(u)})}catch(m){console.error("Failed to load my list content",m)}const d=document.querySelectorAll(".mylist-chip");d.forEach(m=>{m.addEventListener("click",async()=>{const a=m.dataset.filter,o=m.dataset.category;if(!a||!o)return;d.forEach(c=>{c.classList.remove("active","bg-white"),c.classList.add("bg-surface-dark");const g=c.querySelector("p");g&&(g.classList.remove("font-bold","text-black"),g.classList.add("font-medium","text-gray-200"))}),m.classList.add("active","bg-white"),m.classList.remove("bg-surface-dark");const u=m.querySelector("p");u&&(u.classList.add("font-bold","text-black"),u.classList.remove("font-medium","text-gray-200"));const n=document.getElementById("mylistGrid");if(n){n.innerHTML='
';try{const c=await k.getRophimCatalog({category:o,limit:12});n.innerHTML="",c&&c.movies&&c.movies.length>0?c.movies.forEach((g,h)=>{const f=document.createElement("div");f.className="group relative flex flex-col gap-2 cursor-pointer",f.innerHTML=` -
-
- ${h===0?'
New
':""} -
-
- `,f.addEventListener("click",()=>w(g)),n.appendChild(f)}):n.innerHTML='

No content found

'}catch(c){console.error("Filter error:",c),n.innerHTML='

Failed to load content

'}}})})} diff --git a/backend/static/assets/main-xeQDVOBN.js b/backend/static/assets/main-xeQDVOBN.js new file mode 100644 index 0000000..ba1560d --- /dev/null +++ b/backend/static/assets/main-xeQDVOBN.js @@ -0,0 +1,392 @@ +import{a as L,r as ie,h as R,s as N,K as se,b as oe,d as ne}from"./keyboard-nav-CZ5sEhKF.js";async function le(){try{console.log("📂 Loading themed categories...");const t=await(await fetch("/api/rophim/categories/all")).json();return t&&t.categories?(console.log(`✓ Loaded ${Object.keys(t.categories).length} category sections`),t.categories):null}catch(e){return console.error("Error loading categories:",e),null}}function J(e){const t=document.createElement("div");return t.className="video-card__ranking",e<=3&&t.classList.add(`video-card__ranking--${e}`),t.textContent=`#${e}`,t}function Q(e){if(!e)return null;const t=document.createElement("div");t.className="video-card__badge";const n=e.toUpperCase();return n.includes("HOT")?t.classList.add("video-card__badge--hot"):n.includes("NEW")?t.classList.add("video-card__badge--new"):n.includes("CINEMA")?t.classList.add("video-card__badge--cinema"):n.includes("FULL")&&t.classList.add("video-card__badge--full"),t.textContent=n,t}function ce(e,t){if(!e)return e;const n=e.querySelector(".video-card__container");if(!n)return e;if(t.badge){const a=Q(t.badge);a&&n.appendChild(a)}if(t.ranking){const a=J(t.ranking);n.appendChild(a)}return e}typeof window<"u"&&(window.categorySystem={loadCategories:le,createRankingBadge:J,createQualityBadge:Q,enhanceVideoCardWithBadges:ce});const D="kvstream-images-v1",de=500;class me{constructor(){this.memoryCache=new Map,this.cacheEnabled="caches"in window,this.pendingRequests=new Map}async getCachedImage(t){if(!t||!this.cacheEnabled)return t;if(this.memoryCache.has(t))return this.memoryCache.get(t);if(this.pendingRequests.has(t))return this.pendingRequests.get(t);const n=this._fetchAndCache(t);this.pendingRequests.set(t,n);try{return await n}finally{this.pendingRequests.delete(t)}}async _fetchAndCache(t){try{const n=await caches.open(D),a=await n.match(t);if(a){const c=await a.blob(),m=URL.createObjectURL(c);return this.memoryCache.set(t,m),m}const i=await fetch(t,{mode:"cors",credentials:"omit"});if(i.ok){const c=i.clone();n.put(t,c);const m=await i.blob(),r=URL.createObjectURL(m);return this.memoryCache.set(t,r),this._cleanupCache(n),r}}catch{console.warn("Image cache failed:",t)}return t}async preloadImages(t){if(!t||t.length===0)return;const n=6;for(let a=0;athis.getCachedImage(c)))}}createCachedImage(t,n="",a=""){const i=document.createElement("img");return i.alt=n,i.className=a,i.loading="lazy",i.decoding="async",i.src='data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 450"%3E%3Crect fill="%23222"%3E%3C/rect%3E%3C/svg%3E',t&&this.getCachedImage(t).then(c=>{i.src=c}),i}async _cleanupCache(t){try{const n=await t.keys();if(n.length>de){const a=Math.floor(n.length*.2);for(let i=0;ic)return!0}return!1}function he(e){var i;const t=(e.quality||"").toLowerCase(),n=((i=e.episodes)==null?void 0:i.length)||0,a=(e.category||e.type||"").toLowerCase();return t.includes("trailer")||a.includes("trailer")?"trailer":n>1||a.includes("series")||a.includes("phim-bo")||t.includes("tập")||t.includes("ep")?"series":a.includes("hoathinh")||a.includes("animation")||a.includes("anime")?"animation":"movie"}function ge(e){var i;const t=e.quality||"";if(t.match(/(?:tập\s*)?(\d+)(?:\s*\/\s*(\d+))?/i))return t;const a=((i=e.episodes)==null?void 0:i.length)||0;return a>1?`${a} Tập`:null}function fe(e,t,n){var j;const a=document.createElement("div");a.className="video-card",a.dataset.videoId=e.id;const i=e.thumbnail||"",c=L.getProxyUrl(i,200),m=e.year||new Date().getFullYear(),r=pe(e),s=he(e),u=ge(e);let l=e.quality||"HD";l=l.replace(/(?:tập\s*)?\d+(?:\s*\/\s*\d+)?/gi,"").trim()||"HD",l.length>6&&(l="HD");const h=parseFloat(e.rating||0),d=h>=7,f=Math.round(h*10);let g="";h>0&&(g=` +
+ ${h.toFixed(1)} +
+ `);let y="";h>0&&(y=` +
+ ${d?"🍅":"🥀"} + ${f}% +
+ `);const v='data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 450"%3E%3Crect width="300" height="450" fill="%2314141c"/%3E%3C/svg%3E';let w="";r&&(w+='MỚI'),s==="trailer"?w+='TRAILER':s==="series"?w+='PHIM BỘ':s==="animation"&&(w+='HOẠT HÌNH'),a.innerHTML=` +
+
+ ${z(e.title)} + + +
+ ${w} +
+ + +
+ ${y} + ${g} + ${l} +
+ + +
+ ${m} + ${u?`${u}`:""} +
+ + + ${e.progress&&e.progress.percentage>0?` +
+
+
+ `:""} + + +
+ +
+
+
+ + +
+ ${z(e.title)} +
+ `;const x=a.querySelector(".video-card__img");if(x&&c){const H=new IntersectionObserver(te=>{te.forEach(ae=>{ae.isIntersecting&&(ue.getCachedImage(c).then(re=>{x.src=re,x.classList.add("loaded")}).catch(()=>{x.src=c,x.onload=()=>x.classList.add("loaded"),x.onerror=()=>x.classList.add("loaded")}),H.unobserve(x))})},{rootMargin:"800px",threshold:0});H.observe(x)}return(j=a.querySelector('[data-action="play"]'))==null||j.addEventListener("click",H=>{H.stopPropagation(),t==null||t(e)}),a.addEventListener("click",()=>{t==null||t(e)}),a}function z(e){if(!e)return"";const t=document.createElement("div");return t.textContent=e,t.innerHTML}function ye(e,t){let n;return function(...i){const c=()=>{clearTimeout(n),e(...i)};clearTimeout(n),n=setTimeout(c,t)}}function ve(e,t,n){if(!e||!t)return;const a=300;let i="";async function c(r){if(i=r,!r||r.length<2){t.classList.remove("active"),t.innerHTML="";return}try{const s=await L.searchRophim(r),u=(s==null?void 0:s.movies)||[];if(r!==i)return;u.length===0?t.innerHTML=` +
+ No results found for "${G(r)}" +
+ `:(t.innerHTML=u.map(l=>{const h=L.getProxyUrl(l.poster_url||l.thumb_url||l.thumbnail,80);return` +
+ ${G(l.name||l.title)} +
+
${G(l.name||l.title)}
+
+ ${l.quality?`${l.quality} • `:""} + ${l.year||""} +
+
+
+ `}).join(""),t.querySelectorAll(".search__result[data-video-slug]").forEach(l=>{l.addEventListener("click",()=>{const h=l.dataset.videoSlug;window.location.href=`/watch.html?id=${h}&slug=${h}`})})),t.classList.add("active")}catch(s){console.error("Search error:",s),t.innerHTML=` + < div class="search__result" style = "color: var(--color-error);" > + Search failed. Please try again. + + `,t.classList.add("active")}}const m=ye(c,a);e.addEventListener("input",r=>{m(r.target.value.trim())}),document.addEventListener("click",r=>{e&&t&&!e.contains(r.target)&&!t.contains(r.target)&&t.classList.remove("active")}),e.addEventListener("keydown",r=>{r.key==="Escape"&&(e.blur(),t.classList.remove("active"))}),e.addEventListener("focus",()=>{e.value.trim().length>=2&&t.classList.add("active")})}function G(e){if(!e)return"";const t=document.createElement("div");return t.textContent=e,t.innerHTML}var F;(function(e){e.Dark="DARK",e.Light="LIGHT",e.Default="DEFAULT"})(F||(F={}));var W;(function(e){e.None="NONE",e.Slide="SLIDE",e.Fade="FADE"})(W||(W={}));const O=ie("StatusBar"),M={elements:{overlay:document.getElementById("splash-screen"),bar:document.getElementById("loading-bar"),text:document.getElementById("loading-text")},progress:0,isFinished:!1,update(e,t){this.isFinished||(this.progress=Math.min(e,100),this.elements.bar&&(this.elements.bar.style.width=`${this.progress}%`),this.elements.text&&t&&(this.elements.text.textContent=t),this.progress>=100&&this.finish())},finish(){this.isFinished||(this.isFinished=!0,setTimeout(()=>{this.elements.overlay&&(this.elements.overlay.classList.add("fade-out"),setTimeout(()=>this.elements.overlay.remove(),1e3))},500))}},p={videos:[],currentCategory:"all",currentVideo:null,isLoading:!1,featuredVideo:null,heroMovies:[],currentHeroIndex:0,heroInterval:null,page:1,hasMore:!0},o={videoGrid:document.getElementById("videoGrid")||document.getElementById("mainContent"),mainContent:document.getElementById("mainContent"),loading:document.getElementById("loading"),emptyState:document.getElementById("emptyState"),categories:document.getElementById("categories"),mainHeader:document.getElementById("mainHeader"),searchWrapper:document.getElementById("searchWrapper"),searchToggle:document.getElementById("searchToggle"),searchInput:document.getElementById("searchInput"),searchResults:document.getElementById("searchResults"),navLinks:document.querySelectorAll(".header__nav-link"),playerModal:document.getElementById("playerModal"),playerContainer:document.getElementById("playerContainer"),playerTitle:document.getElementById("playerTitle"),playerMeta:document.getElementById("playerMeta"),closePlayer:document.getElementById("closePlayer"),modalBackdrop:document.getElementById("modalBackdrop"),mobileNavItems:document.querySelectorAll(".mobile-nav__item, .sidebar__nav-item"),mobileBottomNavButtons:document.querySelectorAll("#mobileBottomNav .nav-item")};function A(e){document.querySelectorAll("#mobileBottomNav .nav-item").forEach(n=>{const a=n.dataset.view===e;n.classList.toggle("active",a),n.classList.toggle("text-white",a),n.classList.toggle("text-gray-400",!a);const i=n.querySelector(".material-symbols-outlined");i&&(i.style.fontVariationSettings=a?"'FILL' 1":"'FILL' 0")})}async function U(){M.update(10,"Initializing services..."),ve(o.searchInput,o.searchResults),M.update(20,"Setting up navigation..."),o.mobileBottomNavButtons&&o.mobileBottomNavButtons.forEach(a=>{a.addEventListener("click",i=>{i.preventDefault();const c=a.dataset.view;if(c){if(o.mobileBottomNavButtons.forEach(m=>m.classList.remove("active")),a.classList.add("active"),R(),c==="home")Ce();else if(c==="search")if(window.innerWidth<768)try{P()}catch(m){console.error("Search render failed",m)}else o.searchWrapper.classList.add("active"),o.searchInput.focus();else c==="mylist"?window.innerWidth<768?Y():_("mylist"):c==="downloads"?N("Downloads feature coming soon!","info"):c==="profile"?Ee():c==="cinema"?(A("cinema"),E("cinema")):E(c);window.scrollTo({top:0,behavior:"smooth"})}})}),xe(),M.update(40,"Fetching movie catalog...");try{await E("home")}catch(a){console.error("Home render failed",a)}M.update(70,"Preparing featured content...");try{await C()}catch(a){console.error("Hero render failed",a)}M.update(90,"Applying final touches...");const t=new URLSearchParams(window.location.search).get("view");t&&window.innerWidth<768&&(t==="search"?P():t==="mylist"?Y():t==="cinema"&&E("cinema")),new se().init(),"serviceWorker"in navigator&&window.addEventListener("load",()=>{navigator.serviceWorker.register("/sw.js")}),M.update(100,"Welcome to StreamFlix");try{await O.setStyle({style:F.Dark}),await O.setBackgroundColor({color:"#141414"})}catch{}}function C(e=null){const t=document.getElementById("heroTitle"),n=document.getElementById("heroDescription"),a=document.getElementById("heroBg"),i=document.getElementById("heroTag"),c=document.getElementById("heroTagContainer"),m=document.getElementById("heroPlayBtn"),r=document.getElementById("heroInfoBtn"),s=document.getElementById("heroContent"),u=e||p.featuredVideo||p.videos[0];u&&(a&&(a.style.opacity="0.5"),s&&(s.style.opacity="0"),setTimeout(()=>{t&&(t.textContent=u.name||u.title||"Featured Movie"),n&&(n.textContent=u.description||u.content||"Watch now on StreamFlix");const l=u.backdrop||u.poster_url||u.thumb_url||u.thumbnail||"";if(a&&l&&(a.style.backgroundImage=`url('${l}')`),i&&c){const h=u.genres||u.category;c.classList.remove("hidden"),h&&Array.isArray(h)&&h.length>0?i.textContent=h[0]:typeof h=="string"?i.textContent=h:i.textContent="#1 in Movies Today"}if(m){const h=m.cloneNode(!0);m.parentNode.replaceChild(h,m),h.addEventListener("click",()=>{oe(),k(u)})}if(r){const h=r.cloneNode(!0);r.parentNode.replaceChild(h,r),h.addEventListener("click",()=>Z(u))}a&&(a.style.opacity="1"),s&&(s.style.opacity="1")},300),p.featuredVideo=u)}function be(){p.heroInterval&&clearInterval(p.heroInterval),!(!p.heroMovies||p.heroMovies.length<=1)&&(p.heroInterval=setInterval(()=>{p.currentHeroIndex++,p.currentHeroIndex>=p.heroMovies.length&&(p.currentHeroIndex=0),C(p.heroMovies[p.currentHeroIndex])},8e3))}function xe(){var s,u,l,h;const e=document.getElementById("backToTop"),t=()=>{const d=window.scrollY;o.mainHeader&&(d>100?(o.mainHeader.classList.add("scrolled"),o.mainHeader.style.backgroundColor="#141414"):(o.mainHeader.classList.remove("scrolled"),o.mainHeader.style.backgroundColor="transparent")),e&&(d>500?e.classList.add("visible"):e.classList.remove("visible"))};window.addEventListener("scroll",t,{passive:!0}),t(),e&&e.addEventListener("click",()=>{window.scrollTo({top:0,behavior:"smooth"})}),(s=o.navLinks)==null||s.forEach(d=>{d.addEventListener("click",f=>{f.preventDefault();const g=d.dataset.category;o.navLinks.forEach(y=>y.classList.remove("active")),d.classList.add("active"),p.currentCategory=g,B(g,!0)})}),(u=o.mobileNavItems)==null||u.forEach(d=>{d.addEventListener("click",f=>{f.preventDefault();const g=d.dataset.view;if(o.mobileNavItems.forEach(y=>y.classList.remove("active")),d.classList.add("active"),o.mobileNavItems.forEach(y=>{y.dataset.view===g&&y.classList.add("active")}),g==="home"){o.videoGrid.style.display="block";const y=document.getElementById("newHotContainer");y&&(y.style.display="none"),p.currentCategory="all",B("all",!0)}else if(["movies","series","animation","cinema"].includes(g)){o.videoGrid.style.display="block";const y=document.getElementById("newHotContainer");y&&(y.style.display="none"),p.currentCategory=g,B(g,!0)}else if(g==="history"){o.videoGrid.style.display="block";const y=document.getElementById("newHotContainer");y&&(y.style.display="none"),_()}else if(g==="search"){const y=document.getElementById("headerSearchBtn");y&&y.click()}window.scrollTo({top:0,behavior:"smooth"})})});const n=document.querySelectorAll(".netflix-header__nav-link");n.forEach(d=>{d.addEventListener("click",f=>{f.preventDefault();const g=d.dataset.view;n.forEach(v=>v.classList.remove("active")),d.classList.add("active"),o.mobileNavItems.forEach(v=>{v.classList.remove("active"),v.dataset.view===g&&v.classList.add("active")}),o.videoGrid.style.display="block";const y=document.getElementById("newHotContainer");y&&(y.style.display="none"),g==="home"?(p.currentCategory="all",B("all",!0)):["movies","series","animation","cinema"].includes(g)?(p.currentCategory=g,B(g,!0)):g==="history"&&_(),window.scrollTo({top:0,behavior:"smooth"})})});const a=document.getElementById("headerSearchBtn");a&&a.addEventListener("click",d=>{d.preventDefault();const f=document.getElementById("searchModal"),g=document.getElementById("searchInput");f&&(f.classList.add("active"),g&&setTimeout(()=>g.focus(),100))});const i=document.getElementById("mobileSearchBtn");i&&i.addEventListener("click",d=>{d.preventDefault();const f=document.getElementById("searchModal"),g=document.getElementById("searchInput");f&&(R(),f.classList.add("active"),g&&setTimeout(()=>g.focus(),100))});const c=document.getElementById("closeSearch");c&&c.addEventListener("click",()=>{const d=document.getElementById("searchModal");d&&d.classList.remove("active")});const m=document.getElementById("modalPlayerBackButton");m&&m.addEventListener("click",()=>{var d;R(),(d=window.history.state)!=null&&d.playerOpen?window.history.back():T()}),window.addEventListener("popstate",d=>{var f,g;(f=o.playerModal)!=null&&f.classList.contains("active")&&!((g=d.state)!=null&&g.playerOpen)&&T(!1)});const r=document.querySelectorAll(".nav-link");r.forEach(d=>{d.addEventListener("click",f=>{f.preventDefault();const g=d.dataset.view;r.forEach(y=>{y.classList.remove("active","text-white"),y.classList.add("text-gray-300")}),d.classList.add("active","text-white"),d.classList.remove("text-gray-300"),g==="home"?(p.currentCategory="all",E("home")):g==="series"?(p.currentCategory="series",E("series")):g==="movies"?(p.currentCategory="movies",E("movies")):g==="cinema"?(p.currentCategory="cinema",E("cinema")):g==="history"&&_(),window.scrollTo({top:0,behavior:"smooth"})})}),(l=o.closePlayer)==null||l.addEventListener("click",T),(h=o.modalBackdrop)==null||h.addEventListener("click",T),document.addEventListener("keydown",d=>{var f,g,y;if(d.key==="Escape"){(f=o.playerModal)!=null&&f.classList.contains("active")&&((g=window.history.state)!=null&&g.playerOpen?window.history.back():T()),(y=o.searchWrapper)!=null&&y.classList.contains("active")&&o.searchWrapper.classList.remove("active");const v=document.getElementById("searchModal");v!=null&&v.classList.contains("active")&&v.classList.remove("active")}})}async function B(e="all",t=!1){if(p.isLoading||(t&&(p.page=1,p.hasMore=!0,p.videos=[],o.videoGrid.innerHTML=""),!p.hasMore))return;p.isLoading=!0,S(p.page===1);const n=(i,c=12e3)=>Promise.race([i,new Promise((m,r)=>setTimeout(()=>r(new Error("Timeout")),c))]),a=document.getElementById("topSearchBtn");a&&a.addEventListener("click",i=>{i.preventDefault();const c=document.getElementById("searchModal"),m=document.getElementById("searchInput");c&&(c.classList.add("active"),m&&setTimeout(()=>m.focus(),100))});try{let i=null,c=!1;if(i||(i=await n(L.getRophimCatalog({category:e!=="all"?e:null,page:p.page,limit:24}),12e3)),i&&i.movies&&i.movies.length>0){const m=i.movies.map(l=>({id:l.id||`api_${Date.now()}_${Math.random()}`,title:l.title||"Unknown Title",thumbnail:l.thumbnail||"https://via.placeholder.com/300x450?text=No+Image",backdrop:l.backdrop||l.thumbnail||"https://via.placeholder.com/1920x1080?text=No+Backdrop",preview_url:l.preview_url||"",duration:l.duration||0,resolution:l.quality||"HD",category:l.category||"movies",year:l.year||new Date().getFullYear(),description:l.description||"",matchScore:Math.floor(Math.random()*15)+85,source_url:l.source_url,slug:l.slug,cast:l.cast||[],director:l.director,country:l.country,episodes:l.episodes||[]})),r=new Set(p.videos.map(l=>l.id)),s=m.filter(l=>!r.has(l.id));p.videos=[...p.videos,...s],p.page+=1,m.length<24,p.page===2?q(p.videos,!1):q(s,!0),Le(),b&&b.classList.remove("loading"),p.isLoading=!1,S(!1);return}else p.hasMore=!1,b&&(b.classList.remove("loading"),b.style.display="none"),p.isLoading=!1,S(!1)}catch(i){if(console.warn("API load failed:",i),p.page===1){N("Using offline mode","info");const c=ee();p.videos=c,p.featuredVideo=c[0],q(c)}p.isLoading=!1,S(!1)}}function $(e,t,n="poster"){const a=document.createElement("section");a.className="flex flex-col gap-4 mb-12 relative";const i=document.createElement("h2");i.className="text-xl md:text-2xl font-bold text-white hover:text-primary cursor-pointer transition-colors flex items-center gap-2 group px-4 md:px-12",i.innerHTML=` + ${e} + arrow_forward_ios + `,a.appendChild(i);const c=document.createElement("div");c.className="relative group/slider";const m=document.createElement("button");m.className="absolute left-0 top-1/2 -translate-y-1/2 z-20 w-12 h-full bg-gradient-to-r from-black/80 to-transparent opacity-0 group-hover/slider:opacity-100 transition-opacity flex items-center justify-start pl-2",m.innerHTML='chevron_left';const r=document.createElement("button");r.className="absolute right-0 top-1/2 -translate-y-1/2 z-20 w-12 h-full bg-gradient-to-l from-black/80 to-transparent opacity-0 group-hover/slider:opacity-100 transition-opacity flex items-center justify-end pr-2",r.innerHTML='chevron_right';const s=document.createElement("div");s.className="flex gap-3 overflow-x-auto scroll-smooth no-scrollbar px-4 md:px-12 pb-4",t.forEach((l,h)=>{let d;n==="landscape"?d=ke(l):d=we(l,!1,0,"horizontal"),d.className=d.className.replace("w-full",""),d.style.minWidth="280px",d.style.maxWidth="380px",d.style.flex="0 0 auto",s.appendChild(d)});const u=600;return m.addEventListener("click",()=>{s.scrollBy({left:-u,behavior:"smooth"})}),r.addEventListener("click",()=>{s.scrollBy({left:u,behavior:"smooth"})}),c.appendChild(m),c.appendChild(s),c.appendChild(r),a.appendChild(c),a}function we(e,t=!1,n=0,a="vertical"){const i=document.createElement("div"),c=a==="horizontal"?"aspect-video":"aspect-[2/3]";i.className="w-full cursor-pointer snap-start group relative transition-all duration-300 ease-in-out hover:z-30 hover:scale-105";let m=e.poster_url||e.thumb_url||e.thumbnail||"";a==="horizontal"&&e.backdrop&&(m=e.backdrop);const r=e.name||e.title||"Untitled",s=e.year||"",u=e.quality||"HD",l=e.slug||e.id||"",h=e.matchScore||Math.floor(Math.random()*10+90),d=Math.floor(Math.random()*19+80);i.innerHTML=` +
+
+ + +
+ + +
+ ${!t&&s===new Date().getFullYear().toString()?'NEW':""} + ${e.quality?`${e.quality.replace("FHD","HD")}`:""} + ${e.current_episode?`EP ${e.current_episode}`:""} +
+ + + ${t?`${n}`:""} + + +
+ + +
+
+ + +
+ +
+ + +
+
+ ${h}% Match + ${u} + ${s} +
+ + +
+
+ + local_pizza ${d}% + +
+ ${e.genres&&e.genres.length>0?`${e.genres[0]}`:""} +
+ +

+ ${r} +

+
+
+
+ `,i.addEventListener("click",v=>{v.target.closest("button")||k(e)});const f=i.querySelector(".btn-play");f&&f.addEventListener("click",v=>{v.stopPropagation(),k(e)});const g=i.querySelector(".btn-add-list");g&&g.addEventListener("click",v=>{if(v.stopPropagation(),window.historyService){const w=window.historyService.toggleFavorite(e),x=g.querySelector("span");w?(x.textContent="check",N("Added to My List","success")):(x.textContent="add",N("Removed from My List","info"))}});const y=i.querySelector(".btn-info");return y&&y.addEventListener("click",v=>{v.stopPropagation(),Z(e)}),i}function ke(e){var m,r;const t=document.createElement("div");t.className="flex-none w-[280px] group/card cursor-pointer snap-start";const n=e.backdrop||e.thumb_url||e.thumbnail||"",a=e.name||e.title||"Untitled",i=((m=e.progress)==null?void 0:m.percentage)||0,c=(r=e.progress)!=null&&r.episode?`S${e.season||1}:E${e.progress.episode}`:"";return t.innerHTML=` +
+
+
+ play_arrow +
+
+
+
+
+
+ ${a} + ${c?`${c}`:""} +
+ `,t.addEventListener("click",()=>k(e)),t}function q(e,t=!1){if(t||(o.videoGrid.innerHTML="",o.videoGrid.innerHTML="",o.videoGrid.className="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 gap-x-4 gap-y-10"),e.length===0&&!t){o.emptyState&&(o.emptyState.style.display="flex");return}o.emptyState&&(o.emptyState.style.display="none"),e.forEach(n=>{const a=fe(n,k);o.videoGrid.appendChild(a)})}let I,b=null,V=0;function Le(){if(!p.hasMore){b&&(b.classList.remove("loading"),b.style.display="none"),I&&I.disconnect();return}I&&I.disconnect(),document.querySelectorAll(".scroll-sentinel").forEach(n=>n.remove()),b=null;const e={root:null,rootMargin:"50px",threshold:0};I=new IntersectionObserver(n=>{n.forEach(a=>{const i=Date.now();i-V<1500||a.isIntersecting&&!p.isLoading&&p.hasMore&&(V=i,b&&b.classList.add("loading"),B(p.currentCategory))})},e),b=document.createElement("div"),b.className="scroll-sentinel",b.id="scrollSentinel";const t=document.getElementById("infinite-scroll-container");t?t.parentNode.insertBefore(b,t.nextSibling):o.videoGrid.appendChild(b),I.observe(b)}function Z(e){X(e)}function _(e="history"){if(o.mainHeader&&(o.mainHeader.style.display=""),!window.historyService){console.error("HistoryService not initialized");return}o.videoGrid.innerHTML="",o.emptyState&&(o.emptyState.style.display="none");const t=document.querySelector(".view-tabs");t&&t.remove();const n=document.createElement("div");n.className="view-tabs",n.innerHTML=` + + + `,o.videoGrid.before(n),n.querySelectorAll(".view-tab").forEach(r=>{r.addEventListener("click",()=>{n.remove(),_(r.dataset.tab)})});let a=[];if(e==="history"?a=window.historyService.getHistory():a=window.historyService.getFavorites(),a.length===0){if(o.emptyState){o.emptyState.style.display="flex";const r=o.emptyState.querySelector("h2"),s=o.emptyState.querySelector("p");e==="history"?(r&&(r.textContent="No history yet"),s&&(s.textContent="Movies you watch will appear here.")):(r&&(r.textContent="My List is empty"),s&&(s.textContent="Add movies to your list to watch later."))}return}a.sort((r,s)=>{const u=r.timestamp||r.year||0;return(s.timestamp||s.year||0)-u});const i=a.map((r,s)=>({...r,id:r.id||r.slug,orientation:"horizontal"}));o.mainHeader&&(o.mainHeader.style.display="block");const m=$(e==="history"?"Continue Watching":"My List",i,"poster");o.videoGrid.appendChild(m)}function k(e){var t;sessionStorage.setItem("currentVideo",JSON.stringify(e)),sessionStorage.setItem("allVideos",JSON.stringify(p.videos)),(t=window.history.state)!=null&&t.playerOpen||window.history.pushState({playerOpen:!0},"",window.location.href),X(e)}function X(e){window.location.href=`/watch.html?slug=${e.slug}`}function T(e=!0){var t;o.playerModal&&(o.playerModal.classList.add("hidden"),o.playerModal.classList.remove("active"),o.playerModal.style.display="none",ne()),e&&((t=window.history.state)!=null&&t.playerOpen),o.playerContainer.innerHTML="",p.currentVideo=null}function S(e){o.loading&&(o.loading.style.display=e?"flex":"none"),o.videoGrid&&(o.videoGrid.style.display=e?"none":"block")}async function E(e){const t=document.querySelector(".view-tabs");t&&t.remove(),o.mainHeader&&(o.mainHeader.style.display=""),S(!0),o.videoGrid.innerHTML="",o.videoGrid.className="space-y-12";const n={home:[{title:"Continue Watching",type:"history",limit:12,cardType:"landscape"},{title:"Cinema Releases",category:"phim-chieu-rap",limit:12,isHeroSource:!0},{title:"Top Rated",category:"phim-le",sort:"rating",limit:12},{title:"Action & Adventure",category:"hanh-dong",limit:12},{title:"Animation",category:"hoat-hinh",limit:12},{title:"Korean Hits",category:"han-quoc",limit:12},{title:"Horror & Thriller",category:"kinh-di",limit:12},{title:"Romance",category:"tinh-cam",limit:12}],series:[{title:"Popular TV Shows",category:"phim-bo",limit:12,isHeroSource:!0},{title:"Korean Dramas",category:"korean",limit:12},{title:"Chinese Dramas",category:"china",limit:12},{title:"Anime Series",category:"hoat-hinh",limit:12},{title:"Documentaries",category:"tai-lieu",limit:12}],movies:[{title:"Blockbuster Movies",category:"phim-le",sort:"year",limit:12,isHeroSource:!0},{title:"Action & Adventure",category:"action",limit:12},{title:"Comedy Films",category:"comedy",limit:12},{title:"Cinema Releases",category:"phim-chieu-rap",limit:12},{title:"Horror Movies",category:"kinh-di",limit:12},{title:"Sci-Fi & Fantasy",category:"vien-tuong",limit:12}],cinema:[{title:"Now Showing",category:"phim-chieu-rap",limit:12,isHeroSource:!0},{title:"New Releases",category:"phim-le",sort:"year",limit:12},{title:"Top Rated",category:"phim-le",sort:"rating",limit:12},{title:"Action Blockbusters",category:"action",limit:12},{title:"Animated Features",category:"hoat-hinh",limit:12}]},a=n[e]||n.home;if(e==="home"||e==="cinema"){const c=sessionStorage.getItem(`view_cache_${e}`);if(c&&(o.videoGrid.innerHTML=c,S(!1),o.heroContainer&&(o.heroContainer.style.display=""),o.videoGrid.children.length>0))return}const i=3;try{let c=null;for(let r=0;r0){c||(c=u),s.isHeroSource&&(!p.heroMovies||p.heroMovies.length===0)&&u.length>0&&(p.heroMovies=u.slice(0,10),p.featuredVideo=u[0],p.videos=u,p.currentHeroIndex=0,C(p.heroMovies[0]),be());const l=$(s.title,u,s.cardType||"poster");o.videoGrid.appendChild(l)}}(e==="home"||e==="cinema")&&sessionStorage.setItem(`view_cache_${e}`,o.videoGrid.innerHTML);const m=new IntersectionObserver(async(r,s)=>{for(const u of r)if(u.isIntersecting){const l=u.target,h=parseInt(l.dataset.configIndex),d=a[h];s.unobserve(l),l.innerHTML='
';const f=await K(d);if(f&&f.length>0){const g=$(d.title,f,d.cardType||"poster");l.replaceWith(g),(e==="home"||e==="cinema")&&sessionStorage.setItem(`view_cache_${e}`,o.videoGrid.innerHTML)}else l.remove()}},{rootMargin:"800px"});for(let r=i;r${a[r].title}`,o.videoGrid.appendChild(s),m.observe(s)}if(!p.featuredVideo)if(c&&c.length>0)p.featuredVideo=c[0],p.videos=c,C();else try{const r=ee();r&&r.length>0&&(p.featuredVideo=r[0],p.videos=r,C())}catch(r){console.warn("Demo content fallback failed",r)}o.videoGrid.children.length===0&&(o.videoGrid.innerHTML=` +
+ movie +

No content available for this category

+
+ `)}catch(c){console.error("Error rendering category view:",c),o.videoGrid.innerHTML=` +
+ error +

Failed to load content. Please try again.

+
+ `}S(!1)}async function K(e){try{if(e.type==="history")return window.historyService?window.historyService.getHistory().slice(0,e.limit).map(s=>({id:s.slug||s.id,title:s.title,thumbnail:s.thumbnail||s.poster_url,slug:s.slug,year:s.year,quality:s.quality||"HD",view_progress:s.view_progress||0})):[];const t={category:e.category||null,limit:e.limit||40,sort:e.sort||"year"};e.country&&(t.country=e.country),e.genre&&(t.genre=e.genre);const n=async r=>{const s=[1,2,3,4,5,6,7,8].map(l=>L.getRophimCatalog({...r,page:l}).catch(h=>({movies:[]})));return(await Promise.all(s)).flatMap(l=>l.movies||[])};let a=await n(t);if(a.length<20&&e.sort&&e.sort!=="modified"){const r=await n({...t,sort:"modified"});a=[...a,...r]}const i=[],c=new Set;for(const r of a){if(!r)continue;const s=r.slug||r.id;c.has(s)||(c.add(s),i.push({id:r.id||r.slug,title:r.title,thumbnail:r.thumbnail,poster_url:r.poster_url||r.thumbnail,backdrop:r.backdrop||r.poster_url||r.thumbnail,slug:r.slug,year:r.year,quality:r.quality||"HD",rating:r.rating,category:r.category}))}const m=Math.max(e.limit||40,48);return i.slice(0,m)}catch(t){return console.error(`Error fetching section "${e.title}":`,t),[]}}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",U):U();function ee(){const e="https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",t={VENOM:"https://image.tmdb.org/t/p/w500/aosm8NMQ3UyoBVpSxyimorCQykC.jpg",SQUID:"https://images.unsplash.com/photo-1536440136628-849c177e76a1?w=800&auto=format&fit=crop",ARCANE:"https://images.unsplash.com/photo-1542751371-adc38448a05e?w=800&auto=format&fit=crop",PENGUIN:"https://images.unsplash.com/photo-1478720568477-152d9b164e63?w=800&auto=format&fit=crop",GLADIATOR:"https://images.unsplash.com/photo-1565060416-522204c35613?w=800&auto=format&fit=crop",MOANA:"https://images.unsplash.com/photo-1507525428034-b723cf961d3e?w=800&auto=format&fit=crop",WICKED:"https://images.unsplash.com/photo-1518709268805-4e9042af9f23?w=800&auto=format&fit=crop",DBZ:"https://images.unsplash.com/photo-1578632767115-351597cf2477?w=800&auto=format&fit=crop"};return[{id:"d1",title:"Venom: The Last Dance",thumbnail:t.VENOM,backdrop:"https://image.tmdb.org/t/p/original/3V4kLQg0kSqPLctI5ziYWabAZYF.jpg",preview_url:e,duration:7200,resolution:"4K",category:"action",year:2024,matchScore:98,director:"Kelly Marcel",country:"USA",cast:["Tom Hardy","Chiwetel Ejiofor","Juno Temple"],description:"Eddie and Venom are on the run. Hunted by both of their worlds and with the net closing in, the duo are forced into a devastating decision.",episodes:[]},{id:"d2",title:"Squid Game Season 2",thumbnail:t.SQUID,backdrop:t.SQUID,preview_url:"https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4",duration:3600,resolution:"HD",category:"series",year:2024,matchScore:99,director:"Hwang Dong-hyuk",country:"Korea",cast:["Lee Jung-jae","Lee Byung-hun","Wi Ha-jun"],description:"Gi-hun returns to the death games after three years with a new resolution: to find the people behind and to put an end to the sport.",episodes:[{number:1,title:"Red Light, Green Light",url:e},{number:2,title:"The Man with the Umbrella",url:e},{number:3,title:"Stick to the Team",url:e}]},{id:"d3",title:"Arcane Season 2",thumbnail:t.ARCANE,backdrop:t.ARCANE,preview_url:"https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerBlazes.mp4",duration:2400,resolution:"4K",category:"anime",year:2024,matchScore:97,director:"Christian Linke",country:"USA, France",cast:["Hailee Steinfeld","Ella Purnell","Katie Leung"],description:"As conflict between Piltover and Zaun reaches a boiling point, Jinx and Vi must decide what kind of future they are fighting for.",episodes:[{number:1,title:"Heavy Is the Crown",url:e},{number:2,title:"Watch It All Burn",url:e},{number:3,title:"Finally Got It Right",url:e}]},{id:"d4",title:"The Penguin",thumbnail:t.PENGUIN,backdrop:t.PENGUIN,preview_url:"https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerEscapes.mp4",duration:3600,resolution:"HD",category:"series",year:2024,matchScore:95,director:"Craig Zobel",country:"USA",cast:["Colin Farrell","Cristin Milioti","Rhenzy Feliz"],description:"Following the events of The Batman, Oz Cobb makes a play for power in the underworld of Gotham City.",episodes:[]},{id:"d5",title:"Gladiator II",thumbnail:t.GLADIATOR,backdrop:t.GLADIATOR,preview_url:"https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerFun.mp4",duration:8400,resolution:"4K",category:"action",year:2024,matchScore:96,director:"Ridley Scott",country:"USA, UK",cast:["Paul Mescal","Pedro Pascal","Denzel Washington"],description:"Years after witnessing the death of the revered hero Maximus at the hands of his uncle, Lucius is forced to enter the Colosseum.",episodes:[]},{id:"d6",title:"Moana 2",thumbnail:t.MOANA,backdrop:t.MOANA,preview_url:"https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerJoyrides.mp4",duration:6e3,resolution:"HD",category:"theater",year:2024,matchScore:94,director:"David G. Derrick Jr.",country:"USA",cast:["Auliʻi Cravalho","Dwayne Johnson","Alan Tudyk"],description:"After receiving an unexpected call from her wayfinding ancestors, Moana must journey to the far seas of Oceania.",episodes:[]},{id:"d7",title:"Wicked",thumbnail:t.WICKED,backdrop:t.WICKED,preview_url:"https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerMeltdowns.mp4",duration:9e3,resolution:"4K",category:"theater",year:2024,matchScore:93,director:"Jon M. Chu",country:"USA",cast:["Cynthia Erivo","Ariana Grande","Jeff Goldblum"],description:"Elphaba, a misunderstood young woman with green skin, and Glinda, a popular blonde, forge an unlikely friendship.",episodes:[]},{id:"d8",title:"Dragon Ball Daima",thumbnail:t.DBZ,backdrop:t.DBZ,preview_url:"https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/Sintel.mp4",duration:1440,resolution:"HD",category:"anime",year:2024,matchScore:98,director:"Yoshitaka Yashima",country:"Japan",cast:["Masako Nozawa","Ryō Horikawa"],description:"Goku and his friends are turned small due to a conspiracy. To fix things, they head off to a new world.",episodes:[{number:1,title:"Conspiracy",url:e}]}]}function Ee(){o.mainHeader&&(o.mainHeader.style.display="");const e=document.getElementById("heroContainer");e&&(e.style.display="",C()),A("profile"),o.videoGrid.innerHTML="",o.videoGrid.className="profile-view pb-24 bg-background-light dark:bg-background-dark min-h-screen";const t=` + +
+ +

Profile

+ +
+ +
+ +
+
+
+
+
+ edit +
+
+

Isabella Hall

+ +
+ + +
+
+

42

+

Movies

+
+
+

128h

+

Streamed

+
+
+

15

+

Reviews

+
+
+ + +
+ + + + + +
+ +

Version 4.12.0

+
+
+ `;if(o.videoGrid.innerHTML=t,window.historyService){const n=window.historyService.getHistory().slice(0,10);if(n.length>0){const a=document.getElementById("profileHistoryContainer"),i=$("Continue Watching",n,"landscape");a.appendChild(i)}}}async function Ce(){o.mainHeader&&(o.mainHeader.style.display="");const e=document.getElementById("heroContainer");if(e&&(e.style.display=""),A("home"),window.innerWidth<768){document.querySelectorAll("footer").forEach(n=>n.style.display="none");const t=document.getElementById("searchModal");t&&t.classList.remove("active")}else document.querySelectorAll("footer").forEach(t=>t.style.display="");await E("home")}async function P(){o.mainHeader&&(o.mainHeader.style.display="");const e=document.getElementById("heroContainer");e&&(e.style.display="",C()),document.querySelectorAll("footer").forEach(s=>s.style.display="none");const t=document.getElementById("searchModal");t&&t.classList.remove("active"),A("search"),o.videoGrid.innerHTML="",o.videoGrid.className="mobile-search-view bg-background-light dark:bg-background-dark";const n=` + +
+
+
+
+ search +
+ +
+ mic +
+
+ +
+ +
+ + + + + +
+
+ + +
+
+

Top Searches

+
+
+ +
+

Recommended for You

+
+
+
+ `;o.videoGrid.innerHTML=n;const a=document.getElementById("mobileSearchInput"),i=document.getElementById("mobileSearchResults");let c=null;a&&i&&(a.addEventListener("input",s=>{clearTimeout(c);const u=s.target.value.trim();c=setTimeout(async()=>{if(!(u.length<2)){i.innerHTML='
';try{const l=await L.searchRophim(u);if(l&&l.movies&&l.movies.length>0){i.innerHTML=` +

Results for "${u}"

+
+ `;const h=i.querySelector(".grid");l.movies.forEach(d=>{const f=document.createElement("div");f.className="relative group aspect-[2/3] overflow-hidden rounded-lg cursor-pointer",f.innerHTML=` +
+
+
+

${d.title}

+
+
+ `,f.addEventListener("click",()=>k(d)),h.appendChild(f)})}else i.innerHTML=` +
+ search_off +

No results for "${u}"

+
+ `}catch(l){console.error("Mobile search failed:",l),i.innerHTML='
Search failed. Try again.
'}}},300)}),a.focus());const m=document.getElementById("mobileSearchCancel");m&&m.addEventListener("click",()=>{const s=document.getElementById("mobileSearchInput");s&&(s.value="",s.focus()),P()});try{const s=await L.getRophimCatalog({category:"trending",limit:5});if(s&&s.movies){const l=document.getElementById("topSearchesList");s.movies.forEach(h=>{const d=document.createElement("div");d.className="group flex items-center gap-3 px-4 py-2 hover:bg-gray-100 dark:hover:bg-white/5 cursor-pointer transition-colors",d.innerHTML=` +
+
+
+
+

${h.title}

+

${h.year||"2024"}

+
+
+ play_circle +
+ `,d.addEventListener("click",()=>k(h)),l.appendChild(d)})}const u=await L.getRophimCatalog({category:"phim-le",limit:9});if(u&&u.movies){const l=document.getElementById("recommendedGrid");u.movies.forEach(h=>{const d=document.createElement("div");d.className="relative group aspect-[2/3] overflow-hidden rounded-lg cursor-pointer",d.innerHTML=` +
+ `,d.addEventListener("click",()=>k(h)),l.appendChild(d)})}}catch(s){console.error("Failed to load mobile search content",s)}const r=document.querySelectorAll(".search-chip");r.forEach(s=>{s.addEventListener("click",async()=>{var d;const u=s.dataset.genre;if(!u)return;r.forEach(f=>{f.classList.remove("active","bg-white","text-black"),f.classList.add("bg-gray-200","dark:bg-surface-dark");const g=f.querySelector("p");g&&(g.classList.remove("font-bold"),g.classList.add("font-medium","text-slate-700","dark:text-gray-300"))}),s.classList.add("active","bg-white","text-black"),s.classList.remove("bg-gray-200","dark:bg-surface-dark");const l=s.querySelector("p");l&&(l.classList.add("font-bold"),l.classList.remove("font-medium","text-slate-700","dark:text-gray-300"));const h=document.getElementById("mobileSearchResults");if(h){h.innerHTML='
';try{const f=await L.getRophimCatalog({category:u,limit:12});if(f&&f.movies&&f.movies.length>0){const g=((d=s.querySelector("p"))==null?void 0:d.textContent)||u;h.innerHTML=` +

${g}

+
+ `;const y=h.querySelector(".grid");f.movies.forEach(v=>{const w=document.createElement("div");w.className="relative group aspect-[2/3] overflow-hidden rounded-lg cursor-pointer",w.innerHTML=` +
+ `,w.addEventListener("click",()=>k(v)),y.appendChild(w)})}else h.innerHTML='

No results found

'}catch(f){console.error("Genre filter error:",f),h.innerHTML='

Failed to load content

'}}})})}async function Y(){o.mainHeader&&(o.mainHeader.style.display="");const e=document.getElementById("heroContainer");e&&(e.style.display="",C()),document.querySelectorAll("footer").forEach(m=>m.style.display="none");const t=document.getElementById("searchModal");t&&t.classList.remove("active"),A("mylist");const n=window.historyService?window.historyService.getFavorites():[];o.videoGrid.innerHTML="",o.videoGrid.className="mobile-mylist-view min-h-screen bg-background-dark pb-24";const a=` + +
+
+

My List

+ +
+ +
+ + + + +
+
+ + +
+
+
+ `;o.videoGrid.innerHTML=a;const i=document.getElementById("mylistGrid");if(n.length>0)n.forEach(m=>{const r=document.createElement("div");r.className="group relative flex flex-col gap-2 cursor-pointer",r.innerHTML=` +
+
+
+
+ `,r.addEventListener("click",()=>k(m)),i.appendChild(r)});else try{const m=await L.getRophimCatalog({category:"trending",limit:12});m&&m.movies&&m.movies.forEach((r,s)=>{const u=document.createElement("div");u.className="group relative flex flex-col gap-2 cursor-pointer",u.innerHTML=` +
+
+ ${s===0?'
New
':""} +
+
+ `,u.addEventListener("click",()=>k(r)),i.appendChild(u)})}catch(m){console.error("Failed to load my list content",m)}const c=document.querySelectorAll(".mylist-chip");c.forEach(m=>{m.addEventListener("click",async()=>{const r=m.dataset.filter,s=m.dataset.category;if(!r||!s)return;c.forEach(h=>{h.classList.remove("active","bg-white"),h.classList.add("bg-surface-dark");const d=h.querySelector("p");d&&(d.classList.remove("font-bold","text-black"),d.classList.add("font-medium","text-gray-200"))}),m.classList.add("active","bg-white"),m.classList.remove("bg-surface-dark");const u=m.querySelector("p");u&&(u.classList.add("font-bold","text-black"),u.classList.remove("font-medium","text-gray-200"));const l=document.getElementById("mylistGrid");if(l){l.innerHTML='
';try{const h=await L.getRophimCatalog({category:s,limit:12});l.innerHTML="",h&&h.movies&&h.movies.length>0?h.movies.forEach((d,f)=>{const g=document.createElement("div");g.className="group relative flex flex-col gap-2 cursor-pointer",g.innerHTML=` +
+
+ ${f===0?'
New
':""} +
+
+ `,g.addEventListener("click",()=>k(d)),l.appendChild(g)}):l.innerHTML='

No content found

'}catch(h){console.error("Filter error:",h),l.innerHTML='

Failed to load content

'}}})})} diff --git a/backend/static/assets/watch-Baf19X1S.js b/backend/static/assets/watch-Baf19X1S.js deleted file mode 100644 index 3c533cd..0000000 --- a/backend/static/assets/watch-Baf19X1S.js +++ /dev/null @@ -1,104 +0,0 @@ -import{a as h,s as v,i as I,d as C}from"./Toast-BwR22KmJ.js";const s={video:null,currentEpisode:1,currentServer:0,recommendations:[],isLoading:!0};window.state=s;let t={};function k(){var e,i;t={videoPlayer:document.getElementById("videoPlayer"),videoPlayerContainer:document.getElementById("videoPlayerContainer"),playerLoading:document.getElementById("playerLoading"),closePlayer:document.getElementById("closePlayer"),heroBg:document.getElementById("heroBg"),movieTitle:document.getElementById("movieTitleDesktop"),movieMatch:document.getElementById("movieMatchDesktop"),movieYear:document.getElementById("movieYearDesktop"),movieRating:document.getElementById("movieRatingDesktop"),movieQuality:document.getElementById("movieQualityDesktop"),movieDescription:document.getElementById("movieDescriptionDesktop"),movieTags:document.getElementById("movieTags"),movieTitleMobile:document.getElementById("movieTitleMobile"),movieMatchMobile:document.getElementById("movieMatchMobile"),movieYearMobile:document.getElementById("movieYearMobile"),movieRatingMobile:document.getElementById("movieRatingMobile"),movieDuration:document.getElementById("movieDurationDesktop"),movieDurationMobile:document.getElementById("movieDurationMobile"),movieQualityMobile:document.getElementById("movieQualityMobile"),movieDescriptionMobile:document.getElementById("movieDescriptionMobile"),playBtn:document.getElementById("playBtnDesktop"),addListBtn:document.getElementById("addListBtnDesktop"),addListIcon:(e=document.getElementById("addListBtnDesktop"))==null?void 0:e.querySelector(".material-symbols-outlined"),addListText:(i=document.getElementById("addListBtnDesktop"))==null?void 0:i.querySelector("span:last-child"),playBtnMobile:document.getElementById("playBtnMobile"),addListBtnMobile:document.getElementById("addListBtnMobile"),shareBtnMobile:document.getElementById("shareBtnMobile"),mobilePlayBtn:document.getElementById("mobilePlayBtn"),watchHeader:document.getElementById("watchHeader"),tabNav:document.getElementById("tabNav"),watchBackBtn:document.getElementById("watchBackBtn"),episodesPanel:document.getElementById("episodesPanel"),trailersPanel:document.getElementById("trailersPanel"),detailsPanel:document.getElementById("detailsPanel"),seasonSelect:document.getElementById("seasonSelect"),seasonSelectContainer:document.getElementById("seasonSelectContainer"),episodeCount:document.getElementById("episodeCount"),episodesGrid:document.getElementById("episodesGrid"),episodesLoading:document.getElementById("episodesLoading"),castCarousel:document.getElementById("castCarousel"),recommendationsContainer:document.getElementById("recommendationsContainer"),detailsList:document.getElementById("detailsList"),searchModal:document.getElementById("searchModal"),searchBtn:document.getElementById("searchBtn"),searchInput:document.getElementById("searchInput"),closeSearch:document.getElementById("closeSearch")}}async function w(){const e=new URLSearchParams(window.location.search),i=e.get("id"),r=e.get("slug"),o=parseInt(e.get("ep"))||1;if(s.currentEpisode=o,!i&&!r){B("No video specified");return}k(),$(),await T(i,r),await j()}function $(){if(window.addEventListener("scroll",()=>{t.watchHeader&&(window.scrollY>50?t.watchHeader.style.backgroundColor="rgba(20,20,20,0.95)":t.watchHeader.style.backgroundColor="transparent")}),t.watchBackBtn&&t.watchBackBtn.addEventListener("click",i=>{i.preventDefault(),t.videoPlayerContainer&&(t.videoPlayerContainer.style.display!=="none"||!t.videoPlayerContainer.classList.contains("hidden"))?b():document.referrer&&document.referrer.includes(window.location.host)?window.history.back():window.location.href="/index.html"}),document.addEventListener("keydown",i=>{i.key==="Escape"&&(t.videoPlayerContainer&&!t.videoPlayerContainer.classList.contains("hidden")&&b(),t.searchModal&&!t.searchModal.classList.contains("hidden")&&t.searchModal.classList.add("hidden"))}),[t.playBtn,t.playBtnMobile,t.mobilePlayBtn].forEach(i=>{i&&i.addEventListener("click",()=>{t.videoPlayerContainer&&(t.videoPlayerContainer.classList.remove("hidden"),t.videoPlayerContainer.style.display="block"),t.videoPlayer&&(t.videoPlayer.style.display="block"),M()})}),t.closePlayer&&t.closePlayer.addEventListener("click",()=>{b()}),t.searchBtn&&t.searchBtn.addEventListener("click",()=>{t.searchModal&&(t.searchModal.classList.remove("hidden"),setTimeout(()=>{var i;return(i=t.searchInput)==null?void 0:i.focus()},100))}),t.closeSearch&&t.closeSearch.addEventListener("click",()=>{t.searchModal&&t.searchModal.classList.add("hidden")}),[t.addListBtn,t.addListBtnMobile].forEach(i=>{i&&i.addEventListener("click",()=>{var o;if(!s.video)return;const r=(o=window.historyService)==null?void 0:o.toggleFavorite(s.video);x(r),r?v("Added to My List","success"):v("Removed from My List","info")})}),t.shareBtnMobile&&t.shareBtnMobile.addEventListener("click",()=>{var i;navigator.share?navigator.share({title:((i=s.video)==null?void 0:i.title)||"StreamFlix",url:window.location.href}):(navigator.clipboard.writeText(window.location.href),v("Link copied to clipboard","success"))}),t.tabNav){const i=t.tabNav.querySelectorAll(".tab-btn"),r={episodes:t.episodesPanel,details:t.detailsPanel};i.forEach(o=>{o.addEventListener("click",()=>{const n=o.dataset.tab;i.forEach(l=>{l.classList.remove("text-white","font-bold","border-b-4","border-primary"),l.classList.add("text-gray-400","font-medium")}),o.classList.remove("text-gray-400","font-medium"),o.classList.add("text-white","font-bold","border-b-4","border-primary"),Object.entries(r).forEach(([l,d])=>{d&&(l===n?d.classList.remove("hidden"):d.classList.add("hidden"))})})})}document.querySelectorAll("#mobileBottomNav .nav-item").forEach(i=>{i.addEventListener("click",r=>{r.preventDefault();const o=i.dataset.view;o&&(window.location.href=`/index.html?view=${o}`)})})}function b(){const e=t.videoPlayerContainer||document.getElementById("videoPlayerContainer"),i=t.videoPlayer||document.getElementById("videoPlayer"),r=t.playerLoading||document.getElementById("playerLoading");e&&(e.classList.add("hidden"),e.style.display="none"),C(),i&&(i.innerHTML="",i.style.display="none"),r&&(r.style.display="none")}function x(e){const i=e?"check":"add",r=e?"In List":"My List";if(t.addListBtn){const o=t.addListBtn.querySelector(".material-symbols-outlined"),n=t.addListBtn.querySelector("span:last-child");o&&(o.textContent=i),n&&(n.textContent=r),e?t.addListBtn.classList.add("bg-white/20"):t.addListBtn.classList.remove("bg-white/20")}if(t.addListBtnMobile){const o=t.addListBtnMobile.querySelector(".material-symbols-outlined"),n=t.addListBtnMobile.querySelector("span:last-child");o&&(o.textContent=i),n&&(n.textContent=r),e?(t.addListBtnMobile.classList.add("bg-white/10"),t.addListBtnMobile.classList.remove("bg-[#2b2b2b]")):(t.addListBtnMobile.classList.remove("bg-white/10"),t.addListBtnMobile.classList.add("bg-[#2b2b2b]"))}}async function T(e,i){var r,o,n,l,d,c;try{s.isLoading=!0;let m=null;const u=i||e;if(u)try{const p=await h.getRophimMovie(u);if(p){const a=p.movie||p,y=p.episodes||[];m={id:a.slug||u,slug:a.slug||u,title:a.name||a.title||u,original_title:a.origin_name||a.original_title||"",description:a.content||a.description||"",thumbnail:a.poster_url||a.thumb_url||a.thumbnail||"",year:a.year,rating:((r=a.tmdb)==null?void 0:r.vote_average)||a.rating||"N/A",quality:a.quality||"HD",duration:a.time||a.duration||"",genres:Array.isArray(a.category)?a.category.map(g=>g.name||g):Array.isArray(a.genres)?a.genres:typeof a.genre=="string"?a.genre.split(",").map(g=>g.trim()):[],country:((n=(o=a.country)==null?void 0:o[0])==null?void 0:n.name)||a.country||"",country:((d=(l=a.country)==null?void 0:l[0])==null?void 0:d.name)||a.country||"",cast:a.actor||a.cast||[],director:((c=a.director)==null?void 0:c[0])||a.director||"",source_url:`https://phimmoichill.network/phim/${u}`,episodes:P(y)}}}catch(p){console.warn("API fetch failed:",p)}if(!m)throw new Error("Video data not found");s.video=m,window.historyService&&window.historyService.addToHistory(m,{episode:s.currentEpisode}),_(m),window.historyService&&x(window.historyService.isFavorite(m.slug))}catch(m){console.error("Failed to load video:",m),B("Failed to load video data")}finally{s.isLoading=!1}}function P(e){if(!e||!Array.isArray(e)||e.length===0)return[];const i=e[0];return((i==null?void 0:i.server_data)||[]).map((o,n)=>({number:n+1,name:o.name||`Episode ${n+1}`,title:o.filename||`Episode ${n+1}`,slug:o.slug||"",link_embed:o.link_embed||"",link_m3u8:o.link_m3u8||""}))}function _(e){if(t.heroBg){const i=e.backdrop||e.poster_url||e.thumb_url||e.thumbnail||"";i&&(t.heroBg.style.backgroundImage=`url('${i}')`)}if(t.movieTitle&&(t.movieTitle.textContent=e.title),t.movieYear&&(t.movieYear.textContent=e.year||""),t.movieDuration)if(e.runtime_minutes){const i=Math.floor(e.runtime_minutes/60),r=e.runtime_minutes%60;t.movieDuration.textContent=i>0?`${i}h ${r}m`:`${r}m`}else e.duration&&(t.movieDuration.textContent=e.duration);if(t.movieQuality&&(t.movieQuality.textContent=e.quality||"HD"),t.movieRating){const i=e.rating||e.tmdb_rating;i&&i!=="N/A"?t.movieRating.textContent=typeof i=="number"?`${i.toFixed(1)} ★`:i:t.movieRating.textContent="TV-MA"}if(t.movieMatch){const i=Math.floor(85+Math.random()*14);t.movieMatch.textContent=`${i}% Match`}if(t.movieDescription){const i=e.tmdb_description||e.description||"No description available.";t.movieDescription.innerHTML=i,t.movieDescriptionMobile&&(t.movieDescriptionMobile.innerHTML=i)}if(t.movieTitleMobile&&(t.movieTitleMobile.textContent=e.title),t.movieYearMobile&&(t.movieYearMobile.textContent=e.year||""),t.movieRatingMobile){const i=e.rating||e.tmdb_rating;t.movieRatingMobile.textContent=i&&i!=="N/A"?typeof i=="number"?i.toFixed(1):i:"TV-MA"}if(t.movieDurationMobile&&(t.movieDurationMobile.textContent=t.movieDuration?t.movieDuration.textContent:e.duration||""),t.movieQualityMobile&&(t.movieQualityMobile.textContent=e.quality||"HD"),t.movieMatchMobile&&t.movieMatch&&(t.movieMatchMobile.textContent=t.movieMatch.textContent),t.movieTags){const i=e.genres||[],r=e.director,o=e.country;let n="";i.length>0&&(n+=`
Genres: ${i.join(", ")}
`),r&&r!=="Unknown"&&(n+=`
Director: ${r}
`),o&&o!=="Unknown"&&(n+=`
Country: ${o}
`),t.movieTags.innerHTML=n}document.title=`${e.title} - StreamFlix`,window.historyService&&e.slug&&x(window.historyService.isFavorite(e.slug)),L(e),e.tmdb_cast&&e.tmdb_cast.length>0?E(e.tmdb_cast,!0):e.cast&&e.cast.length>0&&E(e.cast,!1),S(e)}function L(e){if(!t.episodesPanel)return;let i=[];if(Array.isArray(e.episodes)&&e.episodes.length>0&&(e.episodes[0].server_data?i=e.episodes[0].server_data:i=e.episodes),i.length<=1){t.seasonSelectContainer&&(t.seasonSelectContainer.style.display="none"),t.episodesLoading&&(t.episodesLoading.style.display="none"),t.episodesGrid&&(t.episodesGrid.innerHTML=` -
- play_circle -
-

Full Movie

-

Click Play to watch

-
-
- `);return}if(t.episodeCount&&(t.episodeCount.textContent=`${i.length} Episodes`),t.episodesLoading&&(t.episodesLoading.style.display="none"),t.episodesGrid){const o=i.length,n=o<=15,l=d=>{if(t.episodesGrid.innerHTML=i.slice(0,d).map((c,m)=>{const u=m+1,p=u===s.currentEpisode,a=c.name||`Episode ${u}`,y=c.title||c.filename||"";return` -
-
${u}
-
-

${a}

- ${y?`

${y}

`:""} -
- ${p?'play_circle':""} -
- `}).join(""),dSee more episodes (${o-d} remaining) - expand_more - `,c.onclick=()=>l(o),t.episodesGrid.appendChild(c)}};l(n?o:10)}}function S(e){if(!t.detailsList)return;const i=[];e.original_title&&i.push({label:"Original Title",value:e.original_title}),e.director&&e.director!=="Unknown"&&i.push({label:"Director",value:e.director}),e.country&&e.country!=="Unknown"&&i.push({label:"Country",value:e.country}),e.year&&i.push({label:"Release Year",value:e.year}),e.quality&&i.push({label:"Quality",value:e.quality}),e.duration&&i.push({label:"Duration",value:e.duration}),e.genres&&e.genres.length>0&&i.push({label:"Genres",value:e.genres.join(", ")}),t.detailsList.innerHTML="",i.forEach(r=>{const o=document.createElement("div");o.className="flex gap-4";const n=document.createElement("span");n.className="text-white/50 min-w-[100px] font-medium",n.textContent=`${r.label}:`;const l=document.createElement("span");l.className="text-white font-medium",l.textContent=r.value,o.appendChild(n),o.appendChild(l),t.detailsList.appendChild(o)})}window.selectEpisode=e=>{s.currentEpisode=e;const i=new URL(window.location);i.searchParams.set("ep",e),window.history.replaceState({},"",i),L(s.video),M(),window.scrollTo({top:0,behavior:"smooth"})};async function M(){if(s.video){t.playerLoading&&(t.playerLoading.style.display="flex");try{let e=null,i=s.video.thumbnail,r=[];Array.isArray(s.video.episodes)&&s.video.episodes.length>0&&(s.video.episodes[0].server_data?r=s.video.episodes[0].server_data:r=s.video.episodes);const o=r[s.currentEpisode-1];if(window.historyService&&window.historyService.addToHistory(s.video,{episode:s.currentEpisode,timestamp:Date.now()}),o&&(o.link_m3u8?e=o.link_m3u8:o.link_embed&&(e=o.link_embed)),!e&&s.video.slug)try{const n=await h.getRophimStream(s.video.slug,s.currentEpisode);n!=null&&n.stream_url&&(e=n.stream_url)}catch(n){console.warn("Stream API fallback also failed",n)}if(t.playerLoading&&(t.playerLoading.style.display="none"),e){H(e,i,s.video.title);const n=r.length>1?`Episode ${s.currentEpisode} `:"Movie";v(`Playing ${n} `,"success")}else{const n=s.currentEpisode===1?"full":s.currentEpisode,l=`https://phimmoichill.network/xem-phim/${s.video.slug}/tap-${n}-sv-0`;D(l)}}catch(e){console.error(e),A(e.message)}}}function D(e){t.videoPlayer.innerHTML=` -
- - - - - -

It cannot load

-

This stream is currently unavailable. Please try again later or choose another source.

-
- `}function H(e,i,r){if(e.includes("embed")||!e.match(/\.(mp4|m3u8)$/i))t.videoPlayer.innerHTML=` - - `;else{const n=I(t.videoPlayer,{url:e,poster:i,title:r+` - Ep ${s.currentEpisode}`,autoplay:!0});if(n&&window.historyService){n.on("video:timeupdate",()=>{const c=n.currentTime,m=n.duration;c>0&&m>0&&Math.floor(c)%5===0&&window.historyService.addToHistory(s.video,{currentTime:c,duration:m,percentage:c/m*100,episode:s.currentEpisode})});const d=window.historyService.getHistory().find(c=>c.slug===s.video.slug);d&&d.progress&&d.progress.episode===s.currentEpisode&&d.progress.currentTime>0&&d.progress.percentage<95&&n.once("video:canplay",()=>{n.currentTime=d.progress.currentTime})}}}function A(e){t.videoPlayer.innerHTML=` -
-

Error loading video: ${e}

- -
- `}function E(e,i=!1){if(!t.castCarousel)return;const r=e.slice(0,10);i?t.castCarousel.innerHTML=r.map(o=>{const n=o.profile_photo&&!o.profile_photo.includes("ui-avatars.com"),l=o.profile_photo||"",d=`/?search=${encodeURIComponent(o.name)}`,c=o.name.split(" ").map(m=>m[0]).join("").toUpperCase().slice(0,2);return` - -
- ${n?`${o.name}`:`
${c}
`} -
-

${o.name}

-

${o.character||"Actor"}

-
- `}).join(""):t.castCarousel.innerHTML=r.map(o=>{const n=`/?search=${encodeURIComponent(o)}`,l=o.split(" ").map(d=>d[0]).join("").toUpperCase().slice(0,2);return` - -
- ${l} -
-

${o}

-

Actor

-
- `}).join("")}async function j(){const e=t.recommendationsContainer;if(e)try{e.innerHTML='
';const i=s.video;if(!i)return;const r=i.slug,o=new Set([r]),n=i.category?Object.values(i.category):i.genres||[],l=i.country?Object.values(i.country):i.countries||[],d=i.year,c=[];if(n.length>0){let a="";typeof n[0]=="object"&&n[0].slug?a=n[0].slug:typeof n[0]=="string"&&(a=n[0].toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/đ/g,"d").replace(/\s+/g,"-")),a&&c.push(h.getRophimCatalog({page:1,limit:24,category:`the-loai/${a}`}).then(y=>({title:"More Like This",movies:y.movies||[]})).catch(()=>null))}if(l.length>0){let a="";typeof l[0]=="object"&&l[0].slug?a=l[0].slug:typeof l[0]=="string"&&(a=l[0].toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/đ/g,"d").replace(/\s+/g,"-")),a&&c.push(h.getRophimCatalog({page:1,limit:24,category:`quoc-gia/${a}`}).then(y=>({title:`Movies from ${l[0].name||l[0]}`,movies:y.movies||[]})).catch(()=>null))}d&&c.push(h.getRophimCatalog({page:1,limit:24,category:`nam-phat-hanh/${d}`}).then(a=>({title:`Released in ${d}`,movies:a.movies||[]})).catch(()=>null));const m=await Promise.all(c);e.innerHTML="";const u=new Set;let p=!1;m.forEach(a=>{if(!a||!a.movies||a.movies.length===0||a.title&&u.has(a.title))return;a.title&&u.add(a.title);const y=a.movies.filter(f=>!o.has(f.slug));if(y.forEach(f=>o.add(f.slug)),y.length===0)return;p=!0;const g=` -
- ${a.title?`

${a.title}

`:""} -
- ${y.map(f=>N(f)).join("")} -
-
- `;e.insertAdjacentHTML("beforeend",g)}),p||(e.innerHTML='

No specific recommendations found.

')}catch(i){console.error("Failed to load recommendations:",i),e.innerHTML='

Failed to load recommendations

'}}function N(e){const i=e.poster_url||e.thumbnail||e.thumb_url||"",r=e.name||e.title||"Untitled",o=e.year||"",n=e.quality||"HD",l=e.matchScore||Math.floor(Math.random()*15+85),d=e.tmdb_rating||0,c=Math.round(d*10);return` -
-
-
- - -
- - -
- ${o==new Date().getFullYear()?'NEW':""} - ${n.replace("FHD","HD")} -
- - -
-
- - -
- -

${r}

-
- ${l}% Match -
- - local_pizza ${c}% - -
-
-
-
-
- `}function B(e){document.body.innerHTML=` -
- error -

${e}

- Go Home -
- `}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",w):w(); diff --git a/backend/static/assets/watch-CsORLc4P.js b/backend/static/assets/watch-CsORLc4P.js new file mode 100644 index 0000000..6695e35 --- /dev/null +++ b/backend/static/assets/watch-CsORLc4P.js @@ -0,0 +1,104 @@ +import{a as b,s as w,i as C,K as $,h as f,b as P,d as T}from"./keyboard-nav-CZ5sEhKF.js";const l={video:null,currentEpisode:1,currentServer:0,recommendations:[],isLoading:!0};window.state=l;let t={};function E(){var e,i;t={videoPlayer:document.getElementById("videoPlayer"),videoPlayerContainer:document.getElementById("videoPlayerContainer"),playerLoading:document.getElementById("playerLoading"),closePlayer:document.getElementById("closePlayer"),heroBg:document.getElementById("heroBg"),movieTitle:document.getElementById("movieTitleDesktop"),movieMatch:document.getElementById("movieMatchDesktop"),movieYear:document.getElementById("movieYearDesktop"),movieRating:document.getElementById("movieRatingDesktop"),movieQuality:document.getElementById("movieQualityDesktop"),movieDescription:document.getElementById("movieDescriptionDesktop"),movieTags:document.getElementById("movieTags"),movieTitleMobile:document.getElementById("movieTitleMobile"),movieMatchMobile:document.getElementById("movieMatchMobile"),movieYearMobile:document.getElementById("movieYearMobile"),movieRatingMobile:document.getElementById("movieRatingMobile"),movieDuration:document.getElementById("movieDurationDesktop"),movieDurationMobile:document.getElementById("movieDurationMobile"),movieQualityMobile:document.getElementById("movieQualityMobile"),movieDescriptionMobile:document.getElementById("movieDescriptionMobile"),playBtn:document.getElementById("playBtnDesktop"),addListBtn:document.getElementById("addListBtnDesktop"),addListIcon:(e=document.getElementById("addListBtnDesktop"))==null?void 0:e.querySelector(".material-symbols-outlined"),addListText:(i=document.getElementById("addListBtnDesktop"))==null?void 0:i.querySelector("span:last-child"),playBtnMobile:document.getElementById("playBtnMobile"),addListBtnMobile:document.getElementById("addListBtnMobile"),shareBtnMobile:document.getElementById("shareBtnMobile"),mobilePlayBtn:document.getElementById("mobilePlayBtn"),watchHeader:document.getElementById("watchHeader"),tabNav:document.getElementById("tabNav"),watchBackBtn:document.getElementById("watchBackBtn"),episodesPanel:document.getElementById("episodesPanel"),trailersPanel:document.getElementById("trailersPanel"),detailsPanel:document.getElementById("detailsPanel"),seasonSelect:document.getElementById("seasonSelect"),seasonSelectContainer:document.getElementById("seasonSelectContainer"),episodeCount:document.getElementById("episodeCount"),episodesGrid:document.getElementById("episodesGrid"),episodesLoading:document.getElementById("episodesLoading"),castCarousel:document.getElementById("castCarousel"),recommendationsContainer:document.getElementById("recommendationsContainer"),detailsList:document.getElementById("detailsList"),searchModal:document.getElementById("searchModal"),searchBtn:document.getElementById("searchBtn"),searchInput:document.getElementById("searchInput"),closeSearch:document.getElementById("closeSearch")}}async function L(){E(),new $().init();const i=new URLSearchParams(window.location.search),o=i.get("id"),n=i.get("slug"),a=parseInt(i.get("ep"))||1;if(l.currentEpisode=a,!o&&!n){k("No video specified");return}E(),_(),await S(o,n),await F()}function _(){window.addEventListener("scroll",()=>{t.watchHeader&&(window.scrollY>50?t.watchHeader.style.backgroundColor="rgba(20,20,20,0.95)":t.watchHeader.style.backgroundColor="transparent")}),t.watchBackBtn&&t.watchBackBtn.addEventListener("click",o=>{var a;o.preventDefault(),t.videoPlayerContainer&&(t.videoPlayerContainer.style.display!=="none"||!t.videoPlayerContainer.classList.contains("hidden"))?(f(),(a=window.history.state)!=null&&a.playerOpen?window.history.back():v()):document.referrer&&document.referrer.includes(window.location.host)?(f(),window.history.back()):window.location.href="/index.html"});const e=document.getElementById("playerBackButton");if(e&&e.addEventListener("click",()=>{var o;f(),(o=window.history.state)!=null&&o.playerOpen?window.history.back():v()}),window.addEventListener("popstate",o=>{var s;const n=t.videoPlayerContainer||document.getElementById("videoPlayerContainer");n&&!n.classList.contains("hidden")&&!((s=o.state)!=null&&s.playerOpen)&&v(!1)}),document.addEventListener("keydown",o=>{o.key==="Escape"&&(t.videoPlayerContainer&&!t.videoPlayerContainer.classList.contains("hidden")&&v(),t.searchModal&&!t.searchModal.classList.contains("hidden")&&t.searchModal.classList.add("hidden"))}),[t.playBtn,t.playBtnMobile,t.mobilePlayBtn].forEach(o=>{o&&o.addEventListener("click",()=>{o&&P(),t.videoPlayerContainer&&(t.videoPlayerContainer.classList.remove("hidden"),t.videoPlayerContainer.style.display="block"),t.videoPlayer&&(t.videoPlayer.style.display="block"),I()})}),t.closePlayer&&t.closePlayer.addEventListener("click",()=>{var o;(o=window.history.state)!=null&&o.playerOpen?window.history.back():v()}),t.searchBtn&&t.searchBtn.addEventListener("click",()=>{t.searchModal&&(t.searchModal.classList.remove("hidden"),setTimeout(()=>{var o;return(o=t.searchInput)==null?void 0:o.focus()},100))}),t.closeSearch&&t.closeSearch.addEventListener("click",()=>{t.searchModal&&t.searchModal.classList.add("hidden")}),[t.addListBtn,t.addListBtnMobile].forEach(o=>{o&&o.addEventListener("click",()=>{var a;if(!l.video)return;const n=(a=window.historyService)==null?void 0:a.toggleFavorite(l.video);x(n),f(),n?w("Added to My List","success"):w("Removed from My List","info")})}),t.shareBtnMobile&&t.shareBtnMobile.addEventListener("click",()=>{var o;navigator.share?(f(),navigator.share({title:((o=l.video)==null?void 0:o.title)||"StreamFlix",url:window.location.href})):(f(),navigator.clipboard.writeText(window.location.href),w("Link copied to clipboard","success"))}),t.tabNav){const o=t.tabNav.querySelectorAll(".tab-btn"),n={episodes:t.episodesPanel,details:t.detailsPanel};o.forEach(a=>{a.addEventListener("click",()=>{f();const s=a.dataset.tab;o.forEach(d=>{d.classList.remove("text-white","font-bold","border-b-4","border-primary"),d.classList.add("text-gray-400","font-medium")}),a.classList.remove("text-gray-400","font-medium"),a.classList.add("text-white","font-bold","border-b-4","border-primary"),Object.entries(n).forEach(([d,c])=>{c&&(d===s?c.classList.remove("hidden"):c.classList.add("hidden"))})})})}document.querySelectorAll("#mobileBottomNav .nav-item").forEach(o=>{o.addEventListener("click",n=>{n.preventDefault();const a=o.dataset.view;a&&(f(),window.location.href=`/index.html?view=${a}`)})})}function v(e=!0){var a;const i=t.videoPlayerContainer||document.getElementById("videoPlayerContainer"),o=t.videoPlayer||document.getElementById("videoPlayer"),n=t.playerLoading||document.getElementById("playerLoading");i&&(i.classList.add("hidden"),i.style.display="none"),T(),o&&(o.innerHTML="",o.style.display="none"),n&&(n.style.display="none"),e&&((a=window.history.state)!=null&&a.playerOpen)}function x(e){const i=e?"check":"add",o=e?"In List":"My List";if(t.addListBtn){const n=t.addListBtn.querySelector(".material-symbols-outlined"),a=t.addListBtn.querySelector("span:last-child");n&&(n.textContent=i),a&&(a.textContent=o),e?t.addListBtn.classList.add("bg-white/20"):t.addListBtn.classList.remove("bg-white/20")}if(t.addListBtnMobile){const n=t.addListBtnMobile.querySelector(".material-symbols-outlined"),a=t.addListBtnMobile.querySelector("span:last-child");n&&(n.textContent=i),a&&(a.textContent=o),e?(t.addListBtnMobile.classList.add("bg-white/10"),t.addListBtnMobile.classList.remove("bg-[#2b2b2b]")):(t.addListBtnMobile.classList.remove("bg-white/10"),t.addListBtnMobile.classList.add("bg-[#2b2b2b]"))}}async function S(e,i){var o,n,a,s,d,c;try{l.isLoading=!0;let m=null;const u=i||e;if(u)try{const p=await b.getRophimMovie(u);if(p){const r=p.movie||p,y=p.episodes||[];m={id:r.slug||u,slug:r.slug||u,title:r.name||r.title||u,original_title:r.origin_name||r.original_title||"",description:r.content||r.description||"",thumbnail:r.poster_url||r.thumb_url||r.thumbnail||"",year:r.year,rating:((o=r.tmdb)==null?void 0:o.vote_average)||r.rating||"N/A",quality:r.quality||"HD",duration:r.time||r.duration||"",genres:Array.isArray(r.category)?r.category.map(g=>g.name||g):Array.isArray(r.genres)?r.genres:typeof r.genre=="string"?r.genre.split(",").map(g=>g.trim()):[],country:((a=(n=r.country)==null?void 0:n[0])==null?void 0:a.name)||r.country||"",country:((d=(s=r.country)==null?void 0:s[0])==null?void 0:d.name)||r.country||"",cast:r.actor||r.cast||[],director:((c=r.director)==null?void 0:c[0])||r.director||"",source_url:`https://phimmoichill.network/phim/${u}`,episodes:D(y)}}}catch(p){console.warn("API fetch failed:",p)}if(!m)throw new Error("Video data not found");l.video=m,window.historyService&&window.historyService.addToHistory(m,{episode:l.currentEpisode}),H(m),window.historyService&&x(window.historyService.isFavorite(m.slug))}catch(m){console.error("Failed to load video:",m),k("Failed to load video data")}finally{l.isLoading=!1}}function D(e){if(!e||!Array.isArray(e)||e.length===0)return[];const i=e[0];return((i==null?void 0:i.server_data)||[]).map((n,a)=>({number:a+1,name:n.name||`Episode ${a+1}`,title:n.filename||`Episode ${a+1}`,slug:n.slug||"",link_embed:n.link_embed||"",link_m3u8:n.link_m3u8||""}))}function H(e){if(t.heroBg){const i=e.backdrop||e.poster_url||e.thumb_url||e.thumbnail||"";i&&(t.heroBg.style.backgroundImage=`url('${i}')`)}if(t.movieTitle&&(t.movieTitle.textContent=e.title),t.movieYear&&(t.movieYear.textContent=e.year||""),t.movieDuration)if(e.runtime_minutes){const i=Math.floor(e.runtime_minutes/60),o=e.runtime_minutes%60;t.movieDuration.textContent=i>0?`${i}h ${o}m`:`${o}m`}else e.duration&&(t.movieDuration.textContent=e.duration);if(t.movieQuality&&(t.movieQuality.textContent=e.quality||"HD"),t.movieRating){const i=e.rating||e.tmdb_rating;i&&i!=="N/A"?t.movieRating.textContent=typeof i=="number"?`${i.toFixed(1)} ★`:i:t.movieRating.textContent="TV-MA"}if(t.movieMatch){const i=Math.floor(85+Math.random()*14);t.movieMatch.textContent=`${i}% Match`}if(t.movieDescription){const i=e.tmdb_description||e.description||"No description available.";t.movieDescription.innerHTML=i,t.movieDescriptionMobile&&(t.movieDescriptionMobile.innerHTML=i)}if(t.movieTitleMobile&&(t.movieTitleMobile.textContent=e.title),t.movieYearMobile&&(t.movieYearMobile.textContent=e.year||""),t.movieRatingMobile){const i=e.rating||e.tmdb_rating;t.movieRatingMobile.textContent=i&&i!=="N/A"?typeof i=="number"?i.toFixed(1):i:"TV-MA"}if(t.movieDurationMobile&&(t.movieDurationMobile.textContent=t.movieDuration?t.movieDuration.textContent:e.duration||""),t.movieQualityMobile&&(t.movieQualityMobile.textContent=e.quality||"HD"),t.movieMatchMobile&&t.movieMatch&&(t.movieMatchMobile.textContent=t.movieMatch.textContent),t.movieTags){const i=e.genres||[],o=e.director,n=e.country;let a="";i.length>0&&(a+=`
Genres: ${i.join(", ")}
`),o&&o!=="Unknown"&&(a+=`
Director: ${o}
`),n&&n!=="Unknown"&&(a+=`
Country: ${n}
`),t.movieTags.innerHTML=a}document.title=`${e.title} - StreamFlix`,window.historyService&&e.slug&&x(window.historyService.isFavorite(e.slug)),M(e),e.tmdb_cast&&e.tmdb_cast.length>0?B(e.tmdb_cast,!0):e.cast&&e.cast.length>0&&B(e.cast,!1),A(e)}function M(e){if(!t.episodesPanel)return;let i=[];if(Array.isArray(e.episodes)&&e.episodes.length>0&&(e.episodes[0].server_data?i=e.episodes[0].server_data:i=e.episodes),i.length<=1){t.seasonSelectContainer&&(t.seasonSelectContainer.style.display="none"),t.episodesLoading&&(t.episodesLoading.style.display="none"),t.episodesGrid&&(t.episodesGrid.innerHTML=` +
+ play_circle +
+

Full Movie

+

Click Play to watch

+
+
+ `);return}if(t.episodeCount&&(t.episodeCount.textContent=`${i.length} Episodes`),t.episodesLoading&&(t.episodesLoading.style.display="none"),t.episodesGrid){const n=i.length,a=n<=15,s=d=>{if(t.episodesGrid.innerHTML=i.slice(0,d).map((c,m)=>{const u=m+1,p=u===l.currentEpisode,r=c.name||`Episode ${u}`,y=c.title||c.filename||"";return` +
+
${u}
+
+

${r}

+ ${y?`

${y}

`:""} +
+ ${p?'play_circle':""} +
+ `}).join(""),dSee more episodes (${n-d} remaining) + expand_more + `,c.onclick=()=>s(n),t.episodesGrid.appendChild(c)}};s(a?n:10)}}function A(e){if(!t.detailsList)return;const i=[];e.original_title&&i.push({label:"Original Title",value:e.original_title}),e.director&&e.director!=="Unknown"&&i.push({label:"Director",value:e.director}),e.country&&e.country!=="Unknown"&&i.push({label:"Country",value:e.country}),e.year&&i.push({label:"Release Year",value:e.year}),e.quality&&i.push({label:"Quality",value:e.quality}),e.duration&&i.push({label:"Duration",value:e.duration}),e.genres&&e.genres.length>0&&i.push({label:"Genres",value:e.genres.join(", ")}),t.detailsList.innerHTML="",i.forEach(o=>{const n=document.createElement("div");n.className="flex gap-4";const a=document.createElement("span");a.className="text-white/50 min-w-[100px] font-medium",a.textContent=`${o.label}:`;const s=document.createElement("span");s.className="text-white font-medium",s.textContent=o.value,n.appendChild(a),n.appendChild(s),t.detailsList.appendChild(n)})}window.selectEpisode=e=>{l.currentEpisode=e;const i=new URL(window.location);i.searchParams.set("ep",e),window.history.replaceState({},"",i),M(l.video),I(),window.scrollTo({top:0,behavior:"smooth"})};async function I(){if(l.video){t.playerLoading&&(t.playerLoading.style.display="flex");try{let e=null,i=l.video.thumbnail,o=[];Array.isArray(l.video.episodes)&&l.video.episodes.length>0&&(l.video.episodes[0].server_data?o=l.video.episodes[0].server_data:o=l.video.episodes);const n=o[l.currentEpisode-1];if(window.historyService&&window.historyService.addToHistory(l.video,{episode:l.currentEpisode,timestamp:Date.now()}),n&&(n.link_m3u8?e=n.link_m3u8:n.link_embed&&(e=n.link_embed)),!e&&l.video.slug)try{const a=await b.getRophimStream(l.video.slug,l.currentEpisode);a!=null&&a.stream_url&&(e=a.stream_url)}catch(a){console.warn("Stream API fallback also failed",a)}if(t.playerLoading&&(t.playerLoading.style.display="none"),e){j(e,i,l.video.title);const a=o.length>1?`Episode ${l.currentEpisode} `:"Movie";w(`Playing ${a} `,"success")}else{const a=l.currentEpisode===1?"full":l.currentEpisode,s=`https://phimmoichill.network/xem-phim/${l.video.slug}/tap-${a}-sv-0`;N(s)}}catch(e){console.error(e),q(e.message)}}}function N(e){t.videoPlayer.innerHTML=` +
+ + + + + +

It cannot load

+

This stream is currently unavailable. Please try again later or choose another source.

+
+ `}function j(e,i,o){var a;e.includes("embed")||!e.match(/\.(mp4|m3u8)$/i)?t.videoPlayer.innerHTML=` + + `:(R(e,i,o),(a=window.history.state)!=null&&a.playerOpen||window.history.pushState({playerOpen:!0},"",window.location.href))}function R(e,i,o){const n=C(t.videoPlayer,{url:e,poster:i,title:o+` - Ep ${l.currentEpisode}`,autoplay:!0});if(n&&window.historyService){n.on("video:timeupdate",()=>{const d=n.currentTime,c=n.duration;d>0&&c>0&&Math.floor(d)%5===0&&window.historyService.addToHistory(l.video,{currentTime:d,duration:c,percentage:d/c*100,episode:l.currentEpisode})});const s=window.historyService.getHistory().find(d=>d.slug===l.video.slug);s&&s.progress&&s.progress.episode===l.currentEpisode&&s.progress.currentTime>0&&s.progress.percentage<95&&n.once("video:canplay",()=>{n.currentTime=s.progress.currentTime})}}function q(e){t.videoPlayer.innerHTML=` +
+

Error loading video: ${e}

+ +
+ `}function B(e,i=!1){if(!t.castCarousel)return;const o=e.slice(0,10);i?t.castCarousel.innerHTML=o.map(n=>{const a=n.profile_photo&&!n.profile_photo.includes("ui-avatars.com"),s=n.profile_photo||"",d=`/?search=${encodeURIComponent(n.name)}`,c=n.name.split(" ").map(m=>m[0]).join("").toUpperCase().slice(0,2);return` + +
+ ${a?`${n.name}`:`
${c}
`} +
+

${n.name}

+

${n.character||"Actor"}

+
+ `}).join(""):t.castCarousel.innerHTML=o.map(n=>{const a=`/?search=${encodeURIComponent(n)}`,s=n.split(" ").map(d=>d[0]).join("").toUpperCase().slice(0,2);return` + +
+ ${s} +
+

${n}

+

Actor

+
+ `}).join("")}async function F(){const e=t.recommendationsContainer;if(e)try{e.innerHTML='
';const i=l.video;if(!i)return;const o=i.slug,n=new Set([o]),a=i.category?Object.values(i.category):i.genres||[],s=i.country?Object.values(i.country):i.countries||[],d=i.year,c=[];if(a.length>0){let r="";typeof a[0]=="object"&&a[0].slug?r=a[0].slug:typeof a[0]=="string"&&(r=a[0].toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/đ/g,"d").replace(/\s+/g,"-")),r&&c.push(b.getRophimCatalog({page:1,limit:24,category:`the-loai/${r}`}).then(y=>({title:"More Like This",movies:y.movies||[]})).catch(()=>null))}if(s.length>0){let r="";typeof s[0]=="object"&&s[0].slug?r=s[0].slug:typeof s[0]=="string"&&(r=s[0].toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/đ/g,"d").replace(/\s+/g,"-")),r&&c.push(b.getRophimCatalog({page:1,limit:24,category:`quoc-gia/${r}`}).then(y=>({title:`Movies from ${s[0].name||s[0]}`,movies:y.movies||[]})).catch(()=>null))}d&&c.push(b.getRophimCatalog({page:1,limit:24,category:`nam-phat-hanh/${d}`}).then(r=>({title:`Released in ${d}`,movies:r.movies||[]})).catch(()=>null));const m=await Promise.all(c);e.innerHTML="";const u=new Set;let p=!1;m.forEach(r=>{if(!r||!r.movies||r.movies.length===0||r.title&&u.has(r.title))return;r.title&&u.add(r.title);const y=r.movies.filter(h=>!n.has(h.slug));if(y.forEach(h=>n.add(h.slug)),y.length===0)return;p=!0;const g=` +
+ ${r.title?`

${r.title}

`:""} +
+ ${y.map(h=>O(h)).join("")} +
+
+ `;e.insertAdjacentHTML("beforeend",g)}),p||(e.innerHTML='

No specific recommendations found.

')}catch(i){console.error("Failed to load recommendations:",i),e.innerHTML='

Failed to load recommendations

'}}function O(e){const i=e.poster_url||e.thumbnail||e.thumb_url||"",o=e.name||e.title||"Untitled",n=e.year||"",a=e.quality||"HD",s=e.matchScore||Math.floor(Math.random()*15+85),d=e.tmdb_rating||0,c=Math.round(d*10);return` +
+
+
+ + +
+ + +
+ ${n==new Date().getFullYear()?'NEW':""} + ${a.replace("FHD","HD")} +
+ + +
+
+ + +
+ +

${o}

+
+ ${s}% Match +
+ + local_pizza ${c}% + +
+
+
+
+
+ `}function k(e){document.body.innerHTML=` +
+ error +

${e}

+ Go Home +
+ `}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",L):L(); diff --git a/backend/static/assets/web-Bp6c6Vk9.js b/backend/static/assets/web-Bp6c6Vk9.js new file mode 100644 index 0000000..266c11f --- /dev/null +++ b/backend/static/assets/web-Bp6c6Vk9.js @@ -0,0 +1 @@ +import{W as a,I as i,N as r}from"./keyboard-nav-CZ5sEhKF.js";class o extends a{constructor(){super(...arguments),this.selectionStarted=!1}async impact(t){const e=this.patternForImpact(t==null?void 0:t.style);this.vibrateWithPattern(e)}async notification(t){const e=this.patternForNotification(t==null?void 0:t.type);this.vibrateWithPattern(e)}async vibrate(t){const e=(t==null?void 0:t.duration)||300;this.vibrateWithPattern([e])}async selectionStart(){this.selectionStarted=!0}async selectionChanged(){this.selectionStarted&&this.vibrateWithPattern([70])}async selectionEnd(){this.selectionStarted=!1}patternForImpact(t=i.Heavy){return t===i.Medium?[43]:t===i.Light?[20]:[61]}patternForNotification(t=r.Success){return t===r.Warning?[30,40,30,50,60]:t===r.Error?[27,45,50]:[35,65,21]}vibrateWithPattern(t){if(navigator.vibrate)navigator.vibrate(t);else throw this.unavailable("Browser does not support the vibrate API")}}export{o as HapticsWeb}; diff --git a/backend/static/index.html b/backend/static/index.html index fb99218..efc04cf 100644 --- a/backend/static/index.html +++ b/backend/static/index.html @@ -3,7 +3,7 @@ - + StreamFlix - Homepage @@ -42,6 +42,21 @@ @@ -107,11 +197,21 @@ - - + + + + +
+ +
+
+
+
Initializing StreamFlix...
+
+
@@ -121,10 +221,8 @@
- - movie - + + StreamFlix