react-helios 2.7.3 → 2.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import at,{memo,useState,useMemo,useRef,useEffect,useCallback,forwardRef}from'react';import Ce,{Events}from'hls.js';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var lt=Object.defineProperty;var ct=(n,r)=>{for(var o in r)lt(n,o,{get:r[o],enumerable:true});};function de(n){if(!Number.isFinite(n)||n<0)return "0:00";let r=Math.floor(n),o=Math.floor(r/3600),a=Math.floor(r%3600/60),l=r%60;return o>0?`${o}:${String(a).padStart(2,"0")}:${String(l).padStart(2,"0")}`:`${a}:${String(l).padStart(2,"0")}`}function Te(n){try{return new URL(n,"https://x").pathname.toLowerCase().endsWith(".m3u8")||/\/hls\//i.test(n)||/\/stream\.m3u8/i.test(n)}catch{return n.toLowerCase().includes(".m3u8")}}function dt(n){if(Te(n))return "application/x-mpegURL";let r=n.toLowerCase().split("?")[0];return r.endsWith(".mp4")?"video/mp4":r.endsWith(".webm")?"video/webm":r.endsWith(".ogv")||r.endsWith(".ogg")?"video/ogg":r.endsWith(".mov")?"video/quicktime":"video/mp4"}function Ke(n){return n.map((r,o)=>({id:o,height:r.height??0,width:r.width??0,bitrate:r.bitrate??0,name:r.height?`${r.height}p`:`Level ${o+1}`}))}var vt={isPlaying:false,currentTime:0,duration:0,volume:1,isMuted:false,playbackRate:1,isFullscreen:false,isPictureInPicture:false,isTheaterMode:false,isAudioMode:false,isBuffering:false,bufferedRanges:[],error:null,isLive:false,qualityLevels:[],currentQualityLevel:-1};function Qe(n,r,o={}){let a=useRef(null),l=useRef(null),d=useRef(1),f=useRef(0),g=useRef(0),M=useRef(r),s=useRef(o);s.current=o;let[T,m]=useState({...vt,isMuted:o.muted??false,volume:o.muted?0:1,isAudioMode:o.defaultAudioMode??false}),x=useRef(T);x.current=T;let V=useRef([]),p=useRef(0),w=useRef(false),D=useRef(false),I=useRef(null),E=useRef(null),R=useRef(false),P=useCallback(()=>{let e=s.current;return x.current.isAudioMode&&e.audioSrc&&e.audioRef?.current?e.audioRef.current:n.current},[n]);useEffect(()=>{let e=n.current;if(!e)return;let t=false;if(a.current&&(a.current.destroy(),a.current=null),f.current=0,g.current=0,V.current=[],p.current=0,w.current=false,D.current=false,I.current&&(clearTimeout(I.current),I.current=null),E.current&&(clearTimeout(E.current),E.current=null),R.current=false,m(u=>({...u,currentTime:0,duration:0,error:null,isPlaying:false,isBuffering:!!r,isLive:false,qualityLevels:[],currentQualityLevel:-1,isAudioMode:s.current.defaultAudioMode??false})),!r)return ()=>{t=true;};let i=s.current;if(i.enableHLS!==false&&Te(r))if(Ce.isSupported()){let u=new Ce({autoStartLoad:true,startLevel:-1,capLevelToPlayerSize:true,capLevelOnFPSDrop:true,enableWorker:true,maxBufferLength:30,maxMaxBufferLength:600,maxBufferSize:6e7,liveBackBufferLength:30,liveSyncDurationCount:3,...i.hlsConfig});u.attachMedia(e),u.loadSource(r),u.on(Events.MANIFEST_PARSED,(C,k)=>{if(t)return;let L=Ke(k.levels);m(c=>({...c,qualityLevels:L,currentQualityLevel:-1})),s.current.autoplay&&e.play().catch(()=>{});}),u.on(Events.LEVEL_SWITCHED,(C,k)=>{if(t)return;m(h=>({...h,currentQualityLevel:k.level}));let L=s.current,c=L.audioModeSwitchLevel;c===void 0||c<0||!L.audioSrc||D.current||p.current<3||m(h=>!h.isAudioMode&&k.level<=c?(w.current=true,s.current.onAudioModeChange?.(true),{...h,isAudioMode:true}):h);}),u.on(Events.FRAG_LOADED,(C,k)=>{if(t)return;g.current=0;let L=s.current;if(!L.audioSrc)return;p.current+=1;let c=k.stats.loading.end-k.stats.loading.start,h=c>0&&k.stats.total>0?k.stats.total*8/c:0,O=L.audioBandwidthThreshold??300;if(R.current){R.current=false,h>0&&O&&h>O*1.5?(w.current=false,u.startLoad(),s.current.onAudioModeChange?.(false),m(y=>({...y,isAudioMode:false}))):(u.stopLoad(),v());return}if(!O||D.current||h<=0)return;let H=V.current;if(H.push(h),H.length>5&&H.shift(),H.length<2)return;let Y=H.reduce((y,K)=>y+K,0)/H.length;m(y=>!y.isAudioMode&&Y<O?(w.current=true,s.current.onAudioModeChange?.(true),{...y,isAudioMode:true}):y);});let v=()=>{E.current&&clearTimeout(E.current);let C=s.current.audioModeRecoveryInterval??3e4;E.current=setTimeout(()=>{!w.current||!x.current.isAudioMode||(R.current=true,u.startLoad());},C);},b=3;u.on(Events.ERROR,(C,k)=>{if(!t){if(!k.fatal){console.warn("[hls] non-fatal:",k.details);return}switch(k.type){case Ce.ErrorTypes.NETWORK_ERROR:if(f.current<b){f.current+=1;let L=1e3*f.current;console.warn(`[hls] network error \u2013 retry ${f.current}/${b} in ${L}ms`),setTimeout(()=>{a.current===u&&u.startLoad();},L);}else {let L={code:"HLS_NETWORK_ERROR",message:"Failed to load stream after multiple retries."};m(c=>({...c,error:L})),s.current.onError?.(L);}break;case Ce.ErrorTypes.MEDIA_ERROR:if(g.current<b)g.current+=1,console.warn(`[hls] media error \u2013 recovery attempt ${g.current}/${b}`),u.recoverMediaError();else {u.destroy(),a.current=null;let L={code:"HLS_FATAL_ERROR",message:"An unrecoverable media error occurred."};m(c=>({...c,error:L})),s.current.onError?.(L);}break;default:{u.destroy(),a.current=null;let L={code:"HLS_FATAL_ERROR",message:"An unrecoverable HLS error occurred."};m(c=>({...c,error:L})),s.current.onError?.(L);break}}}}),a.current=u;}else e.canPlayType("application/vnd.apple.mpegurl")&&(e.src=r,e.load(),i.autoplay&&e.play().catch(()=>{}));else e.src=r,e.load(),i.autoplay&&e.play().catch(()=>{});return ()=>{t=true,a.current&&(a.current.destroy(),a.current=null),I.current&&(clearTimeout(I.current),I.current=null),E.current&&(clearTimeout(E.current),E.current=null),R.current=false;let u=s.current.audioRef?.current;u&&(u.pause(),u.removeAttribute("src"),u.load());}},[r,n]),useEffect(()=>{let e=n.current;if(!e)return;s.current.muted&&(e.muted=true),s.current.loop&&(e.loop=true);let t=()=>{m(y=>({...y,isPlaying:true})),s.current.onPlay?.();},i=()=>{m(y=>({...y,isPlaying:false})),s.current.onPause?.();},u=()=>{m(y=>({...y,isPlaying:false})),s.current.onEnded?.();},v=()=>{x.current.isAudioMode&&s.current.audioSrc||s.current.onTimeUpdate?.(e.currentTime);},b=()=>{let y=e.duration,K=!Number.isFinite(y);m(fe=>({...fe,duration:K?0:y,isLive:K})),K||s.current.onDurationChange?.(y);},C=()=>{let y=e.volume;y>0&&!e.muted&&(d.current=y),m(K=>({...K,volume:y,isMuted:e.muted||y===0}));},k=()=>{m(y=>({...y,playbackRate:e.playbackRate}));},L=()=>{let y=e.error;if(!y||a.current)return;let fe={code:{1:"MEDIA_ERR_ABORTED",2:"MEDIA_ERR_NETWORK",3:"MEDIA_ERR_DECODE",4:"MEDIA_ERR_SRC_NOT_SUPPORTED"}[y.code]??"UNKNOWN",message:y.message||"Unknown media error"};m(He=>({...He,error:fe})),s.current.onError?.(fe);},c=()=>{m(y=>({...y,isBuffering:true})),s.current.onBuffering?.(true);},h=()=>{m(y=>({...y,isBuffering:false})),s.current.onBuffering?.(false);},O=()=>m(y=>({...y,isBuffering:false})),H=()=>{let y=!!(document.fullscreenElement||document.webkitFullscreenElement);m(K=>({...K,isFullscreen:y}));},Y=()=>{m(y=>({...y,isPictureInPicture:document.pictureInPictureElement===e}));};return e.addEventListener("play",t),e.addEventListener("pause",i),e.addEventListener("ended",u),e.addEventListener("timeupdate",v),e.addEventListener("durationchange",b),e.addEventListener("volumechange",C),e.addEventListener("ratechange",k),e.addEventListener("error",L),e.addEventListener("waiting",c),e.addEventListener("canplay",h),e.addEventListener("playing",O),document.addEventListener("fullscreenchange",H),document.addEventListener("webkitfullscreenchange",H),e.addEventListener("enterpictureinpicture",Y),e.addEventListener("leavepictureinpicture",Y),()=>{e.removeEventListener("play",t),e.removeEventListener("pause",i),e.removeEventListener("ended",u),e.removeEventListener("timeupdate",v),e.removeEventListener("durationchange",b),e.removeEventListener("volumechange",C),e.removeEventListener("ratechange",k),e.removeEventListener("error",L),e.removeEventListener("waiting",c),e.removeEventListener("canplay",h),e.removeEventListener("playing",O),document.removeEventListener("fullscreenchange",H),document.removeEventListener("webkitfullscreenchange",H),e.removeEventListener("enterpictureinpicture",Y),e.removeEventListener("leavepictureinpicture",Y);}},[n]),useEffect(()=>{let e=s.current.audioRef?.current;if(!e||!s.current.audioSrc)return;let t=()=>{m(h=>({...h,isPlaying:true})),s.current.onPlay?.();},i=()=>{m(h=>({...h,isPlaying:false})),s.current.onPause?.();},u=()=>{m(h=>({...h,isPlaying:false})),s.current.onEnded?.();},v=()=>{m(h=>({...h,isBuffering:true})),s.current.onBuffering?.(true);},b=()=>{m(h=>({...h,isBuffering:false})),s.current.onBuffering?.(false);},C=()=>m(h=>({...h,isBuffering:false})),k=()=>{x.current.isAudioMode&&s.current.onTimeUpdate?.(e.currentTime);},L=()=>{let h=e.duration;isFinite(h)&&(m(O=>({...O,duration:h})),s.current.onDurationChange?.(h));},c=()=>{let h={code:"MEDIA_ERR_NETWORK",message:"Audio source failed to load."};m(O=>({...O,error:h})),s.current.onError?.(h);};return e.addEventListener("play",t),e.addEventListener("pause",i),e.addEventListener("ended",u),e.addEventListener("waiting",v),e.addEventListener("canplay",b),e.addEventListener("playing",C),e.addEventListener("timeupdate",k),e.addEventListener("durationchange",L),e.addEventListener("error",c),()=>{e.removeEventListener("play",t),e.removeEventListener("pause",i),e.removeEventListener("ended",u),e.removeEventListener("waiting",v),e.removeEventListener("canplay",b),e.removeEventListener("playing",C),e.removeEventListener("timeupdate",k),e.removeEventListener("durationchange",L),e.removeEventListener("error",c);}},[r]),useEffect(()=>{let e=s.current,t=n.current,i=e.audioRef?.current;if(!(!t||!i||!e.audioSrc)){if(M.current!==r){M.current=r;return}if(M.current=r,T.isAudioMode){let u=t.currentTime,v=!t.paused;if(t.pause(),a.current?.stopLoad(),i.getAttribute("src")||(i.src=e.audioSrc),i.currentTime=u,i.volume=t.volume,i.muted=t.muted,i.playbackRate=t.playbackRate,v&&i.play().catch(()=>{}),w.current){E.current&&clearTimeout(E.current);let b=e.audioModeRecoveryInterval??3e4;E.current=setTimeout(()=>{!w.current||!x.current.isAudioMode||(R.current=true,a.current?.startLoad());},b);}}else {let u=i.currentTime,v=!i.paused;i.pause(),E.current&&(clearTimeout(E.current),E.current=null),R.current=false,a.current?.startLoad(),t.currentTime=u,t.volume=i.volume,v&&t.play().catch(()=>{});}}},[T.isAudioMode,n,r]);let S=useCallback(async()=>{let e=P();if(e)try{await e.play();}catch(t){t instanceof Error&&t.name!=="AbortError"&&console.error("[player] play() failed:",t);}},[P]),U=useCallback(()=>{P()?.pause();},[P]),te=useCallback(e=>{let t=P();t&&(t.currentTime=Math.max(0,Math.min(e,t.duration||e)));},[P]),G=useCallback(e=>{let t=P();if(!t)return;let i=Math.max(0,Math.min(e,1));i>0&&(d.current=i),t.volume=i,t.muted=i===0;},[P]),B=useCallback(()=>{let e=P();if(e)if(e.muted||e.volume===0){let t=d.current>0?d.current:1;e.volume=t,e.muted=false;}else d.current=e.volume,e.muted=true;},[P]),N=useCallback(e=>{let t=n.current;t&&(t.playbackRate=e);let i=s.current.audioRef?.current;i&&(i.playbackRate=e);},[n]),$=useCallback(e=>{let t=a.current;t&&(t.currentLevel=e,m(i=>({...i,currentQualityLevel:e})));},[]),Z=useCallback(()=>{let e=a.current,t=n.current;if(!e||!t)return;let i=e.liveSyncPosition;i!=null&&Number.isFinite(i)&&(t.currentTime=i);},[n]),re=useCallback(async()=>{let e=n.current;if(!e)return;let t=l.current??e.parentElement;if(t)try{!document.fullscreenElement&&!document.webkitFullscreenElement?t.requestFullscreen?await t.requestFullscreen():t.webkitRequestFullscreen?.():document.exitFullscreen?await document.exitFullscreen():document.webkitExitFullscreen?.();}catch(i){console.error("[player] fullscreen toggle failed:",i);}},[n]),ne=useCallback(async()=>{let e=n.current;if(e)try{document.pictureInPictureElement?await document.exitPictureInPicture():await e.requestPictureInPicture();}catch(t){console.error("[player] PiP toggle failed:",t);}},[n]),oe=useCallback(()=>{let e=!x.current.isTheaterMode;m(t=>({...t,isTheaterMode:e})),s.current.onTheaterModeChange?.(e);},[]),ie=useCallback(()=>{I.current&&clearTimeout(I.current),w.current=false,D.current=true,I.current=setTimeout(()=>{D.current=false,V.current=[];},6e4);let e=!x.current.isAudioMode;m(t=>({...t,isAudioMode:e})),s.current.onAudioModeChange?.(e);},[]),ae=useCallback(()=>{let e=P(),t=e?.currentTime??0,i=[];if(e)for(let u=0;u<e.buffered.length;u++)i.push({start:e.buffered.start(u),end:e.buffered.end(u)});return {...x.current,currentTime:t,bufferedRanges:i}},[P]),se=useCallback(()=>n.current??null,[n]),ce=useMemo(()=>({play:S,pause:U,seek:te,setVolume:G,toggleMute:B,setPlaybackRate:N,setQualityLevel:$,seekToLive:Z,toggleFullscreen:re,togglePictureInPicture:ne,toggleTheaterMode:oe,toggleAudioMode:ie,getState:ae,getVideoElement:se}),[S,U,te,G,B,N,$,Z,re,ne,oe,ie,ae,se]);return {state:T,ref:ce,hlsRef:a,fullscreenContainerRef:l}}var tt={};ct(tt,{ControlElements:()=>X,FullscreenButton:()=>Ee,PauseButton:()=>ye,PiPButton:()=>Me,PlayButton:()=>be,ProgressBar:()=>we,SettingsMenu:()=>Se,TheaterButton:()=>Le,TimeDisplay:()=>Ae,VolumeControl:()=>xe});var be=memo(({onClick:n})=>jsx("button",{onClick:n,className:"controlButton","aria-label":"Play",title:"Play (Space)",children:jsx("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"currentColor",children:jsx("path",{d:"M8 5v14l11-7z"})})}));be.displayName="PlayButton";var ye=memo(({onClick:n})=>jsx("button",{onClick:n,className:"controlButton","aria-label":"Pause",title:"Pause (Space)",children:jsx("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"currentColor",children:jsx("path",{d:"M6 4h4v16H6V4zm8 0h4v16h-4V4z"})})}));ye.displayName="PauseButton";var Ee=memo(({onClick:n,isFullscreen:r=false})=>jsx("button",{onClick:n,className:"controlButton","aria-label":r?"Exit Fullscreen":"Fullscreen",title:r?"Exit Fullscreen (F)":"Fullscreen (F)",children:jsx("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"currentColor",children:r?jsx("path",{d:"M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"}):jsx("path",{d:"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"})})}));Ee.displayName="FullscreenButton";var Me=memo(({onClick:n,isPiP:r=false})=>jsx("button",{onClick:n,className:"controlButton","aria-label":r?"Exit Picture-in-Picture":"Picture-in-Picture",title:r?"Exit Picture-in-Picture (P)":"Picture-in-Picture (P)",children:jsx("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"currentColor",children:jsx("path",{d:"M19 11h-8v6h8v-6zm4 8V4.98C23 3.88 22.1 3 21 3H3c-1.1 0-2 .88-2 1.98V19c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2zm-2 .02H3V5h18v14.02z"})})}));Me.displayName="PiPButton";var Le=memo(({onClick:n,isTheater:r=false})=>jsx("button",{onClick:n,className:"controlButton","aria-label":r?"Exit Theater Mode":"Theater Mode",title:r?"Exit Theater Mode (T)":"Theater Mode (T)",children:jsx("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"currentColor",children:r?jsx("path",{d:"M19 7H5c-1.1 0-2 .9-2 2v6c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V9c0-1.1-.9-2-2-2zm0 8H5V9h14v6z"}):jsx("path",{d:"M21 3H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H3V5h18v14z"})})}));Le.displayName="TheaterButton";var qe=memo(({volume:n,isMuted:r,onVolumeChange:o,onToggleMute:a})=>{let[l,d]=useState(false),f=r?0:n,g=f*100,M=useMemo(()=>`linear-gradient(to right, #60a5fa 0%, #60a5fa ${g}%, rgba(255,255,255,0.3) ${g}%, rgba(255,255,255,0.3) 100%)`,[g]);return jsxs("div",{className:"volumeContainer",onMouseEnter:()=>d(true),onMouseLeave:()=>d(false),children:[jsx("button",{onClick:a,className:"controlButton","aria-label":r?"Unmute":"Mute",title:r?"Unmute (M)":"Mute (M)",children:jsx("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"currentColor",children:f===0?jsx("path",{d:"M16.5 12c0-1.77-1.02-3.29-2.5-4.03v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51C23.16 14.42 24 13.3 24 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06c1.38-.31 2.63-.95 3.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4L9.91 6.09 12 8.18V4z"}):f<.5?jsx("path",{d:"M7 9v6h4l5 5V4l-5 5H7z"}):jsx("path",{d:"M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z"})})}),l&&jsx("input",{type:"range",min:"0",max:"100",value:g,onChange:s=>o(Number(s.target.value)/100),className:"volumeSlider",style:{background:M},"aria-label":"Volume","aria-valuenow":Math.round(g)})]})});qe.displayName="VolumeControl";var xe=qe;function Xe(n){let r=n.trim().split(":");return r.length===3?+r[0]*3600+ +r[1]*60+parseFloat(r[2]):+r[0]*60+parseFloat(r[1])}function yt(n,r){if(/^https?:\/\//i.test(r))return r;try{return new URL(r,n).href}catch{return r}}function Ve(n,r=""){let o=[],a=n.replace(/\r\n/g,`
1
+ import at,{memo,useState,useMemo,useRef,useEffect,useCallback,forwardRef}from'react';import Ce,{Events}from'hls.js';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var ct=Object.defineProperty;var dt=(o,r)=>{for(var i in r)ct(o,i,{get:r[i],enumerable:true});};function me(o){if(!Number.isFinite(o)||o<0)return "0:00";let r=Math.floor(o),i=Math.floor(r/3600),u=Math.floor(r%3600/60),m=r%60;return i>0?`${i}:${String(u).padStart(2,"0")}:${String(m).padStart(2,"0")}`:`${u}:${String(m).padStart(2,"0")}`}function Te(o){try{return new URL(o,"https://x").pathname.toLowerCase().endsWith(".m3u8")||/\/hls\//i.test(o)||/\/stream\.m3u8/i.test(o)}catch{return o.toLowerCase().includes(".m3u8")}}function mt(o){if(Te(o))return "application/x-mpegURL";let r=o.toLowerCase().split("?")[0];return r.endsWith(".mp4")?"video/mp4":r.endsWith(".webm")?"video/webm":r.endsWith(".ogv")||r.endsWith(".ogg")?"video/ogg":r.endsWith(".mov")?"video/quicktime":"video/mp4"}function Ke(o){return o.map((r,i)=>({id:i,height:r.height??0,width:r.width??0,bitrate:r.bitrate??0,name:r.height?`${r.height}p`:`Level ${i+1}`}))}var pt={isPlaying:false,currentTime:0,duration:0,volume:1,isMuted:false,playbackRate:1,isFullscreen:false,isPictureInPicture:false,isTheaterMode:false,isAudioMode:false,isBuffering:false,bufferedRanges:[],error:null,isLive:false,qualityLevels:[],currentQualityLevel:-1};function Qe(o,r,i={}){let u=useRef(null),m=useRef(null),v=useRef(1),c=useRef(0),b=useRef(0),M=useRef(r),s=useRef(i);s.current=i;let[k,d]=useState({...pt,isMuted:i.muted??false,volume:i.muted?0:1,isAudioMode:i.defaultAudioMode??false}),w=useRef(k);w.current=k;let A=useRef([]),g=useRef(0),L=useRef(false),H=useRef(false),I=useRef(null),P=useRef(null),x=useRef(false),C=useCallback(()=>{let e=s.current;return w.current.isAudioMode&&e.audioSrc&&e.audioRef?.current?e.audioRef.current:o.current},[o]);useEffect(()=>{let e=o.current;if(!e)return;let t=false;if(u.current&&(u.current.destroy(),u.current=null),c.current=0,b.current=0,A.current=[],g.current=0,L.current=false,H.current=false,I.current&&(clearTimeout(I.current),I.current=null),P.current&&(clearTimeout(P.current),P.current=null),x.current=false,d(a=>({...a,currentTime:0,duration:0,error:null,isPlaying:false,isBuffering:!!r,isLive:false,qualityLevels:[],currentQualityLevel:-1,isAudioMode:s.current.defaultAudioMode??false})),!r)return ()=>{t=true;};let n=s.current;if(n.enableHLS!==false&&Te(r))if(Ce.isSupported()){let a=new Ce({autoStartLoad:true,startLevel:-1,capLevelToPlayerSize:true,capLevelOnFPSDrop:true,enableWorker:true,maxBufferLength:30,maxMaxBufferLength:600,maxBufferSize:6e7,liveBackBufferLength:30,liveSyncDurationCount:3,...n.hlsConfig});a.attachMedia(e),a.loadSource(r),a.on(Events.MANIFEST_PARSED,(h,y)=>{if(t)return;let T=Ke(y.levels);d(R=>({...R,qualityLevels:T,currentQualityLevel:-1})),s.current.autoplay&&e.play().catch(()=>{});}),a.on(Events.LEVEL_SWITCHED,(h,y)=>{if(t)return;d(l=>({...l,currentQualityLevel:y.level}));let T=s.current,R=T.audioModeSwitchLevel;R===void 0||R<0||!T.audioSrc||H.current||g.current<3||d(l=>!l.isAudioMode&&y.level<=R?(L.current=true,s.current.onAudioModeChange?.(true),{...l,isAudioMode:true}):l);}),a.on(Events.FRAG_LOADED,(h,y)=>{if(t)return;b.current=0;let T=s.current;if(!T.audioSrc)return;g.current+=1;let R=y.stats.loading.end-y.stats.loading.start,l=R>0&&y.stats.total>0?y.stats.total*8/R:0,S=T.audioBandwidthThreshold??300;if(x.current){x.current=false,l>0&&S&&l>S*1.5?(L.current=false,a.startLoad(),s.current.onAudioModeChange?.(false),d(p=>({...p,isAudioMode:false}))):(a.stopLoad(),E());return}if(!S||H.current||l<=0)return;let O=A.current;if(O.push(l),O.length>5&&O.shift(),O.length<2)return;let Q=O.reduce((p,q)=>p+q,0)/O.length;d(p=>!p.isAudioMode&&Q<S?(L.current=true,s.current.onAudioModeChange?.(true),{...p,isAudioMode:true}):p);});let E=()=>{P.current&&clearTimeout(P.current);let h=s.current.audioModeRecoveryInterval??3e4;P.current=setTimeout(()=>{!L.current||!w.current.isAudioMode||(x.current=true,a.startLoad());},h);},f=3;a.on(Events.ERROR,(h,y)=>{if(!t){if(!y.fatal){console.warn("[hls] non-fatal:",y.details);return}switch(y.type){case Ce.ErrorTypes.NETWORK_ERROR:if(c.current<f){c.current+=1;let T=1e3*c.current;console.warn(`[hls] network error \u2013 retry ${c.current}/${f} in ${T}ms`),setTimeout(()=>{u.current===a&&a.startLoad();},T);}else {let T={code:"HLS_NETWORK_ERROR",message:"Failed to load stream after multiple retries."};d(R=>({...R,error:T})),s.current.onError?.(T);}break;case Ce.ErrorTypes.MEDIA_ERROR:if(b.current<f)b.current+=1,console.warn(`[hls] media error \u2013 recovery attempt ${b.current}/${f}`),a.recoverMediaError();else {a.destroy(),u.current=null;let T={code:"HLS_FATAL_ERROR",message:"An unrecoverable media error occurred."};d(R=>({...R,error:T})),s.current.onError?.(T);}break;default:{a.destroy(),u.current=null;let T={code:"HLS_FATAL_ERROR",message:"An unrecoverable HLS error occurred."};d(R=>({...R,error:T})),s.current.onError?.(T);break}}}}),u.current=a;}else e.canPlayType("application/vnd.apple.mpegurl")&&(e.src=r,e.load(),n.autoplay&&e.play().catch(()=>{}));else e.src=r,e.load(),n.autoplay&&e.play().catch(()=>{});return ()=>{t=true,u.current&&(u.current.destroy(),u.current=null),I.current&&(clearTimeout(I.current),I.current=null),P.current&&(clearTimeout(P.current),P.current=null),x.current=false;let a=s.current.audioRef?.current;a&&(a.pause(),a.removeAttribute("src"),a.load());}},[r,o]),useEffect(()=>{let e=o.current;if(!e)return;s.current.muted&&(e.muted=true),s.current.loop&&(e.loop=true);let t=()=>{d(p=>({...p,isPlaying:true})),s.current.onPlay?.();},n=()=>{d(p=>({...p,isPlaying:false})),s.current.onPause?.();},a=()=>{d(p=>({...p,isPlaying:false})),s.current.onEnded?.();},E=()=>{w.current.isAudioMode&&s.current.audioSrc||s.current.onTimeUpdate?.(e.currentTime);},f=()=>{let p=e.duration,q=!Number.isFinite(p);d(de=>({...de,duration:q?0:p,isLive:q})),q||s.current.onDurationChange?.(p);},h=()=>{let p=e.volume;p>0&&!e.muted&&(v.current=p),d(q=>({...q,volume:p,isMuted:e.muted||p===0}));},y=()=>{d(p=>({...p,playbackRate:e.playbackRate}));},T=()=>{let p=e.error;if(!p||u.current)return;let de={code:{1:"MEDIA_ERR_ABORTED",2:"MEDIA_ERR_NETWORK",3:"MEDIA_ERR_DECODE",4:"MEDIA_ERR_SRC_NOT_SUPPORTED"}[p.code]??"UNKNOWN",message:p.message||"Unknown media error"};d(He=>({...He,error:de})),s.current.onError?.(de);},R=()=>{d(p=>({...p,isBuffering:true})),s.current.onBuffering?.(true);},l=()=>{d(p=>({...p,isBuffering:false})),s.current.onBuffering?.(false);},S=()=>d(p=>({...p,isBuffering:false})),O=()=>{let p=!!(document.fullscreenElement||document.webkitFullscreenElement);d(q=>({...q,isFullscreen:p}));},Q=()=>{d(p=>({...p,isPictureInPicture:document.pictureInPictureElement===e}));};return e.addEventListener("play",t),e.addEventListener("pause",n),e.addEventListener("ended",a),e.addEventListener("timeupdate",E),e.addEventListener("durationchange",f),e.addEventListener("volumechange",h),e.addEventListener("ratechange",y),e.addEventListener("error",T),e.addEventListener("waiting",R),e.addEventListener("canplay",l),e.addEventListener("playing",S),document.addEventListener("fullscreenchange",O),document.addEventListener("webkitfullscreenchange",O),e.addEventListener("enterpictureinpicture",Q),e.addEventListener("leavepictureinpicture",Q),()=>{e.removeEventListener("play",t),e.removeEventListener("pause",n),e.removeEventListener("ended",a),e.removeEventListener("timeupdate",E),e.removeEventListener("durationchange",f),e.removeEventListener("volumechange",h),e.removeEventListener("ratechange",y),e.removeEventListener("error",T),e.removeEventListener("waiting",R),e.removeEventListener("canplay",l),e.removeEventListener("playing",S),document.removeEventListener("fullscreenchange",O),document.removeEventListener("webkitfullscreenchange",O),e.removeEventListener("enterpictureinpicture",Q),e.removeEventListener("leavepictureinpicture",Q);}},[o]),useEffect(()=>{let e=s.current.audioRef?.current;if(!e||!s.current.audioSrc)return;let t=()=>{d(l=>({...l,isPlaying:true})),s.current.onPlay?.();},n=()=>{d(l=>({...l,isPlaying:false})),s.current.onPause?.();},a=()=>{d(l=>({...l,isPlaying:false})),s.current.onEnded?.();},E=()=>{d(l=>({...l,isBuffering:true})),s.current.onBuffering?.(true);},f=()=>{d(l=>({...l,isBuffering:false})),s.current.onBuffering?.(false);},h=()=>d(l=>({...l,isBuffering:false})),y=()=>{w.current.isAudioMode&&s.current.onTimeUpdate?.(e.currentTime);},T=()=>{let l=e.duration;isFinite(l)&&(d(S=>({...S,duration:l})),s.current.onDurationChange?.(l));},R=()=>{let l={code:"MEDIA_ERR_NETWORK",message:"Audio source failed to load."};d(S=>({...S,error:l})),s.current.onError?.(l);};return e.addEventListener("play",t),e.addEventListener("pause",n),e.addEventListener("ended",a),e.addEventListener("waiting",E),e.addEventListener("canplay",f),e.addEventListener("playing",h),e.addEventListener("timeupdate",y),e.addEventListener("durationchange",T),e.addEventListener("error",R),()=>{e.removeEventListener("play",t),e.removeEventListener("pause",n),e.removeEventListener("ended",a),e.removeEventListener("waiting",E),e.removeEventListener("canplay",f),e.removeEventListener("playing",h),e.removeEventListener("timeupdate",y),e.removeEventListener("durationchange",T),e.removeEventListener("error",R);}},[r]),useEffect(()=>{let e=s.current,t=o.current,n=e.audioRef?.current;if(!(!t||!n||!e.audioSrc)){if(M.current!==r){M.current=r;return}if(M.current=r,k.isAudioMode){let a=t.currentTime,E=!t.paused;if(t.pause(),u.current?.stopLoad(),n.getAttribute("src")||(n.src=e.audioSrc),n.currentTime=a,n.volume=t.volume,n.muted=t.muted,n.playbackRate=t.playbackRate,E&&n.play().catch(()=>{}),L.current){P.current&&clearTimeout(P.current);let f=e.audioModeRecoveryInterval??3e4;P.current=setTimeout(()=>{!L.current||!w.current.isAudioMode||(x.current=true,u.current?.startLoad());},f);}}else {let a=n.currentTime,E=!n.paused;n.pause(),P.current&&(clearTimeout(P.current),P.current=null),x.current=false,u.current?.startLoad(),t.currentTime=a,t.volume=n.volume,E&&t.play().catch(()=>{});}}},[k.isAudioMode,o,r]);let B=useCallback(async()=>{let e=C();if(e)try{await e.play();}catch(t){t instanceof Error&&t.name!=="AbortError"&&console.error("[player] play() failed:",t);}},[C]),_=useCallback(()=>{C()?.pause();},[C]),K=useCallback(e=>{let t=C();t&&(t.currentTime=Math.max(0,Math.min(e,t.duration||e)));},[C]),re=useCallback(e=>{let t=C();if(!t)return;let n=Math.max(0,Math.min(e,1));n>0&&(v.current=n),t.volume=n,t.muted=n===0;},[C]),J=useCallback(()=>{let e=C();if(e)if(e.muted||e.volume===0){let t=v.current>0?v.current:1;e.volume=t,e.muted=false;}else v.current=e.volume,e.muted=true;},[C]),D=useCallback(e=>{let t=o.current;t&&(t.playbackRate=e);let n=s.current.audioRef?.current;n&&(n.playbackRate=e);},[o]),V=useCallback(e=>{let t=u.current;t&&(t.currentLevel=e,d(n=>({...n,currentQualityLevel:e})));},[]),$=useCallback(()=>{let e=u.current,t=o.current;if(!e||!t)return;let n=e.liveSyncPosition;n!=null&&Number.isFinite(n)&&(t.currentTime=n);},[o]),ee=useCallback(async()=>{let e=o.current;if(!e)return;let t=m.current??e.parentElement;if(t)try{!document.fullscreenElement&&!document.webkitFullscreenElement?t.requestFullscreen?await t.requestFullscreen():t.webkitRequestFullscreen?.():document.exitFullscreen?await document.exitFullscreen():document.webkitExitFullscreen?.();}catch(n){console.error("[player] fullscreen toggle failed:",n);}},[o]),ne=useCallback(async()=>{let e=o.current;if(e)try{document.pictureInPictureElement?await document.exitPictureInPicture():await e.requestPictureInPicture();}catch(t){console.error("[player] PiP toggle failed:",t);}},[o]),oe=useCallback(()=>{let e=!w.current.isTheaterMode;d(t=>({...t,isTheaterMode:e})),s.current.onTheaterModeChange?.(e);},[]),ie=useCallback(()=>{I.current&&clearTimeout(I.current),L.current=false,H.current=true,I.current=setTimeout(()=>{H.current=false,A.current=[];},6e4);let e=!w.current.isAudioMode;d(t=>({...t,isAudioMode:e})),s.current.onAudioModeChange?.(e);},[]),ae=useCallback(()=>{let e=C(),t=e?.currentTime??0,n=[];if(e)for(let a=0;a<e.buffered.length;a++)n.push({start:e.buffered.start(a),end:e.buffered.end(a)});return {...w.current,currentTime:t,bufferedRanges:n}},[C]),se=useCallback(()=>o.current??null,[o]),ce=useMemo(()=>({play:B,pause:_,seek:K,setVolume:re,toggleMute:J,setPlaybackRate:D,setQualityLevel:V,seekToLive:$,toggleFullscreen:ee,togglePictureInPicture:ne,toggleTheaterMode:oe,toggleAudioMode:ie,getState:ae,getVideoElement:se}),[B,_,K,re,J,D,V,$,ee,ne,oe,ie,ae,se]);return {state:k,ref:ce,hlsRef:u,fullscreenContainerRef:m}}var tt={};dt(tt,{ControlElements:()=>G,FullscreenButton:()=>Ee,PauseButton:()=>ye,PiPButton:()=>Me,PlayButton:()=>be,ProgressBar:()=>we,SettingsMenu:()=>Se,TheaterButton:()=>Le,TimeDisplay:()=>Ae,VolumeControl:()=>xe});var be=memo(({onClick:o})=>jsx("button",{onClick:o,className:"controlButton","aria-label":"Play",title:"Play (Space)",children:jsx("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"currentColor",children:jsx("path",{d:"M8 5v14l11-7z"})})}));be.displayName="PlayButton";var ye=memo(({onClick:o})=>jsx("button",{onClick:o,className:"controlButton","aria-label":"Pause",title:"Pause (Space)",children:jsx("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"currentColor",children:jsx("path",{d:"M6 4h4v16H6V4zm8 0h4v16h-4V4z"})})}));ye.displayName="PauseButton";var Ee=memo(({onClick:o,isFullscreen:r=false})=>jsx("button",{onClick:o,className:"controlButton","aria-label":r?"Exit Fullscreen":"Fullscreen",title:r?"Exit Fullscreen (F)":"Fullscreen (F)",children:jsx("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"currentColor",children:r?jsx("path",{d:"M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"}):jsx("path",{d:"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"})})}));Ee.displayName="FullscreenButton";var Me=memo(({onClick:o,isPiP:r=false})=>jsx("button",{onClick:o,className:"controlButton","aria-label":r?"Exit Picture-in-Picture":"Picture-in-Picture",title:r?"Exit Picture-in-Picture (P)":"Picture-in-Picture (P)",children:jsx("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"currentColor",children:jsx("path",{d:"M19 11h-8v6h8v-6zm4 8V4.98C23 3.88 22.1 3 21 3H3c-1.1 0-2 .88-2 1.98V19c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2zm-2 .02H3V5h18v14.02z"})})}));Me.displayName="PiPButton";var Le=memo(({onClick:o,isTheater:r=false})=>jsx("button",{onClick:o,className:"controlButton","aria-label":r?"Exit Theater Mode":"Theater Mode",title:r?"Exit Theater Mode (T)":"Theater Mode (T)",children:jsx("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"currentColor",children:r?jsx("path",{d:"M19 7H5c-1.1 0-2 .9-2 2v6c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V9c0-1.1-.9-2-2-2zm0 8H5V9h14v6z"}):jsx("path",{d:"M21 3H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H3V5h18v14z"})})}));Le.displayName="TheaterButton";var qe=memo(({volume:o,isMuted:r,onVolumeChange:i,onToggleMute:u})=>{let[m,v]=useState(false),c=r?0:o,b=c*100,M=useMemo(()=>`linear-gradient(to right, #60a5fa 0%, #60a5fa ${b}%, rgba(255,255,255,0.3) ${b}%, rgba(255,255,255,0.3) 100%)`,[b]);return jsxs("div",{className:"volumeContainer",onMouseEnter:()=>v(true),onMouseLeave:()=>v(false),children:[jsx("button",{onClick:u,className:"controlButton","aria-label":r?"Unmute":"Mute",title:r?"Unmute (M)":"Mute (M)",children:jsx("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"currentColor",children:c===0?jsx("path",{d:"M16.5 12c0-1.77-1.02-3.29-2.5-4.03v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51C23.16 14.42 24 13.3 24 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06c1.38-.31 2.63-.95 3.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4L9.91 6.09 12 8.18V4z"}):c<.5?jsx("path",{d:"M7 9v6h4l5 5V4l-5 5H7z"}):jsx("path",{d:"M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z"})})}),m&&jsx("input",{type:"range",min:"0",max:"100",value:b,onChange:s=>i(Number(s.target.value)/100),className:"volumeSlider",style:{background:M},"aria-label":"Volume","aria-valuenow":Math.round(b)})]})});qe.displayName="VolumeControl";var xe=qe;function Xe(o){let r=o.trim().split(":");return r.length===3?+r[0]*3600+ +r[1]*60+parseFloat(r[2]):+r[0]*60+parseFloat(r[1])}function Et(o,r){if(/^https?:\/\//i.test(r))return r;try{return new URL(r,o).href}catch{return r}}function Ve(o,r=""){let i=[],u=o.replace(/\r\n/g,`
2
2
  `).split(`
3
- `),l=0;for(;l<a.length;){let d=a[l].trim();if(d.includes("-->")){let f=d.indexOf("-->"),g=Xe(d.slice(0,f)),M=Xe(d.slice(f+3));for(l++;l<a.length&&!a[l].trim();)l++;if(l<a.length){let s=a[l].trim(),T=s.lastIndexOf("#xywh="),m=s,x=0,V=0,p=160,w=90;if(T!==-1){m=s.slice(0,T);let D=s.slice(T+6).split(",").map(Number);x=D[0]??0,V=D[1]??0,p=D[2]??160,w=D[3]??90;}o.push({start:g,end:M,url:yt(r,m),x,y:V,w:p,h:w});}}l++;}return o}function Ie(n,r){if(!n.length)return null;let o=0,a=n.length-1;for(;o<=a;){let l=o+a>>1;if(n[l].end<=r)o=l+1;else if(n[l].start>r)a=l-1;else return n[l]}return null}var je=memo(({videoRef:n,playerRef:r,enablePreview:o=true,thumbnailVtt:a,isAudioMode:l=false})=>{let d=useRef(null),f=useRef(null),g=useRef(null),M=useRef(null),s=useRef(null),T=useRef(null),m=useRef(null),[x,V]=useState([]),p=useRef(false),w=useRef(0),D=useRef(0),I=useRef(null),E=useRef([]),R=useRef(null);useEffect(()=>{let e=()=>{R.current=null;};return window.addEventListener("resize",e,{passive:true}),()=>window.removeEventListener("resize",e)},[]);let P=useCallback(()=>(!R.current&&d.current&&(R.current=d.current.getBoundingClientRect()),R.current),[]);useEffect(()=>{if(!a){E.current=[];return}let e=false;return fetch(a).then(t=>t.text()).then(t=>{e||(E.current=Ve(t,a));}).catch(()=>{e||(E.current=[]);}),()=>{e=true;}},[a]),useEffect(()=>{let e=n.current;if(!e)return;let t=()=>{let i=isFinite(e.duration)?e.duration:0,u=e.currentTime,v=i>0?u/i*100:0;f.current&&(f.current.style.width=`${v}%`),g.current&&(g.current.style.left=`${v}%`),d.current&&(d.current.setAttribute("aria-valuenow",String(Math.round(u))),d.current.setAttribute("aria-valuemax",String(Math.round(i))),d.current.setAttribute("aria-valuetext",de(u)));};return e.addEventListener("timeupdate",t),e.addEventListener("durationchange",t),e.addEventListener("seeked",t),t(),()=>{e.removeEventListener("timeupdate",t),e.removeEventListener("durationchange",t),e.removeEventListener("seeked",t);}},[n,l]),useEffect(()=>{let e=n.current;if(!e)return;let t=()=>{let i=[];for(let u=0;u<e.buffered.length;u++)i.push({start:e.buffered.start(u),end:e.buffered.end(u)});V(i);};return e.addEventListener("progress",t),()=>e.removeEventListener("progress",t)},[n,l]);let S=useCallback(()=>{p.current=true,g.current?.classList.add("dragging");},[]),U=useCallback(()=>{p.current=false,g.current?.classList.remove("dragging");},[]),te=useCallback(()=>{o&&(R.current=null,M.current&&(M.current.style.display="block"),T.current&&(T.current.style.display="block"));},[o]),G=useCallback(()=>{M.current&&(M.current.style.display="none"),T.current&&(T.current.style.display="none");},[]),B=useCallback(e=>{if(!m.current||!E.current.length)return;let t=Ie(E.current,e);if(I.current=t,!t)return;let i=m.current;i.style.backgroundImage=`url(${t.url})`,i.style.backgroundPosition=`-${t.x}px -${t.y}px`,i.style.width=`${t.w}px`,i.style.height=`${t.h}px`;},[]),N=useCallback(e=>{let t=P(),i=n.current?.duration;return !t||t.width===0||!i||!isFinite(i)?0:Math.max(0,Math.min(e-t.left,t.width))/t.width*i},[P,n]),$=useCallback(e=>{let t=P();return t?Math.max(0,Math.min(e-t.left,t.width)):0},[P]),Z=useCallback(e=>{let t=n.current;if(!t)return;let i=t.currentTime,u=isFinite(t.duration)?t.duration:0;switch(e.key){case "ArrowLeft":case "ArrowRight":{e.preventDefault(),e.nativeEvent.stopImmediatePropagation();let v=e.shiftKey?10:5;r.seek(e.key==="ArrowLeft"?Math.max(0,i-v):Math.min(u,i+v));break}case "Home":e.preventDefault(),e.nativeEvent.stopImmediatePropagation(),r.seek(0);break;case "End":u>0&&(e.preventDefault(),e.nativeEvent.stopImmediatePropagation(),r.seek(u));break}},[n,r]),re=useCallback(e=>{let t=N(e.clientX),i=$(e.clientX);if(w.current=i,D.current=t,T.current&&(T.current.style.left=`${i}px`),s.current&&(s.current.textContent=de(t)),B(t),M.current){let u=M.current.offsetWidth,v=P()?.width??0,b=u/2,C=Math.max(b,Math.min(i,v-b));M.current.style.left=`${C}px`;}p.current&&r.seek(t);},[r,B,N,$,P]),ne=useCallback(()=>{G(),U();},[G,U]),oe=useCallback(e=>{e.preventDefault(),S(),r.seek(N(e.clientX));},[S,N,r]),ie=useCallback(e=>{p.current||r.seek(N(e.clientX));},[N,r]);useEffect(()=>{let e=d.current;if(!e)return;let t=i=>{p.current&&i.preventDefault();};return e.addEventListener("touchmove",t,{passive:false}),()=>e.removeEventListener("touchmove",t)},[]);let ae=useCallback(e=>{R.current=null,S(),r.seek(N(e.touches[0].clientX));},[S,N,r]),se=useCallback(e=>{p.current&&r.seek(N(e.touches[0].clientX));},[N,r]);useEffect(()=>{let e=()=>U();return window.addEventListener("mouseup",e),()=>window.removeEventListener("mouseup",e)},[U]);let ce=useMemo(()=>{let e=n.current,t=e&&isFinite(e.duration)?e.duration:0;return t<=0||!x.length?null:x.map((i,u)=>{let v=i.start/t*100,b=(i.end-i.start)/t*100;return jsx("div",{className:"bufferedSegment",style:{left:`${v}%`,width:`${b}%`}},u)})},[x,n]);return jsxs("div",{ref:d,className:"progressContainer",onMouseMove:re,onMouseEnter:te,onMouseLeave:ne,onMouseDown:oe,onMouseUp:U,onClick:ie,onTouchStart:ae,onTouchMove:se,onTouchEnd:U,onKeyDown:Z,role:"slider","aria-label":"Video progress","aria-valuemin":0,"aria-valuemax":0,"aria-valuenow":0,"aria-valuetext":"0:00",tabIndex:0,children:[o&&jsxs("div",{ref:M,className:"previewTooltip",style:{left:0,display:"none"},"aria-hidden":"true",children:[a&&jsx("div",{ref:m,className:"previewThumbnail"}),jsx("div",{ref:s,className:"previewTime"})]}),jsxs("div",{className:"progressBackground",children:[ce,jsx("div",{ref:f,className:"progressFilled",style:{width:"0%"}}),o&&jsx("div",{ref:T,className:"hoverIndicator",style:{left:0,display:"none"},"aria-hidden":"true"})]}),jsx("div",{ref:g,className:"scrubHandle",style:{left:"0%"},"aria-hidden":"true"})]})});je.displayName="ProgressBar";var we=je;var Je=memo(({currentRate:n,playbackRates:r,onRateChange:o,qualityLevels:a=[],currentQualityLevel:l=-1,onQualityChange:d})=>{let[f,g]=useState(false),[M,s]=useState("speed"),T=useRef(null),m=a.length>0&&!!d;useEffect(()=>{let p=w=>{T.current&&!T.current.contains(w.target)&&g(false);};return f&&document.addEventListener("mousedown",p),()=>document.removeEventListener("mousedown",p)},[f]);let x=useMemo(()=>[...a].sort((p,w)=>w.bitrate-p.bitrate),[a]),V=useMemo(()=>l===-1?"Auto":a.find(p=>p.id===l)?.name??"Auto",[a,l]);return jsxs("div",{ref:T,className:"settingsContainer",children:[jsx("button",{onClick:()=>g(p=>!p),className:"controlButton","aria-label":"Settings",title:"Settings","aria-expanded":f,children:jsx("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"currentColor",children:jsx("path",{d:"M19.14 12.94c.04-.3.06-.61.06-.94s-.02-.64-.07-.94l2.03-1.58a.49.49 0 0 0 .12-.61l-1.92-3.32a.49.49 0 0 0-.59-.22l-2.39.96a7.02 7.02 0 0 0-1.62-.94l-.36-2.54a.484.484 0 0 0-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54a6.88 6.88 0 0 0-1.61.94l-2.39-.96a.488.488 0 0 0-.59.22L2.74 8.87a.48.48 0 0 0 .12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58a.49.49 0 0 0-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54a6.88 6.88 0 0 0 1.61-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32a.47.47 0 0 0-.12-.61l-2.01-1.58zM12 15.6A3.6 3.6 0 0 1 8.4 12 3.6 3.6 0 0 1 12 8.4a3.6 3.6 0 0 1 3.6 3.6 3.6 3.6 0 0 1-3.6 3.6z"})})}),f&&jsxs("div",{className:"settingsDropdown",role:"menu",children:[m&&jsxs("div",{className:"settingsTabs",children:[jsx("button",{className:`settingsTab${M==="speed"?" active":""}`,onClick:()=>s("speed"),children:"Speed"}),jsx("button",{className:`settingsTab${M==="quality"?" active":""}`,onClick:()=>s("quality"),children:"Quality"})]}),(!m||M==="speed")&&jsxs("div",{children:[!m&&jsx("div",{className:"settingsPanelLabel",children:"Playback Speed"}),r.map(p=>jsx("button",{onClick:()=>{o(p),g(false);},className:`settingsOption${n===p?" active":""}`,role:"menuitemradio","aria-checked":n===p,children:p===1?"Normal":`${p}\xD7`},p))]}),m&&M==="quality"&&jsxs("div",{children:[jsxs("button",{onClick:()=>{d(-1),g(false);},className:`settingsOption${l===-1?" active":""}`,role:"menuitemradio","aria-checked":l===-1,children:["Auto ",l===-1&&V!=="Auto"?`(${V})`:""]}),x.map(p=>jsxs("button",{onClick:()=>{d(p.id),g(false);},className:`settingsOption${l===p.id?" active":""}`,role:"menuitemradio","aria-checked":l===p.id,children:[p.name,p.bitrate>0&&jsxs("span",{className:"settingsOptionBadge",children:[Math.round(p.bitrate/1e3)," kbps"]})]},p.id))]})]})]})});Je.displayName="SettingsMenu";var Se=Je;var et=memo(({videoRef:n,isLive:r=false,isAudioMode:o=false})=>{let a=useRef(null),l=useRef(null);return useEffect(()=>{let d=n.current;if(!d)return;let f=()=>{a.current&&(a.current.textContent=de(d.currentTime));},g=()=>{if(l.current){let M=isFinite(d.duration)?d.duration:0;l.current.textContent=` / ${de(M)}`;}};return d.addEventListener("timeupdate",f),d.addEventListener("durationchange",g),d.addEventListener("seeked",f),f(),g(),()=>{d.removeEventListener("timeupdate",f),d.removeEventListener("durationchange",g),d.removeEventListener("seeked",f);}},[n,r,o]),r?jsx("span",{className:"timeDisplay",style:{opacity:.7},children:jsx("span",{ref:a,children:"0:00"})}):jsxs("span",{className:"timeDisplay",children:[jsx("span",{ref:a,children:"0:00"}),jsx("span",{ref:l,style:{opacity:.6},children:" / 0:00"})]})});et.displayName="TimeDisplay";var Ae=et;var X={PlayButton:be,PauseButton:ye,FullscreenButton:Ee,PiPButton:Me,TheaterButton:Le,VolumeControl:xe,ProgressBar:we,SettingsMenu:Se,TimeDisplay:Ae};var De=memo(function({videoRef:r,playerRef:o,playerContainerRef:a,playbackRates:l,enablePreview:d,thumbnailVtt:f,isPlaying:g,volume:M,isMuted:s,playbackRate:T,isFullscreen:m,isPictureInPicture:x,isTheaterMode:V,isAudioMode:p,showAudioButton:w,audioModeIcon:D,videoModeIcon:I,audioModeLabel:E,videoModeLabel:R,isLive:P,qualityLevels:S,currentQualityLevel:U,controlBarItems:te,autoHideControls:G}){let B=useRef(null),[N,$]=useState(true),Z=useRef({isPlaying:g,volume:M,isMuted:s,isLive:P});Z.current={isPlaying:g,volume:M,isMuted:s,isLive:P},useEffect(()=>{if(p||!G){$(true),B.current&&clearTimeout(B.current);return}if(!g){$(true),B.current&&clearTimeout(B.current);return}let v=a.current;if(!v)return;let b=()=>{$(true),B.current&&clearTimeout(B.current),B.current=setTimeout(()=>$(false),3e3);},C=()=>{B.current&&clearTimeout(B.current),$(false);};return v.addEventListener("mousemove",b),v.addEventListener("mouseenter",b),v.addEventListener("mouseleave",C),v.addEventListener("touchstart",b,{passive:true}),$(false),()=>{v.removeEventListener("mousemove",b),v.removeEventListener("mouseenter",b),v.removeEventListener("mouseleave",C),v.removeEventListener("touchstart",b),B.current&&clearTimeout(B.current);}},[g,p,G,a]),useEffect(()=>{let v=b=>{if(!a.current?.contains(document.activeElement))return;let C=b.target;if(C.tagName==="INPUT"||C.tagName==="TEXTAREA"||C.isContentEditable)return;let{isPlaying:k,volume:L,isLive:c}=Z.current,h=r.current?.currentTime??0,O=r.current?.duration??0;switch(b.code){case "Space":case "KeyK":b.preventDefault(),k?o.pause():o.play();break;case "ArrowLeft":b.preventDefault(),o.seek(Math.max(0,h-5));break;case "ArrowRight":b.preventDefault(),o.seek(Math.min(O||1/0,h+5));break;case "ArrowUp":b.preventDefault(),o.setVolume(Math.min(1,L+.1));break;case "ArrowDown":b.preventDefault(),o.setVolume(Math.max(0,L-.1));break;case "KeyM":b.preventDefault(),o.toggleMute();break;case "KeyF":b.preventDefault(),o.toggleFullscreen();break;case "KeyP":b.preventDefault(),o.togglePictureInPicture();break;case "KeyT":b.preventDefault(),o.toggleTheaterMode();break;case "KeyL":b.preventDefault(),c&&o.seekToLive();break;case "Digit0":case "Digit1":case "Digit2":case "Digit3":case "Digit4":case "Digit5":case "Digit6":case "Digit7":case "Digit8":case "Digit9":{b.preventDefault();let H=Number(b.code.replace("Digit",""))*10;o.seek(O/100*H);break}}};return window.addEventListener("keydown",v),()=>window.removeEventListener("keydown",v)},[o,a,r]);let re=useCallback(()=>o.play(),[o]),ne=useCallback(()=>o.pause(),[o]),oe=useCallback(v=>o.setVolume(v),[o]),ie=useCallback(()=>o.toggleMute(),[o]),ae=useCallback(v=>o.setPlaybackRate(v),[o]),se=useCallback(v=>o.setQualityLevel(v),[o]),ce=useCallback(()=>o.togglePictureInPicture(),[o]),e=useCallback(()=>o.toggleTheaterMode(),[o]),t=useCallback(()=>o.toggleAudioMode(),[o]),i=useCallback(()=>o.toggleFullscreen(),[o]),u=useCallback(()=>o.seekToLive(),[o]);return jsx("div",{style:{position:"absolute",inset:0,display:"flex",flexDirection:"column",justifyContent:"flex-end",opacity:N?1:0,transition:"opacity 0.3s",pointerEvents:"none",zIndex:2},children:jsxs("div",{style:{background:"linear-gradient(to top, rgba(0,0,0,0.75) 0%, rgba(0,0,0,0.2) 60%, transparent 100%)",padding:"48px 12px 12px",pointerEvents:N?"auto":"none"},role:"region","aria-label":"Video player controls",children:[jsx(X.ProgressBar,{videoRef:r,playerRef:o,enablePreview:d,thumbnailVtt:f,isAudioMode:p}),jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,marginTop:4},children:[g?jsx(X.PauseButton,{onClick:ne}):jsx(X.PlayButton,{onClick:re}),jsx(X.VolumeControl,{volume:M,isMuted:s,onVolumeChange:oe,onToggleMute:ie}),jsx(X.TimeDisplay,{videoRef:r,isLive:P,isAudioMode:p}),jsx("div",{style:{flex:1}}),P&&jsx(it,{onClick:u}),w&&jsx(ot,{onClick:t,isAudioMode:p,audioModeIcon:D,videoModeIcon:I,audioModeLabel:E,videoModeLabel:R}),jsx(X.SettingsMenu,{currentRate:T,playbackRates:l,onRateChange:ae,qualityLevels:S,currentQualityLevel:U,onQualityChange:se}),te?.map(v=>jsx("button",{className:"controlButton","aria-label":v.label,title:v.title??v.label,onClick:v.onClick,children:v.icon},v.key)),jsx(X.PiPButton,{onClick:ce,isPiP:x}),jsx(X.TheaterButton,{onClick:e,isTheater:V}),jsx(X.FullscreenButton,{onClick:i,isFullscreen:m})]})]})})});De.displayName="Controls";var ot=memo(({onClick:n,isAudioMode:r,audioModeIcon:o,videoModeIcon:a,audioModeLabel:l,videoModeLabel:d})=>{let f=r?d??"Video":l??"Audio";return jsxs("button",{onClick:n,className:"rvp-audio-toggle-btn","aria-label":f,title:f,"aria-pressed":r,children:[r?a??jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor",children:jsx("path",{d:"M17 10.5V7c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-3.5l4 4v-11l-4 4z"})}):o??jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor",children:jsx("path",{d:"M12 3a9 9 0 0 0-9 9v7c0 1.1.9 2 2 2h1a1 1 0 0 0 1-1v-5a1 1 0 0 0-1-1H4v-1a8 8 0 0 1 16 0v1h-2a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1h1a3 3 0 0 0 3-3v-4c0-4.97-4.03-9-9-9z"})}),f]})});ot.displayName="AudioModeButton";var it=memo(({onClick:n})=>jsx("button",{onClick:n,style:{background:"none",border:"1px solid rgba(255,255,255,0.6)",color:"#fff",borderRadius:3,padding:"2px 8px",fontSize:11,fontWeight:700,cursor:"pointer",letterSpacing:"0.06em"},title:"Go to live (L)",children:"GO LIVE"}));it.displayName="GoLiveButton";var We=memo(({x:n,y:r,isPlaying:o,src:a,videoRef:l,playerRef:d,onClose:f,contextMenuItems:g})=>{let M=useRef(null),[s,T]=useState(()=>l.current?.loop??false),m=Math.min(n,window.innerWidth-220),x=Math.min(r,window.innerHeight-290);useEffect(()=>{let E=S=>{M.current&&!M.current.contains(S.target)&&f();},R=S=>{S.key==="Escape"&&f();},P=()=>f();return document.addEventListener("mousedown",E),document.addEventListener("keydown",R),window.addEventListener("scroll",P,true),()=>{document.removeEventListener("mousedown",E),document.removeEventListener("keydown",R),window.removeEventListener("scroll",P,true);}},[f]);let V=useCallback(()=>{o?d.pause():d.play(),f();},[o,d,f]),p=useCallback(()=>{let E=l.current;if(!E)return;let R=!s;E.loop=R,T(R);},[l,s]),w=useCallback(async()=>{try{await navigator.clipboard.writeText(a);}catch{}f();},[a,f]),D=useCallback(async()=>{let E=Math.floor(l.current?.currentTime??0);try{await navigator.clipboard.writeText(`${a}?t=${E}`);}catch{}f();},[a,l,f]),I=useCallback(()=>{d.togglePictureInPicture(),f();},[d,f]);return jsxs("div",{ref:M,className:"contextMenu",style:{left:m,top:x},children:[jsx("button",{className:"contextMenuItem",onClick:V,children:o?"Pause":"Play"}),jsxs("button",{className:"contextMenuItem",onClick:p,children:[jsx("span",{children:"Loop"}),s&&jsx("span",{className:"contextMenuCheck",children:"\u2713"})]}),jsx("div",{className:"contextMenuDivider"}),jsx("button",{className:"contextMenuItem",onClick:w,children:"Copy video URL"}),jsx("button",{className:"contextMenuItem",onClick:D,children:"Copy video URL at current time"}),jsx("div",{className:"contextMenuDivider"}),jsx("button",{className:"contextMenuItem",onClick:I,children:"Picture-in-Picture"}),g&&g.length>0&&jsxs(Fragment,{children:[jsx("div",{className:"contextMenuDivider"}),g.map((E,R)=>jsx("button",{className:"contextMenuItem",onClick:()=>{E.onClick(),f();},children:E.label},R))]})]})});We.displayName="ContextMenu";var $e=memo(function({poster:r,logo:o,audioModeFallback:a,isBuffering:l=false,onOverlayClick:d}){return jsxs("div",{className:"rvp-audio-overlay",onClick:d,"data-test":"audio-mode-overlay",children:[r?jsx("div",{className:"rvp-audio-artwork-container",children:jsx("img",{src:r,alt:"Artwork",className:"rvp-audio-artwork",draggable:false})}):a?jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center"},children:a}):o?typeof o=="string"?jsx("img",{src:o,alt:"Logo",className:"rvp-audio-logo",draggable:false}):jsx("div",{className:"rvp-audio-logo-node",children:o}):null,jsx("span",{className:"rvp-audio-label",children:"Audio Mode"}),l?jsx("div",{className:"rvp-audio-buffering-overlay","aria-label":"Buffering",children:jsx("div",{className:"rvp-audio-spinner"})}):null]})});$e.displayName="AudioModeOverlay";var ut=forwardRef((n,r)=>{let{src:o,poster:a,className:l,controls:d=true,options:f={}}=n,{autoplay:g=false,muted:M=false,loop:s=false,preload:T="metadata",playbackRates:m=[.25,.5,.75,1,1.25,1.5,1.75,2],enableHLS:x=true,enablePreview:V=true,thumbnailVtt:p,hlsConfig:w,autoHideControls:D=true,subtitles:I,crossOrigin:E,logo:R,audioModeFallback:P,audioSrc:S,showAudioButton:U,audioModeIcon:te,videoModeIcon:G,audioModeLabel:B,videoModeLabel:N,defaultAudioMode:$,audioBandwidthThreshold:Z,audioModeSwitchLevel:re,audioModeRecoveryInterval:ne,onPlay:oe,onPause:ie,onEnded:ae,onError:se,onTimeUpdate:ce,onDurationChange:e,onBuffering:t,onTheaterModeChange:i,onAudioModeChange:u,contextMenuItems:v,controlBarItems:b}=f,C=useRef(null),k=useRef(null),L=useRef(null),{state:c,ref:h,fullscreenContainerRef:O}=Qe(C,o,{autoplay:g,muted:M,loop:s,playbackRates:m,enableHLS:x,hlsConfig:w,defaultAudioMode:$,audioBandwidthThreshold:Z,audioModeSwitchLevel:re,audioModeRecoveryInterval:ne,onPlay:oe,onPause:ie,onEnded:ae,onError:se,onTimeUpdate:ce,onDurationChange:e,onBuffering:t,onTheaterModeChange:i,onAudioModeChange:u,audioRef:k,audioSrc:S}),H=useRef(null);at.useLayoutEffect(()=>{H.current=c.isAudioMode&&S&&k.current?k.current:C.current;},[c.isAudioMode,S]),H.current===null&&(H.current=C.current);let[Y,y]=useState(null);useEffect(()=>{O.current=L.current;},[O]),at.useImperativeHandle(r,()=>h,[h]);let K=useCallback(()=>{L.current?.focus(),c.isPlaying?h.pause():h.play();},[c.isPlaying,h]),fe=useCallback(()=>{h.toggleFullscreen();},[h]),He=useCallback(ee=>{ee.preventDefault(),y({x:ee.clientX,y:ee.clientY});},[]);return jsxs("div",{ref:L,tabIndex:0,style:{position:"relative",width:"100%",backgroundColor:"#000",aspectRatio:"16 / 9",userSelect:"none",outline:"none"},className:l,"data-test":"video-player-container","data-theater":c.isTheaterMode?"true":void 0,onContextMenu:He,children:[jsx("video",{ref:C,poster:a,preload:T,crossOrigin:E,onClick:K,onDoubleClick:fe,playsInline:true,style:{width:"100%",height:"100%",display:"block",cursor:"pointer",visibility:c.isAudioMode?"hidden":"visible"},"data-test":"video-element",children:I?.map(ee=>jsx("track",{kind:"subtitles",src:ee.src,label:ee.label,srcLang:ee.srclang,default:ee.default},ee.id))}),S&&jsx("audio",{ref:k,preload:"none",style:{display:"none"},"aria-hidden":"true"}),c.isAudioMode&&jsx($e,{poster:a,logo:R,audioModeFallback:P,isBuffering:c.isBuffering,onOverlayClick:K}),d&&jsx(De,{videoRef:H,playerRef:h,playerContainerRef:L,playbackRates:m,enablePreview:V,thumbnailVtt:c.isAudioMode?void 0:p,isPlaying:c.isPlaying,volume:c.volume,isMuted:c.isMuted,playbackRate:c.playbackRate,isFullscreen:c.isFullscreen,isPictureInPicture:c.isPictureInPicture,isTheaterMode:c.isTheaterMode,isAudioMode:c.isAudioMode,showAudioButton:U??!!S,audioModeIcon:te,videoModeIcon:G,audioModeLabel:B,videoModeLabel:N,isLive:c.isLive,qualityLevels:c.qualityLevels,currentQualityLevel:c.currentQualityLevel,controlBarItems:b,autoHideControls:D}),Y&&jsx(We,{x:Y.x,y:Y.y,isPlaying:c.isPlaying,src:o,videoRef:C,playerRef:h,onClose:()=>y(null),contextMenuItems:v}),c.isLive&&jsx("div",{style:{position:"absolute",top:12,left:12,backgroundColor:"#e53935",color:"#fff",fontSize:11,fontWeight:700,letterSpacing:"0.08em",padding:"2px 8px",borderRadius:3,pointerEvents:"none"},children:"LIVE"}),c.isBuffering&&!c.error&&!c.isAudioMode&&jsx("div",{style:{position:"absolute",inset:0,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:12,color:"#fff",pointerEvents:"none"},"data-test":"buffering-indicator",children:jsx("div",{style:{width:48,height:48,border:"4px solid rgba(255,255,255,0.25)",borderTop:"4px solid #fff",borderRadius:"50%",animation:"rvp-spin 0.8s linear infinite"}})}),c.error&&jsx("div",{style:{position:"absolute",inset:0,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"rgba(0,0,0,0.85)",color:"#fff",padding:24},"data-test":"error-overlay",children:jsxs("div",{style:{textAlign:"center",maxWidth:400},children:[jsx("div",{style:{fontSize:36,marginBottom:12},children:"\u26A0"}),jsx("h3",{style:{margin:"0 0 8px",fontSize:18},children:c.error.code==="MEDIA_ERR_SRC_NOT_SUPPORTED"?"Unsupported Format":c.error.code.startsWith("HLS")?"Stream Error":"Playback Error"}),jsx("p",{style:{margin:0,fontSize:13,opacity:.75},children:c.error.message})]})})]})});ut.displayName="VideoPlayer";var _t=ut;var zt={EXTREME:100,POOR:300,FAIR:800,GOOD:1500},Wt={LOWEST:0,SECOND_LOWEST:1,DISABLED:-1};export{zt as AUDIO_BANDWIDTH_THRESHOLDS,Wt as AUDIO_SWITCH_LEVELS,tt as ControlElements,De as Controls,_t as VideoPlayer,Ie as findThumbnailCue,de as formatTime,dt as getMimeType,Te as isHLSUrl,Ve as parseThumbnailVtt};//# sourceMappingURL=index.mjs.map
3
+ `),m=0;for(;m<u.length;){let v=u[m].trim();if(v.includes("-->")){let c=v.indexOf("-->"),b=Xe(v.slice(0,c)),M=Xe(v.slice(c+3));for(m++;m<u.length&&!u[m].trim();)m++;if(m<u.length){let s=u[m].trim(),k=s.lastIndexOf("#xywh="),d=s,w=0,A=0,g=160,L=90;if(k!==-1){d=s.slice(0,k);let H=s.slice(k+6).split(",").map(Number);w=H[0]??0,A=H[1]??0,g=H[2]??160,L=H[3]??90;}i.push({start:b,end:M,url:Et(r,d),x:w,y:A,w:g,h:L});}}m++;}return i}function Ie(o,r){if(!o.length)return null;let i=0,u=o.length-1;for(;i<=u;){let m=i+u>>1;if(o[m].end<=r)i=m+1;else if(o[m].start>r)u=m-1;else return o[m]}return null}var je=memo(({videoRef:o,playerRef:r,enablePreview:i=true,thumbnailVtt:u,thumbnailVttBaseUrl:m,isAudioMode:v=false})=>{let c=useRef(null),b=useRef(null),M=useRef(null),s=useRef(null),k=useRef(null),d=useRef(null),w=useRef(null),[A,g]=useState([]),L=useRef(false),H=useRef(0),I=useRef(0),P=useRef(null),x=useRef([]),C=useRef(null);useEffect(()=>{let t=()=>{C.current=null;};return window.addEventListener("resize",t,{passive:true}),()=>window.removeEventListener("resize",t)},[]);let B=useCallback(()=>(!C.current&&c.current&&(C.current=c.current.getBoundingClientRect()),C.current),[]);useEffect(()=>{if(!u){x.current=[];return}let t=false;return fetch(u).then(n=>n.text()).then(n=>{t||(x.current=Ve(n,m??u));}).catch(()=>{t||(x.current=[]);}),()=>{t=true;}},[u]),useEffect(()=>{let t=o.current;if(!t)return;let n=()=>{let a=isFinite(t.duration)?t.duration:0,E=t.currentTime,f=a>0?E/a*100:0;b.current&&(b.current.style.width=`${f}%`),M.current&&(M.current.style.left=`${f}%`),c.current&&(c.current.setAttribute("aria-valuenow",String(Math.round(E))),c.current.setAttribute("aria-valuemax",String(Math.round(a))),c.current.setAttribute("aria-valuetext",me(E)));};return t.addEventListener("timeupdate",n),t.addEventListener("durationchange",n),t.addEventListener("seeked",n),n(),()=>{t.removeEventListener("timeupdate",n),t.removeEventListener("durationchange",n),t.removeEventListener("seeked",n);}},[o,v]),useEffect(()=>{let t=o.current;if(!t)return;let n=()=>{let a=[];for(let E=0;E<t.buffered.length;E++)a.push({start:t.buffered.start(E),end:t.buffered.end(E)});g(a);};return t.addEventListener("progress",n),()=>t.removeEventListener("progress",n)},[o,v]);let _=useCallback(()=>{L.current=true,M.current?.classList.add("dragging");},[]),K=useCallback(()=>{L.current=false,M.current?.classList.remove("dragging");},[]),re=useCallback(()=>{i&&(C.current=null,s.current&&(s.current.style.display="block"),d.current&&(d.current.style.display="block"));},[i]),J=useCallback(()=>{s.current&&(s.current.style.display="none"),d.current&&(d.current.style.display="none");},[]),D=useCallback(t=>{if(!w.current||!x.current.length)return;let n=Ie(x.current,t);if(P.current=n,!n)return;let a=w.current;a.style.backgroundImage=`url(${n.url})`,a.style.backgroundPosition=`-${n.x}px -${n.y}px`,a.style.width=`${n.w}px`,a.style.height=`${n.h}px`;},[]),V=useCallback(t=>{let n=B(),a=o.current?.duration;return !n||n.width===0||!a||!isFinite(a)?0:Math.max(0,Math.min(t-n.left,n.width))/n.width*a},[B,o]),$=useCallback(t=>{let n=B();return n?Math.max(0,Math.min(t-n.left,n.width)):0},[B]),ee=useCallback(t=>{let n=o.current;if(!n)return;let a=n.currentTime,E=isFinite(n.duration)?n.duration:0;switch(t.key){case "ArrowLeft":case "ArrowRight":{t.preventDefault(),t.nativeEvent.stopImmediatePropagation();let f=t.shiftKey?10:5;r.seek(t.key==="ArrowLeft"?Math.max(0,a-f):Math.min(E,a+f));break}case "Home":t.preventDefault(),t.nativeEvent.stopImmediatePropagation(),r.seek(0);break;case "End":E>0&&(t.preventDefault(),t.nativeEvent.stopImmediatePropagation(),r.seek(E));break}},[o,r]),ne=useCallback(t=>{let n=V(t.clientX),a=$(t.clientX);if(H.current=a,I.current=n,d.current&&(d.current.style.left=`${a}px`),k.current&&(k.current.textContent=me(n)),D(n),s.current){let E=s.current.offsetWidth,f=B()?.width??0,h=E/2,y=Math.max(h,Math.min(a,f-h));s.current.style.left=`${y}px`;}L.current&&r.seek(n);},[r,D,V,$,B]),oe=useCallback(()=>{J(),K();},[J,K]),ie=useCallback(t=>{t.preventDefault(),_(),r.seek(V(t.clientX));},[_,V,r]),ae=useCallback(t=>{L.current||r.seek(V(t.clientX));},[V,r]);useEffect(()=>{let t=c.current;if(!t)return;let n=a=>{L.current&&a.preventDefault();};return t.addEventListener("touchmove",n,{passive:false}),()=>t.removeEventListener("touchmove",n)},[]);let se=useCallback(t=>{C.current=null,_(),r.seek(V(t.touches[0].clientX));},[_,V,r]),ce=useCallback(t=>{L.current&&r.seek(V(t.touches[0].clientX));},[V,r]);useEffect(()=>{let t=()=>K();return window.addEventListener("mouseup",t),()=>window.removeEventListener("mouseup",t)},[K]);let e=useMemo(()=>{let t=o.current,n=t&&isFinite(t.duration)?t.duration:0;return n<=0||!A.length?null:A.map((a,E)=>{let f=a.start/n*100,h=(a.end-a.start)/n*100;return jsx("div",{className:"bufferedSegment",style:{left:`${f}%`,width:`${h}%`}},E)})},[A,o]);return jsxs("div",{ref:c,className:"progressContainer",onMouseMove:ne,onMouseEnter:re,onMouseLeave:oe,onMouseDown:ie,onMouseUp:K,onClick:ae,onTouchStart:se,onTouchMove:ce,onTouchEnd:K,onKeyDown:ee,role:"slider","aria-label":"Video progress","aria-valuemin":0,"aria-valuemax":0,"aria-valuenow":0,"aria-valuetext":"0:00",tabIndex:0,children:[i&&jsxs("div",{ref:s,className:"previewTooltip",style:{left:0,display:"none"},"aria-hidden":"true",children:[u&&jsx("div",{ref:w,className:"previewThumbnail"}),jsx("div",{ref:k,className:"previewTime"})]}),jsxs("div",{className:"progressBackground",children:[e,jsx("div",{ref:b,className:"progressFilled",style:{width:"0%"}}),i&&jsx("div",{ref:d,className:"hoverIndicator",style:{left:0,display:"none"},"aria-hidden":"true"})]}),jsx("div",{ref:M,className:"scrubHandle",style:{left:"0%"},"aria-hidden":"true"})]})});je.displayName="ProgressBar";var we=je;var Je=memo(({currentRate:o,playbackRates:r,onRateChange:i,qualityLevels:u=[],currentQualityLevel:m=-1,onQualityChange:v})=>{let[c,b]=useState(false),[M,s]=useState("speed"),k=useRef(null),d=u.length>0&&!!v;useEffect(()=>{let g=L=>{k.current&&!k.current.contains(L.target)&&b(false);};return c&&document.addEventListener("mousedown",g),()=>document.removeEventListener("mousedown",g)},[c]);let w=useMemo(()=>[...u].sort((g,L)=>L.bitrate-g.bitrate),[u]),A=useMemo(()=>m===-1?"Auto":u.find(g=>g.id===m)?.name??"Auto",[u,m]);return jsxs("div",{ref:k,className:"settingsContainer",children:[jsx("button",{onClick:()=>b(g=>!g),className:"controlButton","aria-label":"Settings",title:"Settings","aria-expanded":c,children:jsx("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"currentColor",children:jsx("path",{d:"M19.14 12.94c.04-.3.06-.61.06-.94s-.02-.64-.07-.94l2.03-1.58a.49.49 0 0 0 .12-.61l-1.92-3.32a.49.49 0 0 0-.59-.22l-2.39.96a7.02 7.02 0 0 0-1.62-.94l-.36-2.54a.484.484 0 0 0-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54a6.88 6.88 0 0 0-1.61.94l-2.39-.96a.488.488 0 0 0-.59.22L2.74 8.87a.48.48 0 0 0 .12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58a.49.49 0 0 0-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54a6.88 6.88 0 0 0 1.61-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32a.47.47 0 0 0-.12-.61l-2.01-1.58zM12 15.6A3.6 3.6 0 0 1 8.4 12 3.6 3.6 0 0 1 12 8.4a3.6 3.6 0 0 1 3.6 3.6 3.6 3.6 0 0 1-3.6 3.6z"})})}),c&&jsxs("div",{className:"settingsDropdown",role:"menu",children:[d&&jsxs("div",{className:"settingsTabs",children:[jsx("button",{className:`settingsTab${M==="speed"?" active":""}`,onClick:()=>s("speed"),children:"Speed"}),jsx("button",{className:`settingsTab${M==="quality"?" active":""}`,onClick:()=>s("quality"),children:"Quality"})]}),(!d||M==="speed")&&jsxs("div",{children:[!d&&jsx("div",{className:"settingsPanelLabel",children:"Playback Speed"}),r.map(g=>jsx("button",{onClick:()=>{i(g),b(false);},className:`settingsOption${o===g?" active":""}`,role:"menuitemradio","aria-checked":o===g,children:g===1?"Normal":`${g}\xD7`},g))]}),d&&M==="quality"&&jsxs("div",{children:[jsxs("button",{onClick:()=>{v(-1),b(false);},className:`settingsOption${m===-1?" active":""}`,role:"menuitemradio","aria-checked":m===-1,children:["Auto ",m===-1&&A!=="Auto"?`(${A})`:""]}),w.map(g=>jsxs("button",{onClick:()=>{v(g.id),b(false);},className:`settingsOption${m===g.id?" active":""}`,role:"menuitemradio","aria-checked":m===g.id,children:[g.name,g.bitrate>0&&jsxs("span",{className:"settingsOptionBadge",children:[Math.round(g.bitrate/1e3)," kbps"]})]},g.id))]})]})]})});Je.displayName="SettingsMenu";var Se=Je;var et=memo(({videoRef:o,isLive:r=false,isAudioMode:i=false})=>{let u=useRef(null),m=useRef(null);return useEffect(()=>{let v=o.current;if(!v)return;let c=()=>{u.current&&(u.current.textContent=me(v.currentTime));},b=()=>{if(m.current){let M=isFinite(v.duration)?v.duration:0;m.current.textContent=` / ${me(M)}`;}};return v.addEventListener("timeupdate",c),v.addEventListener("durationchange",b),v.addEventListener("seeked",c),c(),b(),()=>{v.removeEventListener("timeupdate",c),v.removeEventListener("durationchange",b),v.removeEventListener("seeked",c);}},[o,r,i]),r?jsx("span",{className:"timeDisplay",style:{opacity:.7},children:jsx("span",{ref:u,children:"0:00"})}):jsxs("span",{className:"timeDisplay",children:[jsx("span",{ref:u,children:"0:00"}),jsx("span",{ref:m,style:{opacity:.6},children:" / 0:00"})]})});et.displayName="TimeDisplay";var Ae=et;var G={PlayButton:be,PauseButton:ye,FullscreenButton:Ee,PiPButton:Me,TheaterButton:Le,VolumeControl:xe,ProgressBar:we,SettingsMenu:Se,TimeDisplay:Ae};var De=memo(function({videoRef:r,playerRef:i,playerContainerRef:u,playbackRates:m,enablePreview:v,thumbnailVtt:c,thumbnailVttBaseUrl:b,isPlaying:M,volume:s,isMuted:k,playbackRate:d,isFullscreen:w,isPictureInPicture:A,isTheaterMode:g,isAudioMode:L,showAudioButton:H,audioModeIcon:I,videoModeIcon:P,audioModeLabel:x,videoModeLabel:C,isLive:B,qualityLevels:_,currentQualityLevel:K,controlBarItems:re,autoHideControls:J}){let D=useRef(null),[V,$]=useState(true),ee=useRef({isPlaying:M,volume:s,isMuted:k,isLive:B});ee.current={isPlaying:M,volume:s,isMuted:k,isLive:B},useEffect(()=>{if(L||!J){$(true),D.current&&clearTimeout(D.current);return}if(!M){$(true),D.current&&clearTimeout(D.current);return}let f=u.current;if(!f)return;let h=()=>{$(true),D.current&&clearTimeout(D.current),D.current=setTimeout(()=>$(false),3e3);},y=()=>{D.current&&clearTimeout(D.current),$(false);};return f.addEventListener("mousemove",h),f.addEventListener("mouseenter",h),f.addEventListener("mouseleave",y),f.addEventListener("touchstart",h,{passive:true}),$(false),()=>{f.removeEventListener("mousemove",h),f.removeEventListener("mouseenter",h),f.removeEventListener("mouseleave",y),f.removeEventListener("touchstart",h),D.current&&clearTimeout(D.current);}},[M,L,J,u]),useEffect(()=>{let f=h=>{if(!u.current?.contains(document.activeElement))return;let y=h.target;if(y.tagName==="INPUT"||y.tagName==="TEXTAREA"||y.isContentEditable)return;let{isPlaying:T,volume:R,isLive:l}=ee.current,S=r.current?.currentTime??0,O=r.current?.duration??0;switch(h.code){case "Space":case "KeyK":h.preventDefault(),T?i.pause():i.play();break;case "ArrowLeft":h.preventDefault(),i.seek(Math.max(0,S-5));break;case "ArrowRight":h.preventDefault(),i.seek(Math.min(O||1/0,S+5));break;case "ArrowUp":h.preventDefault(),i.setVolume(Math.min(1,R+.1));break;case "ArrowDown":h.preventDefault(),i.setVolume(Math.max(0,R-.1));break;case "KeyM":h.preventDefault(),i.toggleMute();break;case "KeyF":h.preventDefault(),i.toggleFullscreen();break;case "KeyP":h.preventDefault(),i.togglePictureInPicture();break;case "KeyT":h.preventDefault(),i.toggleTheaterMode();break;case "KeyL":h.preventDefault(),l&&i.seekToLive();break;case "Digit0":case "Digit1":case "Digit2":case "Digit3":case "Digit4":case "Digit5":case "Digit6":case "Digit7":case "Digit8":case "Digit9":{h.preventDefault();let Q=Number(h.code.replace("Digit",""))*10;i.seek(O/100*Q);break}}};return window.addEventListener("keydown",f),()=>window.removeEventListener("keydown",f)},[i,u,r]);let ne=useCallback(()=>i.play(),[i]),oe=useCallback(()=>i.pause(),[i]),ie=useCallback(f=>i.setVolume(f),[i]),ae=useCallback(()=>i.toggleMute(),[i]),se=useCallback(f=>i.setPlaybackRate(f),[i]),ce=useCallback(f=>i.setQualityLevel(f),[i]),e=useCallback(()=>i.togglePictureInPicture(),[i]),t=useCallback(()=>i.toggleTheaterMode(),[i]),n=useCallback(()=>i.toggleAudioMode(),[i]),a=useCallback(()=>i.toggleFullscreen(),[i]),E=useCallback(()=>i.seekToLive(),[i]);return jsx("div",{style:{position:"absolute",inset:0,display:"flex",flexDirection:"column",justifyContent:"flex-end",opacity:V?1:0,transition:"opacity 0.3s",pointerEvents:"none",zIndex:2},children:jsxs("div",{style:{background:"linear-gradient(to top, rgba(0,0,0,0.75) 0%, rgba(0,0,0,0.2) 60%, transparent 100%)",padding:"48px 12px 12px",pointerEvents:V?"auto":"none"},role:"region","aria-label":"Video player controls",children:[jsx(G.ProgressBar,{videoRef:r,playerRef:i,enablePreview:v,thumbnailVtt:c,thumbnailVttBaseUrl:b,isAudioMode:L}),jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,marginTop:4},children:[M?jsx(G.PauseButton,{onClick:oe}):jsx(G.PlayButton,{onClick:ne}),jsx(G.VolumeControl,{volume:s,isMuted:k,onVolumeChange:ie,onToggleMute:ae}),jsx(G.TimeDisplay,{videoRef:r,isLive:B,isAudioMode:L}),jsx("div",{style:{flex:1}}),B&&jsx(it,{onClick:E}),H&&jsx(ot,{onClick:n,isAudioMode:L,audioModeIcon:I,videoModeIcon:P,audioModeLabel:x,videoModeLabel:C}),jsx(G.SettingsMenu,{currentRate:d,playbackRates:m,onRateChange:se,qualityLevels:_,currentQualityLevel:K,onQualityChange:ce}),re?.map(f=>jsx("button",{className:"controlButton","aria-label":f.label,title:f.title??f.label,onClick:f.onClick,children:f.icon},f.key)),jsx(G.PiPButton,{onClick:e,isPiP:A}),jsx(G.TheaterButton,{onClick:t,isTheater:g}),jsx(G.FullscreenButton,{onClick:a,isFullscreen:w})]})]})})});De.displayName="Controls";var ot=memo(({onClick:o,isAudioMode:r,audioModeIcon:i,videoModeIcon:u,audioModeLabel:m,videoModeLabel:v})=>{let c=r?v??"Video":m??"Audio";return jsxs("button",{onClick:o,className:"rvp-audio-toggle-btn","aria-label":c,title:c,"aria-pressed":r,children:[r?u??jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor",children:jsx("path",{d:"M17 10.5V7c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-3.5l4 4v-11l-4 4z"})}):i??jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor",children:jsx("path",{d:"M12 3a9 9 0 0 0-9 9v7c0 1.1.9 2 2 2h1a1 1 0 0 0 1-1v-5a1 1 0 0 0-1-1H4v-1a8 8 0 0 1 16 0v1h-2a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1h1a3 3 0 0 0 3-3v-4c0-4.97-4.03-9-9-9z"})}),c]})});ot.displayName="AudioModeButton";var it=memo(({onClick:o})=>jsx("button",{onClick:o,style:{background:"none",border:"1px solid rgba(255,255,255,0.6)",color:"#fff",borderRadius:3,padding:"2px 8px",fontSize:11,fontWeight:700,cursor:"pointer",letterSpacing:"0.06em"},title:"Go to live (L)",children:"GO LIVE"}));it.displayName="GoLiveButton";var Ue=memo(({x:o,y:r,isPlaying:i,src:u,videoRef:m,playerRef:v,onClose:c,contextMenuItems:b})=>{let M=useRef(null),[s,k]=useState(()=>m.current?.loop??false),d=Math.min(o,window.innerWidth-220),w=Math.min(r,window.innerHeight-290);useEffect(()=>{let P=B=>{M.current&&!M.current.contains(B.target)&&c();},x=B=>{B.key==="Escape"&&c();},C=()=>c();return document.addEventListener("mousedown",P),document.addEventListener("keydown",x),window.addEventListener("scroll",C,true),()=>{document.removeEventListener("mousedown",P),document.removeEventListener("keydown",x),window.removeEventListener("scroll",C,true);}},[c]);let A=useCallback(()=>{i?v.pause():v.play(),c();},[i,v,c]),g=useCallback(()=>{let P=m.current;if(!P)return;let x=!s;P.loop=x,k(x);},[m,s]),L=useCallback(async()=>{try{await navigator.clipboard.writeText(u);}catch{}c();},[u,c]),H=useCallback(async()=>{let P=Math.floor(m.current?.currentTime??0);try{await navigator.clipboard.writeText(`${u}?t=${P}`);}catch{}c();},[u,m,c]),I=useCallback(()=>{v.togglePictureInPicture(),c();},[v,c]);return jsxs("div",{ref:M,className:"contextMenu",style:{left:d,top:w},children:[jsx("button",{className:"contextMenuItem",onClick:A,children:i?"Pause":"Play"}),jsxs("button",{className:"contextMenuItem",onClick:g,children:[jsx("span",{children:"Loop"}),s&&jsx("span",{className:"contextMenuCheck",children:"\u2713"})]}),jsx("div",{className:"contextMenuDivider"}),jsx("button",{className:"contextMenuItem",onClick:L,children:"Copy video URL"}),jsx("button",{className:"contextMenuItem",onClick:H,children:"Copy video URL at current time"}),jsx("div",{className:"contextMenuDivider"}),jsx("button",{className:"contextMenuItem",onClick:I,children:"Picture-in-Picture"}),b&&b.length>0&&jsxs(Fragment,{children:[jsx("div",{className:"contextMenuDivider"}),b.map((P,x)=>jsx("button",{className:"contextMenuItem",onClick:()=>{P.onClick(),c();},children:P.label},x))]})]})});Ue.displayName="ContextMenu";var We=memo(function({poster:r,logo:i,audioModeFallback:u,isBuffering:m=false,onOverlayClick:v}){return jsxs("div",{className:"rvp-audio-overlay",onClick:v,"data-test":"audio-mode-overlay",children:[r?jsx("div",{className:"rvp-audio-artwork-container",children:jsx("img",{src:r,alt:"Artwork",className:"rvp-audio-artwork",draggable:false})}):u?jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center"},children:u}):i?typeof i=="string"?jsx("img",{src:i,alt:"Logo",className:"rvp-audio-logo",draggable:false}):jsx("div",{className:"rvp-audio-logo-node",children:i}):null,jsx("span",{className:"rvp-audio-label",children:"Audio Mode"}),m?jsx("div",{className:"rvp-audio-buffering-overlay","aria-label":"Buffering",children:jsx("div",{className:"rvp-audio-spinner"})}):null]})});We.displayName="AudioModeOverlay";var ut=forwardRef((o,r)=>{let{src:i,poster:u,className:m,controls:v=true,options:c={}}=o,{autoplay:b=false,muted:M=false,loop:s=false,preload:k="metadata",playbackRates:d=[.25,.5,.75,1,1.25,1.5,1.75,2],enableHLS:w=true,enablePreview:A=true,thumbnailVtt:g,thumbnailVttBaseUrl:L,hlsConfig:H,autoHideControls:I=true,subtitles:P,crossOrigin:x,logo:C,audioModeFallback:B,audioSrc:_,showAudioButton:K,audioModeIcon:re,videoModeIcon:J,audioModeLabel:D,videoModeLabel:V,defaultAudioMode:$,audioBandwidthThreshold:ee,audioModeSwitchLevel:ne,audioModeRecoveryInterval:oe,onPlay:ie,onPause:ae,onEnded:se,onError:ce,onTimeUpdate:e,onDurationChange:t,onBuffering:n,onTheaterModeChange:a,onAudioModeChange:E,contextMenuItems:f,controlBarItems:h}=c,y=useRef(null),T=useRef(null),R=useRef(null),{state:l,ref:S,fullscreenContainerRef:O}=Qe(y,i,{autoplay:b,muted:M,loop:s,playbackRates:d,enableHLS:w,hlsConfig:H,defaultAudioMode:$,audioBandwidthThreshold:ee,audioModeSwitchLevel:ne,audioModeRecoveryInterval:oe,onPlay:ie,onPause:ae,onEnded:se,onError:ce,onTimeUpdate:e,onDurationChange:t,onBuffering:n,onTheaterModeChange:a,onAudioModeChange:E,audioRef:T,audioSrc:_}),Q=useRef(null);at.useLayoutEffect(()=>{Q.current=l.isAudioMode&&_&&T.current?T.current:y.current;},[l.isAudioMode,_]),Q.current===null&&(Q.current=y.current);let[p,q]=useState(null);useEffect(()=>{O.current=R.current;},[O]),at.useImperativeHandle(r,()=>S,[S]);let de=useCallback(()=>{R.current?.focus(),l.isPlaying?S.pause():S.play();},[l.isPlaying,S]),He=useCallback(()=>{S.toggleFullscreen();},[S]),lt=useCallback(te=>{te.preventDefault(),q({x:te.clientX,y:te.clientY});},[]);return jsxs("div",{ref:R,tabIndex:0,style:{position:"relative",width:"100%",backgroundColor:"#000",aspectRatio:"16 / 9",userSelect:"none",outline:"none"},className:m,"data-test":"video-player-container","data-theater":l.isTheaterMode?"true":void 0,onContextMenu:lt,children:[jsx("video",{ref:y,poster:u,preload:k,crossOrigin:x,onClick:de,onDoubleClick:He,playsInline:true,style:{width:"100%",height:"100%",display:"block",cursor:"pointer",visibility:l.isAudioMode?"hidden":"visible"},"data-test":"video-element",children:P?.map(te=>jsx("track",{kind:"subtitles",src:te.src,label:te.label,srcLang:te.srclang,default:te.default},te.id))}),_&&jsx("audio",{ref:T,preload:"none",style:{display:"none"},"aria-hidden":"true"}),l.isAudioMode&&jsx(We,{poster:u,logo:C,audioModeFallback:B,isBuffering:l.isBuffering,onOverlayClick:de}),v&&jsx(De,{videoRef:Q,playerRef:S,playerContainerRef:R,playbackRates:d,enablePreview:A,thumbnailVtt:l.isAudioMode?void 0:g,thumbnailVttBaseUrl:L,isPlaying:l.isPlaying,volume:l.volume,isMuted:l.isMuted,playbackRate:l.playbackRate,isFullscreen:l.isFullscreen,isPictureInPicture:l.isPictureInPicture,isTheaterMode:l.isTheaterMode,isAudioMode:l.isAudioMode,showAudioButton:K??!!_,audioModeIcon:re,videoModeIcon:J,audioModeLabel:D,videoModeLabel:V,isLive:l.isLive,qualityLevels:l.qualityLevels,currentQualityLevel:l.currentQualityLevel,controlBarItems:h,autoHideControls:I}),p&&jsx(Ue,{x:p.x,y:p.y,isPlaying:l.isPlaying,src:i,videoRef:y,playerRef:S,onClose:()=>q(null),contextMenuItems:f}),l.isLive&&jsx("div",{style:{position:"absolute",top:12,left:12,backgroundColor:"#e53935",color:"#fff",fontSize:11,fontWeight:700,letterSpacing:"0.08em",padding:"2px 8px",borderRadius:3,pointerEvents:"none"},children:"LIVE"}),l.isBuffering&&!l.error&&!l.isAudioMode&&jsx("div",{style:{position:"absolute",inset:0,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:12,color:"#fff",pointerEvents:"none"},"data-test":"buffering-indicator",children:jsx("div",{style:{width:48,height:48,border:"4px solid rgba(255,255,255,0.25)",borderTop:"4px solid #fff",borderRadius:"50%",animation:"rvp-spin 0.8s linear infinite"}})}),l.error&&jsx("div",{style:{position:"absolute",inset:0,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"rgba(0,0,0,0.85)",color:"#fff",padding:24},"data-test":"error-overlay",children:jsxs("div",{style:{textAlign:"center",maxWidth:400},children:[jsx("div",{style:{fontSize:36,marginBottom:12},children:"\u26A0"}),jsx("h3",{style:{margin:"0 0 8px",fontSize:18},children:l.error.code==="MEDIA_ERR_SRC_NOT_SUPPORTED"?"Unsupported Format":l.error.code.startsWith("HLS")?"Stream Error":"Playback Error"}),jsx("p",{style:{margin:0,fontSize:13,opacity:.75},children:l.error.message})]})})]})});ut.displayName="VideoPlayer";var zt=ut;var Ut={EXTREME:100,POOR:300,FAIR:800,GOOD:1500},Wt={LOWEST:0,SECOND_LOWEST:1,DISABLED:-1};export{Ut as AUDIO_BANDWIDTH_THRESHOLDS,Wt as AUDIO_SWITCH_LEVELS,tt as ControlElements,De as Controls,zt as VideoPlayer,Ie as findThumbnailCue,me as formatTime,mt as getMimeType,Te as isHLSUrl,Ve as parseThumbnailVtt};//# sourceMappingURL=index.mjs.map
4
4
  //# sourceMappingURL=index.mjs.map