react-helios 2.7.1 → 2.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
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=(o,r)=>{for(var n in r)lt(o,n,{get:r[n],enumerable:true});};function de(o){if(!Number.isFinite(o)||o<0)return "0:00";let r=Math.floor(o),n=Math.floor(r/3600),a=Math.floor(r%3600/60),u=r%60;return n>0?`${n}:${String(a).padStart(2,"0")}:${String(u).padStart(2,"0")}`:`${a}:${String(u).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 dt(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,n)=>({id:n,height:r.height??0,width:r.width??0,bitrate:r.bitrate??0,name:r.height?`${r.height}p`:`Level ${n+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(o,r,n={}){let a=useRef(null),u=useRef(null),v=useRef(1),f=useRef(0),g=useRef(0),L=useRef(r),s=useRef(n);s.current=n;let[T,d]=useState({...vt,isMuted:n.muted??false,volume:n.muted?0:1,isAudioMode:n.defaultAudioMode??false}),x=useRef(T);x.current=T;let V=useRef([]),p=useRef(0),w=useRef(false),A=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:o.current},[o]);useEffect(()=>{let e=o.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,A.current=false,I.current&&(clearTimeout(I.current),I.current=null),E.current&&(clearTimeout(E.current),E.current=null),R.current=false,d(l=>({...l,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(e.canPlayType("application/vnd.apple.mpegurl"))e.src=r,e.load(),i.autoplay&&e.play().catch(()=>{});else if(Ce.isSupported()){let l=new Ce({autoStartLoad:true,startLevel:-1,capLevelToPlayerSize:true,capLevelOnFPSDrop:true,enableWorker:true,maxBufferLength:30,maxMaxBufferLength:600,maxBufferSize:6e7,liveBackBufferLength:30,liveSyncDurationCount:3,...i.hlsConfig});l.attachMedia(e),l.loadSource(r),l.on(Events.MANIFEST_PARSED,(C,k)=>{if(t)return;let M=Ke(k.levels);d(c=>({...c,qualityLevels:M,currentQualityLevel:-1})),s.current.autoplay&&e.play().catch(()=>{});}),l.on(Events.LEVEL_SWITCHED,(C,k)=>{if(t)return;d(h=>({...h,currentQualityLevel:k.level}));let M=s.current,c=M.audioModeSwitchLevel;c===void 0||c<0||!M.audioSrc||A.current||p.current<3||d(h=>!h.isAudioMode&&k.level<=c?(w.current=true,s.current.onAudioModeChange?.(true),{...h,isAudioMode:true}):h);}),l.on(Events.FRAG_LOADED,(C,k)=>{if(t)return;g.current=0;let M=s.current;if(!M.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=M.audioBandwidthThreshold??300;if(R.current){R.current=false,h>0&&O&&h>O*1.5?(w.current=false,l.startLoad(),s.current.onAudioModeChange?.(false),d(y=>({...y,isAudioMode:false}))):(l.stopLoad(),m());return}if(!O||A.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;d(y=>!y.isAudioMode&&Y<O?(w.current=true,s.current.onAudioModeChange?.(true),{...y,isAudioMode:true}):y);});let m=()=>{E.current&&clearTimeout(E.current);let C=s.current.audioModeRecoveryInterval??3e4;E.current=setTimeout(()=>{!w.current||!x.current.isAudioMode||(R.current=true,l.startLoad());},C);},b=3;l.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 M=1e3*f.current;console.warn(`[hls] network error \u2013 retry ${f.current}/${b} in ${M}ms`),setTimeout(()=>{a.current===l&&l.startLoad();},M);}else {let M={code:"HLS_NETWORK_ERROR",message:"Failed to load stream after multiple retries."};d(c=>({...c,error:M})),s.current.onError?.(M);}break;case Ce.ErrorTypes.MEDIA_ERROR:if(g.current<b)g.current+=1,console.warn(`[hls] media error \u2013 recovery attempt ${g.current}/${b}`),l.recoverMediaError();else {l.destroy(),a.current=null;let M={code:"HLS_FATAL_ERROR",message:"An unrecoverable media error occurred."};d(c=>({...c,error:M})),s.current.onError?.(M);}break;default:{l.destroy(),a.current=null;let M={code:"HLS_FATAL_ERROR",message:"An unrecoverable HLS error occurred."};d(c=>({...c,error:M})),s.current.onError?.(M);break}}}}),a.current=l;}}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 l=s.current.audioRef?.current;l&&(l.pause(),l.removeAttribute("src"),l.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(y=>({...y,isPlaying:true})),s.current.onPlay?.();},i=()=>{d(y=>({...y,isPlaying:false})),s.current.onPause?.();},l=()=>{d(y=>({...y,isPlaying:false})),s.current.onEnded?.();},m=()=>{x.current.isAudioMode&&s.current.audioSrc||s.current.onTimeUpdate?.(e.currentTime);},b=()=>{let y=e.duration,K=!Number.isFinite(y);d(fe=>({...fe,duration:K?0:y,isLive:K})),K||s.current.onDurationChange?.(y);},C=()=>{let y=e.volume;y>0&&!e.muted&&(v.current=y),d(K=>({...K,volume:y,isMuted:e.muted||y===0}));},k=()=>{d(y=>({...y,playbackRate:e.playbackRate}));},M=()=>{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"};d(He=>({...He,error:fe})),s.current.onError?.(fe);},c=()=>{d(y=>({...y,isBuffering:true})),s.current.onBuffering?.(true);},h=()=>{d(y=>({...y,isBuffering:false})),s.current.onBuffering?.(false);},O=()=>d(y=>({...y,isBuffering:false})),H=()=>{let y=!!(document.fullscreenElement||document.webkitFullscreenElement);d(K=>({...K,isFullscreen:y}));},Y=()=>{d(y=>({...y,isPictureInPicture:document.pictureInPictureElement===e}));};return e.addEventListener("play",t),e.addEventListener("pause",i),e.addEventListener("ended",l),e.addEventListener("timeupdate",m),e.addEventListener("durationchange",b),e.addEventListener("volumechange",C),e.addEventListener("ratechange",k),e.addEventListener("error",M),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",l),e.removeEventListener("timeupdate",m),e.removeEventListener("durationchange",b),e.removeEventListener("volumechange",C),e.removeEventListener("ratechange",k),e.removeEventListener("error",M),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);}},[o]),useEffect(()=>{let e=s.current.audioRef?.current;if(!e||!s.current.audioSrc)return;let t=()=>{d(h=>({...h,isPlaying:true})),s.current.onPlay?.();},i=()=>{d(h=>({...h,isPlaying:false})),s.current.onPause?.();},l=()=>{d(h=>({...h,isPlaying:false})),s.current.onEnded?.();},m=()=>{d(h=>({...h,isBuffering:true})),s.current.onBuffering?.(true);},b=()=>{d(h=>({...h,isBuffering:false})),s.current.onBuffering?.(false);},C=()=>d(h=>({...h,isBuffering:false})),k=()=>{x.current.isAudioMode&&s.current.onTimeUpdate?.(e.currentTime);},M=()=>{let h=e.duration;isFinite(h)&&(d(O=>({...O,duration:h})),s.current.onDurationChange?.(h));},c=()=>{let h={code:"MEDIA_ERR_NETWORK",message:"Audio source failed to load."};d(O=>({...O,error:h})),s.current.onError?.(h);};return e.addEventListener("play",t),e.addEventListener("pause",i),e.addEventListener("ended",l),e.addEventListener("waiting",m),e.addEventListener("canplay",b),e.addEventListener("playing",C),e.addEventListener("timeupdate",k),e.addEventListener("durationchange",M),e.addEventListener("error",c),()=>{e.removeEventListener("play",t),e.removeEventListener("pause",i),e.removeEventListener("ended",l),e.removeEventListener("waiting",m),e.removeEventListener("canplay",b),e.removeEventListener("playing",C),e.removeEventListener("timeupdate",k),e.removeEventListener("durationchange",M),e.removeEventListener("error",c);}},[r]),useEffect(()=>{let e=s.current,t=o.current,i=e.audioRef?.current;if(!(!t||!i||!e.audioSrc)){if(L.current!==r){L.current=r;return}if(L.current=r,T.isAudioMode){let l=t.currentTime,m=!t.paused;if(t.pause(),a.current?.stopLoad(),i.getAttribute("src")||(i.src=e.audioSrc),i.currentTime=l,i.volume=t.volume,i.muted=t.muted,i.playbackRate=t.playbackRate,m&&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 l=i.currentTime,m=!i.paused;i.pause(),E.current&&(clearTimeout(E.current),E.current=null),R.current=false,a.current?.startLoad(),t.currentTime=l,t.volume=i.volume,m&&t.play().catch(()=>{});}}},[T.isAudioMode,o,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&&(v.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=v.current>0?v.current:1;e.volume=t,e.muted=false;}else v.current=e.volume,e.muted=true;},[P]),N=useCallback(e=>{let t=o.current;t&&(t.playbackRate=e);let i=s.current.audioRef?.current;i&&(i.playbackRate=e);},[o]),$=useCallback(e=>{let t=a.current;t&&(t.currentLevel=e,d(i=>({...i,currentQualityLevel:e})));},[]),Z=useCallback(()=>{let e=a.current,t=o.current;if(!e||!t)return;let i=e.liveSyncPosition;i!=null&&Number.isFinite(i)&&(t.currentTime=i);},[o]),re=useCallback(async()=>{let e=o.current;if(!e)return;let t=u.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);}},[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=!x.current.isTheaterMode;d(t=>({...t,isTheaterMode:e})),s.current.onTheaterModeChange?.(e);},[]),ie=useCallback(()=>{I.current&&clearTimeout(I.current),w.current=false,A.current=true,I.current=setTimeout(()=>{A.current=false,V.current=[];},6e4);let e=!x.current.isAudioMode;d(t=>({...t,isAudioMode:e})),s.current.onAudioModeChange?.(e);},[]),ae=useCallback(()=>{let e=P(),t=e?.currentTime??0,i=[];if(e)for(let l=0;l<e.buffered.length;l++)i.push({start:e.buffered.start(l),end:e.buffered.end(l)});return {...x.current,currentTime:t,bufferedRanges:i}},[P]),se=useCallback(()=>o.current??null,[o]),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:u}}var tt={};ct(tt,{ControlElements:()=>X,FullscreenButton:()=>Ee,PauseButton:()=>ye,PiPButton:()=>Me,PlayButton:()=>be,ProgressBar:()=>we,SettingsMenu:()=>Se,TheaterButton:()=>Le,TimeDisplay:()=>De,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:n,onToggleMute:a})=>{let[u,v]=useState(false),f=r?0:o,g=f*100,L=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:()=>v(true),onMouseLeave:()=>v(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"})})}),u&&jsx("input",{type:"range",min:"0",max:"100",value:g,onChange:s=>n(Number(s.target.value)/100),className:"volumeSlider",style:{background:L},"aria-label":"Volume","aria-valuenow":Math.round(g)})]})});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 yt(o,r){if(/^https?:\/\//i.test(r))return r;try{return new URL(r,o).href}catch{return r}}function Ve(o,r=""){let n=[],a=o.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 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,`
|
|
2
2
|
`).split(`
|
|
3
|
-
`),u=0;for(;u<a.length;){let v=a[u].trim();if(v.includes("-->")){let f=v.indexOf("-->"),g=Xe(v.slice(0,f)),L=Xe(v.slice(f+3));for(u++;u<a.length&&!a[u].trim();)u++;if(u<a.length){let s=a[u].trim(),T=s.lastIndexOf("#xywh="),d=s,x=0,V=0,p=160,w=90;if(T!==-1){d=s.slice(0,T);let A=s.slice(T+6).split(",").map(Number);x=A[0]??0,V=A[1]??0,p=A[2]??160,w=A[3]??90;}n.push({start:g,end:L,url:yt(r,d),x,y:V,w:p,h:w});}}u++;}return n}function Ie(o,r){if(!o.length)return null;let n=0,a=o.length-1;for(;n<=a;){let u=n+a>>1;if(o[u].end<=r)n=u+1;else if(o[u].start>r)a=u-1;else return o[u]}return null}var je=memo(({videoRef:o,playerRef:r,enablePreview:n=true,thumbnailVtt:a,isAudioMode:u=false})=>{let v=useRef(null),f=useRef(null),g=useRef(null),L=useRef(null),s=useRef(null),T=useRef(null),d=useRef(null),[x,V]=useState([]),p=useRef(false),w=useRef(0),A=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&&v.current&&(R.current=v.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=o.current;if(!e)return;let t=()=>{let i=isFinite(e.duration)?e.duration:0,l=e.currentTime,m=i>0?l/i*100:0;f.current&&(f.current.style.width=`${m}%`),g.current&&(g.current.style.left=`${m}%`),v.current&&(v.current.setAttribute("aria-valuenow",String(Math.round(l))),v.current.setAttribute("aria-valuemax",String(Math.round(i))),v.current.setAttribute("aria-valuetext",de(l)));};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);}},[o,u]),useEffect(()=>{let e=o.current;if(!e)return;let t=()=>{let i=[];for(let l=0;l<e.buffered.length;l++)i.push({start:e.buffered.start(l),end:e.buffered.end(l)});V(i);};return e.addEventListener("progress",t),()=>e.removeEventListener("progress",t)},[o,u]);let S=useCallback(()=>{p.current=true,g.current?.classList.add("dragging");},[]),U=useCallback(()=>{p.current=false,g.current?.classList.remove("dragging");},[]),te=useCallback(()=>{n&&(R.current=null,L.current&&(L.current.style.display="block"),T.current&&(T.current.style.display="block"));},[n]),G=useCallback(()=>{L.current&&(L.current.style.display="none"),T.current&&(T.current.style.display="none");},[]),B=useCallback(e=>{if(!d.current||!E.current.length)return;let t=Ie(E.current,e);if(I.current=t,!t)return;let i=d.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=o.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,o]),$=useCallback(e=>{let t=P();return t?Math.max(0,Math.min(e-t.left,t.width)):0},[P]),Z=useCallback(e=>{let t=o.current;if(!t)return;let i=t.currentTime,l=isFinite(t.duration)?t.duration:0;switch(e.key){case "ArrowLeft":case "ArrowRight":{e.preventDefault(),e.nativeEvent.stopImmediatePropagation();let m=e.shiftKey?10:5;r.seek(e.key==="ArrowLeft"?Math.max(0,i-m):Math.min(l,i+m));break}case "Home":e.preventDefault(),e.nativeEvent.stopImmediatePropagation(),r.seek(0);break;case "End":l>0&&(e.preventDefault(),e.nativeEvent.stopImmediatePropagation(),r.seek(l));break}},[o,r]),re=useCallback(e=>{let t=N(e.clientX),i=$(e.clientX);if(w.current=i,A.current=t,T.current&&(T.current.style.left=`${i}px`),s.current&&(s.current.textContent=de(t)),B(t),L.current){let l=L.current.offsetWidth,m=P()?.width??0,b=l/2,C=Math.max(b,Math.min(i,m-b));L.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=v.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=o.current,t=e&&isFinite(e.duration)?e.duration:0;return t<=0||!x.length?null:x.map((i,l)=>{let m=i.start/t*100,b=(i.end-i.start)/t*100;return jsx("div",{className:"bufferedSegment",style:{left:`${m}%`,width:`${b}%`}},l)})},[x,o]);return jsxs("div",{ref:v,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:[n&&jsxs("div",{ref:L,className:"previewTooltip",style:{left:0,display:"none"},"aria-hidden":"true",children:[a&&jsx("div",{ref:d,className:"previewThumbnail"}),jsx("div",{ref:s,className:"previewTime"})]}),jsxs("div",{className:"progressBackground",children:[ce,jsx("div",{ref:f,className:"progressFilled",style:{width:"0%"}}),n&&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:o,playbackRates:r,onRateChange:n,qualityLevels:a=[],currentQualityLevel:u=-1,onQualityChange:v})=>{let[f,g]=useState(false),[L,s]=useState("speed"),T=useRef(null),d=a.length>0&&!!v;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(()=>u===-1?"Auto":a.find(p=>p.id===u)?.name??"Auto",[a,u]);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:[d&&jsxs("div",{className:"settingsTabs",children:[jsx("button",{className:`settingsTab${L==="speed"?" active":""}`,onClick:()=>s("speed"),children:"Speed"}),jsx("button",{className:`settingsTab${L==="quality"?" active":""}`,onClick:()=>s("quality"),children:"Quality"})]}),(!d||L==="speed")&&jsxs("div",{children:[!d&&jsx("div",{className:"settingsPanelLabel",children:"Playback Speed"}),r.map(p=>jsx("button",{onClick:()=>{n(p),g(false);},className:`settingsOption${o===p?" active":""}`,role:"menuitemradio","aria-checked":o===p,children:p===1?"Normal":`${p}\xD7`},p))]}),d&&L==="quality"&&jsxs("div",{children:[jsxs("button",{onClick:()=>{v(-1),g(false);},className:`settingsOption${u===-1?" active":""}`,role:"menuitemradio","aria-checked":u===-1,children:["Auto ",u===-1&&V!=="Auto"?`(${V})`:""]}),x.map(p=>jsxs("button",{onClick:()=>{v(p.id),g(false);},className:`settingsOption${u===p.id?" active":""}`,role:"menuitemradio","aria-checked":u===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:o,isLive:r=false})=>{let n=useRef(null),a=useRef(null);return useEffect(()=>{let u=o.current;if(!u)return;let v=()=>{n.current&&(n.current.textContent=de(u.currentTime));},f=()=>{if(a.current){let g=isFinite(u.duration)?u.duration:0;a.current.textContent=` / ${de(g)}`;}};return u.addEventListener("timeupdate",v),u.addEventListener("durationchange",f),u.addEventListener("seeked",v),v(),f(),()=>{u.removeEventListener("timeupdate",v),u.removeEventListener("durationchange",f),u.removeEventListener("seeked",v);}},[o,r]),r?jsx("span",{className:"timeDisplay",style:{opacity:.7},children:jsx("span",{ref:n,children:"0:00"})}):jsxs("span",{className:"timeDisplay",children:[jsx("span",{ref:n,children:"0:00"}),jsx("span",{ref:a,style:{opacity:.6},children:" / 0:00"})]})});et.displayName="TimeDisplay";var De=et;var X={PlayButton:be,PauseButton:ye,FullscreenButton:Ee,PiPButton:Me,TheaterButton:Le,VolumeControl:xe,ProgressBar:we,SettingsMenu:Se,TimeDisplay:De};var Ae=memo(function({videoRef:r,playerRef:n,playerContainerRef:a,playbackRates:u,enablePreview:v,thumbnailVtt:f,isPlaying:g,volume:L,isMuted:s,playbackRate:T,isFullscreen:d,isPictureInPicture:x,isTheaterMode:V,isAudioMode:p,showAudioButton:w,audioModeIcon:A,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:L,isMuted:s,isLive:P});Z.current={isPlaying:g,volume:L,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 m=a.current;if(!m)return;let b=()=>{$(true),B.current&&clearTimeout(B.current),B.current=setTimeout(()=>$(false),3e3);},C=()=>{B.current&&clearTimeout(B.current),$(false);};return m.addEventListener("mousemove",b),m.addEventListener("mouseenter",b),m.addEventListener("mouseleave",C),m.addEventListener("touchstart",b,{passive:true}),$(false),()=>{m.removeEventListener("mousemove",b),m.removeEventListener("mouseenter",b),m.removeEventListener("mouseleave",C),m.removeEventListener("touchstart",b),B.current&&clearTimeout(B.current);}},[g,p,G,a]),useEffect(()=>{let m=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:M,isLive:c}=Z.current,h=r.current?.currentTime??0,O=r.current?.duration??0;switch(b.code){case "Space":case "KeyK":b.preventDefault(),k?n.pause():n.play();break;case "ArrowLeft":b.preventDefault(),n.seek(Math.max(0,h-5));break;case "ArrowRight":b.preventDefault(),n.seek(Math.min(O||1/0,h+5));break;case "ArrowUp":b.preventDefault(),n.setVolume(Math.min(1,M+.1));break;case "ArrowDown":b.preventDefault(),n.setVolume(Math.max(0,M-.1));break;case "KeyM":b.preventDefault(),n.toggleMute();break;case "KeyF":b.preventDefault(),n.toggleFullscreen();break;case "KeyP":b.preventDefault(),n.togglePictureInPicture();break;case "KeyT":b.preventDefault(),n.toggleTheaterMode();break;case "KeyL":b.preventDefault(),c&&n.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;n.seek(O/100*H);break}}};return window.addEventListener("keydown",m),()=>window.removeEventListener("keydown",m)},[n,a,r]);let re=useCallback(()=>n.play(),[n]),ne=useCallback(()=>n.pause(),[n]),oe=useCallback(m=>n.setVolume(m),[n]),ie=useCallback(()=>n.toggleMute(),[n]),ae=useCallback(m=>n.setPlaybackRate(m),[n]),se=useCallback(m=>n.setQualityLevel(m),[n]),ce=useCallback(()=>n.togglePictureInPicture(),[n]),e=useCallback(()=>n.toggleTheaterMode(),[n]),t=useCallback(()=>n.toggleAudioMode(),[n]),i=useCallback(()=>n.toggleFullscreen(),[n]),l=useCallback(()=>n.seekToLive(),[n]);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:n,enablePreview:v,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:L,isMuted:s,onVolumeChange:oe,onToggleMute:ie}),jsx(X.TimeDisplay,{videoRef:r,isLive:P}),jsx("div",{style:{flex:1}}),P&&jsx(it,{onClick:l}),w&&jsx(ot,{onClick:t,isAudioMode:p,audioModeIcon:A,videoModeIcon:I,audioModeLabel:E,videoModeLabel:R}),jsx(X.SettingsMenu,{currentRate:T,playbackRates:u,onRateChange:ae,qualityLevels:S,currentQualityLevel:U,onQualityChange:se}),te?.map(m=>jsx("button",{className:"controlButton","aria-label":m.label,title:m.title??m.label,onClick:m.onClick,children:m.icon},m.key)),jsx(X.PiPButton,{onClick:ce,isPiP:x}),jsx(X.TheaterButton,{onClick:e,isTheater:V}),jsx(X.FullscreenButton,{onClick:i,isFullscreen:d})]})]})})});Ae.displayName="Controls";var ot=memo(({onClick:o,isAudioMode:r,audioModeIcon:n,videoModeIcon:a,audioModeLabel:u,videoModeLabel:v})=>{let f=r?v??"Video":u??"Audio";return jsxs("button",{onClick:o,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"})}):n??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: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 We=memo(({x:o,y:r,isPlaying:n,src:a,videoRef:u,playerRef:v,onClose:f,contextMenuItems:g})=>{let L=useRef(null),[s,T]=useState(()=>u.current?.loop??false),d=Math.min(o,window.innerWidth-220),x=Math.min(r,window.innerHeight-290);useEffect(()=>{let E=S=>{L.current&&!L.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(()=>{n?v.pause():v.play(),f();},[n,v,f]),p=useCallback(()=>{let E=u.current;if(!E)return;let R=!s;E.loop=R,T(R);},[u,s]),w=useCallback(async()=>{try{await navigator.clipboard.writeText(a);}catch{}f();},[a,f]),A=useCallback(async()=>{let E=Math.floor(u.current?.currentTime??0);try{await navigator.clipboard.writeText(`${a}?t=${E}`);}catch{}f();},[a,u,f]),I=useCallback(()=>{v.togglePictureInPicture(),f();},[v,f]);return jsxs("div",{ref:L,className:"contextMenu",style:{left:d,top:x},children:[jsx("button",{className:"contextMenuItem",onClick:V,children:n?"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:A,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:n,audioModeFallback:a,isBuffering:u=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})}):a?jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center"},children:a}):n?typeof n=="string"?jsx("img",{src:n,alt:"Logo",className:"rvp-audio-logo",draggable:false}):jsx("div",{className:"rvp-audio-logo-node",children:n}):null,jsx("span",{className:"rvp-audio-label",children:"Audio Mode"}),u?jsx("div",{className:"rvp-audio-buffering-overlay","aria-label":"Buffering",children:jsx("div",{className:"rvp-audio-spinner"})}):null]})});$e.displayName="AudioModeOverlay";var ut=forwardRef((o,r)=>{let{src:n,poster:a,className:u,controls:v=true,options:f={}}=o,{autoplay:g=false,muted:L=false,loop:s=false,preload:T="metadata",playbackRates:d=[.25,.5,.75,1,1.25,1.5,1.75,2],enableHLS:x=true,enablePreview:V=true,thumbnailVtt:p,hlsConfig:w,autoHideControls:A=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:l,contextMenuItems:m,controlBarItems:b}=f,C=useRef(null),k=useRef(null),M=useRef(null),{state:c,ref:h,fullscreenContainerRef:O}=Qe(C,n,{autoplay:g,muted:L,loop:s,playbackRates:d,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:l,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=M.current;},[O]),at.useImperativeHandle(r,()=>h,[h]);let K=useCallback(()=>{M.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:M,tabIndex:0,style:{position:"relative",width:"100%",backgroundColor:"#000",aspectRatio:"16 / 9",userSelect:"none",outline:"none"},className:u,"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}),v&&jsx(Ae,{videoRef:H,playerRef:h,playerContainerRef:M,playbackRates:d,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:A}),Y&&jsx(We,{x:Y.x,y:Y.y,isPlaying:c.isPlaying,src:n,videoRef:C,playerRef:h,onClose:()=>y(null),contextMenuItems:m}),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,Ae 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
|
+
`),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
|
|
4
4
|
//# sourceMappingURL=index.mjs.map
|