@frameset/plex-player 2.0.1 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +15 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
import React$1 from 'react';
|
|
2
2
|
|
|
3
|
+
interface PlaylistItem {
|
|
4
|
+
id: string;
|
|
5
|
+
src: string;
|
|
6
|
+
title: string;
|
|
7
|
+
poster?: string;
|
|
8
|
+
duration?: number;
|
|
9
|
+
artist?: string;
|
|
10
|
+
album?: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
3
13
|
interface VideoSource {
|
|
4
14
|
src: string;
|
|
5
15
|
type?: string;
|
|
@@ -192,7 +202,11 @@ interface UsePlayerReturn {
|
|
|
192
202
|
togglePip: () => Promise<void>;
|
|
193
203
|
}
|
|
194
204
|
|
|
195
|
-
|
|
205
|
+
interface ExtendedPlayerProps extends PlexVideoPlayerProps {
|
|
206
|
+
playlist?: PlaylistItem[];
|
|
207
|
+
onPlaylistItemChange?: (index: number, item: PlaylistItem) => void;
|
|
208
|
+
}
|
|
209
|
+
declare const PlexVideoPlayer: React$1.ForwardRefExoticComponent<ExtendedPlayerProps & React$1.RefAttributes<PlexVideoPlayerRef>>;
|
|
196
210
|
|
|
197
211
|
interface ProgressBarProps {
|
|
198
212
|
currentTime: number;
|
package/dist/index.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as e,jsx as t,Fragment as n}from"react/jsx-runtime";import{useRef as r,useState as i,useCallback as l,useEffect as a,forwardRef as c,useMemo as s,useImperativeHandle as o}from"react";const u=e=>{if(!isFinite(e)||isNaN(e))return"0:00";const t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=Math.floor(e%60);return t>0?`${t}:${n.toString().padStart(2,"0")}:${r.toString().padStart(2,"0")}`:`${n}:${r.toString().padStart(2,"0")}`},d=e=>{const t=e.split(":").map(Number);return 3===t.length?3600*t[0]+60*t[1]+t[2]:2===t.length?60*t[0]+t[1]:t[0]||0},p=(e,t)=>0===t?0:Math.min(100,Math.max(0,e/t*100)),m=(e,t,n)=>Math.min(n,Math.max(t,e)),h=(e,t)=>{let n=!1;return(...r)=>{n||(e(...r),n=!0,setTimeout(()=>n=!1,t))}},v=(e,t)=>{let n=null;return(...r)=>{n&&clearTimeout(n),n=setTimeout(()=>e(...r),t)}},g=()=>!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled),y=()=>"pictureInPictureEnabled"in document&&document.pictureInPictureEnabled,w=()=>document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||null,f=async e=>{e.requestFullscreen?await e.requestFullscreen():e.webkitRequestFullscreen?await e.webkitRequestFullscreen():e.mozRequestFullScreen?await e.mozRequestFullScreen():e.msRequestFullscreen&&await e.msRequestFullscreen()},b=async()=>{document.exitFullscreen?await document.exitFullscreen():document.webkitExitFullscreen?await document.webkitExitFullscreen():document.mozCancelFullScreen?await document.mozCancelFullScreen():document.msExitFullscreen&&await document.msExitFullscreen()},k=e=>{const t=e.split("?")[0].split(".").pop()?.toLowerCase();return{mp4:"video/mp4",webm:"video/webm",ogg:"video/ogg",ogv:"video/ogg",m3u8:"application/x-mpegURL",mpd:"application/dash+xml",mov:"video/quicktime",avi:"video/x-msvideo",mkv:"video/x-matroska"}[t||""]||"video/mp4"},x=()=>""!==document.createElement("video").canPlayType("application/vnd.apple.mpegurl"),E=()=>`plex-${Math.random().toString(36).substring(2,11)}`,_=()=>/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),N=()=>"ontouchstart"in window||navigator.maxTouchPoints>0,z=e=>{if(0===e.buffered.length)return 0;const t=e.currentTime;for(let n=0;n<e.buffered.length;n++)if(e.buffered.start(n)<=t&&e.buffered.end(n)>=t)return e.buffered.end(n);return e.buffered.end(e.buffered.length-1)},P=e=>{const t=document.createElement("video").canPlayType(e);return"probably"===t||"maybe"===t},C=({currentTime:n,duration:c,buffered:s,onSeek:o,thumbnailPreview:d,disabled:h=!1})=>{const v=r(null),[g,y]=i(!1),[w,f]=i(null),[b,k]=i(0),x=p(n,c),E=p(s,c),_=l(e=>{if(!v.current)return 0;const t=v.current.getBoundingClientRect();return m((e-t.left)/t.width,0,1)*c},[c]),N=l(e=>{if(!v.current)return;const t=v.current.getBoundingClientRect(),n="clientX"in e?e.clientX:0,r=m(n-t.left,0,t.width),i=_(n);k(r),f(i),g&&o(i)},[g,_,o]),z=l(e=>{if(h)return;e.preventDefault(),y(!0);const t=_(e.clientX);o(t)},[h,_,o]),P=l(()=>{y(!1)},[]),C=l(e=>{const t=_(e.clientX);f(t)},[_]),T=l(()=>{f(null)},[]);a(()=>{if(g){const e=e=>N(e);return window.addEventListener("mousemove",e),window.addEventListener("mouseup",P),()=>{window.removeEventListener("mousemove",e),window.removeEventListener("mouseup",P)}}},[g,N,P]);const L=l(e=>{if(h)return;e.preventDefault();const t=e.touches[0],n=_(t.clientX);y(!0),o(n)},[h,_,o]),S=l(e=>{if(!g)return;const t=e.touches[0],n=_(t.clientX);o(n)},[g,_,o]),A=l(()=>{y(!1)},[]);return e("div",{ref:v,className:"plex-video-player__progress-container",onMouseDown:z,onMouseEnter:C,onMouseLeave:T,onMouseMove:e=>N(e.nativeEvent),onTouchStart:L,onTouchMove:S,onTouchEnd:A,role:"slider","aria-label":"Video progress","aria-valuemin":0,"aria-valuemax":c,"aria-valuenow":n,"aria-valuetext":u(n),tabIndex:0,children:[e("div",{className:"plex-video-player__progress",children:[t("div",{className:"plex-video-player__progress-buffered",style:{width:`${E}%`}}),t("div",{className:"plex-video-player__progress-played",style:{width:`${x}%`}}),t("div",{className:"plex-video-player__progress-handle",style:{left:`${x}%`}})]}),d?.enabled&&null!==w&&e("div",{className:"plex-video-player__thumbnail-preview",style:{left:`${b}px`,width:d.width||160,height:d.height||90},children:[d.sprites&&t("div",{style:{width:"100%",height:"100%",backgroundImage:`url(${d.sprites})`,backgroundPosition:M(w,c,d.interval||10,d.width||160,d.height||90),backgroundSize:"cover"}}),t("div",{className:"plex-video-player__thumbnail-time",children:u(w)})]}),null!==w&&!d?.enabled&&t("div",{className:"plex-video-player__thumbnail-preview",style:{left:`${b}px`,width:"auto",height:"auto",padding:"4px 8px"},children:t("span",{style:{color:"white",fontSize:"12px"},children:u(w)})})]})},M=(e,t,n,r,i)=>{const l=Math.floor(e/n);return`-${l%10*r}px -${Math.floor(l/10)*i}px`},T=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M8 5v14l11-7z"})}),L=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M6 19h4V5H6v14zm8-14v14h4V5h-4z"})}),S=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("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"})}),A=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M18.5 12c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM5 9v6h4l5 5V4L9 9H5z"})}),F=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M7 9v6h4l5 5V4l-5 5H7z"})}),V=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("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.51C20.63 14.91 21 13.5 21 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"})}),q=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"})}),R=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"})}),B=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M19 7h-8v6h8V7zm2-4H3c-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"})}),H=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("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 16H3V5h18v14zM5 7h8v6H5z"})}),I=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M19.14 12.94c.04-.31.06-.63.06-.94 0-.31-.02-.63-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.04.31-.06.63-.06.94s.02.63.06.94l-2.03 1.58c-.18.14-.23.41-.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.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"})}),D=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 7H9.5v-.5h-2v3h2V13H11v1c0 .55-.45 1-1 1H7c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v1zm7 0h-1.5v-.5h-2v3h2V13H18v1c0 .55-.45 1-1 1h-3c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v1z"})}),$=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M20.38 8.57l-1.23 1.85a8 8 0 0 1-.22 7.58H5.07A8 8 0 0 1 15.58 6.85l1.85-1.23A10 10 0 0 0 3.35 19a2 2 0 0 0 1.72 1h13.85a2 2 0 0 0 1.74-1 10 10 0 0 0-.27-10.44zm-9.79 6.84a2 2 0 0 0 2.83 0l5.66-8.49-8.49 5.66a2 2 0 0 0 0 2.83z"})}),O=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14zM7.5 13h2v2H7.5zm4.5 0h2v2h-2zm4.5 0h2v2h-2zM7.5 9h2v2H7.5zm4.5 0h2v2h-2zm4.5 0h2v2h-2z"})}),Q=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M4 18l8.5-6L4 6v12zm9-12v12l8.5-6L13 6z"})}),U=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M11 18V6l-8.5 6 8.5 6zm.5-6l8.5 6V6l-8.5 6z"})}),X=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M6 18l8.5-6L6 6v12zM16 6v12h2V6h-2z"})}),j=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M6 6h2v12H6zm3.5 6l8.5 6V6z"})}),K=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"})}),G=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"})}),J=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"})}),W=({volume:n,muted:r,onVolumeChange:i,onToggleMute:a})=>{const c=l(e=>{const t=parseFloat(e.target.value);i(t)},[i]);return e("div",{className:"plex-video-player__volume-container",children:[t("button",{className:"plex-video-player__btn",onClick:a,"aria-label":r?"Unmute":"Mute",title:r?"Unmute (M)":"Mute (M)",type:"button",children:t(r||0===n?V:n<.33?F:n<.66?A:S,{})}),t("div",{className:"plex-video-player__volume-slider-container",children:t("input",{type:"range",className:"plex-video-player__volume-slider",min:0,max:1,step:.01,value:r?0:n,onChange:c,"aria-label":"Volume",style:{background:`linear-gradient(to right, var(--plex-primary) 0%, var(--plex-primary) ${100*(r?0:n)}%, var(--plex-progress-bg) ${100*(r?0:n)}%, var(--plex-progress-bg) 100%)`}})})]})},Y=({playbackRate:c,playbackSpeeds:s,onPlaybackRateChange:o,qualityEnabled:u,sources:d,currentQuality:p,onQualityChange:m,captionsEnabled:h,textTracks:v,currentTrack:g,onTrackChange:y})=>{const[w,f]=i(!1),[b,k]=i("main"),x=r(null);a(()=>{const e=e=>{x.current&&!x.current.contains(e.target)&&(f(!1),k("main"))};if(w)return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[w]);const E=l(()=>{f(e=>!e),k("main")},[]),_=l(e=>{o(e),k("main")},[o]),N=l(e=>{m?.(e),k("main")},[m]),z=l(e=>{y?.(e),k("main")},[y]);return e("div",{className:"plex-video-player__settings-container",ref:x,children:[t("button",{className:"plex-video-player__btn",onClick:E,"aria-label":"Settings","aria-expanded":w,title:"Settings",type:"button",children:t(I,{})}),w&&e("div",{className:"plex-video-player__settings-menu "+(w?"plex-video-player__settings-menu--open":""),children:["main"===b&&e(n,{children:[t("div",{className:"plex-video-player__settings-title",children:"Settings"}),e("button",{className:"plex-video-player__settings-item",onClick:()=>k("speed"),type:"button",children:[t("span",{children:"Playback Speed"}),t("span",{children:1===c?"Normal":`${c}x`})]}),u&&d&&d.length>1&&e("button",{className:"plex-video-player__settings-item",onClick:()=>k("quality"),type:"button",children:[t("span",{children:"Quality"}),t("span",{children:p||"Auto"})]}),h&&v&&v.length>0&&e("button",{className:"plex-video-player__settings-item",onClick:()=>k("captions"),type:"button",children:[t("span",{children:"Captions"}),t("span",{children:g||"Off"})]})]}),"speed"===b&&e(n,{children:[t("button",{className:"plex-video-player__settings-title",onClick:()=>k("main"),style:{cursor:"pointer",border:"none",background:"transparent",width:"100%",textAlign:"left"},type:"button",children:"← Playback Speed"}),t("div",{className:"plex-video-player__speed-menu",children:s.map(e=>t("button",{className:"plex-video-player__speed-btn "+(c===e?"plex-video-player__speed-btn--active":""),onClick:()=>_(e),type:"button",children:1===e?"Normal":`${e}x`},e))})]}),"quality"===b&&e(n,{children:[t("button",{className:"plex-video-player__settings-title",onClick:()=>k("main"),style:{cursor:"pointer",border:"none",background:"transparent",width:"100%",textAlign:"left"},type:"button",children:"← Quality"}),t("div",{className:"plex-video-player__quality-menu",children:d?.map(n=>e("button",{className:"plex-video-player__settings-item "+(p===n.quality?"plex-video-player__settings-item--active":""),onClick:()=>N(n.quality||n.src),type:"button",children:[t("span",{children:n.label||n.quality||"Unknown"}),p===n.quality&&t(J,{size:16})]},n.quality||n.src))})]}),"captions"===b&&e(n,{children:[t("button",{className:"plex-video-player__settings-title",onClick:()=>k("main"),style:{cursor:"pointer",border:"none",background:"transparent",width:"100%",textAlign:"left"},type:"button",children:"← Captions"}),e("div",{className:"plex-video-player__quality-menu",children:[e("button",{className:"plex-video-player__settings-item "+(g?"":"plex-video-player__settings-item--active"),onClick:()=>z(null),type:"button",children:[t("span",{children:"Off"}),!g&&t(J,{size:16})]}),v?.map(n=>e("button",{className:"plex-video-player__settings-item "+(g===n.srclang?"plex-video-player__settings-item--active":""),onClick:()=>z(n.srclang),type:"button",children:[t("span",{children:n.label}),g===n.srclang&&t(J,{size:16})]},n.srclang))]})]})]})]})},Z=({ad:n,timeRemaining:r,canSkip:i,onSkip:l,onClick:a})=>{const c=i?"Skip Ad":`Skip in ${Math.ceil(r)}s`;return e("div",{className:"plex-video-player__ad-overlay",onClick:a,children:[e("div",{className:"plex-video-player__ad-info",children:[t("span",{className:"plex-video-player__ad-badge",children:"Ad"}),e("span",{children:[u(r)," remaining"]})]}),n.clickThrough&&e("button",{className:"plex-video-player__ad-learn-more",onClick:e=>{e.stopPropagation(),a()},type:"button",children:[t(G,{size:16}),"Learn More"]}),t("button",{className:"plex-video-player__ad-skip",onClick:e=>{e.stopPropagation(),i&&l()},disabled:!i,type:"button",children:c})]})},ee={1:"The video playback was aborted.",2:"A network error occurred while loading the video.",3:"The video format is not supported or cannot be decoded.",4:"The video source is not supported."},te=({error:n,onRetry:r})=>{const i=n?.code||0,l=ee[i]||"An unknown error occurred.";return e("div",{className:"plex-video-player__error",children:[t(K,{className:"plex-video-player__error-icon",size:60}),t("div",{className:"plex-video-player__error-message",children:l}),i>0&&e("div",{className:"plex-video-player__error-code",children:["Error Code: ",i]}),t("button",{className:"plex-video-player__error-retry",onClick:r,type:"button",children:"Try Again"})]})},ne=({visible:e})=>e?t("div",{className:"plex-video-player__loader",children:t("div",{className:"plex-video-player__loader-spinner"})}):null,re={play:"Space",mute:"m",fullscreen:"f",pip:"p",seekForward:"ArrowRight",seekBackward:"ArrowLeft",volumeUp:"ArrowUp",volumeDown:"ArrowDown"},ie=({enabled:e,hotkeys:t={},onPlay:n,onMute:r,onFullscreen:i,onPip:c,onSeek:s,onVolume:o,containerRef:u})=>{const d={...re,...t},p=l(t=>{if(!e)return;const l=t.target;if("INPUT"===l.tagName||"TEXTAREA"===l.tagName||l.isContentEditable)return;const a=u.current;if(!a||!a.contains(document.activeElement))return;switch(t.key){case d.play:case" ":t.preventDefault(),n();break;case d.mute:case"M":t.preventDefault(),r();break;case d.fullscreen:case"F":t.preventDefault(),i();break;case d.pip:case"P":t.preventDefault(),c();break;case d.seekForward:t.preventDefault(),s(t.shiftKey?30:10);break;case d.seekBackward:t.preventDefault(),s(t.shiftKey?-30:-10);break;case d.volumeUp:t.preventDefault(),o(.1);break;case d.volumeDown:t.preventDefault(),o(-.1);break;case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":t.preventDefault(),s(-1/0)}},[e,d,n,r,i,c,s,o,u]);a(()=>{if(e)return document.addEventListener("keydown",p),()=>{document.removeEventListener("keydown",p)}},[e,p])},le=e=>{const t=(new DOMParser).parseFromString(e,"text/xml");if(t.querySelector("parsererror"))return{ads:[],error:"Failed to parse VAST XML"};const n=[];return t.querySelectorAll("Ad").forEach(e=>{const t=e.querySelector("InLine");if(!t)return;const r=e.getAttribute("id")||"",i=t.querySelector("AdTitle")?.textContent||"",l=t.querySelector("Description")?.textContent||void 0,a=t.querySelectorAll("Creative");let c,s,o=0;const u=[],d=[],p={};a.forEach(e=>{const t=e.querySelector("Linear");if(!t)return;const n=t.querySelector("Duration")?.textContent;n&&(o=ae(n));const r=t.getAttribute("skipoffset");r&&(c=ae(r));t.querySelectorAll("MediaFile").forEach(e=>{const t=e.textContent?.trim();t&&d.push({url:t,type:e.getAttribute("type")||"video/mp4",width:parseInt(e.getAttribute("width")||"0",10),height:parseInt(e.getAttribute("height")||"0",10),bitrate:parseInt(e.getAttribute("bitrate")||"0",10)||void 0})});const i=t.querySelector("VideoClicks");i&&(s=i.querySelector("ClickThrough")?.textContent?.trim(),i.querySelectorAll("ClickTracking").forEach(e=>{const t=e.textContent?.trim();t&&u.push(t)}));t.querySelectorAll("TrackingEvents Tracking").forEach(e=>{const t=e.getAttribute("event"),n=e.textContent?.trim();t&&n&&(p[t]||(p[t]=[]),p[t].push(n))})});const m=[];t.querySelectorAll("Impression").forEach(e=>{const t=e.textContent?.trim();t&&m.push(t)}),d.length>0&&n.push({id:r,title:i,description:l,duration:o,skipOffset:c,clickThrough:s,clickTracking:u,impressionUrls:m,mediaFiles:d,trackingEvents:p})}),{ads:n}},ae=e=>{if(e.includes("%"))return-1;const t=e.split(":");if(3!==t.length)return 0;return 3600*parseInt(t[0],10)+60*parseInt(t[1],10)+parseFloat(t[2])},ce=async e=>{try{const t=await fetch(e.url,{method:"GET",headers:{Accept:"application/xml"}});if(!t.ok)return null;const n=await t.text(),r=le(n);if(r.error||0===r.ads.length)return null;const i=r.ads[0];return void 0!==e.skipDelay&&void 0===i.skipOffset&&(i.skipOffset=e.skipDelay),i}catch(e){return null}},se=e=>{if(0===e.length)return null;const t=document.createElement("video"),n=e.filter(e=>""!==t.canPlayType(e.type));if(0===n.length)return null;n.sort((e,t)=>{const n=e.width*e.height,r=t.width*t.height;return n!==r?r-n:(t.bitrate||0)-(e.bitrate||0)});return/Android|iPhone|iPad|iPod/i.test(navigator.userAgent)&&n.length>1?n[n.length-1]:n[0]},oe=e=>{(new Image).src=e},ue=e=>{e.forEach(oe)},de=e=>({id:e.id,title:e.title,duration:e.duration,skipOffset:e.skipOffset,clickThrough:e.clickThrough}),pe=({vastConfig:e,videoRef:t,onAdStart:n,onAdEnd:c,onAdSkip:s,onAdError:o})=>{const[u,d]=i(!1),[p,m]=i(null),[h,v]=i(0),[g,y]=i(!1),w=r(null),f=r(""),b=r(0),k=r(new Set),x=r(null),E=Array.isArray(e)?e:e?[e]:[],_=l(async e=>{const r=t.current;if(r&&!u)try{const t=await ce(e);if(!t)return void o?.(new Error("Failed to fetch VAST ad"));const i=se(t.mediaFiles);if(!i)return void o?.(new Error("No compatible media file found"));f.current=r.currentSrc,b.current=r.currentTime,ue(t.impressionUrls),w.current=t,m(de(t)),d(!0),v(t.duration),y(void 0===t.skipOffset||0===t.skipOffset),r.src=i.url,r.currentTime=0,await r.play(),t.trackingEvents.start&&ue(t.trackingEvents.start),n?.(de(t)),x.current=window.setInterval(()=>{const e=Math.max(0,t.duration-r.currentTime);v(e),t.skipOffset&&r.currentTime>=t.skipOffset&&y(!0);const n=r.currentTime/t.duration*100;n>=25&&t.trackingEvents.firstQuartile&&ue(t.trackingEvents.firstQuartile),n>=50&&t.trackingEvents.midpoint&&ue(t.trackingEvents.midpoint),n>=75&&t.trackingEvents.thirdQuartile&&ue(t.trackingEvents.thirdQuartile)},250);const l=()=>{t.trackingEvents.complete&&ue(t.trackingEvents.complete),N()};r.addEventListener("ended",l,{once:!0})}catch(e){o?.(e instanceof Error?e:new Error("Ad playback failed")),N()}},[t,u,n,o]),N=l(()=>{const e=t.current;e&&(x.current&&(clearInterval(x.current),x.current=null),f.current&&(e.src=f.current,e.currentTime=b.current,e.play().catch(()=>{})),d(!1),m(null),v(0),y(!1),w.current=null,c?.())},[t,c]),z=l(()=>{if(!g||!w.current)return;const e=w.current;e.trackingEvents.skip&&ue(e.trackingEvents.skip),s?.(),N()},[g,N,s]),P=l(()=>{if(!w.current)return;const e=w.current;e.clickThrough&&window.open(e.clickThrough,"_blank"),e.clickTracking&&ue(e.clickTracking)},[]),C=l((e,t)=>{u||0===E.length||E.forEach(n=>{const r=n.position||"preroll",i=`${r}-${n.midrollTime||0}`;if(k.current.has(i))return;let l=!1;switch(r){case"preroll":l=0===e;break;case"midroll":n.midrollTime&&e>=n.midrollTime&&(l=!0);break;case"postroll":l=e>=t-.5}l&&(k.current.add(i),_(n))})},[E,u,_]);return a(()=>()=>{x.current&&clearInterval(x.current)},[]),{isAdPlaying:u,currentAd:p,adTimeRemaining:h,canSkip:g,skipAd:z,handleAdClick:P,checkForAd:C}},me=c((n,c)=>{const{src:d,poster:p,autoPlay:m=!1,muted:v=!1,loop:g=!1,controls:y=!0,width:w="100%",className:f="",style:b={},pip:k=!0,fullscreen:x=!0,playbackSpeed:E=!0,playbackSpeeds:_=[.25,.5,.75,1,1.25,1.5,1.75,2],volume:N=!0,initialVolume:z=1,progressBar:P=!0,timeDisplay:M=!0,qualitySelector:S=!0,textTracks:A=[],vast:F,keyboard:V=!0,hotkeys:H,accentColor:I="#e50914",controlsTimeout:D=3e3,doubleClickFullscreen:$=!0,clickToPlay:O=!0,preload:Q="metadata",onPlay:U,onPause:X,onEnded:j,onTimeUpdate:K,onProgress:G,onVolumeChange:J,onFullscreenChange:ee,onPipChange:re,onQualityChange:le,onError:ae,onAdStart:ce,onAdEnd:se,onAdSkip:oe,onAdError:ue,onReady:de}=n,me=r(null),he=r(null),ve=r(null),ge=r(0),[ye,we]=i(!1),[fe,be]=i(0),[ke,xe]=i(0),[Ee,_e]=i(0),[Ne,ze]=i(v?0:z),[Pe,Ce]=i(v),[Me,Te]=i(!1),[Le,Se]=i(!1),[Ae,Fe]=i(!0),[Ve,qe]=i(null),[Re,Be]=i(!0),[He,Ie]=i(1),[De,$e]=i("auto"),[Oe,Qe]=i(null),Ue=s(()=>"string"==typeof d?[{src:d,type:"video/mp4"}]:d,[d]),{currentAd:Xe,isAdPlaying:je,adTimeRemaining:Ke,canSkip:Ge,skipAd:Je,handleAdClick:We,checkForAd:Ye}=pe({vastConfig:F,videoRef:me,onAdStart:ce,onAdEnd:se,onAdSkip:oe,onAdError:ue}),Ze=l(async()=>{const e=me.current;if(e)try{await e.play()}catch(e){}},[]),et=l(()=>{const e=me.current;e&&e.pause()},[]),tt=l(()=>{const e=me.current;e&&(e.pause(),e.currentTime=0)},[]),nt=l(()=>{const e=me.current;e&&(e.paused?Ze():et())},[Ze,et]),rt=l(e=>{const t=me.current;t&&(t.currentTime=Math.max(0,Math.min(e,t.duration||0)))},[]),it=l(e=>{const t=me.current;if(!t)return;const n=Math.max(0,Math.min(1,e));t.volume=n,t.muted=0===n,ze(n),Ce(0===n)},[]),lt=l(()=>{const e=me.current;e&&(e.muted=!0,Ce(!0))},[]),at=l(()=>{const e=me.current;e&&(e.muted=!1,0===e.volume&&(e.volume=.5,ze(.5)),Ce(!1))},[]),ct=l(()=>{const e=me.current;e&&(e.muted?at():lt())},[lt,at]),st=l(async()=>{const e=he.current;if(e)try{await e.requestFullscreen(),Te(!0)}catch(e){}},[]),ot=l(async()=>{try{document.fullscreenElement&&(await document.exitFullscreen(),Te(!1))}catch(e){}},[]),ut=l(async()=>{document.fullscreenElement?await ot():await st()},[st,ot]),dt=l(async()=>{const e=me.current;if(e&&document.pictureInPictureEnabled)try{await e.requestPictureInPicture(),Se(!0)}catch(e){}},[]),pt=l(async()=>{try{document.pictureInPictureElement&&(await document.exitPictureInPicture(),Se(!1))}catch(e){}},[]),mt=l(async()=>{document.pictureInPictureElement?await pt():await dt()},[dt,pt]),ht=l(e=>{const t=me.current;t&&(t.playbackRate=e,Ie(e))},[]),vt=l(e=>{const t=Ue.find(t=>t.label===e||t.quality===e);if(t&&me.current){const n=me.current,r=!n.paused,i=n.currentTime;n.src=t.src,n.currentTime=i,r&&n.play(),$e(e),le?.(e)}},[Ue,le]),gt=l(e=>{const t=me.current;if(t){for(let n=0;n<t.textTracks.length;n++){const r=t.textTracks[n];r.mode=r.label===e?"showing":"hidden"}Qe(e)}},[]),yt=l(()=>{ye&&Be(!1)},[ye]),wt=l(()=>{Be(!0),ve.current&&clearTimeout(ve.current),ye&&(ve.current=setTimeout(yt,D))},[ye,D,yt]),ft=s(()=>h(wt,200),[wt]),bt=l(()=>{if(!O)return;const e=Date.now();$&&e-ge.current<300?ut():nt(),ge.current=e},[O,$,nt,ut]);a(()=>{const e=me.current;if(!e)return;const t=()=>{we(!0),U?.()},n=()=>{we(!1),X?.()},r=()=>{we(!1),j?.()},i=()=>{be(e.currentTime),K?.(e.currentTime),Ye(e.currentTime,e.duration)},l=()=>{xe(e.duration)},a=()=>{if(e.buffered.length>0){const t=e.buffered.end(e.buffered.length-1)/e.duration*100;_e(t),G?.(t)}},c=()=>{ze(e.volume),Ce(e.muted),J?.(e.volume,e.muted)},s=()=>{xe(e.duration),Fe(!1),de?.()},o=()=>{Fe(!0)},u=()=>{Fe(!1)},d=()=>{Fe(!1)},p=()=>{qe(e.error),Fe(!1),ae?.(e.error)};return e.addEventListener("play",t),e.addEventListener("pause",n),e.addEventListener("ended",r),e.addEventListener("timeupdate",i),e.addEventListener("durationchange",l),e.addEventListener("progress",a),e.addEventListener("volumechange",c),e.addEventListener("loadedmetadata",s),e.addEventListener("waiting",o),e.addEventListener("playing",u),e.addEventListener("canplay",d),e.addEventListener("error",p),()=>{e.removeEventListener("play",t),e.removeEventListener("pause",n),e.removeEventListener("ended",r),e.removeEventListener("timeupdate",i),e.removeEventListener("durationchange",l),e.removeEventListener("progress",a),e.removeEventListener("volumechange",c),e.removeEventListener("loadedmetadata",s),e.removeEventListener("waiting",o),e.removeEventListener("playing",u),e.removeEventListener("canplay",d),e.removeEventListener("error",p)}},[U,X,j,K,G,J,de,ae,Ye]),a(()=>{const e=()=>{const e=!!document.fullscreenElement;Te(e),ee?.(e)};return document.addEventListener("fullscreenchange",e),()=>{document.removeEventListener("fullscreenchange",e)}},[ee]),a(()=>{const e=me.current;if(!e)return;const t=()=>{Se(!0),re?.(!0)},n=()=>{Se(!1),re?.(!1)};return e.addEventListener("enterpictureinpicture",t),e.addEventListener("leavepictureinpicture",n),()=>{e.removeEventListener("enterpictureinpicture",t),e.removeEventListener("leavepictureinpicture",n)}},[re]),ie({enabled:V,containerRef:he,hotkeys:H,onPlay:nt,onMute:ct,onFullscreen:ut,onPip:mt,onSeek:e=>rt(fe+e),onVolume:e=>it(Ne+e)}),a(()=>()=>{ve.current&&clearTimeout(ve.current)},[]);const kt=l(()=>{qe(null),me.current?.load()},[]);o(c,()=>({play:Ze,pause:et,stop:tt,seek:rt,setVolume:it,mute:lt,unmute:at,toggleMute:ct,enterFullscreen:st,exitFullscreen:ot,toggleFullscreen:ut,enterPip:dt,exitPip:pt,togglePip:mt,setPlaybackRate:ht,setQuality:vt,getCurrentTime:()=>me.current?.currentTime||0,getDuration:()=>me.current?.duration||0,getVolume:()=>me.current?.volume||0,isMuted:()=>me.current?.muted??!0,isPlaying:()=>!me.current?.paused,isFullscreen:()=>Me,isPip:()=>Le,getVideoElement:()=>me.current}),[Ze,et,tt,rt,it,lt,at,ct,st,ot,ut,dt,pt,mt,ht,vt,Me,Le]);const xt=Ue[0]?.src||"";return e("div",{ref:he,className:`plex-video-player ${Me?"plex-video-player--fullscreen":""} ${f}`,style:{...{"--plex-accent-color":I},width:w,...b},onMouseMove:ft,onMouseLeave:()=>ye&&Be(!1),tabIndex:0,children:[e("video",{ref:me,className:"plex-video-player__video",src:xt,poster:p,autoPlay:m,muted:v,loop:g,preload:Q,playsInline:!0,onClick:bt,children:[Ue.slice(1).map((e,n)=>t("source",{src:e.src,type:e.type},n)),A.map((e,n)=>t("track",{kind:e.kind,src:e.src,srcLang:e.srclang,label:e.label,default:e.default},n))]}),t(ne,{visible:Ae&&!Ve}),Ve&&t(te,{error:Ve,onRetry:kt}),je&&Xe&&t(Z,{ad:Xe,timeRemaining:Ke,canSkip:Ge,onSkip:Je,onClick:We}),y&&!je&&e("div",{className:"plex-video-player__controls "+(Re?"plex-video-player__controls--visible":""),children:[P&&t(C,{currentTime:fe,duration:ke,buffered:Ee,onSeek:rt}),e("div",{className:"plex-video-player__controls-bottom",children:[e("div",{className:"plex-video-player__controls-left",children:[t("button",{className:"plex-video-player__btn",onClick:nt,"aria-label":ye?"Pause":"Play",type:"button",children:t(ye?L:T,{})}),N&&t(W,{volume:Ne,muted:Pe,onVolumeChange:it,onToggleMute:ct}),M&&e("div",{className:"plex-video-player__time",children:[t("span",{children:u(fe)}),t("span",{children:" / "}),t("span",{children:u(ke)})]})]}),e("div",{className:"plex-video-player__controls-right",children:[E&&t(Y,{playbackRate:He,playbackSpeeds:_,onPlaybackRateChange:ht,qualityEnabled:S&&Ue.length>1,sources:Ue,currentQuality:De,onQualityChange:vt,captionsEnabled:A.length>0,textTracks:A,currentTrack:Oe??void 0,onTrackChange:gt}),k&&document.pictureInPictureEnabled&&t("button",{className:"plex-video-player__btn",onClick:mt,"aria-label":Le?"Exit Picture in Picture":"Picture in Picture",type:"button",children:t(B,{})}),x&&t("button",{className:"plex-video-player__btn",onClick:ut,"aria-label":Me?"Exit Fullscreen":"Fullscreen",type:"button",children:t(Me?R:q,{})})]})]})]}),!ye&&!Ae&&!Ve&&!je&&t("button",{className:"plex-video-player__big-play",onClick:nt,"aria-label":"Play",type:"button",children:t(T,{})})]})});me.displayName="PlexVideoPlayer";const he={isPlaying:!1,isPaused:!0,isEnded:!1,isBuffering:!1,isSeeking:!1,isFullscreen:!1,isPip:!1,isMuted:!1,isAdPlaying:!1,volume:1,currentTime:0,duration:0,buffered:0,playbackRate:1,currentQuality:null,error:null},ve=(e={})=>{const{autoPlay:t=!1,muted:n=!1,loop:c=!1,volume:s=1,playbackRate:o=1}=e,u=r(null),d=r(null),[p,m]=i({...he,volume:s,isMuted:n,playbackRate:o}),h=l(e=>{m(t=>({...t,...e}))},[]),v=l(async()=>{const e=u.current;if(e)try{await e.play(),h({isPlaying:!0,isPaused:!1,isEnded:!1})}catch(e){}},[h]),g=l(()=>{const e=u.current;e&&(e.pause(),h({isPlaying:!1,isPaused:!0}))},[h]),k=l(()=>{p.isPlaying?g():v()},[p.isPlaying,v,g]),x=l(e=>{const t=u.current;if(!t)return;const n=Math.max(0,Math.min(e,t.duration||0));t.currentTime=n,h({currentTime:n})},[h]),E=l(e=>{const t=u.current;if(!t)return;const n=Math.max(0,Math.min(1,e));t.volume=n,t.muted=0===n,h({volume:n,isMuted:0===n})},[h]),_=l(()=>{const e=u.current;e&&(e.muted=!e.muted,h({isMuted:e.muted}))},[h]),N=l(e=>{const t=u.current;t&&(t.playbackRate=e,h({playbackRate:e}))},[h]),P=l(async()=>{const e=d.current;if(e)try{await f(e),h({isFullscreen:!0})}catch(e){}},[h]),C=l(async()=>{try{await b(),h({isFullscreen:!1})}catch(e){}},[h]),M=l(async()=>{p.isFullscreen?await C():await P()},[p.isFullscreen,P,C]),T=l(async()=>{const e=u.current;if(e&&y())try{await e.requestPictureInPicture(),h({isPip:!0})}catch(e){}},[h]),L=l(async()=>{if(document.pictureInPictureElement)try{await document.exitPictureInPicture(),h({isPip:!1})}catch(e){}},[h]),S=l(async()=>{p.isPip?await L():await T()},[p.isPip,T,L]);return a(()=>{const e=u.current;if(!e)return;e.muted=n,e.volume=s,e.playbackRate=o,e.loop=c;const r={loadedmetadata:()=>{h({duration:e.duration})},timeupdate:()=>{h({currentTime:e.currentTime,buffered:z(e)})},play:()=>{h({isPlaying:!0,isPaused:!1,isEnded:!1})},pause:()=>{h({isPlaying:!1,isPaused:!0})},ended:()=>{h({isPlaying:!1,isPaused:!0,isEnded:!0})},waiting:()=>{h({isBuffering:!0})},canplay:()=>{h({isBuffering:!1})},seeking:()=>{h({isSeeking:!0})},seeked:()=>{h({isSeeking:!1})},volumechange:()=>{h({volume:e.volume,isMuted:e.muted})},ratechange:()=>{h({playbackRate:e.playbackRate})},error:()=>{h({error:e.error})},enterpictureinpicture:()=>{h({isPip:!0})},leavepictureinpicture:()=>{h({isPip:!1})}};return Object.entries(r).forEach(([t,n])=>{e.addEventListener(t,n)}),t&&v(),()=>{Object.entries(r).forEach(([t,n])=>{e.removeEventListener(t,n)})}},[t,n,c,s,o,v,h]),a(()=>{const e=()=>{const e=!!w();h({isFullscreen:e})};return document.addEventListener("fullscreenchange",e),document.addEventListener("webkitfullscreenchange",e),document.addEventListener("mozfullscreenchange",e),document.addEventListener("MSFullscreenChange",e),()=>{document.removeEventListener("fullscreenchange",e),document.removeEventListener("webkitfullscreenchange",e),document.removeEventListener("mozfullscreenchange",e),document.removeEventListener("MSFullscreenChange",e)}},[h]),{state:p,videoRef:u,containerRef:d,play:v,pause:g,togglePlay:k,seek:x,setVolume:E,toggleMute:_,setPlaybackRate:N,enterFullscreen:P,exitFullscreen:C,toggleFullscreen:M,enterPip:T,exitPip:L,togglePip:S}};export{Z as AdOverlay,D as CaptionsIcon,J as CheckIcon,te as ErrorDisplay,K as ErrorIcon,G as ExternalLinkIcon,Q as ForwardIcon,R as FullscreenExitIcon,q as FullscreenIcon,ne as Loader,L as PauseIcon,H as PipExitIcon,B as PipIcon,T as PlayIcon,me as PlexVideoPlayer,C as ProgressBar,O as QualityIcon,U as RewindIcon,I as SettingsIcon,Y as SettingsMenu,X as SkipNextIcon,j as SkipPrevIcon,$ as SpeedIcon,W as VolumeControl,S as VolumeHighIcon,F as VolumeLowIcon,A as VolumeMediumIcon,V as VolumeMuteIcon,P as canPlayType,m as clamp,de as convertToAdInfo,v as debounce,me as default,k as detectVideoType,b as exitFullscreen,ce as fetchVastAd,oe as fireTrackingPixel,ue as fireTrackingPixels,u as formatTime,E as generateId,z as getBufferedEnd,w as getFullscreenElement,g as isFullscreenSupported,x as isHlsNativelySupported,_ as isMobile,y as isPipSupported,N as isTouchDevice,d as parseTime,le as parseVastXml,p as percentage,f as requestFullscreen,se as selectBestMediaFile,h as throttle,ie as useKeyboard,ve as usePlayer,pe as useVast};
|
|
1
|
+
import{jsxs as e,jsx as t,Fragment as n}from"react/jsx-runtime";import{useRef as l,useState as r,useCallback as i,useEffect as a,forwardRef as s,useMemo as o,useImperativeHandle as c}from"react";const d=e=>{if(!isFinite(e)||isNaN(e))return"0:00";const t=Math.floor(e/3600),n=Math.floor(e%3600/60),l=Math.floor(e%60);return t>0?`${t}:${n.toString().padStart(2,"0")}:${l.toString().padStart(2,"0")}`:`${n}:${l.toString().padStart(2,"0")}`},u=e=>{const t=e.split(":").map(Number);return 3===t.length?3600*t[0]+60*t[1]+t[2]:2===t.length?60*t[0]+t[1]:t[0]||0},p=(e,t)=>0===t?0:Math.min(100,Math.max(0,e/t*100)),h=(e,t,n)=>Math.min(n,Math.max(t,e)),m=(e,t)=>{let n=!1;return(...l)=>{n||(e(...l),n=!0,setTimeout(()=>n=!1,t))}},v=(e,t)=>{let n=null;return(...l)=>{n&&clearTimeout(n),n=setTimeout(()=>e(...l),t)}},g=()=>!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled),y=()=>"pictureInPictureEnabled"in document&&document.pictureInPictureEnabled,w=()=>document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||null,x=async e=>{e.requestFullscreen?await e.requestFullscreen():e.webkitRequestFullscreen?await e.webkitRequestFullscreen():e.mozRequestFullScreen?await e.mozRequestFullScreen():e.msRequestFullscreen&&await e.msRequestFullscreen()},f=async()=>{document.exitFullscreen?await document.exitFullscreen():document.webkitExitFullscreen?await document.webkitExitFullscreen():document.mozCancelFullScreen?await document.mozCancelFullScreen():document.msExitFullscreen&&await document.msExitFullscreen()},b=e=>{const t=e.split("?")[0].split(".").pop()?.toLowerCase();return{mp4:"video/mp4",webm:"video/webm",ogg:"video/ogg",ogv:"video/ogg",m3u8:"application/x-mpegURL",mpd:"application/dash+xml",mov:"video/quicktime",avi:"video/x-msvideo",mkv:"video/x-matroska"}[t||""]||"video/mp4"},k=()=>""!==document.createElement("video").canPlayType("application/vnd.apple.mpegurl"),_=()=>`plex-${Math.random().toString(36).substring(2,11)}`,N=()=>/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),E=()=>"ontouchstart"in window||navigator.maxTouchPoints>0,C=e=>{if(0===e.buffered.length)return 0;const t=e.currentTime;for(let n=0;n<e.buffered.length;n++)if(e.buffered.start(n)<=t&&e.buffered.end(n)>=t)return e.buffered.end(n);return e.buffered.end(e.buffered.length-1)},z=e=>{const t=document.createElement("video").canPlayType(e);return"probably"===t||"maybe"===t},P=({currentTime:n,duration:s,buffered:o,onSeek:c,thumbnailPreview:u,disabled:m=!1})=>{const v=l(null),[g,y]=r(!1),[w,x]=r(null),[f,b]=r(0),k=p(n,s),_=p(o,s),N=i(e=>{if(!v.current)return 0;const t=v.current.getBoundingClientRect();return h((e-t.left)/t.width,0,1)*s},[s]),E=i(e=>{if(!v.current)return;const t=v.current.getBoundingClientRect(),n="clientX"in e?e.clientX:0,l=h(n-t.left,0,t.width),r=N(n);b(l),x(r),g&&c(r)},[g,N,c]),C=i(e=>{if(m)return;e.preventDefault(),y(!0);const t=N(e.clientX);c(t)},[m,N,c]),z=i(()=>{y(!1)},[]),P=i(e=>{const t=N(e.clientX);x(t)},[N]),T=i(()=>{x(null)},[]);a(()=>{if(g){const e=e=>E(e);return window.addEventListener("mousemove",e),window.addEventListener("mouseup",z),()=>{window.removeEventListener("mousemove",e),window.removeEventListener("mouseup",z)}}},[g,E,z]);const L=i(e=>{if(m)return;e.preventDefault();const t=e.touches[0],n=N(t.clientX);y(!0),c(n)},[m,N,c]),S=i(e=>{if(!g)return;const t=e.touches[0],n=N(t.clientX);c(n)},[g,N,c]),A=i(()=>{y(!1)},[]);return e("div",{ref:v,className:"plex-video-player__progress-container",onMouseDown:C,onMouseEnter:P,onMouseLeave:T,onMouseMove:e=>E(e.nativeEvent),onTouchStart:L,onTouchMove:S,onTouchEnd:A,role:"slider","aria-label":"Video progress","aria-valuemin":0,"aria-valuemax":s,"aria-valuenow":n,"aria-valuetext":d(n),tabIndex:0,children:[e("div",{className:"plex-video-player__progress",children:[t("div",{className:"plex-video-player__progress-buffered",style:{width:`${_}%`}}),t("div",{className:"plex-video-player__progress-played",style:{width:`${k}%`}}),t("div",{className:"plex-video-player__progress-handle",style:{left:`${k}%`}})]}),u?.enabled&&null!==w&&e("div",{className:"plex-video-player__thumbnail-preview",style:{left:`${f}px`,width:u.width||160,height:u.height||90},children:[u.sprites&&t("div",{style:{width:"100%",height:"100%",backgroundImage:`url(${u.sprites})`,backgroundPosition:M(w,s,u.interval||10,u.width||160,u.height||90),backgroundSize:"cover"}}),t("div",{className:"plex-video-player__thumbnail-time",children:d(w)})]}),null!==w&&!u?.enabled&&t("div",{className:"plex-video-player__thumbnail-preview",style:{left:`${f}px`,width:"auto",height:"auto",padding:"4px 8px"},children:t("span",{style:{color:"white",fontSize:"12px"},children:d(w)})})]})},M=(e,t,n,l,r)=>{const i=Math.floor(e/n);return`-${i%10*l}px -${Math.floor(i/10)*r}px`},T=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M8 5v14l11-7z"})}),L=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M6 19h4V5H6v14zm8-14v14h4V5h-4z"})}),S=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("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"})}),A=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M18.5 12c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM5 9v6h4l5 5V4L9 9H5z"})}),F=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M7 9v6h4l5 5V4l-5 5H7z"})}),V=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("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.51C20.63 14.91 21 13.5 21 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"})}),R=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"})}),B=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"})}),H=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M19 7h-8v6h8V7zm2-4H3c-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"})}),q=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("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 16H3V5h18v14zM5 7h8v6H5z"})}),I=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M19.14 12.94c.04-.31.06-.63.06-.94 0-.31-.02-.63-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.04.31-.06.63-.06.94s.02.63.06.94l-2.03 1.58c-.18.14-.23.41-.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.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"})}),D=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 7H9.5v-.5h-2v3h2V13H11v1c0 .55-.45 1-1 1H7c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v1zm7 0h-1.5v-.5h-2v3h2V13H18v1c0 .55-.45 1-1 1h-3c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v1z"})}),$=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M20.38 8.57l-1.23 1.85a8 8 0 0 1-.22 7.58H5.07A8 8 0 0 1 15.58 6.85l1.85-1.23A10 10 0 0 0 3.35 19a2 2 0 0 0 1.72 1h13.85a2 2 0 0 0 1.74-1 10 10 0 0 0-.27-10.44zm-9.79 6.84a2 2 0 0 0 2.83 0l5.66-8.49-8.49 5.66a2 2 0 0 0 0 2.83z"})}),O=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14zM7.5 13h2v2H7.5zm4.5 0h2v2h-2zm4.5 0h2v2h-2zM7.5 9h2v2H7.5zm4.5 0h2v2h-2zm4.5 0h2v2h-2z"})}),U=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M4 18l8.5-6L4 6v12zm9-12v12l8.5-6L13 6z"})}),Q=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M11 18V6l-8.5 6 8.5 6zm.5-6l8.5 6V6l-8.5 6z"})}),X=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M6 18l8.5-6L6 6v12zM16 6v12h2V6h-2z"})}),j=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M6 6h2v12H6zm3.5 6l8.5 6V6z"})}),K=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"})}),G=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"})}),W=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"})}),Y=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M7 7h10v3l4-4-4-4v3H5v6h2V7zm10 10H7v-3l-4 4 4 4v-3h12v-6h-2v4z"})}),J=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"})}),Z=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z"})}),ee=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"})}),te=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"})}),ne=({className:e,size:n=24})=>t("svg",{className:e,width:n,height:n,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M4 10h12v2H4zm0-4h12v2H4zm0 8h8v2H4zm10 0v6l5-3z"})}),le=({volume:n,muted:l,onVolumeChange:r,onToggleMute:a})=>{const s=i(e=>{const t=parseFloat(e.target.value);r(t)},[r]);return e("div",{className:"plex-video-player__volume-container",children:[t("button",{className:"plex-video-player__btn",onClick:a,"aria-label":l?"Unmute":"Mute",title:l?"Unmute (M)":"Mute (M)",type:"button",children:t(l||0===n?V:n<.33?F:n<.66?A:S,{})}),t("div",{className:"plex-video-player__volume-slider-container",children:t("input",{type:"range",className:"plex-video-player__volume-slider",min:0,max:1,step:.01,value:l?0:n,onChange:s,"aria-label":"Volume",style:{background:`linear-gradient(to right, var(--plex-primary) 0%, var(--plex-primary) ${100*(l?0:n)}%, var(--plex-progress-bg) ${100*(l?0:n)}%, var(--plex-progress-bg) 100%)`}})})]})},re=({playbackRate:s,playbackSpeeds:o,onPlaybackRateChange:c,qualityEnabled:d,sources:u,currentQuality:p,onQualityChange:h,captionsEnabled:m,textTracks:v,currentTrack:g,onTrackChange:y})=>{const[w,x]=r(!1),[f,b]=r("main"),k=l(null);a(()=>{const e=e=>{k.current&&!k.current.contains(e.target)&&(x(!1),b("main"))};if(w)return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[w]);const _=i(()=>{x(e=>!e),b("main")},[]),N=i(e=>{c(e),b("main")},[c]),E=i(e=>{h?.(e),b("main")},[h]),C=i(e=>{y?.(e),b("main")},[y]);return e("div",{className:"plex-video-player__settings-container",ref:k,children:[t("button",{className:"plex-video-player__btn",onClick:_,"aria-label":"Settings","aria-expanded":w,title:"Settings",type:"button",children:t(I,{})}),w&&e("div",{className:"plex-video-player__settings-menu "+(w?"plex-video-player__settings-menu--open":""),children:["main"===f&&e(n,{children:[t("div",{className:"plex-video-player__settings-title",children:"Settings"}),e("button",{className:"plex-video-player__settings-item",onClick:()=>b("speed"),type:"button",children:[t("span",{children:"Playback Speed"}),t("span",{children:1===s?"Normal":`${s}x`})]}),d&&u&&u.length>1&&e("button",{className:"plex-video-player__settings-item",onClick:()=>b("quality"),type:"button",children:[t("span",{children:"Quality"}),t("span",{children:p||"Auto"})]}),m&&v&&v.length>0&&e("button",{className:"plex-video-player__settings-item",onClick:()=>b("captions"),type:"button",children:[t("span",{children:"Captions"}),t("span",{children:g||"Off"})]})]}),"speed"===f&&e(n,{children:[t("button",{className:"plex-video-player__settings-title",onClick:()=>b("main"),style:{cursor:"pointer",border:"none",background:"transparent",width:"100%",textAlign:"left"},type:"button",children:"← Playback Speed"}),t("div",{className:"plex-video-player__speed-menu",children:o.map(e=>t("button",{className:"plex-video-player__speed-btn "+(s===e?"plex-video-player__speed-btn--active":""),onClick:()=>N(e),type:"button",children:1===e?"Normal":`${e}x`},e))})]}),"quality"===f&&e(n,{children:[t("button",{className:"plex-video-player__settings-title",onClick:()=>b("main"),style:{cursor:"pointer",border:"none",background:"transparent",width:"100%",textAlign:"left"},type:"button",children:"← Quality"}),t("div",{className:"plex-video-player__quality-menu",children:u?.map(n=>e("button",{className:"plex-video-player__settings-item "+(p===n.quality?"plex-video-player__settings-item--active":""),onClick:()=>E(n.quality||n.src),type:"button",children:[t("span",{children:n.label||n.quality||"Unknown"}),p===n.quality&&t(W,{size:16})]},n.quality||n.src))})]}),"captions"===f&&e(n,{children:[t("button",{className:"plex-video-player__settings-title",onClick:()=>b("main"),style:{cursor:"pointer",border:"none",background:"transparent",width:"100%",textAlign:"left"},type:"button",children:"← Captions"}),e("div",{className:"plex-video-player__quality-menu",children:[e("button",{className:"plex-video-player__settings-item "+(g?"":"plex-video-player__settings-item--active"),onClick:()=>C(null),type:"button",children:[t("span",{children:"Off"}),!g&&t(W,{size:16})]}),v?.map(n=>e("button",{className:"plex-video-player__settings-item "+(g===n.srclang?"plex-video-player__settings-item--active":""),onClick:()=>C(n.srclang),type:"button",children:[t("span",{children:n.label}),g===n.srclang&&t(W,{size:16})]},n.srclang))]})]})]})]})},ie=({ad:n,timeRemaining:l,canSkip:r,onSkip:i,onClick:a})=>{const s=r?"Skip Ad":`Skip in ${Math.ceil(l)}s`;return e("div",{className:"plex-video-player__ad-overlay",onClick:a,children:[e("div",{className:"plex-video-player__ad-info",children:[t("span",{className:"plex-video-player__ad-badge",children:"Ad"}),e("span",{children:[d(l)," remaining"]})]}),n.clickThrough&&e("button",{className:"plex-video-player__ad-learn-more",onClick:e=>{e.stopPropagation(),a()},type:"button",children:[t(G,{size:16}),"Learn More"]}),t("button",{className:"plex-video-player__ad-skip",onClick:e=>{e.stopPropagation(),r&&i()},disabled:!r,type:"button",children:s})]})},ae={1:"The video playback was aborted.",2:"A network error occurred while loading the video.",3:"The video format is not supported or cannot be decoded.",4:"The video source is not supported."},se=({error:n,onRetry:l})=>{const r=n?.code||0,i=ae[r]||"An unknown error occurred.";return e("div",{className:"plex-video-player__error",children:[t(K,{className:"plex-video-player__error-icon",size:60}),t("div",{className:"plex-video-player__error-message",children:i}),r>0&&e("div",{className:"plex-video-player__error-code",children:["Error Code: ",r]}),t("button",{className:"plex-video-player__error-retry",onClick:l,type:"button",children:"Try Again"})]})},oe=({visible:e})=>e?t("div",{className:"plex-video-player__loader",children:t("div",{className:"plex-video-player__loader-spinner"})}):null,ce=({x:n,y:r,isVisible:i,onClose:s,isPlaying:o,isMuted:c,isLoop:d,playbackRate:u,onTogglePlay:p,onToggleMute:h,onToggleLoop:m,onToggleFullscreen:v,onTogglePip:g,onCopyUrl:y,onPlaybackRateChange:w,pipEnabled:x})=>{const f=l(null);if(a(()=>{const e=e=>{f.current&&!f.current.contains(e.target)&&s()},t=e=>{"Escape"===e.key&&s()};return i&&(document.addEventListener("mousedown",e),document.addEventListener("keydown",t)),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",t)}},[i,s]),a(()=>{if(i&&f.current){const e=f.current,t=e.getBoundingClientRect(),l=window.innerWidth,i=window.innerHeight;let a=n,s=r;n+t.width>l&&(a=l-t.width-10),r+t.height>i&&(s=i-t.height-10),e.style.left=`${a}px`,e.style.top=`${s}px`}},[i,n,r]),!i)return null;const b=[{id:"play",label:o?"Pause":"Play",icon:t(o?L:T,{}),shortcut:"Space",onClick:()=>{p(),s()}},{id:"mute",label:c?"Unmute":"Mute",icon:t(c?S:V,{}),shortcut:"M",onClick:()=>{h(),s()}},{id:"divider1",label:"",divider:!0},{id:"loop",label:d?"Disable Loop":"Enable Loop",icon:t(Y,{}),onClick:()=>{m(),s()}},{id:"speed",label:`Speed: ${u}x`,icon:t($,{}),onClick:()=>{const e=[.5,.75,1,1.25,1.5,2],t=(e.indexOf(u)+1)%e.length;w(e[t])}},{id:"divider2",label:"",divider:!0},{id:"pip",label:"Picture in Picture",icon:t(H,{}),shortcut:"P",disabled:!x,onClick:()=>{g(),s()}},{id:"fullscreen",label:"Fullscreen",icon:t(R,{}),shortcut:"F",onClick:()=>{v(),s()}},{id:"divider3",label:"",divider:!0},{id:"copy",label:"Copy Video URL",icon:t(J,{}),onClick:()=>{y(),s()}}];return e("div",{ref:f,className:"plex-video-player__context-menu",style:{left:n,top:r},children:[b.map(n=>n.divider?t("div",{className:"plex-video-player__context-menu-divider"},n.id):e("button",{className:"plex-video-player__context-menu-item "+(n.disabled?"plex-video-player__context-menu-item--disabled":""),onClick:n.onClick,disabled:n.disabled,type:"button",children:[t("span",{className:"plex-video-player__context-menu-icon",children:n.icon}),t("span",{className:"plex-video-player__context-menu-label",children:n.label}),n.shortcut&&t("span",{className:"plex-video-player__context-menu-shortcut",children:n.shortcut})]},n.id)),t("div",{className:"plex-video-player__context-menu-footer",children:"PlexVideo Player © FRAMESET STUDIO"})]})},de=({items:n,currentIndex:s,isPlaying:o,isExpanded:c,onItemSelect:u,onToggleExpand:p,onClose:h,onNext:m,onPrevious:v,loop:g=!1,shuffle:y=!1,onShuffleToggle:w,onLoopToggle:x})=>{const f=l(null),[b,k]=r(null),[_,N]=r(null);a(()=>{if(f.current&&c){const e=f.current.querySelector(`[data-index="${s}"]`);e&&e.scrollIntoView({behavior:"smooth",block:"nearest"})}},[s,c]);const E=i((e,t)=>{k(t),e.dataTransfer.effectAllowed="move"},[]),C=i((e,t)=>{e.preventDefault(),N(t)},[]),z=i(()=>{k(null),N(null)},[]),P=n[s];return e("div",{className:"plex-video-player__playlist "+(c?"plex-video-player__playlist--expanded":""),children:[e("div",{className:"plex-video-player__playlist-header",children:[e("button",{className:"plex-video-player__playlist-toggle",onClick:p,type:"button","aria-label":c?"Collapse playlist":"Expand playlist",children:[t(c?ee:Z,{}),e("span",{className:"plex-video-player__playlist-title",children:["Playlist (",s+1,"/",n.length,")"]})]}),e("div",{className:"plex-video-player__playlist-controls",children:[w&&t("button",{className:"plex-video-player__playlist-btn "+(y?"plex-video-player__playlist-btn--active":""),onClick:w,type:"button","aria-label":"Shuffle",title:"Shuffle",children:t(ue,{})}),x&&t("button",{className:"plex-video-player__playlist-btn "+(g?"plex-video-player__playlist-btn--active":""),onClick:x,type:"button","aria-label":"Loop",title:"Loop playlist",children:t(pe,{})}),t("button",{className:"plex-video-player__playlist-btn",onClick:v,disabled:0===s&&!g,type:"button","aria-label":"Previous",title:"Previous",children:t(he,{})}),t("button",{className:"plex-video-player__playlist-btn",onClick:m,disabled:s===n.length-1&&!g,type:"button","aria-label":"Next",title:"Next",children:t(me,{})}),t("button",{className:"plex-video-player__playlist-btn plex-video-player__playlist-btn--close",onClick:h,type:"button","aria-label":"Close playlist",children:t(te,{})})]})]}),!c&&P&&e("div",{className:"plex-video-player__playlist-current",children:[P.poster&&t("img",{src:P.poster,alt:P.title,className:"plex-video-player__playlist-current-thumb"}),e("div",{className:"plex-video-player__playlist-current-info",children:[t("div",{className:"plex-video-player__playlist-current-title",children:P.title}),P.artist&&t("div",{className:"plex-video-player__playlist-current-artist",children:P.artist})]}),t(o?L:T,{})]}),c&&t("div",{ref:f,className:"plex-video-player__playlist-items",children:n.map((n,l)=>e("div",{"data-index":l,className:`plex-video-player__playlist-item ${l===s?"plex-video-player__playlist-item--active":""} ${b===l?"plex-video-player__playlist-item--dragging":""} ${_===l?"plex-video-player__playlist-item--drag-over":""}`,draggable:!0,onDragStart:e=>E(e,l),onDragOver:e=>C(e,l),onDragEnd:z,onClick:()=>u(l),children:[t("div",{className:"plex-video-player__playlist-item-number",children:l===s&&o?e("div",{className:"plex-video-player__playlist-playing-indicator",children:[t("span",{}),t("span",{}),t("span",{})]}):l+1}),n.poster&&t("img",{src:n.poster,alt:n.title,className:"plex-video-player__playlist-item-thumb"}),e("div",{className:"plex-video-player__playlist-item-info",children:[t("div",{className:"plex-video-player__playlist-item-title",children:n.title}),n.artist&&t("div",{className:"plex-video-player__playlist-item-artist",children:n.artist})]}),n.duration&&t("div",{className:"plex-video-player__playlist-item-duration",children:d(n.duration)})]},n.id))})]})},ue=()=>t("svg",{viewBox:"0 0 24 24",width:"18",height:"18",fill:"currentColor",children:t("path",{d:"M10.59 9.17L5.41 4 4 5.41l5.17 5.17 1.42-1.41zM14.5 4l2.04 2.04L4 18.59 5.41 20 17.96 7.46 20 9.5V4h-5.5zm.33 9.41l-1.41 1.41 3.13 3.13L14.5 20H20v-5.5l-2.04 2.04-3.13-3.13z"})}),pe=()=>t("svg",{viewBox:"0 0 24 24",width:"18",height:"18",fill:"currentColor",children:t("path",{d:"M7 7h10v3l4-4-4-4v3H5v6h2V7zm10 10H7v-3l-4 4 4 4v-3h12v-6h-2v4z"})}),he=()=>t("svg",{viewBox:"0 0 24 24",width:"18",height:"18",fill:"currentColor",children:t("path",{d:"M6 6h2v12H6V6zm3.5 6l8.5 6V6l-8.5 6z"})}),me=()=>t("svg",{viewBox:"0 0 24 24",width:"18",height:"18",fill:"currentColor",children:t("path",{d:"M6 18l8.5-6L6 6v12zm2-8.14L11.03 12 8 14.14V9.86zM16 6h2v12h-2V6z"})}),ve={play:"Space",mute:"m",fullscreen:"f",pip:"p",seekForward:"ArrowRight",seekBackward:"ArrowLeft",volumeUp:"ArrowUp",volumeDown:"ArrowDown"},ge=({enabled:e,hotkeys:t={},onPlay:n,onMute:l,onFullscreen:r,onPip:s,onSeek:o,onVolume:c,containerRef:d})=>{const u={...ve,...t},p=i(t=>{if(!e)return;const i=t.target;if("INPUT"===i.tagName||"TEXTAREA"===i.tagName||i.isContentEditable)return;const a=d.current;if(!a||!a.contains(document.activeElement))return;switch(t.key){case u.play:case" ":t.preventDefault(),n();break;case u.mute:case"M":t.preventDefault(),l();break;case u.fullscreen:case"F":t.preventDefault(),r();break;case u.pip:case"P":t.preventDefault(),s();break;case u.seekForward:t.preventDefault(),o(t.shiftKey?30:10);break;case u.seekBackward:t.preventDefault(),o(t.shiftKey?-30:-10);break;case u.volumeUp:t.preventDefault(),c(.1);break;case u.volumeDown:t.preventDefault(),c(-.1);break;case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":t.preventDefault(),o(-1/0)}},[e,u,n,l,r,s,o,c,d]);a(()=>{if(e)return document.addEventListener("keydown",p),()=>{document.removeEventListener("keydown",p)}},[e,p])},ye=e=>{const t=(new DOMParser).parseFromString(e,"text/xml");if(t.querySelector("parsererror"))return{ads:[],error:"Failed to parse VAST XML"};const n=[];return t.querySelectorAll("Ad").forEach(e=>{const t=e.querySelector("InLine");if(!t)return;const l=e.getAttribute("id")||"",r=t.querySelector("AdTitle")?.textContent||"",i=t.querySelector("Description")?.textContent||void 0,a=t.querySelectorAll("Creative");let s,o,c=0;const d=[],u=[],p={};a.forEach(e=>{const t=e.querySelector("Linear");if(!t)return;const n=t.querySelector("Duration")?.textContent;n&&(c=we(n));const l=t.getAttribute("skipoffset");l&&(s=we(l));t.querySelectorAll("MediaFile").forEach(e=>{const t=e.textContent?.trim();t&&u.push({url:t,type:e.getAttribute("type")||"video/mp4",width:parseInt(e.getAttribute("width")||"0",10),height:parseInt(e.getAttribute("height")||"0",10),bitrate:parseInt(e.getAttribute("bitrate")||"0",10)||void 0})});const r=t.querySelector("VideoClicks");r&&(o=r.querySelector("ClickThrough")?.textContent?.trim(),r.querySelectorAll("ClickTracking").forEach(e=>{const t=e.textContent?.trim();t&&d.push(t)}));t.querySelectorAll("TrackingEvents Tracking").forEach(e=>{const t=e.getAttribute("event"),n=e.textContent?.trim();t&&n&&(p[t]||(p[t]=[]),p[t].push(n))})});const h=[];t.querySelectorAll("Impression").forEach(e=>{const t=e.textContent?.trim();t&&h.push(t)}),u.length>0&&n.push({id:l,title:r,description:i,duration:c,skipOffset:s,clickThrough:o,clickTracking:d,impressionUrls:h,mediaFiles:u,trackingEvents:p})}),{ads:n}},we=e=>{if(e.includes("%"))return-1;const t=e.split(":");if(3!==t.length)return 0;return 3600*parseInt(t[0],10)+60*parseInt(t[1],10)+parseFloat(t[2])},xe=async e=>{try{const t=await fetch(e.url,{method:"GET",headers:{Accept:"application/xml"}});if(!t.ok)return null;const n=await t.text(),l=ye(n);if(l.error||0===l.ads.length)return null;const r=l.ads[0];return void 0!==e.skipDelay&&void 0===r.skipOffset&&(r.skipOffset=e.skipDelay),r}catch(e){return null}},fe=e=>{if(0===e.length)return null;const t=document.createElement("video"),n=e.filter(e=>""!==t.canPlayType(e.type));if(0===n.length)return null;n.sort((e,t)=>{const n=e.width*e.height,l=t.width*t.height;return n!==l?l-n:(t.bitrate||0)-(e.bitrate||0)});return/Android|iPhone|iPad|iPod/i.test(navigator.userAgent)&&n.length>1?n[n.length-1]:n[0]},be=e=>{(new Image).src=e},ke=e=>{e.forEach(be)},_e=e=>({id:e.id,title:e.title,duration:e.duration,skipOffset:e.skipOffset,clickThrough:e.clickThrough}),Ne=({vastConfig:e,videoRef:t,onAdStart:n,onAdEnd:s,onAdSkip:o,onAdError:c})=>{const[d,u]=r(!1),[p,h]=r(null),[m,v]=r(0),[g,y]=r(!1),w=l(null),x=l(""),f=l(0),b=l(new Set),k=l(null),_=Array.isArray(e)?e:e?[e]:[],N=i(async e=>{const l=t.current;if(l&&!d)try{const t=await xe(e);if(!t)return void c?.(new Error("Failed to fetch VAST ad"));const r=fe(t.mediaFiles);if(!r)return void c?.(new Error("No compatible media file found"));x.current=l.currentSrc,f.current=l.currentTime,ke(t.impressionUrls),w.current=t,h(_e(t)),u(!0),v(t.duration),y(void 0===t.skipOffset||0===t.skipOffset),l.src=r.url,l.currentTime=0,await l.play(),t.trackingEvents.start&&ke(t.trackingEvents.start),n?.(_e(t)),k.current=window.setInterval(()=>{const e=Math.max(0,t.duration-l.currentTime);v(e),t.skipOffset&&l.currentTime>=t.skipOffset&&y(!0);const n=l.currentTime/t.duration*100;n>=25&&t.trackingEvents.firstQuartile&&ke(t.trackingEvents.firstQuartile),n>=50&&t.trackingEvents.midpoint&&ke(t.trackingEvents.midpoint),n>=75&&t.trackingEvents.thirdQuartile&&ke(t.trackingEvents.thirdQuartile)},250);const i=()=>{t.trackingEvents.complete&&ke(t.trackingEvents.complete),E()};l.addEventListener("ended",i,{once:!0})}catch(e){c?.(e instanceof Error?e:new Error("Ad playback failed")),E()}},[t,d,n,c]),E=i(()=>{const e=t.current;e&&(k.current&&(clearInterval(k.current),k.current=null),x.current&&(e.src=x.current,e.currentTime=f.current,e.play().catch(()=>{})),u(!1),h(null),v(0),y(!1),w.current=null,s?.())},[t,s]),C=i(()=>{if(!g||!w.current)return;const e=w.current;e.trackingEvents.skip&&ke(e.trackingEvents.skip),o?.(),E()},[g,E,o]),z=i(()=>{if(!w.current)return;const e=w.current;e.clickThrough&&window.open(e.clickThrough,"_blank"),e.clickTracking&&ke(e.clickTracking)},[]),P=i((e,t)=>{d||0===_.length||_.forEach(n=>{const l=n.position||"preroll",r=`${l}-${n.midrollTime||0}`;if(b.current.has(r))return;let i=!1;switch(l){case"preroll":i=0===e;break;case"midroll":n.midrollTime&&e>=n.midrollTime&&(i=!0);break;case"postroll":i=e>=t-.5}i&&(b.current.add(r),N(n))})},[_,d,N]);return a(()=>()=>{k.current&&clearInterval(k.current)},[]),{isAdPlaying:d,currentAd:p,adTimeRemaining:m,canSkip:g,skipAd:C,handleAdClick:z,checkForAd:P}},Ee=s((n,s)=>{const{src:u,poster:p,autoPlay:h=!1,muted:v=!1,loop:g=!1,controls:y=!0,width:w="100%",className:x="",style:f={},pip:b=!0,fullscreen:k=!0,playbackSpeed:_=!0,playbackSpeeds:N=[.25,.5,.75,1,1.25,1.5,1.75,2],volume:E=!0,initialVolume:C=1,progressBar:z=!0,timeDisplay:M=!0,qualitySelector:S=!0,textTracks:A=[],vast:F,keyboard:V=!0,hotkeys:q,accentColor:I="#f5c518",controlsTimeout:D=3e3,doubleClickFullscreen:$=!0,clickToPlay:O=!0,preload:U="metadata",playlist:Q=[],onPlay:X,onPause:j,onEnded:K,onTimeUpdate:G,onProgress:W,onVolumeChange:Y,onFullscreenChange:J,onPipChange:Z,onQualityChange:ee,onError:te,onAdStart:ae,onAdEnd:ue,onAdSkip:pe,onAdError:he,onReady:me,onPlaylistItemChange:ve}=n,ye=l(null),we=l(null),xe=l(null),fe=l(0),[be,ke]=r(!1),[_e,Ee]=r(0),[Ce,ze]=r(0),[Pe,Me]=r(0),[Te,Le]=r(v?0:C),[Se,Ae]=r(v),[Fe,Ve]=r(!1),[Re,Be]=r(!1),[He,qe]=r(!0),[Ie,De]=r(null),[$e,Oe]=r(!0),[Ue,Qe]=r(1),[Xe,je]=r("auto"),[Ke,Ge]=r(null),[We,Ye]=r(g),[Je,Ze]=r({x:0,y:0,visible:!1}),[et,tt]=r(!1),[nt,lt]=r(!0),[rt,it]=r(0),[at,st]=r(!1),[ot,ct]=r(!1),dt=o(()=>"string"==typeof u?[{src:u,type:"video/mp4"}]:u,[u]),ut=o(()=>Q.length>0&&Q[rt]?Q[rt].src:dt[0]?.src||"",[Q,rt,dt]),pt=o(()=>Q.length>0&&Q[rt]?.poster?Q[rt].poster:p,[Q,rt,p]),{currentAd:ht,isAdPlaying:mt,adTimeRemaining:vt,canSkip:gt,skipAd:yt,handleAdClick:wt,checkForAd:xt}=Ne({vastConfig:F,videoRef:ye,onAdStart:ae,onAdEnd:ue,onAdSkip:pe,onAdError:he}),ft=i(async()=>{const e=ye.current;if(e)try{await e.play()}catch(e){}},[]),bt=i(()=>{const e=ye.current;e&&e.pause()},[]),kt=i(()=>{const e=ye.current;e&&(e.pause(),e.currentTime=0)},[]),_t=i(()=>{const e=ye.current;e&&(e.paused?ft():bt())},[ft,bt]),Nt=i(e=>{const t=ye.current;t&&(t.currentTime=Math.max(0,Math.min(e,t.duration||0)))},[]),Et=i(e=>{const t=ye.current;if(!t)return;const n=Math.max(0,Math.min(1,e));t.volume=n,t.muted=0===n,Le(n),Ae(0===n)},[]),Ct=i(()=>{const e=ye.current;e&&(e.muted=!0,Ae(!0))},[]),zt=i(()=>{const e=ye.current;e&&(e.muted=!1,0===e.volume&&(e.volume=.5,Le(.5)),Ae(!1))},[]),Pt=i(()=>{const e=ye.current;e&&(e.muted?zt():Ct())},[Ct,zt]),Mt=i(()=>{const e=ye.current;e&&(e.loop=!e.loop,Ye(e.loop))},[]),Tt=i(async()=>{const e=we.current;if(e)try{await e.requestFullscreen(),Ve(!0)}catch(e){}},[]),Lt=i(async()=>{try{document.fullscreenElement&&(await document.exitFullscreen(),Ve(!1))}catch(e){}},[]),St=i(async()=>{document.fullscreenElement?await Lt():await Tt()},[Tt,Lt]),At=i(async()=>{const e=ye.current;if(e&&document.pictureInPictureEnabled)try{await e.requestPictureInPicture(),Be(!0)}catch(e){}},[]),Ft=i(async()=>{try{document.pictureInPictureElement&&(await document.exitPictureInPicture(),Be(!1))}catch(e){}},[]),Vt=i(async()=>{document.pictureInPictureElement?await Ft():await At()},[At,Ft]),Rt=i(e=>{const t=ye.current;t&&(t.playbackRate=e,Qe(e))},[]),Bt=i(e=>{const t=dt.find(t=>t.label===e||t.quality===e);if(t&&ye.current){const n=ye.current,l=!n.paused,r=n.currentTime;n.src=t.src,n.currentTime=r,l&&n.play(),je(e),ee?.(e)}},[dt,ee]),Ht=i(e=>{const t=ye.current;if(t){for(let n=0;n<t.textTracks.length;n++){const l=t.textTracks[n];l.mode=l.label===e?"showing":"hidden"}Ge(e)}},[]),qt=i(e=>{e>=0&&e<Q.length&&(it(e),ve?.(e,Q[e]),setTimeout(()=>ft(),100))},[Q,ve,ft]),It=i(()=>{if(0===Q.length)return;let e=rt+1;if(e>=Q.length){if(!at)return;e=0}ot&&(e=Math.floor(Math.random()*Q.length)),qt(e)},[rt,Q.length,at,ot,qt]),Dt=i(()=>{if(0===Q.length)return;let e=rt-1;if(e<0){if(!at)return;e=Q.length-1}qt(e)},[rt,Q.length,at,qt]),$t=i(e=>{e.preventDefault(),Ze({x:e.clientX,y:e.clientY,visible:!0})},[]),Ot=i(()=>{Ze(e=>({...e,visible:!1}))},[]),Ut=i(()=>{navigator.clipboard.writeText(ut)},[ut]),Qt=i(()=>{be&&Oe(!1)},[be]),Xt=i(()=>{Oe(!0),xe.current&&clearTimeout(xe.current),be&&(xe.current=setTimeout(Qt,D))},[be,D,Qt]),jt=o(()=>m(Xt,200),[Xt]),Kt=i(()=>{if(!O)return;const e=Date.now();$&&e-fe.current<300?St():_t(),fe.current=e},[O,$,_t,St]);a(()=>{const e=ye.current;if(!e)return;const t=()=>{ke(!0),X?.()},n=()=>{ke(!1),j?.()},l=()=>{ke(!1),K?.(),Q.length>0&&It()},r=()=>{Ee(e.currentTime),G?.(e.currentTime),xt(e.currentTime,e.duration)},i=()=>{ze(e.duration)},a=()=>{if(e.buffered.length>0){const t=e.buffered.end(e.buffered.length-1)/e.duration*100;Me(t),W?.(t)}},s=()=>{Le(e.volume),Ae(e.muted),Y?.(e.volume,e.muted)},o=()=>{ze(e.duration),qe(!1),me?.()},c=()=>{qe(!0)},d=()=>{qe(!1)},u=()=>{qe(!1)},p=()=>{De(e.error),qe(!1),te?.(e.error)};return e.addEventListener("play",t),e.addEventListener("pause",n),e.addEventListener("ended",l),e.addEventListener("timeupdate",r),e.addEventListener("durationchange",i),e.addEventListener("progress",a),e.addEventListener("volumechange",s),e.addEventListener("loadedmetadata",o),e.addEventListener("waiting",c),e.addEventListener("playing",d),e.addEventListener("canplay",u),e.addEventListener("error",p),()=>{e.removeEventListener("play",t),e.removeEventListener("pause",n),e.removeEventListener("ended",l),e.removeEventListener("timeupdate",r),e.removeEventListener("durationchange",i),e.removeEventListener("progress",a),e.removeEventListener("volumechange",s),e.removeEventListener("loadedmetadata",o),e.removeEventListener("waiting",c),e.removeEventListener("playing",d),e.removeEventListener("canplay",u),e.removeEventListener("error",p)}},[X,j,K,G,W,Y,me,te,xt,Q.length,It]),a(()=>{const e=()=>{const e=!!document.fullscreenElement;Ve(e),J?.(e)};return document.addEventListener("fullscreenchange",e),()=>{document.removeEventListener("fullscreenchange",e)}},[J]),a(()=>{const e=ye.current;if(!e)return;const t=()=>{Be(!0),Z?.(!0)},n=()=>{Be(!1),Z?.(!1)};return e.addEventListener("enterpictureinpicture",t),e.addEventListener("leavepictureinpicture",n),()=>{e.removeEventListener("enterpictureinpicture",t),e.removeEventListener("leavepictureinpicture",n)}},[Z]),ge({enabled:V,containerRef:we,hotkeys:q,onPlay:_t,onMute:Pt,onFullscreen:St,onPip:Vt,onSeek:e=>Nt(_e+e),onVolume:e=>Et(Te+e)}),a(()=>()=>{xe.current&&clearTimeout(xe.current)},[]);const Gt=i(()=>{De(null),ye.current?.load()},[]);c(s,()=>({play:ft,pause:bt,stop:kt,seek:Nt,setVolume:Et,mute:Ct,unmute:zt,toggleMute:Pt,enterFullscreen:Tt,exitFullscreen:Lt,toggleFullscreen:St,enterPip:At,exitPip:Ft,togglePip:Vt,setPlaybackRate:Rt,setQuality:Bt,getCurrentTime:()=>ye.current?.currentTime||0,getDuration:()=>ye.current?.duration||0,getVolume:()=>ye.current?.volume||0,isMuted:()=>ye.current?.muted??!0,isPlaying:()=>!ye.current?.paused,isFullscreen:()=>Fe,isPip:()=>Re,getVideoElement:()=>ye.current}),[ft,bt,kt,Nt,Et,Ct,zt,Pt,Tt,Lt,St,At,Ft,Vt,Rt,Bt,Fe,Re]);return e("div",{ref:we,className:`plex-video-player ${Fe?"plex-video-player--fullscreen":""} ${x}`,style:{...{"--plex-accent-color":I,"--plex-primary":I},width:w,...f},onMouseMove:jt,onMouseLeave:()=>be&&Oe(!1),onContextMenu:$t,tabIndex:0,children:[e("video",{ref:ye,className:"plex-video-player__video",src:ut,poster:pt,autoPlay:h,muted:v,loop:We,preload:U,playsInline:!0,onClick:Kt,children:[dt.slice(1).map((e,n)=>t("source",{src:e.src,type:e.type},n)),A.map((e,n)=>t("track",{kind:e.kind,src:e.src,srcLang:e.srclang,label:e.label,default:e.default},n))]}),t(oe,{visible:He&&!Ie}),Ie&&t(se,{error:Ie,onRetry:Gt}),mt&&ht&&t(ie,{ad:ht,timeRemaining:vt,canSkip:gt,onSkip:yt,onClick:wt}),t(ce,{x:Je.x,y:Je.y,isVisible:Je.visible,onClose:Ot,isPlaying:be,isMuted:Se,isLoop:We,playbackRate:Ue,onTogglePlay:_t,onToggleMute:Pt,onToggleLoop:Mt,onToggleFullscreen:St,onTogglePip:Vt,onCopyUrl:Ut,onPlaybackRateChange:Rt,pipEnabled:document.pictureInPictureEnabled,videoUrl:ut}),Q.length>0&&et&&t(de,{items:Q,currentIndex:rt,isPlaying:be,isExpanded:nt,onItemSelect:qt,onToggleExpand:()=>lt(!nt),onClose:()=>tt(!1),onNext:It,onPrevious:Dt,loop:at,shuffle:ot,onLoopToggle:()=>st(!at),onShuffleToggle:()=>ct(!ot)}),y&&!mt&&e("div",{className:"plex-video-player__controls "+($e?"plex-video-player__controls--visible":""),children:[z&&t(P,{currentTime:_e,duration:Ce,buffered:Pe,onSeek:Nt}),e("div",{className:"plex-video-player__controls-bottom",children:[e("div",{className:"plex-video-player__controls-left",children:[t("button",{className:"plex-video-player__btn",onClick:_t,"aria-label":be?"Pause":"Play",type:"button",children:t(be?L:T,{})}),E&&t(le,{volume:Te,muted:Se,onVolumeChange:Et,onToggleMute:Pt}),M&&e("div",{className:"plex-video-player__time",children:[t("span",{children:d(_e)}),t("span",{children:" / "}),t("span",{children:d(Ce)})]})]}),e("div",{className:"plex-video-player__controls-right",children:[Q.length>0&&t("button",{className:"plex-video-player__btn "+(et?"plex-video-player__btn--active":""),onClick:()=>tt(!et),"aria-label":"Playlist",type:"button",children:t(ne,{})}),_&&t(re,{playbackRate:Ue,playbackSpeeds:N,onPlaybackRateChange:Rt,qualityEnabled:S&&dt.length>1,sources:dt,currentQuality:Xe,onQualityChange:Bt,captionsEnabled:A.length>0,textTracks:A,currentTrack:Ke??void 0,onTrackChange:Ht}),b&&document.pictureInPictureEnabled&&t("button",{className:"plex-video-player__btn",onClick:Vt,"aria-label":Re?"Exit Picture in Picture":"Picture in Picture",type:"button",children:t(H,{})}),k&&t("button",{className:"plex-video-player__btn",onClick:St,"aria-label":Fe?"Exit Fullscreen":"Fullscreen",type:"button",children:t(Fe?B:R,{})})]})]})]}),!be&&!He&&!Ie&&!mt&&t("button",{className:"plex-video-player__big-play",onClick:_t,"aria-label":"Play",type:"button",children:t(T,{})})]})});Ee.displayName="PlexVideoPlayer";const Ce={isPlaying:!1,isPaused:!0,isEnded:!1,isBuffering:!1,isSeeking:!1,isFullscreen:!1,isPip:!1,isMuted:!1,isAdPlaying:!1,volume:1,currentTime:0,duration:0,buffered:0,playbackRate:1,currentQuality:null,error:null},ze=(e={})=>{const{autoPlay:t=!1,muted:n=!1,loop:s=!1,volume:o=1,playbackRate:c=1}=e,d=l(null),u=l(null),[p,h]=r({...Ce,volume:o,isMuted:n,playbackRate:c}),m=i(e=>{h(t=>({...t,...e}))},[]),v=i(async()=>{const e=d.current;if(e)try{await e.play(),m({isPlaying:!0,isPaused:!1,isEnded:!1})}catch(e){}},[m]),g=i(()=>{const e=d.current;e&&(e.pause(),m({isPlaying:!1,isPaused:!0}))},[m]),b=i(()=>{p.isPlaying?g():v()},[p.isPlaying,v,g]),k=i(e=>{const t=d.current;if(!t)return;const n=Math.max(0,Math.min(e,t.duration||0));t.currentTime=n,m({currentTime:n})},[m]),_=i(e=>{const t=d.current;if(!t)return;const n=Math.max(0,Math.min(1,e));t.volume=n,t.muted=0===n,m({volume:n,isMuted:0===n})},[m]),N=i(()=>{const e=d.current;e&&(e.muted=!e.muted,m({isMuted:e.muted}))},[m]),E=i(e=>{const t=d.current;t&&(t.playbackRate=e,m({playbackRate:e}))},[m]),z=i(async()=>{const e=u.current;if(e)try{await x(e),m({isFullscreen:!0})}catch(e){}},[m]),P=i(async()=>{try{await f(),m({isFullscreen:!1})}catch(e){}},[m]),M=i(async()=>{p.isFullscreen?await P():await z()},[p.isFullscreen,z,P]),T=i(async()=>{const e=d.current;if(e&&y())try{await e.requestPictureInPicture(),m({isPip:!0})}catch(e){}},[m]),L=i(async()=>{if(document.pictureInPictureElement)try{await document.exitPictureInPicture(),m({isPip:!1})}catch(e){}},[m]),S=i(async()=>{p.isPip?await L():await T()},[p.isPip,T,L]);return a(()=>{const e=d.current;if(!e)return;e.muted=n,e.volume=o,e.playbackRate=c,e.loop=s;const l={loadedmetadata:()=>{m({duration:e.duration})},timeupdate:()=>{m({currentTime:e.currentTime,buffered:C(e)})},play:()=>{m({isPlaying:!0,isPaused:!1,isEnded:!1})},pause:()=>{m({isPlaying:!1,isPaused:!0})},ended:()=>{m({isPlaying:!1,isPaused:!0,isEnded:!0})},waiting:()=>{m({isBuffering:!0})},canplay:()=>{m({isBuffering:!1})},seeking:()=>{m({isSeeking:!0})},seeked:()=>{m({isSeeking:!1})},volumechange:()=>{m({volume:e.volume,isMuted:e.muted})},ratechange:()=>{m({playbackRate:e.playbackRate})},error:()=>{m({error:e.error})},enterpictureinpicture:()=>{m({isPip:!0})},leavepictureinpicture:()=>{m({isPip:!1})}};return Object.entries(l).forEach(([t,n])=>{e.addEventListener(t,n)}),t&&v(),()=>{Object.entries(l).forEach(([t,n])=>{e.removeEventListener(t,n)})}},[t,n,s,o,c,v,m]),a(()=>{const e=()=>{const e=!!w();m({isFullscreen:e})};return document.addEventListener("fullscreenchange",e),document.addEventListener("webkitfullscreenchange",e),document.addEventListener("mozfullscreenchange",e),document.addEventListener("MSFullscreenChange",e),()=>{document.removeEventListener("fullscreenchange",e),document.removeEventListener("webkitfullscreenchange",e),document.removeEventListener("mozfullscreenchange",e),document.removeEventListener("MSFullscreenChange",e)}},[m]),{state:p,videoRef:d,containerRef:u,play:v,pause:g,togglePlay:b,seek:k,setVolume:_,toggleMute:N,setPlaybackRate:E,enterFullscreen:z,exitFullscreen:P,toggleFullscreen:M,enterPip:T,exitPip:L,togglePip:S}};export{ie as AdOverlay,D as CaptionsIcon,W as CheckIcon,se as ErrorDisplay,K as ErrorIcon,G as ExternalLinkIcon,U as ForwardIcon,B as FullscreenExitIcon,R as FullscreenIcon,oe as Loader,L as PauseIcon,q as PipExitIcon,H as PipIcon,T as PlayIcon,Ee as PlexVideoPlayer,P as ProgressBar,O as QualityIcon,Q as RewindIcon,I as SettingsIcon,re as SettingsMenu,X as SkipNextIcon,j as SkipPrevIcon,$ as SpeedIcon,le as VolumeControl,S as VolumeHighIcon,F as VolumeLowIcon,A as VolumeMediumIcon,V as VolumeMuteIcon,z as canPlayType,h as clamp,_e as convertToAdInfo,v as debounce,Ee as default,b as detectVideoType,f as exitFullscreen,xe as fetchVastAd,be as fireTrackingPixel,ke as fireTrackingPixels,d as formatTime,_ as generateId,C as getBufferedEnd,w as getFullscreenElement,g as isFullscreenSupported,k as isHlsNativelySupported,N as isMobile,y as isPipSupported,E as isTouchDevice,u as parseTime,ye as parseVastXml,p as percentage,x as requestFullscreen,fe as selectBestMediaFile,m as throttle,ge as useKeyboard,ze as usePlayer,Ne as useVast};
|
|
2
2
|
//# sourceMappingURL=index.esm.js.map
|