@therealtinhtute/baroiplayer 1.0.2 → 1.0.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.
@@ -1,4 +0,0 @@
1
- "use strict";const s=require("react"),E=require("./context-CwZnPdz0.cjs"),oe=require("./utils-Db13763z.cjs");function ve(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const a=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,a.get?a:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const Q=ve(s);function ye({enabled:e=!0,state:t,controls:n,seekStep:a=10,volumeStep:l=.1}){const c=i=>{if(!e)return;const m=i.target;if(!(m.tagName==="INPUT"||m.tagName==="TEXTAREA"||m.contentEditable==="true"))switch(i.code){case"Space":case"KeyK":i.preventDefault(),n.toggle();break;case"KeyM":i.preventDefault(),n.toggleMute();break;case"KeyF":i.preventDefault(),n.toggleFullscreen();break;case"ArrowLeft":i.preventDefault(),n.seek(Math.max(0,t.currentTime-a));break;case"ArrowRight":i.preventDefault(),n.seek(Math.min(t.duration,t.currentTime+a));break;case"ArrowUp":i.preventDefault(),n.setVolume(Math.min(1,t.volume+l));break;case"ArrowDown":i.preventDefault(),n.setVolume(Math.max(0,t.volume-l));break;case"Digit0":case"Digit1":case"Digit2":case"Digit3":case"Digit4":case"Digit5":case"Digit6":case"Digit7":case"Digit8":case"Digit9":i.preventDefault();const D=parseInt(i.code.replace("Digit",""),10)/10;n.seek(t.duration*D);break;case"Home":i.preventDefault(),n.seek(0);break;case"End":i.preventDefault(),n.seek(t.duration);break}};return s.useEffect(()=>{if(e)return document.addEventListener("keydown",c),()=>{document.removeEventListener("keydown",c)}},[e,c]),{handleKeyDown:c}}function Te(e,t){if(!t.optimistic)return e;switch(t.type){case"PLAY":return{...e,isPlaying:!0,error:null};case"PAUSE":return{...e,isPlaying:!1};case"SEEK":return{...e,currentTime:t.detail};case"SET_VOLUME":return{...e,volume:Math.max(0,Math.min(1,t.detail))};case"MUTE":return{...e,isMuted:!0};case"UNMUTE":return{...e,isMuted:!1};case"TOGGLE_MUTE":return{...e,isMuted:!e.isMuted};case"ENTER_FULLSCREEN":return{...e,isFullscreen:!0};case"EXIT_FULLSCREEN":return{...e,isFullscreen:!1};case"SET_PLAYBACK_RATE":return{...e,playbackRate:t.detail};case"TOGGLE_SUBTITLES":return{...e,subtitlesShowing:!e.subtitlesShowing};case"PREVIEW_TIME":return{...e,previewTime:t.detail};case"CLEAR_PREVIEW":return{...e,previewTime:null,previewImage:null,previewCoords:null};default:return e}}function ce(e){const t=s.useSyncExternalStore(e.subscribe,e.getState,e.getState),[n,a]=s.useOptimistic(t,Te),l=s.useCallback(async m=>{m.optimistic&&a(m),await e.dispatchOptimistic(m)},[e,a]),c=s.useMemo(()=>({togglePlayPause:async()=>{const m={type:n.isPlaying?"PAUSE":"PLAY",optimistic:!0,timestamp:Date.now()};await l(m)},setVolumeOptimistic:async m=>{const k={type:"SET_VOLUME",detail:Math.max(0,Math.min(1,m)),optimistic:!0,timestamp:Date.now()};await l(k)},seekOptimistic:async m=>{const k={type:"SEEK",detail:m,optimistic:!0,timestamp:Date.now()};await l(k)},toggleMuteOptimistic:async()=>{const m={type:"TOGGLE_MUTE",optimistic:!0,timestamp:Date.now()};await l(m)},toggleFullscreenOptimistic:async()=>{const m={type:n.isFullscreen?"EXIT_FULLSCREEN":"ENTER_FULLSCREEN",optimistic:!0,timestamp:Date.now()};await l(m)},setPlaybackRateOptimistic:async m=>{const k={type:"SET_PLAYBACK_RATE",detail:m,optimistic:!0,timestamp:Date.now()};await l(k)},toggleSubtitlesOptimistic:async()=>{const m={type:"TOGGLE_SUBTITLES",optimistic:!0,timestamp:Date.now()};await l(m)}}),[n,l]),i=s.useMemo(()=>({isPlaying:n.isPlaying,currentTime:n.currentTime,volume:n.volume,isMuted:n.isMuted,isFullscreen:n.isFullscreen,playbackRate:n.playbackRate,subtitlesShowing:n.subtitlesShowing,previewTime:n.previewTime,progress:n.duration>0?n.currentTime/n.duration:0,formattedTime:re(n.currentTime),formattedDuration:re(n.duration),canPlay:!n.isLoading&&!n.error,hasError:!!n.error,isBuffering:n.isLoading}),[n]);return{state:n,actualState:t,...i,...c,dispatchOptimistic:l}}function re(e){if(!e||!isFinite(e))return"0:00";const t=Math.floor(e/60),n=Math.floor(e%60),a=Math.floor(t/60);return a>0?`${a}:${String(t%60).padStart(2,"0")}:${String(n).padStart(2,"0")}`:`${t}:${String(n).padStart(2,"0")}`}function N(e,t){return((n,a=!1)=>{const l={type:e,detail:n,optimistic:a,timestamp:Date.now()};return a?t.dispatchOptimistic(l):(t.dispatch(l),Promise.resolve())})}function Ee(e){const[t,n]=s.useState(e.getActionState());return s.useEffect(()=>e.subscribe(()=>{const l=e.getActionState();n(c=>JSON.stringify(c)!==JSON.stringify(l)?l:c)}),[e]),t}function ue(e){const t=s.useMemo(()=>({play:N(E.MediaActionTypes$1.PLAY,e),pause:N(E.MediaActionTypes$1.PAUSE,e),seek:N(E.MediaActionTypes$1.SEEK,e),setVolume:N(E.MediaActionTypes$1.SET_VOLUME,e),mute:N(E.MediaActionTypes$1.MUTE,e),unmute:N(E.MediaActionTypes$1.UNMUTE,e),toggleMute:N(E.MediaActionTypes$1.TOGGLE_MUTE,e),setDuration:N(E.MediaActionTypes$1.SET_DURATION,e),setCurrentTime:N(E.MediaActionTypes$1.SET_CURRENT_TIME,e),setBuffered:N(E.MediaActionTypes$1.SET_BUFFERED,e),setLoading:N(E.MediaActionTypes$1.SET_LOADING,e),setError:N(E.MediaActionTypes$1.SET_ERROR,e),enterFullscreen:N(E.MediaActionTypes$1.ENTER_FULLSCREEN,e),exitFullscreen:N(E.MediaActionTypes$1.EXIT_FULLSCREEN,e),enterPiP:N(E.MediaActionTypes$1.ENTER_PIP,e),exitPiP:N(E.MediaActionTypes$1.EXIT_PIP,e),setPlaybackRate:N(E.MediaActionTypes$1.SET_PLAYBACK_RATE,e),setSubtitleTrack:N(E.MediaActionTypes$1.SET_SUBTITLE_TRACK,e),setRendition:N(E.MediaActionTypes$1.SET_RENDITION,e),toggleSubtitles:N(E.MediaActionTypes$1.TOGGLE_SUBTITLES,e),previewTime:N(E.MediaActionTypes$1.PREVIEW_TIME,e),clearPreview:N(E.MediaActionTypes$1.CLEAR_PREVIEW,e)}),[e]),n=Ee(e),a=s.useMemo(()=>({togglePlayPause:async c=>{c?await t.pause(!0):await t.play(!0)},seekWithPreview:async c=>{await t.previewTime(c,!0),await t.seek(c,!0)},adjustVolume:async(c,i)=>{const m=Math.max(0,Math.min(1,i+c));await t.setVolume(m,!0)},toggleFullscreenOptimistic:async c=>{c?await t.exitFullscreen(!0):await t.enterFullscreen(!0)}}),[t]),l=s.useCallback(async()=>{const{lastAction:c}=n;c&&n.error&&await e.dispatchOptimistic({...c,retryCount:(c.retryCount||0)+1})},[e,n]);return{...t,...a,actionState:n,retryLastAction:l,isLoading:n.pending,hasError:!!n.error,errorMessage:n.error,retryCount:n.retryCount}}function be(e){const t=s.useRef(null),n=s.useRef(null),[a,l]=s.useTransition(),[c,i]=s.useTransition();s.useRef(0);const m=s.useRef(0),k=s.useRef(0);s.useRef();const D=s.useRef(0),R=E.useMediaStore(),g="getOptimisticState"in R,r=E.useMediaSelector$1(o=>o.isPlaying),w=E.useMediaSelector$1(o=>o.currentTime),v=E.useMediaSelector$1(o=>o.duration),d=E.useMediaSelector$1(o=>o.volume),y=E.useMediaSelector$1(o=>o.isMuted),L=E.useMediaSelector$1(o=>o.isLoading),h=E.useMediaSelector$1(o=>o.isBuffering),u=E.useMediaSelector$1(o=>o.error),b=E.useMediaSelector$1(o=>o.buffered),T=E.useMediaSelector$1(o=>o.isFullscreen),S=R,M=g?ce(S):null,f=g?ue(S):null,[H,F]=s.useState({frameRate:0,averageRenderTime:0,droppedFrames:0,bufferHealth:0}),[$,C]=s.useOptimistic(d,(o,A)=>Math.max(0,Math.min(1,A)));s.useOptimistic(w,(o,A)=>Math.max(0,Math.min(v||0,A))),s.useEffect(()=>{const o=t.current;if(!o)return;const A={volume:e.volume,muted:e.muted,autoplay:e.autoPlay,loop:e.loop,preload:e.preload,crossOrigin:e.crossOrigin};Object.entries(A).forEach(([B,z])=>{z!==void 0&&(o[B]=z)}),o.setAttribute("preload",e.preloadStrategy==="eager"?"auto":"metadata"),e.bufferingStrategy==="aggressive"&&o.setAttribute("buffered","auto"),o instanceof HTMLVideoElement&&(o.style.willChange="transform",o.style.transform="translateZ(0)")},[e.volume,e.muted,e.autoPlay,e.loop,e.preload,e.crossOrigin,e.preloadStrategy,e.bufferingStrategy]);const P=s.useCallback(()=>{const o=t.current;if(!o)return;const A=performance.now();if(e.enableTimeUpdateThrottling!==!1){if(A-D.current<(e.timeUpdateThrottleMs||100))return;D.current=A}l(()=>{g&&f&&f.setCurrentTime(o.currentTime)})},[e.enableTimeUpdateThrottling,e.timeUpdateThrottleMs,g,f]),I=s.useCallback(()=>{l(()=>{g&&f&&f.play(!0)}),e.onPlay?.()},[g,f,e.onPlay]),V=s.useCallback(()=>{l(()=>{g&&f&&f.pause(!0)}),e.onPause?.()},[g,f,e.onPause]),_=s.useCallback(()=>{const o=t.current;o&&l(()=>{g&&f&&(f.setVolume(o.volume,!0),o.muted?f.mute(!0):f.unmute(!0))})},[g,f]),O=s.useCallback(()=>{i(()=>{})},[]),q=s.useCallback(()=>{},[]),p=s.useCallback(()=>{const o=t.current;o&&l(()=>{g&&f&&f.setBuffered(o.buffered)})},[g,f]),U=s.useCallback(()=>{const o=performance.now();if(o-k.current>0&&(m.current++,m.current>=60)){const B=Math.round(m.current*1e3/(o-k.current));F(z=>({...z,frameRate:B,droppedFrames:Math.max(0,60-B)})),m.current=0,k.current=o}},[]);s.useEffect(()=>{const o=t.current;if(!o)return;const A=[{event:"timeupdate",handler:P,passive:!0},{event:"play",handler:I},{event:"pause",handler:V},{event:"volumechange",handler:_},{event:"seeking",handler:O},{event:"seeked",handler:q},{event:"progress",handler:p,passive:!0},{event:"loadedmetadata",handler:()=>U()},{event:"loadeddata",handler:()=>U()}];A.forEach(({event:X,handler:Y,passive:ee})=>{const te=ee?{passive:!0}:{};o.addEventListener(X,Y,te)});let B;const z=()=>{U(),B=requestAnimationFrame(z)};return e.enablePerformanceMonitoring&&z(),()=>{A.forEach(({event:X,handler:Y})=>{o.removeEventListener(X,Y)}),B&&cancelAnimationFrame(B)}},[P,I,V,_,O,q,p,U,e.enablePerformanceMonitoring]);const Z=s.useMemo(()=>{const o=async()=>{const x=t.current;if(x)if(g&&f)await f.play(!0);else try{await x.play()}catch(G){console.error("Failed to play media:",G)}},A=()=>{const x=t.current;x&&(g&&f?f.pause(!0):x.pause())};return{play:o,pause:A,toggle:()=>{r?A():o()},seek:x=>{const G=t.current;if(!G)return;const W=Math.max(0,Math.min(x,v||0));g&&f?i(()=>{f.seek(W,!0)}):G.currentTime=W},setVolume:x=>{const G=t.current;if(!G)return;const W=Math.max(0,Math.min(1,x));g&&f?(C(W),l(()=>{f.setVolume(W,!0)})):G.volume=W},toggleMute:()=>{const x=t.current;x&&(g&&f?f.toggleMute(!0):x.muted=!x.muted)},enterFullscreen:async()=>{const x=n.current;if(!(!x||!document.fullscreenEnabled))try{await x.requestFullscreen(),g&&f&&f.enterFullscreen(!0)}catch(G){console.error("Failed to enter fullscreen:",G)}},exitFullscreen:async()=>{if(document.fullscreenElement)try{await document.exitFullscreen(),g&&f&&f.exitFullscreen(!0)}catch(x){console.error("Failed to exit fullscreen:",x)}}}},[r,v,g,f,l,i,C]),J=s.useMemo(()=>({isPlaying:M?.isPlaying??r,currentTime:M?.currentTime??w,duration:M?.duration??v,volume:M?.volume??$,isMuted:M?.isMuted??y,isLoading:M?.isBuffering??L,isBuffering:M?.isBuffering??h,error:M?.error??u,buffered:M?.buffered??b,isFullscreen:M?.isFullscreen??T,progress:v>0?w/v:0,isTransitioning:a||c,canPlay:!L&&!h&&!u}),[M,r,w,v,$,y,L,h,u,b,T,a,c]);return{mediaRef:t,containerRef:n,state:J,actualState:M?.actualState,controls:Z,performanceMetrics:H,isTransitioning:a||c,actions:M?.actions,actionState:M?.actionState,optimisticState:M,isEnhanced:g}}function we(e={}){const{maxMemoryUsage:t=100,cleanupInterval:n=3e4,enableGC:a=!0,monitorMemory:l=!0}=e;s.useRef();const c=s.useRef(new Set),i=s.useRef(new Map),m=s.useRef(new Set),k=s.useRef(new Set),D=s.useCallback(()=>{if(typeof window>"u"||!("memory"in performance))return{used:0,total:0,limit:0};const h=performance.memory;return{used:h.usedJSHeapSize,total:h.totalJSHeapSize,limit:h.jsHeapSizeLimit}},[]),[R,g]=s.useState({used:0,total:0,limit:0,usage:0,isHighUsage:!1});s.useEffect(()=>{if(!l)return;const h=()=>{const b=D(),T=b.used/1024/1024,S=T>t;g({...b,usage:T,isHighUsage:S}),S&&a&&r()};h();const u=v(h,n);return m.current.add(u),()=>{clearInterval(u),m.current.delete(u)}},[l,D,t,a,n]);const r=s.useCallback(()=>{m.current.forEach(h=>{clearTimeout(h)}),m.current.clear(),k.current.forEach(h=>{cancelAnimationFrame(h)}),k.current.clear(),c.current.forEach(h=>{h.disconnect()}),c.current.clear(),i.current.forEach((h,u)=>{h.forEach(({event:b,handler:T})=>{u.removeEventListener(b,T)})}),i.current.clear(),a&&"gc"in window&&window.gc()},[a]),w=s.useCallback((h,u,b,T)=>(h.addEventListener(u,b,T),i.current.has(h)||i.current.set(h,[]),i.current.get(h).push({event:u,handler:b}),()=>{h.removeEventListener(u,b);const S=i.current.get(h);if(S){const M=S.findIndex(f=>f.event===u&&f.handler===b);M>-1&&S.splice(M,1),S.length===0&&i.current.delete(h)}}),[]),v=s.useCallback((h,u)=>{const b=v(h,u);return m.current.add(b),()=>{clearInterval(b),m.current.delete(b)}},[]),d=s.useCallback((h,u)=>{const b=d(h,u);return m.current.add(b),()=>{clearTimeout(b),m.current.delete(b)}},[]),y=s.useCallback(h=>{const u=y(h);return k.current.add(u),()=>{cancelAnimationFrame(u),k.current.delete(u)}},[]),L=s.useCallback(h=>(c.current.add(h),()=>{h.disconnect(),c.current.delete(h)}),[]);return s.useEffect(()=>()=>{r()},[r]),{memoryStats:R,getMemoryUsage:D,performCleanup:r,addEventListener:w,setInterval:v,setTimeout:d,requestAnimationFrame:y,addObserver:L,formatBytes:h=>{if(h===0)return"0 Bytes";const u=1024,b=["Bytes","KB","MB","GB"],T=Math.floor(Math.log(h)/Math.log(u));return parseFloat((h/Math.pow(u,T)).toFixed(2))+" "+b[T]}}}function le({enabled:e=!0,state:t,controls:n,seekStep:a=10,volumeStep:l=.1}){const c=i=>{if(!e)return;const m=i.target;if(!(m.tagName==="INPUT"||m.tagName==="TEXTAREA"||m.contentEditable==="true"))switch(i.code){case"Space":case"KeyK":i.preventDefault(),n.toggle();break;case"KeyM":i.preventDefault(),n.toggleMute();break;case"KeyF":i.preventDefault(),n.toggleFullscreen();break;case"ArrowLeft":i.preventDefault(),n.seek(Math.max(0,t.currentTime-a));break;case"ArrowRight":i.preventDefault(),n.seek(Math.min(t.duration,t.currentTime+a));break;case"ArrowUp":i.preventDefault(),n.setVolume(Math.min(1,t.volume+l));break;case"ArrowDown":i.preventDefault(),n.setVolume(Math.max(0,t.volume-l));break;case"Digit0":case"Digit1":case"Digit2":case"Digit3":case"Digit4":case"Digit5":case"Digit6":case"Digit7":case"Digit8":case"Digit9":i.preventDefault();const D=parseInt(i.code.replace("Digit",""),10)/10;n.seek(t.duration*D);break;case"Home":i.preventDefault(),n.seek(0);break;case"End":i.preventDefault(),n.seek(t.duration);break}};return s.useEffect(()=>{if(e)return document.addEventListener("keydown",c),()=>{document.removeEventListener("keydown",c)}},[e,c]),{handleKeyDown:c}}const Me=Object.freeze(Object.defineProperty({__proto__:null,useKeyboardControls:le},Symbol.toStringTag,{value:"Module"}));function K(e,t){return((n,a=!1)=>{const l={type:e,detail:n,optimistic:a,timestamp:Date.now()};return a?t.dispatchOptimistic(l):(t.dispatch(l),Promise.resolve())})}function de(e){const[t,n]=s.useState(e.getActionState());return s.useEffect(()=>e.subscribe(()=>{const l=e.getActionState();n(c=>JSON.stringify(c)!==JSON.stringify(l)?l:c)}),[e]),t}function Se(e){const t=s.useMemo(()=>({play:K(E.MediaActionTypes.PLAY,e),pause:K(E.MediaActionTypes.PAUSE,e),seek:K(E.MediaActionTypes.SEEK,e),setVolume:K(E.MediaActionTypes.SET_VOLUME,e),mute:K(E.MediaActionTypes.MUTE,e),unmute:K(E.MediaActionTypes.UNMUTE,e),toggleMute:K(E.MediaActionTypes.TOGGLE_MUTE,e),setDuration:K(E.MediaActionTypes.SET_DURATION,e),setCurrentTime:K(E.MediaActionTypes.SET_CURRENT_TIME,e),setBuffered:K(E.MediaActionTypes.SET_BUFFERED,e),setLoading:K(E.MediaActionTypes.SET_LOADING,e),setError:K(E.MediaActionTypes.SET_ERROR,e),enterFullscreen:K(E.MediaActionTypes.ENTER_FULLSCREEN,e),exitFullscreen:K(E.MediaActionTypes.EXIT_FULLSCREEN,e),enterPiP:K(E.MediaActionTypes.ENTER_PIP,e),exitPiP:K(E.MediaActionTypes.EXIT_PIP,e),setPlaybackRate:K(E.MediaActionTypes.SET_PLAYBACK_RATE,e),setSubtitleTrack:K(E.MediaActionTypes.SET_SUBTITLE_TRACK,e),setRendition:K(E.MediaActionTypes.SET_RENDITION,e),toggleSubtitles:K(E.MediaActionTypes.TOGGLE_SUBTITLES,e),previewTime:K(E.MediaActionTypes.PREVIEW_TIME,e),clearPreview:K(E.MediaActionTypes.CLEAR_PREVIEW,e)}),[e]),n=de(e),a=s.useMemo(()=>({togglePlayPause:async c=>{c?await t.pause(!0):await t.play(!0)},seekWithPreview:async c=>{await t.previewTime(c,!0),await t.seek(c,!0)},adjustVolume:async(c,i)=>{const m=Math.max(0,Math.min(1,i+c));await t.setVolume(m,!0)},toggleFullscreenOptimistic:async c=>{c?await t.exitFullscreen(!0):await t.enterFullscreen(!0)}}),[t]),l=s.useCallback(async()=>{const{lastAction:c}=n;c&&n.error&&await e.dispatchOptimistic({...c,retryCount:(c.retryCount||0)+1})},[e,n]);return{...t,...a,actionState:n,retryLastAction:l,isLoading:n.pending,hasError:!!n.error,errorMessage:n.error,retryCount:n.retryCount}}function me(){const[e,t]=s.useState({isPlaying:!1,currentTime:0,duration:0,volume:1,isMuted:!1,isLoading:!1,isFullscreen:!1,error:null,buffered:null}),n=r=>{t(w=>({...w,...r}))};return{state:e,updateState:n,setPlaying:r=>{n({isPlaying:r})},setCurrentTime:r=>{n({currentTime:r})},setDuration:r=>{n({duration:r})},setVolume:r=>{n({volume:Math.max(0,Math.min(1,r))})},setMuted:r=>{n({isMuted:r})},setLoading:r=>{n({isLoading:r})},setFullscreen:r=>{n({isFullscreen:r})},setError:r=>{n({error:r})},setBuffered:r=>{n({buffered:r})}}}function fe(e){const t=s.useRef(null),n=s.useRef(null),{state:a,setPlaying:l,setCurrentTime:c,setDuration:i,setVolume:m,setMuted:k,setLoading:D,setFullscreen:R,setError:g,setBuffered:r}=me();s.useEffect(()=>{const p=t.current;p&&(e.volume!==void 0&&(p.volume=e.volume,m(e.volume)),e.muted!==void 0&&(p.muted=e.muted,k(e.muted)),e.autoPlay!==void 0&&(p.autoplay=e.autoPlay),e.loop!==void 0&&(p.loop=e.loop),e.preload!==void 0&&(p.preload=e.preload),e.crossOrigin!==void 0&&(p.crossOrigin=e.crossOrigin))},[e,m,k]);const w=()=>{l(!0),e.onPlay?.()},v=()=>{l(!1),e.onPause?.()},d=()=>{const p=t.current;p&&(c(p.currentTime),e.onTimeUpdate?.(p.currentTime))},y=()=>{const p=t.current;p&&(i(p.duration),e.onDurationChange?.(p.duration))},L=()=>{const p=t.current;p&&(m(p.volume),k(p.muted),e.onVolumeChange?.(p.volume))},h=()=>{D(!0),g(null),e.onLoadStart?.()},u=()=>{D(!1),e.onLoadedData?.()},b=()=>{const p=t.current;if(!p)return;const U=p.error?.message||"An error occurred while loading the media";g(U),D(!1),e.onError?.(U)},T=()=>{l(!1),e.onEnded?.()},S=()=>{const p=t.current;p&&r(p.buffered)};s.useEffect(()=>{const p=t.current;if(p)return p.addEventListener("play",w),p.addEventListener("pause",v),p.addEventListener("timeupdate",d),p.addEventListener("durationchange",y),p.addEventListener("volumechange",L),p.addEventListener("loadstart",h),p.addEventListener("loadeddata",u),p.addEventListener("error",b),p.addEventListener("ended",T),p.addEventListener("progress",S),()=>{p.removeEventListener("play",w),p.removeEventListener("pause",v),p.removeEventListener("timeupdate",d),p.removeEventListener("durationchange",y),p.removeEventListener("volumechange",L),p.removeEventListener("loadstart",h),p.removeEventListener("loadeddata",u),p.removeEventListener("error",b),p.removeEventListener("ended",T),p.removeEventListener("progress",S)}},[w,v,d,y,L,h,u,b,T,S]);const M=async()=>{const p=t.current;if(p)try{await p.play()}catch(U){console.error("Failed to play media:",U),g("Failed to play media")}},f=()=>{const p=t.current;p&&p.pause()},H=()=>{a.isPlaying?f():M()},F=p=>{const U=t.current;U&&(U.currentTime=Math.max(0,Math.min(p,U.duration||0)))},$=p=>{const U=t.current;if(!U)return;const Z=Math.max(0,Math.min(1,p));U.volume=Z},C=()=>{const p=t.current;p&&(p.muted=!0)},P=()=>{const p=t.current;p&&(p.muted=!1)},I=()=>{const p=t.current;p&&(p.muted=!p.muted)},V=async()=>{const p=n.current;if(!(!p||!document.fullscreenEnabled))try{await p.requestFullscreen(),R(!0)}catch(U){console.error("Failed to enter fullscreen:",U)}},_=async()=>{if(document.fullscreenElement)try{await document.exitFullscreen(),R(!1)}catch(p){console.error("Failed to exit fullscreen:",p)}},O=()=>{document.fullscreenElement?_():V()};return s.useEffect(()=>{const p=()=>{R(!!document.fullscreenElement)};return document.addEventListener("fullscreenchange",p),()=>{document.removeEventListener("fullscreenchange",p)}},[R]),{state:a,controls:{play:M,pause:f,toggle:H,seek:F,setVolume:$,mute:C,unmute:P,toggleMute:I,enterFullscreen:V,exitFullscreen:_,toggleFullscreen:O},mediaRef:t,containerRef:n}}const j={mobile:768,desktop:1280};function se(){if(typeof window>"u")return"unknown";const e=window.navigator.userAgent.toLowerCase();return/iphone|ipad|ipod/.test(e)?"ios":/android/.test(e)?"android":/windows|mac|linux/.test(e)?"desktop":"unknown"}function ae(){return typeof window>"u"?!1:"ontouchstart"in window||navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0}function ie(){return typeof window>"u"?!1:"vibrate"in navigator||"vibration"in navigator||"ondevicemotion"in window}function ne(){const[e,t]=Q.useState(()=>{if(typeof window>"u")return{isMobile:!1,isTablet:!1,isDesktop:!0,isTouchDevice:!1,platform:"unknown",supportsHaptics:!1,screenSize:{width:1920,height:1080},orientation:"landscape"};const n=window.innerWidth,a=window.innerHeight;return{isMobile:n<j.mobile,isTablet:n>=j.mobile&&n<j.desktop,isDesktop:n>=j.desktop,isTouchDevice:ae(),platform:se(),supportsHaptics:ie(),screenSize:{width:n,height:a},orientation:n>a?"landscape":"portrait"}});return Q.useEffect(()=>{const n=()=>{const i=window.innerWidth,m=window.innerHeight;t({isMobile:i<j.mobile,isTablet:i>=j.mobile&&i<j.desktop,isDesktop:i>=j.desktop,isTouchDevice:ae(),platform:se(),supportsHaptics:ie(),screenSize:{width:i,height:m},orientation:i>m?"landscape":"portrait"})};window.addEventListener("resize",n),window.addEventListener("orientationchange",n);const a=window.matchMedia(`(max-width: ${j.mobile-1}px)`),l=window.matchMedia(`(min-width: ${j.mobile}px) and (max-width: ${j.desktop-1}px)`),c=window.matchMedia(`(min-width: ${j.desktop}px)`);return a.addEventListener("change",n),l.addEventListener("change",n),c.addEventListener("change",n),()=>{window.removeEventListener("resize",n),window.removeEventListener("orientationchange",n),a.removeEventListener("change",n),l.removeEventListener("change",n),c.removeEventListener("change",n)}},[]),e}function ke(){const{platform:e,isMobile:t}=ne();Q.useEffect(()=>{if(t){if(e==="ios"){const n=a=>{a.touches.length>1&&a.preventDefault()};return document.addEventListener("touchstart",n,{passive:!1}),document.body.style.webkitOverflowScrolling="touch",()=>{document.removeEventListener("touchstart",n)}}e==="android"&&(document.body.style.touchAction="manipulation"),document.documentElement.style.setProperty("--webkit-transform","translateZ(0)"),document.documentElement.style.setProperty("--transform","translateZ(0)")}},[e,t])}function Le(){const{supportsHaptics:e}=ne();return{triggerHaptic:Q.useCallback((n="light")=>{if(!e)return;const l={light:[10],medium:[20],heavy:[30],success:[10,10,10],warning:[20,20],error:[50,20,50]}[n];"vibrate"in navigator&&navigator.vibrate(l)},[e]),supportsHaptics:e}}const Pe={enabledGestures:["tap","double-tap","long-press","swipe-left","swipe-right","swipe-up","swipe-down","pinch-in","pinch-out"],tapThreshold:200,doubleTapThreshold:300,longPressThreshold:500,swipeThreshold:50,swipeVelocityThreshold:.5,pinchThreshold:.1,rotationThreshold:15,enableHapticFeedback:!0};function pe(e,t,n={}){const a={...Pe,...n},{isTouchDevice:l}=ne(),{triggerHaptic:c}=Le(),i=Q.useRef({isTracking:!1,touches:[],startTouches:[]}),m=v=>({id:v.identifier,x:v.clientX,y:v.clientY,timestamp:Date.now()}),k=(v,d)=>Math.sqrt(Math.pow(d.x-v.x,2)+Math.pow(d.y-v.y,2)),D=(v,d)=>{const y=Math.max(d.timestamp-v.timestamp,1);return{x:(d.x-v.x)/y,y:(d.y-v.y)/y}},R=(v,d,y,L={})=>({type:v,startPoint:{x:d.x,y:d.y},currentPoint:{x:y.x,y:y.y},duration:y.timestamp-d.timestamp,target:e.current,preventDefault:()=>{},...L}),g=Q.useCallback(v=>{if(!a.enabledGestures.length)return;const d=Array.from(v.touches).map(m),y=i.current;y.isTracking=!0,y.touches=d,y.startTouches=[...d],y.longPressTimer&&clearTimeout(y.longPressTimer),d.length===1&&a.enabledGestures.includes("long-press")&&(y.longPressTimer=setTimeout(()=>{if(y.touches.length===1&&d[0]){const L=R("long-press",d[0],d[0]);t(L),a.enableHapticFeedback&&c("heavy")}},a.longPressThreshold)),d.length===2&&d[0]&&d[1]&&(y.initialDistance=k(d[0],d[1]),y.initialScale=1,y.lastScale=1)},[a,t,c]),r=Q.useCallback(v=>{const d=i.current;if(!d.isTracking)return;const y=Array.from(v.touches).map(m);if(d.touches=y,y.length===2&&d.initialDistance&&y[0]&&y[1]){const L=k(y[0],y[1]),h=L/d.initialDistance;if(Math.abs(h-(d.lastScale||1))>a.pinchThreshold){const b=h>(d.lastScale||1)?"pinch-out":"pinch-in";if(a.enabledGestures.includes(b)){const T={x:(y[0].x+y[1].x)/2,y:(y[0].y+y[1].y)/2,timestamp:Date.now()},S={x:((d.startTouches[0]?.x??0)+(d.startTouches[1]?.x??0))/2,y:((d.startTouches[0]?.y??0)+(d.startTouches[1]?.y??0))/2,timestamp:d.startTouches[0]?.timestamp??Date.now()},M=R(b,S,T,{scale:h,distance:L});t(M),d.lastScale=h}}}if(d.longPressTimer&&y.length===1&&d.startTouches[0]&&y[0]){const L=d.startTouches[0],h=y[0];k(L,h)>a.swipeThreshold&&(clearTimeout(d.longPressTimer),d.longPressTimer=void 0)}},[a,t]),w=Q.useCallback(v=>{const d=i.current;if(!d.isTracking)return;const y=Array.from(v.changedTouches).map(m),L=Date.now();if(d.longPressTimer&&(clearTimeout(d.longPressTimer),d.longPressTimer=void 0),d.startTouches.length===1&&y.length===1&&d.startTouches[0]&&y[0]){const h=d.startTouches[0],u=y[0],b=k(h,u),T=u.timestamp-h.timestamp;if(b>a.swipeThreshold){const S=D(h,u),M=Math.abs(S.x),f=Math.abs(S.y);if(M>a.swipeVelocityThreshold||f>a.swipeVelocityThreshold){let H;if(M>f?H=S.x>0?"swipe-right":"swipe-left":H=S.y>0?"swipe-down":"swipe-up",a.enabledGestures.includes(H)){const F=R(H,h,u,{velocity:S,distance:b});t(F),a.enableHapticFeedback&&c("light")}}}else if(T<a.tapThreshold&&b<a.swipeThreshold)if(d.lastTap&&L-d.lastTap.timestamp<a.doubleTapThreshold&&k({...d.lastTap.point},u)<a.swipeThreshold){if(a.enabledGestures.includes("double-tap")){const S=R("double-tap",h,u);t(S),a.enableHapticFeedback&&c("medium")}d.lastTap=void 0}else{if(a.enabledGestures.includes("tap")){const S=R("tap",h,u);t(S),a.enableHapticFeedback&&c("light")}d.lastTap={timestamp:L,point:{x:u.x,y:u.y}}}}v.touches.length===0&&(d.isTracking=!1,d.touches=[],d.startTouches=[],d.initialDistance=void 0,d.initialScale=void 0,d.lastScale=void 0)},[a,t,c]);return Q.useEffect(()=>{const v=e.current;if(!(!v||!l))return v.addEventListener("touchstart",g,{passive:!1}),v.addEventListener("touchmove",r,{passive:!1}),v.addEventListener("touchend",w,{passive:!1}),v.addEventListener("touchcancel",w,{passive:!1}),()=>{v.removeEventListener("touchstart",g),v.removeEventListener("touchmove",r),v.removeEventListener("touchend",w),v.removeEventListener("touchcancel",w)}},[g,r,w,l]),{isGestureEnabled:l&&a.enabledGestures.length>0}}function Ae(e,t){const n=Q.useCallback(l=>{const{type:c,distance:i,scale:m}=l;switch(c){case"double-tap":t.onPlayPause?.();break;case"swipe-left":const k=Math.min((i||0)/10,30);t.onSeek?.("backward",k);break;case"swipe-right":const D=Math.min((i||0)/10,30);t.onSeek?.("forward",D);break;case"swipe-up":if(l.startPoint.x>(e.current?.clientWidth||0)/2){const R=Math.min((i||0)/100,.2);t.onVolumeChange?.("up",R)}break;case"swipe-down":if(l.startPoint.x>(e.current?.clientWidth||0)/2){const R=Math.min((i||0)/100,.2);t.onVolumeChange?.("down",R)}break;case"pinch-out":t.onZoom?.(m||1);break;case"pinch-in":t.onZoom?.(m||1);break;case"long-press":t.onToggleFullscreen?.();break}},[t,e]);return pe(e,n,{enabledGestures:["tap","double-tap","long-press","swipe-left","swipe-right","swipe-up","swipe-down","pinch-in","pinch-out"],enableHapticFeedback:!0,swipeThreshold:30,swipeVelocityThreshold:.3})}function Ce(e){const t=s.useRef(null),[n,a]=s.useState({isPlaying:!1,currentTime:0,duration:0,volume:1,isMuted:!1,isFullscreen:!1,isLoading:!0,isSeeking:!1,isBuffering:!1,bufferedRanges:[]});return s.useEffect(()=>{const r=t.current;if(!r)return;const w=()=>{a(F=>({...F,currentTime:r.currentTime}))},v=()=>{a(F=>({...F,duration:r.duration}))},d=()=>{a(F=>({...F,isPlaying:!0,isBuffering:!1}))},y=()=>{a(F=>({...F,isPlaying:!1}))},L=()=>{a(F=>({...F,volume:r.volume,isMuted:r.muted}))},h=()=>{a(F=>({...F,isLoading:!0}))},u=()=>{a(F=>({...F,isLoading:!1}))},b=()=>{a(F=>({...F,isSeeking:!0}))},T=()=>{a(F=>({...F,isSeeking:!1}))},S=()=>{a(F=>({...F,isBuffering:!0}))},M=()=>{a(F=>({...F,isBuffering:!1,isLoading:!1}))},f=()=>{a(F=>({...F,isLoading:!1,isBuffering:!1}))},H=()=>{if(!r.buffered||r.buffered.length===0||r.duration===0){a($=>({...$,bufferedRanges:[]}));return}const F=[];for(let $=0;$<r.buffered.length;$++){const C=r.buffered.start($),P=r.buffered.end($);F.push({start:C,end:P,percentage:(P-C)/r.duration*100})}a($=>({...$,bufferedRanges:F}))};return r.addEventListener("timeupdate",w),r.addEventListener("loadedmetadata",v),r.addEventListener("play",d),r.addEventListener("pause",y),r.addEventListener("volumechange",L),r.addEventListener("loadstart",h),r.addEventListener("loadeddata",u),r.addEventListener("seeking",b),r.addEventListener("seeked",T),r.addEventListener("waiting",S),r.addEventListener("playing",M),r.addEventListener("canplay",f),r.addEventListener("progress",H),()=>{r.removeEventListener("timeupdate",w),r.removeEventListener("loadedmetadata",v),r.removeEventListener("play",d),r.removeEventListener("pause",y),r.removeEventListener("volumechange",L),r.removeEventListener("loadstart",h),r.removeEventListener("loadeddata",u),r.removeEventListener("seeking",b),r.removeEventListener("seeked",T),r.removeEventListener("waiting",S),r.removeEventListener("playing",M),r.removeEventListener("canplay",f),r.removeEventListener("progress",H)}},[]),{videoRef:t,state:n,controls:{togglePlay:()=>{const r=t.current;r&&(n.isPlaying?r.pause():r.play())},seekForward:(r=10)=>{const w=t.current;w&&(w.currentTime=Math.min(n.duration,w.currentTime+r))},seekBackward:(r=10)=>{const w=t.current;w&&(w.currentTime=Math.max(0,w.currentTime-r))},toggleMute:()=>{const r=t.current;r&&(r.muted=!n.isMuted)},setVolume:r=>{const w=t.current;w&&(w.volume=r,r>0&&n.isMuted&&(w.muted=!1))},toggleFullscreen:()=>{const r=e.current;r&&(n.isFullscreen?document.exitFullscreen&&document.exitFullscreen():r.requestFullscreen&&r.requestFullscreen(),a(w=>({...w,isFullscreen:!w.isFullscreen})))},seekTo:r=>{const w=t.current;!w||n.duration===0||(w.currentTime=Math.max(0,Math.min(n.duration,r)))}}}}function ge({subtitleSrc:e,subtitleTracks:t=[],defaultFontSize:n="medium",onLoadError:a}={}){const[l,c]=s.useState(!1),[i,m]=s.useState([]),[k,D]=s.useState(""),[R,g]=s.useState(null),[r,w]=s.useState(n),[v,d]=s.useState(null),[y,L]=s.useState(!1),h={small:"text-sm",medium:"text-base",large:"text-lg"},u=!!(e||t&&t.length>0),b=C=>{const P=C.split(":"),I=P[2]?parseFloat(P[2]):0,V=P[1]?parseInt(P[1],10)*60:0;return(P[0]?parseInt(P[0],10)*3600:0)+V+I},T=C=>{const[P,I]=C.split(","),V=(P||"").split(":"),_=I?parseInt(I,10)/1e3:0,O=V[2]?parseInt(V[2],10):0,q=V[1]?parseInt(V[1],10)*60:0;return(V[0]?parseInt(V[0],10)*3600:0)+q+O+_},S=async C=>{L(!0),d(null);try{const P=await fetch(C);if(!P.ok)throw new Error(`Failed to load subtitles: ${P.status} ${P.statusText}`);const I=await P.text(),V=[],_=I.split(`
2
- `);let O=0;const q=I.includes("WEBVTT")||C.endsWith(".vtt"),p=C.endsWith(".srt")||/^\d+$/.test(_[0]?.trim()||"");if(q)for(;O<_.length;){if(_[O]?.includes("-->")){const[U,Z]=(_[O]||"").split("-->").map(B=>B.trim()),J=b(U||""),o=b(Z||"");O++;let A="";for(;O<_.length&&_[O]?.trim()!=="";)A+=(A?" ":"")+_[O]?.trim(),O++;A&&V.push({start:J,end:o,text:A})}O++}else if(p)for(;O<_.length;){if(/^\d+$/.test(_[O]?.trim()||"")&&(O++,_[O]?.includes("-->"))){const[U,Z]=(_[O]||"").split("-->").map(B=>B.trim()),J=T(U||""),o=T(Z||"");O++;let A="";for(;O<_.length&&_[O]?.trim()!=="";)A+=(A?" ":"")+_[O]?.trim(),O++;A&&V.push({start:J,end:o,text:A})}O++}else throw new Error("Unsupported subtitle format. Only VTT and SRT are supported.");if(V.length===0)throw new Error("No subtitle cues found in file");m(V),L(!1)}catch(P){const I=P instanceof Error?P:new Error("Failed to load subtitles");console.error("Failed to load subtitles:",I),d(I),L(!1),m([]),a?.(I)}},M=C=>!l||i.length===0?"":i.find(I=>C>=I.start&&C<=I.end)?.text||"",f=()=>{c(C=>{const P=!C;if(P&&!v){if(i.length===0&&!y){const I=e||t[0]?.src;I&&(S(I),t[0]&&g(t[0].id))}}else P||D("");return P})},H=C=>{if(!C){c(!1),g(null),D("");return}const P=t.find(I=>I.id===C);P?.src&&(g(C),S(P.src),c(!0))},F=C=>{w(C)},$={fontSize:h[r],className:`${h[r]} font-medium`};return s.useEffect(()=>{l||D("")},[l]),s.useEffect(()=>{},[]),{subtitlesEnabled:l,currentSubtitle:k,subtitleCues:i,currentTrackId:R,fontSize:r,loadError:v,isLoading:y,hasSubtitles:u,toggleSubtitles:f,selectSubtitleTrack:H,changeSubtitleFontSize:F,setCurrentSubtitle:D,getCurrentSubtitle:M,getSubtitleStyles:$,availableTracks:t}}const Fe=Object.freeze(Object.defineProperty({__proto__:null,useEnhancedSubtitles:ge},Symbol.toStringTag,{value:"Module"}));function De(e,t){const[n,a]=s.useState(!0),[l,c]=s.useState(!1),i=s.useRef(null),m=()=>{a(!0),i.current&&clearTimeout(i.current),e&&!t&&(i.current=setTimeout(()=>{a(!1)},3e3))},k=()=>{m()},D=()=>{a(!0)},R=()=>{e&&a(!1)};return s.useEffect(()=>(m(),()=>{i.current&&clearTimeout(i.current)}),[m]),{controlsVisible:n,showVolumeSlider:l,setShowVolumeSlider:c,handleMouseMove:k,handleMouseEnter:D,handleMouseLeave:R}}function Re({videoControls:e,toggleSubtitles:t,takeScreenshot:n,duration:a}){const l=c=>{const i=document.querySelector("video");if(i)switch(c.key.toLowerCase()){case" ":case"k":c.preventDefault(),e.togglePlay();break;case"j":c.preventDefault(),e.seekBackward();break;case"l":c.preventDefault(),e.seekForward();break;case"arrowleft":c.preventDefault(),i.currentTime=Math.max(0,i.currentTime-5);break;case"arrowright":c.preventDefault(),i.currentTime=Math.min(a,i.currentTime+5);break;case"arrowup":c.preventDefault(),i.volume=Math.min(1,i.volume+.1);break;case"arrowdown":c.preventDefault(),i.volume=Math.max(0,i.volume-.1);break;case"m":c.preventDefault(),e.toggleMute();break;case"f":c.preventDefault(),e.toggleFullscreen();break;case"c":c.preventDefault(),t();break;case"s":c.preventDefault(),n(c.ctrlKey||c.metaKey);break}};s.useEffect(()=>(document.addEventListener("keydown",l),()=>document.removeEventListener("keydown",l)),[l])}function xe(e){return{takeScreenshot:(n=!1)=>{if(!e.current)return;const a=e.current,l=document.createElement("canvas");l.width=a.videoWidth,l.height=a.videoHeight;const c=l.getContext("2d");if(c)try{c.drawImage(a,0,0),l.toBlob(i=>{if(!i){console.error("Failed to create blob from canvas");return}if(n)if(navigator.clipboard&&window.ClipboardItem){const m=new ClipboardItem({"image/png":i});navigator.clipboard.write([m]).catch(k=>{console.error("Failed to copy to clipboard:",k)})}else console.warn("Clipboard API not supported");else{const m=URL.createObjectURL(i),k=document.createElement("a");k.href=m,k.download=`screenshot-${Date.now()}.png`,k.click(),URL.revokeObjectURL(m)}},"image/png")}catch(i){i instanceof Error&&i.message.includes("tainted")?(console.error("Canvas is tainted - video source may not have proper CORS headers. Try setting crossOrigin='anonymous' on the video element."),alert("Screenshot failed: The video source doesn't allow screenshots due to CORS policy. Please ensure the video server includes proper CORS headers or set crossOrigin='anonymous' on the video player.")):(console.error("Screenshot failed:",i),alert("Screenshot failed: "+(i instanceof Error?i.message:"Unknown error")))}}}}function Oe(e){const t=s.useRef(null),n=s.useRef(null),[a,l]=s.useTransition(),[c,i]=s.useTransition();s.useRef(0);const m=s.useRef(0),k=s.useRef(0);s.useRef(void 0);const D=s.useRef(0),R=E.useMediaStore(),g="getOptimisticState"in R,r=E.useMediaSelector$1(o=>o.isPlaying),w=E.useMediaSelector$1(o=>o.currentTime),v=E.useMediaSelector$1(o=>o.duration),d=E.useMediaSelector$1(o=>o.volume),y=E.useMediaSelector$1(o=>o.isMuted),L=E.useMediaSelector$1(o=>o.isLoading),h=E.useMediaSelector$1(o=>o.isBuffering),u=E.useMediaSelector$1(o=>o.error),b=E.useMediaSelector$1(o=>o.buffered),T=E.useMediaSelector$1(o=>o.isFullscreen),S=R,M=g?ce(S):null,f=g?ue(S):null,[H,F]=s.useState({frameRate:0,averageRenderTime:0,droppedFrames:0,bufferHealth:0}),[$,C]=s.useOptimistic(d,(o,A)=>Math.max(0,Math.min(1,A)));s.useOptimistic(w,(o,A)=>Math.max(0,Math.min(v||0,A))),s.useEffect(()=>{const o=t.current;if(!o)return;const A={volume:e.volume,muted:e.muted,autoplay:e.autoPlay,loop:e.loop,preload:e.preload,crossOrigin:e.crossOrigin};Object.entries(A).forEach(([B,z])=>{z!==void 0&&(o[B]=z)}),o.setAttribute("preload",e.preloadStrategy==="eager"?"auto":"metadata"),e.bufferingStrategy==="aggressive"&&o.setAttribute("buffered","auto"),o instanceof HTMLVideoElement&&(o.style.willChange="transform",o.style.transform="translateZ(0)")},[e.volume,e.muted,e.autoPlay,e.loop,e.preload,e.crossOrigin,e.preloadStrategy,e.bufferingStrategy]);const P=s.useCallback(()=>{const o=t.current;if(!o)return;const A=performance.now();if(e.enableTimeUpdateThrottling!==!1){if(A-D.current<(e.timeUpdateThrottleMs||100))return;D.current=A}l(()=>{g&&f&&f.setCurrentTime(o.currentTime)})},[e.enableTimeUpdateThrottling,e.timeUpdateThrottleMs,g,f]),I=s.useCallback(()=>{l(()=>{g&&f&&f.play(!0)}),e.onPlay?.()},[g,f,e.onPlay]),V=s.useCallback(()=>{l(()=>{g&&f&&f.pause(!0)}),e.onPause?.()},[g,f,e.onPause]),_=s.useCallback(()=>{const o=t.current;o&&l(()=>{g&&f&&(f.setVolume(o.volume,!0),o.muted?f.mute(!0):f.unmute(!0))})},[g,f]),O=s.useCallback(()=>{i(()=>{})},[]),q=s.useCallback(()=>{},[]),p=s.useCallback(()=>{const o=t.current;o&&l(()=>{g&&f&&f.setBuffered(o.buffered)})},[g,f]),U=s.useCallback(()=>{const o=performance.now();if(o-k.current>0&&(m.current++,m.current>=60)){const B=Math.round(m.current*1e3/(o-k.current));F(z=>({...z,frameRate:B,droppedFrames:Math.max(0,60-B)})),m.current=0,k.current=o}},[]);s.useEffect(()=>{const o=t.current;if(!o)return;const A=[{event:"timeupdate",handler:P,passive:!0},{event:"play",handler:I},{event:"pause",handler:V},{event:"volumechange",handler:_},{event:"seeking",handler:O},{event:"seeked",handler:q},{event:"progress",handler:p,passive:!0},{event:"loadedmetadata",handler:()=>U()},{event:"loadeddata",handler:()=>U()}];A.forEach(({event:X,handler:Y,passive:ee})=>{const te=ee?{passive:!0}:{};o.addEventListener(X,Y,te)});let B;const z=()=>{U(),B=requestAnimationFrame(z)};return e.enablePerformanceMonitoring&&z(),()=>{A.forEach(({event:X,handler:Y})=>{o.removeEventListener(X,Y)}),B&&cancelAnimationFrame(B)}},[P,I,V,_,O,q,p,U,e.enablePerformanceMonitoring]);const Z=s.useMemo(()=>{const o=async()=>{const x=t.current;if(x)if(g&&f)await f.play(!0);else try{await x.play()}catch(G){console.error("Failed to play media:",G)}},A=()=>{const x=t.current;x&&(g&&f?f.pause(!0):x.pause())},B=()=>{r?A():o()},z=x=>{const G=t.current;if(!G)return;const W=Math.max(0,Math.min(x,v||0));g&&f?i(()=>{f.seek(W,!0)}):G.currentTime=W},X=x=>{const G=t.current;if(!G)return;const W=Math.max(0,Math.min(1,x));g&&f?(C(W),l(()=>{f.setVolume(W,!0)})):G.volume=W},Y=()=>{const x=t.current;x&&(g&&f?f.toggleMute(!0):x.muted=!x.muted)},ee=async()=>{const x=n.current;if(!(!x||!document.fullscreenEnabled))try{await x.requestFullscreen(),g&&f&&f.enterFullscreen(!0)}catch(G){console.error("Failed to enter fullscreen:",G)}},te=async()=>{if(document.fullscreenElement)try{await document.exitFullscreen(),g&&f&&f.exitFullscreen(!0)}catch(x){console.error("Failed to exit fullscreen:",x)}};return{play:o,pause:A,toggle:B,seek:z,setVolume:X,toggleMute:Y,enterFullscreen:ee,exitFullscreen:te,toggleFullscreen:()=>{document.fullscreenElement?te():ee()}}},[r,v,g,f,l,i,C]),J=s.useMemo(()=>({isPlaying:M?.isPlaying??r,currentTime:M?.currentTime??w,duration:M?.duration??v,volume:M?.volume??$,isMuted:M?.isMuted??y,isLoading:M?.isBuffering??L,isBuffering:M?.isBuffering??h,error:M?.error??u,buffered:M?.buffered??b,isFullscreen:M?.isFullscreen??T,progress:v>0?w/v:0,isTransitioning:a||c,canPlay:!L&&!h&&!u}),[M,r,w,v,$,y,L,h,u,b,T,a,c]);return{mediaRef:t,containerRef:n,state:J,actualState:M?.actualState,controls:Z,performanceMetrics:H,isTransitioning:a||c,actions:M?.actions,actionState:M?.actionState,optimisticState:M,isEnhanced:g}}const Ie=(e,t={})=>{const{trackUserBehavior:n=!0,adaptToNetwork:a=!0,strategy:l="balanced",maxPreloadItems:c=3,preloadRadius:i=2}=t,m=s.useRef({mouseMovements:0,scrollEvents:0,keyPresses:0,focusEvents:0,timeOnPage:0,engagementScore:0,lastInteraction:Date.now()}),k=s.useRef(null),D=s.useRef(new Set),R=s.useRef([]),g=s.useCallback(()=>{const u=m.current,b=Math.min(u.timeOnPage/6e4,1),T=Math.min((u.mouseMovements+u.scrollEvents+u.keyPresses)/100,1);return(b*.4+T*.6)*100},[]),r=s.useCallback((u,b=1)=>{const T=m.current;T[u]=typeof T[u]=="number"?T[u]+b:Date.now(),T.engagementScore=g(),T.lastInteraction=Date.now()},[g]),w=s.useCallback(()=>{if(!k.current||!a)return{type:"unknown",downlink:10,effectiveType:"4g",saveData:!1};const u=k.current;return{type:u.type,downlink:u.downlink||10,effectiveType:u.effectiveType||"4g",saveData:u.saveData||!1,rtt:u.rtt||100}},[a]),v=s.useCallback((u,b,T=0)=>{if(D.current.has(u.src))return{shouldPreload:!1,priority:"low",reason:"Already preloaded"};const S=Math.abs(b-T);if(S>i)return{shouldPreload:!1,priority:"low",reason:"Outside preload radius"};const M=m.current,f=w(),H=M.engagementScore,F=Date.now()-M.lastInteraction;if(f.saveData)return{shouldPreload:!1,priority:"low",reason:"Data saver mode"};let $=!1,C="medium",P="";switch(l){case"conservative":$=H>70&&f.effectiveType!=="2g"&&S===1,C=$?"medium":"low",P=$?"High engagement and optimal network":"Conservative strategy";break;case"aggressive":$=H>30&&f.effectiveType!=="slow-2g",C=H>70?"high":H>50?"medium":"low",P=$?"Aggressive preloading":"Low engagement";break;case"balanced":default:const I=f.effectiveType==="4g"?1:f.effectiveType==="3g"?.7:.3,V=H*I;$=V>40&&S<=2,C=V>70?"high":V>55?"medium":"low",P=$?`Balanced: score ${V.toFixed(1)}`:"Low adjusted score";break}return $&&((u.type==="hls"||u.type==="m3u8")&&(C=C==="low"?"medium":"high"),F<5e3&&(C="high",P+=" + Recent interaction"),(u.type==="mp4"||u.type==="webm")&&(C=C==="low"?"medium":C)),{shouldPreload:$,priority:C,reason:P}},[l,i,w,g]),d=s.useCallback(async(u,b)=>{try{const T=document.createElement("link");switch(T.rel="preload",T.href=u.src,u.type){case"hls":case"m3u8":T.as="fetch";break;case"mp4":case"webm":T.as="video";break;case"mp3":case"wav":case"ogg":T.as="audio";break;default:T.as="fetch"}T.crossOrigin="anonymous",document.head.appendChild(T),D.current.add(u.src),console.debug(`Preloaded: ${u.src} (${b})`),setTimeout(()=>{document.head.contains(T)&&document.head.removeChild(T)},3e4)}catch(T){console.warn("Failed to preload source:",u.src,T)}},[]),y=s.useCallback(()=>{if(R.current.length===0)return;const b=[...R.current].sort((T,S)=>S.priority-T.priority).slice(0,c);R.current=[],b.forEach(({source:T,priority:S})=>{d(T,S)})},[c,d]),L=s.useCallback((u=0)=>{R.current=[],e.forEach((b,T)=>{const S=v(b,T,u);if(S.shouldPreload){const M=S.priority==="high"?3:S.priority==="medium"?2:1;R.current.push({source:b,priority:M})}}),y()},[e,v,y]);return s.useEffect(()=>{if(!n)return;const u=()=>r("mouseMovements"),b=()=>r("scrollEvents"),T=()=>r("keyPresses"),S=()=>r("focusEvents");document.addEventListener("mousemove",u,{passive:!0}),document.addEventListener("scroll",b,{passive:!0}),document.addEventListener("keydown",T,{passive:!0}),document.addEventListener("focusin",S,{passive:!0});const M=setInterval(()=>{r("timeOnPage",1)},1e3);return()=>{document.removeEventListener("mousemove",u),document.removeEventListener("scroll",b),document.removeEventListener("keydown",T),document.removeEventListener("focusin",S),clearInterval(M)}},[n,r]),s.useEffect(()=>{if(!a||!("connection"in navigator))return;const u=navigator.connection;k.current=u;const b=()=>{L()};return u.addEventListener("change",b),()=>{u.removeEventListener("change",b)}},[a,L]),s.useEffect(()=>{L()},[L]),s.useMemo(()=>({preloadAtIndex:u=>{L(u)},getUserBehavior:()=>({...m.current}),getNetworkConditions:w,clearCache:()=>{D.current.clear()},getStats:()=>({preloadedItems:D.current.size,engagementScore:m.current.engagementScore,queueLength:R.current.length,maxPreloadItems:c})}),[L,w,c])};function he(e){const[t,n]=s.useState(!1),[a,l]=s.useState([]),[c,i]=s.useState(""),m=g=>{const r=g.split(":"),w=r[2]?parseFloat(r[2]):0,v=r[1]?parseInt(r[1],10)*60:0;return(r[0]?parseInt(r[0],10)*3600:0)+v+w},k=async g=>{try{const w=await(await fetch(g)).text(),v=[],d=w.split(`
3
- `);let y=0;for(;y<d.length;){if(d[y]?.includes("-->")){const[L,h]=(d[y]||"").split("-->").map(S=>S.trim()),u=m(L||""),b=m(h||"");y++;let T="";for(;y<d.length&&d[y]?.trim()!=="";)T+=(T?" ":"")+d[y]?.trim(),y++;T&&v.push({start:u,end:b,text:T})}y++}l(v)}catch(r){console.error("Failed to load subtitles:",r)}},D=g=>!t||a.length===0?"":a.find(w=>g>=w.start&&g<=w.end)?.text||"",R=()=>{n(g=>{const r=!g;return r&&e&&a.length===0?k(e):r||i(""),r})};return s.useEffect(()=>{t||i("")},[t]),{subtitlesEnabled:t,currentSubtitle:c,toggleSubtitles:R,getCurrentSubtitle:D,setCurrentSubtitle:i}}function $e(e){return oe.showDeprecationWarning("useVideoPlayer","useMediaPlayer (the primary media player hook)"),fe(e)}function Ve(e){return oe.showDeprecationWarning("useEnhancedSubtitles","useSubtitles (the current subtitle hook)"),he(e)}exports.useDeviceInfo=ne;exports.useEnhancedMediaPlayer=be;exports.useEnhancedMediaPlayer$1=Oe;exports.useEnhancedSubtitles=ge;exports.useEnhancedSubtitles$1=Ve;exports.useEnhancedSubtitles$2=Fe;exports.useIntelligentPreloading=Ie;exports.useKeyboardControls=ye;exports.useKeyboardControls$1=le;exports.useKeyboardControls$2=Me;exports.useKeyboardShortcuts=Re;exports.useMediaActionState=de;exports.useMediaActions=Se;exports.useMediaControls=De;exports.useMediaGestures=Ae;exports.useMediaPlayer=fe;exports.useMediaState=me;exports.useMemoryOptimization=we;exports.useMobileOptimizations=ke;exports.useScreenshot=xe;exports.useSubtitles=he;exports.useTouchGestures=pe;exports.useVideoPlayer=Ce;exports.useVideoPlayer$1=$e;
4
- //# sourceMappingURL=hooks-DTXeB5Z-.cjs.map