@videts/vide 0.7.4 → 0.8.0

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/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  [![npm](https://img.shields.io/npm/v/@videts/vide)](https://www.npmjs.com/package/@videts/vide)
5
5
  [![gzip](https://img.shields.io/badge/core-1.8KB-blue)](https://bundlephobia.com/package/@videts/vide)
6
6
 
7
- Modular video player library. Use only what you need.
7
+ Modular video player library. Use only what you need. Also works with `<audio>`.
8
8
 
9
9
  **[Documentation](https://hogekai.github.io/vide/)** · **[Getting Started](https://hogekai.github.io/vide/getting-started)** · **[Demo](https://hogekai.github.io/vide/demo)**
10
10
 
@@ -0,0 +1 @@
1
+ function n(r){return r>=2160?"4K":r>=1440?"1440p":r>=1080?"1080p":r>=720?"720p":r>=480?"480p":r>=360?"360p":r>=240?"240p":`${r}p`}export{n as a};
@@ -1,8 +1,10 @@
1
- import { e as Plugin } from '../types-Cine0xi3.js';
1
+ import { R as RecoveryConfig, e as Plugin } from '../types-vxIcXgJz.js';
2
2
 
3
3
  interface DashPluginOptions {
4
4
  /** dash.js MediaPlayerSettingClass — passed to updateSettings(). */
5
5
  dashConfig?: Record<string, unknown> | undefined;
6
+ /** Error recovery settings. `false` to disable. Defaults to enabled (3 retries, 3s delay, 2x backoff). */
7
+ recovery?: Partial<RecoveryConfig> | false | undefined;
6
8
  }
7
9
 
8
10
  /** Create a DASH streaming plugin for vide. */
@@ -1,2 +1,2 @@
1
- import'../chunk-DWXOYV4E.mjs';var f="application/dash+xml";function p(r){try{return new URL(r,"https://placeholder.invalid").pathname.endsWith(".mpd")}catch{return r.includes(".mpd")}}function D(r){return r.toLowerCase()===f}function P(r={}){return {name:"dash",setup(e){let o=null,d=false,l={canHandle(t,n){return n&&D(n)?true:p(t)},load(t,n){this.unload(n),h(t,n);},unload(t){o&&(o.destroy(),o=null);}};function h(t,n){import('dashjs').then(i=>{if(d)return;let u=i.default,a=u.MediaPlayer().create();o=a,e.setPluginData("dash",a);let c=e.getPluginData("drm");c?.dashConfig&&a.updateSettings(c.dashConfig),r.dashConfig&&a.updateSettings(r.dashConfig),a.on(u.MediaPlayer.events.ERROR,s=>{typeof s.error=="object"&&s.error!==null?e.emit("error",{code:s.error.code,message:s.error.message,source:"dash"}):e.emit("error",{code:3001,message:`DASH error: ${String(s.error)}`,source:"dash"});}),a.initialize(n,t,n.autoplay);}).catch(i=>{d||e.emit("error",{code:3e3,message:i instanceof Error?`Failed to load dashjs: ${i.message}`:"Failed to load dashjs",source:"dash"});});}return e.registerSourceHandler(l),()=>{d=true,l.unload(e.el);}}}}
2
- export{P as dash};
1
+ import {a}from'../chunk-H3OXPFD3.mjs';import'../chunk-DWXOYV4E.mjs';var w="application/dash+xml",L={maxRetries:3,retryDelay:3e3,backoffMultiplier:2};function T(n){try{return new URL(n,"https://placeholder.invalid").pathname.endsWith(".mpd")}catch{return n.includes(".mpd")}}function C(n){return n.toLowerCase()===w}function k(n={}){return {name:"dash",setup(e){let c=null,u=false,g=n.recovery===false?false:{...L,...n.recovery??{}},s=0,f=null,v="",l=null;function m(){f!==null&&(clearTimeout(f),f=null);}function R(a){if(g===false||u||s>=g.maxRetries||!l)return false;s++;let r=g.retryDelay*g.backoffMultiplier**(s-1);return m(),f=setTimeout(()=>{u||!l||(a.reset(),a.initialize(l,v,l.autoplay));},r),true}let p={canHandle(a,r){return r&&C(r)?true:T(a)},load(a,r){this.unload(r),E(a,r);},unload(a){m(),s=0,v="",l=null,c&&(c.destroy(),c=null);}};function E(a$1,r){v=a$1,l=r,import('dashjs').then(h=>{if(u)return;let y=h.default,t=y.MediaPlayer().create();c=t,e.setPluginData("dash",t);let b=e.getPluginData("drm");b?.dashConfig&&t.updateSettings(b.dashConfig),n.dashConfig&&t.updateSettings(n.dashConfig),t.on(y.MediaPlayer.events.ERROR,o=>{if(typeof o.error=="object"&&o.error!==null){let d=R(t);e.emit("error",{code:o.error.code,message:o.error.message,source:"dash",recoverable:d,retryCount:d?s:void 0});}else e.emit("error",{code:3001,message:`DASH error: ${String(o.error)}`,source:"dash"});}),t.on(y.MediaPlayer.events.STREAM_INITIALIZED,()=>{s>0&&(s=0,m());let d=t.getBitrateInfoListFor("video").map(i=>({id:i.qualityIndex,width:i.width,height:i.height,bitrate:i.bitrate,label:a(i.height)}));e.setPluginData("qualities",d),e.setPluginData("qualitySetter",i=>{i===-1?t.updateSettings({streaming:{abr:{autoSwitchBitrate:{video:true}}}}):(t.updateSettings({streaming:{abr:{autoSwitchBitrate:{video:false}}}}),t.setQualityFor("video",i,true)),e.setPluginData("autoQuality",i===-1);});}),t.on(y.MediaPlayer.events.QUALITY_CHANGE_RENDERED,o=>{if(o.mediaType!=="video")return;let i=e.qualities.find(D=>D.id===o.newQuality);if(i){e.setPluginData("currentQuality",i);let D=t.getSettings();e.setPluginData("autoQuality",D?.streaming?.abr?.autoSwitchBitrate?.video??true);}}),t.initialize(r,a$1,r.autoplay);}).catch(h=>{u||e.emit("error",{code:3e3,message:h instanceof Error?`Failed to load dashjs: ${h.message}`:"Failed to load dashjs",source:"dash"});});}return e.registerSourceHandler(p),()=>{u=true,m(),p.unload(e.el);}}}}
2
+ export{k as dash};
@@ -1,4 +1,4 @@
1
- import { e as Plugin } from '../types-Cine0xi3.js';
1
+ import { M as MediaElement, e as Plugin } from '../types-vxIcXgJz.js';
2
2
 
3
3
  /** Widevine DRM configuration. */
4
4
  interface WidevineConfig {
@@ -59,7 +59,7 @@ interface EmeOptions {
59
59
  *
60
60
  * Returns a cleanup function that removes listeners and closes sessions.
61
61
  */
62
- declare function setupEme(videoElement: HTMLVideoElement, options: EmeOptions, onError: (err: Error) => void): () => void;
62
+ declare function setupEme(videoElement: MediaElement, options: EmeOptions, onError: (err: Error) => void): () => void;
63
63
 
64
64
  /** Create a DRM plugin for vide. */
65
65
  declare function drm(options: DrmPluginOptions): Plugin;
@@ -1 +1 @@
1
- import'../chunk-DWXOYV4E.mjs';function l(e){let r={licenseUrl:e.licenseUrl,serverCertificateUrl:e.certificateUrl};if(e.headers){let t=e.headers;r.licenseXhrSetup=n=>{for(let[i,s]of Object.entries(t))n.setRequestHeader(i,s);};}return {emeEnabled:true,drmSystems:{"com.apple.fps.1_0":r}}}function g(e){let r={serverURL:e.licenseUrl,serverCertificateURL:e.certificateUrl};return e.headers&&(r.httpRequestHeaders=e.headers),{streaming:{protection:{data:{"com.apple.fps.1_0":r}}}}}function h(e){let r={licenseUrl:e.licenseUrl};if(e.headers){let t=e.headers;r.licenseXhrSetup=n=>{for(let[i,s]of Object.entries(t))n.setRequestHeader(i,s);};}return {emeEnabled:true,drmSystems:{"com.widevine.alpha":r}}}function v(e){let r={serverURL:e.licenseUrl};return e.headers&&(r.httpRequestHeaders=e.headers),{streaming:{protection:{data:{"com.widevine.alpha":r}}}}}function u(e){return e.keySystem==="com.widevine.alpha"&&e.widevine?h(e.widevine):e.keySystem==="com.apple.fps.1_0"&&e.fairplay?l(e.fairplay):{}}function y(e){return e.keySystem==="com.widevine.alpha"&&e.widevine?v(e.widevine):e.keySystem==="com.apple.fps.1_0"&&e.fairplay?g(e.fairplay):{}}var K="com.apple.fps.1_0",P=[{initDataTypes:["cenc"],videoCapabilities:[{contentType:'video/mp4;codecs="avc1.42E01E"'}]}],U=[{initDataTypes:["sinf"],videoCapabilities:[{contentType:'video/mp4;codecs="avc1.42E01E"'}]}];async function m(e){for(let r of e)try{let t=r===K?U:P;return await navigator.requestMediaKeySystemAccess(r,t),r}catch{}return null}var R="com.apple.fps.1_0",D=[{initDataTypes:["cenc"],videoCapabilities:[{contentType:'video/mp4;codecs="avc1.42E01E"'}]}],M=[{initDataTypes:["sinf"],videoCapabilities:[{contentType:'video/mp4;codecs="avc1.42E01E"'}]}];function p(e,r,t){let n=false,i=[],s=null,a=o=>{if(n||e.mediaKeys&&e.mediaKeys!==s||!s||!o.initData)return;let f=s.createSession("temporary");i.push(f),f.generateRequest(o.initDataType,o.initData).then(()=>{},c=>{n||t(c instanceof Error?c:new Error("generateRequest failed"));}),f.addEventListener("message",c=>{n||L(c,f,r,t,()=>n);}),f.addEventListener("keystatuseschange",()=>{if(!n)for(let[,c]of f.keyStatuses)(c==="expired"||c==="internal-error")&&t(new Error(`Key status: ${c}`));});},d=r.keySystem===R?M:D;return navigator.requestMediaKeySystemAccess(r.keySystem,d).then(o=>{if(!n)return o.createMediaKeys()}).then(o=>{if(!(n||!o)&&(s=o,r.keySystem===R&&r.certificateUrl))return k(r.certificateUrl,r.headers,t,()=>n).then(f=>{if(!(n||!f))return s?.setServerCertificate(f.buffer)})}).then(()=>{n||!s||(e.mediaKeys||e.setMediaKeys(s),e.addEventListener("encrypted",a));}).catch(o=>{n||t(o instanceof Error?o:new Error("EME setup failed"));}),()=>{n=true,e.removeEventListener("encrypted",a);for(let o of i)o.close().catch(()=>{});}}async function k(e,r,t,n){try{let i=await fetch(e,r?{headers:r}:{});if(!i.ok)throw new Error(`Certificate fetch failed: ${i.status} ${i.statusText}`);let s=await i.arrayBuffer();return n()?null:new Uint8Array(s)}catch(i){return n()||t(i instanceof Error?i:new Error("Certificate fetch failed")),null}}function L(e,r,t,n,i){let s=new Uint8Array(e.message);Promise.resolve(t.prepareLicenseRequest?t.prepareLicenseRequest(s):s).then(a=>{if(!i())return fetch(t.licenseUrl,{method:"POST",body:a.buffer,...t.headers?{headers:t.headers}:{}})}).then(a=>{if(!(i()||!a)){if(!a.ok)throw new Error(`License request failed: ${a.status} ${a.statusText}`);return a.arrayBuffer()}}).then(a=>{if(i()||!a)return;let d=new Uint8Array(a);return Promise.resolve(t.processLicenseResponse?t.processLicenseResponse(d):d)}).then(a=>{if(!(i()||!a))return r.update(a.buffer)}).catch(a=>{i()||n(a instanceof Error?a:new Error("License exchange failed"));});}function B(e){return {name:"drm",setup(r){let t=false,n,i=[];return e.widevine&&i.push("com.widevine.alpha"),e.fairplay&&i.push("com.apple.fps.1_0"),i.length===0?(console.warn("[vide/drm] No DRM configuration provided"),()=>{}):(m(i).then(s=>{if(t)return;if(!s){r.emit("error",{code:4e3,message:"No supported DRM key system found",source:"drm"});return}let a={keySystem:s,widevine:e.widevine,fairplay:e.fairplay},d={keySystem:s,hlsConfig:u(a),dashConfig:y(a)};r.setPluginData("drm",d);let o=s!=="com.widevine.alpha",f=o?e.fairplay:e.widevine;if(!f)return;let c={keySystem:s,licenseUrl:f.licenseUrl,headers:f.headers,prepareLicenseRequest:f.prepareLicenseRequest,processLicenseResponse:f.processLicenseResponse};o&&(c.certificateUrl=f.certificateUrl),n=p(r.el,c,C=>{t||r.emit("error",{code:4002,message:C.message,source:"drm"});});}).catch(s=>{t||r.emit("error",{code:4001,message:s instanceof Error?`DRM detection failed: ${s.message}`:"DRM detection failed",source:"drm"});}),()=>{t=true,n?.();})}}}export{y as dashDrmConfig,m as detectKeySystem,B as drm,u as hlsDrmConfig,p as setupEme};
1
+ import'../chunk-DWXOYV4E.mjs';function l(e){let r={licenseUrl:e.licenseUrl,serverCertificateUrl:e.certificateUrl};if(e.headers){let t=e.headers;r.licenseXhrSetup=n=>{for(let[i,s]of Object.entries(t))n.setRequestHeader(i,s);};}return {emeEnabled:true,drmSystems:{"com.apple.fps.1_0":r}}}function g(e){let r={serverURL:e.licenseUrl,serverCertificateURL:e.certificateUrl};return e.headers&&(r.httpRequestHeaders=e.headers),{streaming:{protection:{data:{"com.apple.fps.1_0":r}}}}}function h(e){let r={licenseUrl:e.licenseUrl};if(e.headers){let t=e.headers;r.licenseXhrSetup=n=>{for(let[i,s]of Object.entries(t))n.setRequestHeader(i,s);};}return {emeEnabled:true,drmSystems:{"com.widevine.alpha":r}}}function v(e){let r={serverURL:e.licenseUrl};return e.headers&&(r.httpRequestHeaders=e.headers),{streaming:{protection:{data:{"com.widevine.alpha":r}}}}}function u(e){return e.keySystem==="com.widevine.alpha"&&e.widevine?h(e.widevine):e.keySystem==="com.apple.fps.1_0"&&e.fairplay?l(e.fairplay):{}}function y(e){return e.keySystem==="com.widevine.alpha"&&e.widevine?v(e.widevine):e.keySystem==="com.apple.fps.1_0"&&e.fairplay?g(e.fairplay):{}}var K="com.apple.fps.1_0",M=[{initDataTypes:["cenc"],videoCapabilities:[{contentType:'video/mp4;codecs="avc1.42E01E"'}]}],P=[{initDataTypes:["sinf"],videoCapabilities:[{contentType:'video/mp4;codecs="avc1.42E01E"'}]}];async function m(e){for(let r of e)try{let t=r===K?P:M;return await navigator.requestMediaKeySystemAccess(r,t),r}catch{}return null}var R="com.apple.fps.1_0",U=[{initDataTypes:["cenc"],videoCapabilities:[{contentType:'video/mp4;codecs="avc1.42E01E"'}]}],D=[{initDataTypes:["sinf"],videoCapabilities:[{contentType:'video/mp4;codecs="avc1.42E01E"'}]}];function p(e,r,t){let n=false,i=[],s=null,a=o=>{if(n||e.mediaKeys&&e.mediaKeys!==s||!s||!o.initData)return;let f=s.createSession("temporary");i.push(f),f.generateRequest(o.initDataType,o.initData).then(()=>{},c=>{n||t(c instanceof Error?c:new Error("generateRequest failed"));}),f.addEventListener("message",c=>{n||k(c,f,r,t,()=>n);}),f.addEventListener("keystatuseschange",()=>{if(!n)for(let[,c]of f.keyStatuses)(c==="expired"||c==="internal-error")&&t(new Error(`Key status: ${c}`));});},d=r.keySystem===R?D:U;return navigator.requestMediaKeySystemAccess(r.keySystem,d).then(o=>{if(!n)return o.createMediaKeys()}).then(o=>{if(!(n||!o)&&(s=o,r.keySystem===R&&r.certificateUrl))return L(r.certificateUrl,r.headers,t,()=>n).then(f=>{if(!(n||!f))return s?.setServerCertificate(f.buffer)})}).then(()=>{n||!s||(e.mediaKeys||e.setMediaKeys(s),e.addEventListener("encrypted",a));}).catch(o=>{n||t(o instanceof Error?o:new Error("EME setup failed"));}),()=>{n=true,e.removeEventListener("encrypted",a);for(let o of i)o.close().catch(()=>{});}}async function L(e,r,t,n){try{let i=await fetch(e,r?{headers:r}:{});if(!i.ok)throw new Error(`Certificate fetch failed: ${i.status} ${i.statusText}`);let s=await i.arrayBuffer();return n()?null:new Uint8Array(s)}catch(i){return n()||t(i instanceof Error?i:new Error("Certificate fetch failed")),null}}function k(e,r,t,n,i){let s=new Uint8Array(e.message);Promise.resolve(t.prepareLicenseRequest?t.prepareLicenseRequest(s):s).then(a=>{if(!i())return fetch(t.licenseUrl,{method:"POST",body:a.buffer,...t.headers?{headers:t.headers}:{}})}).then(a=>{if(!(i()||!a)){if(!a.ok)throw new Error(`License request failed: ${a.status} ${a.statusText}`);return a.arrayBuffer()}}).then(a=>{if(i()||!a)return;let d=new Uint8Array(a);return Promise.resolve(t.processLicenseResponse?t.processLicenseResponse(d):d)}).then(a=>{if(!(i()||!a))return r.update(a.buffer)}).catch(a=>{i()||n(a instanceof Error?a:new Error("License exchange failed"));});}function B(e){return {name:"drm",setup(r){let t=false,n,i=[];return e.widevine&&i.push("com.widevine.alpha"),e.fairplay&&i.push("com.apple.fps.1_0"),i.length===0?(console.warn("[vide/drm] No DRM configuration provided"),()=>{}):(m(i).then(s=>{if(t)return;if(!s){r.emit("error",{code:4e3,message:"No supported DRM key system found",source:"drm"});return}let a={keySystem:s,widevine:e.widevine,fairplay:e.fairplay},d={keySystem:s,hlsConfig:u(a),dashConfig:y(a)};r.setPluginData("drm",d);let o=s!=="com.widevine.alpha",f=o?e.fairplay:e.widevine;if(!f)return;let c={keySystem:s,licenseUrl:f.licenseUrl,headers:f.headers,prepareLicenseRequest:f.prepareLicenseRequest,processLicenseResponse:f.processLicenseResponse};o&&(c.certificateUrl=f.certificateUrl),n=p(r.el,c,C=>{t||r.emit("error",{code:4002,message:C.message,source:"drm"});});}).catch(s=>{t||r.emit("error",{code:4001,message:s instanceof Error?`DRM detection failed: ${s.message}`:"DRM detection failed",source:"drm"});}),()=>{t=true,n?.();})}}}export{y as dashDrmConfig,m as detectKeySystem,B as drm,u as hlsDrmConfig,p as setupEme};
@@ -1,8 +1,10 @@
1
- import { e as Plugin } from '../types-Cine0xi3.js';
1
+ import { R as RecoveryConfig, e as Plugin } from '../types-vxIcXgJz.js';
2
2
 
3
3
  interface HlsPluginOptions {
4
4
  /** Configuration passed directly to the hls.js constructor. */
5
5
  hlsConfig?: Record<string, unknown> | undefined;
6
+ /** Error recovery settings. `false` to disable. Defaults to enabled (3 retries, 3s delay, 2x backoff). */
7
+ recovery?: Partial<RecoveryConfig> | false | undefined;
6
8
  }
7
9
 
8
10
  /** Create an HLS streaming plugin for vide. */
@@ -1,2 +1,2 @@
1
- import'../chunk-DWXOYV4E.mjs';var c=["application/vnd.apple.mpegurl","application/x-mpegurl"];function L(e){if(e.startsWith("data:")){let t=e.indexOf(";");return t===-1?false:c.includes(e.slice(5,t).toLowerCase())}if(e.startsWith("blob:"))return e.includes(".m3u8");try{return new URL(e,"https://placeholder.invalid").pathname.endsWith(".m3u8")}catch{return e.includes(".m3u8")}}function P(e){return c.includes(e.toLowerCase())}function R(e={}){return {name:"hls",setup(t){let o=null,l=false,u={canHandle(s,n){return n&&P(n)?true:L(s)},load(s,n){this.unload(n),p(s,n);},unload(s){o&&(o.destroy(),o=null);}};function p(s,n){import('hls.js').then(i=>{if(l)return;let a=i.default;if(!a.isSupported()){if(n.canPlayType("application/vnd.apple.mpegurl")){n.src=s;return}t.emit("error",{code:2e3,message:"HLS is not supported in this browser",source:"hls"});return}let f=t.getPluginData("drm"),g={...e.hlsConfig??{},...f?.hlsConfig??{}},r=new a(g);o=r,t.setPluginData("hls",r),r.on(a.Events.ERROR,(E,d)=>{d.fatal&&t.emit("error",{code:2002,message:`HLS fatal error: ${d.type} - ${d.details}`,source:"hls"});}),r.attachMedia(n),r.loadSource(s);}).catch(i=>{l||t.emit("error",{code:2001,message:i instanceof Error?`Failed to load hls.js: ${i.message}`:"Failed to load hls.js",source:"hls"});});}return t.registerSourceHandler(u),()=>{l=true,u.unload(t.el);}}}}
2
- export{R as hls};
1
+ import {a}from'../chunk-H3OXPFD3.mjs';import'../chunk-DWXOYV4E.mjs';var E=["application/vnd.apple.mpegurl","application/x-mpegurl"],T={maxRetries:3,retryDelay:3e3,backoffMultiplier:2};function _(r){if(r.startsWith("data:")){let e=r.indexOf(";");return e===-1?false:E.includes(r.slice(5,e).toLowerCase())}if(r.startsWith("blob:"))return r.includes(".m3u8");try{return new URL(r,"https://placeholder.invalid").pathname.endsWith(".m3u8")}catch{return r.includes(".m3u8")}}function C(r){return E.includes(r.toLowerCase())}function w(r={}){return {name:"hls",setup(e){let d=null,u=false,f=r.recovery===false?false:{...T,...r.recovery??{}},o=0,m=null;function g(){m!==null&&(clearTimeout(m),m=null);}function L(s,i){if(f===false||u||o>=f.maxRetries)return false;o++;let l=f.retryDelay*f.backoffMultiplier**(o-1);return g(),m=setTimeout(()=>{u||(i==="networkError"?s.startLoad(-1):s.recoverMediaError());},l),true}let v={canHandle(s,i){return i&&C(i)?true:_(s)},load(s,i){this.unload(i),b(s,i);},unload(s){g(),o=0,d&&(d.destroy(),d=null);}};function b(s,i){import('hls.js').then(l=>{if(u)return;let a$1=l.default;if(!a$1.isSupported()){if(i.canPlayType("application/vnd.apple.mpegurl")){i.src=s;return}e.emit("error",{code:2e3,message:"HLS is not supported in this browser",source:"hls"});return}let H=e.getPluginData("drm"),R={...r.hlsConfig??{},...H?.hlsConfig??{}},n=new a$1(R);d=n,e.setPluginData("hls",n),n.on(a$1.Events.ERROR,(h,t)=>{if(!t.fatal)return;let c=L(n,t.type);e.emit("error",{code:2002,message:`HLS fatal error: ${t.type} - ${t.details}`,source:"hls",recoverable:c,retryCount:c?o:void 0});}),n.on(a$1.Events.FRAG_LOADED,()=>{o>0&&(o=0,g());}),n.on(a$1.Events.MANIFEST_PARSED,()=>{let h=n.levels.map((t,c)=>({id:c,width:t.width,height:t.height,bitrate:t.bitrate,label:a(t.height)}));e.setPluginData("qualities",h),e.setPluginData("qualitySetter",t=>{n.currentLevel=t,e.setPluginData("autoQuality",t===-1);});}),n.on(a$1.Events.LEVEL_SWITCHED,(h,t)=>{let p=e.qualities[t.level];p&&(e.setPluginData("currentQuality",p),e.setPluginData("autoQuality",n.autoLevelEnabled));}),n.attachMedia(i),n.loadSource(s);}).catch(l=>{u||e.emit("error",{code:2001,message:l instanceof Error?`Failed to load hls.js: ${l.message}`:"Failed to load hls.js",source:"hls"});});}return e.registerSourceHandler(v),()=>{u=true,g(),v.unload(e.el);}}}}
2
+ export{w as hls};
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- import { P as Player } from './types-Cine0xi3.js';
2
- export { A as AdQuartile, E as EventBus, a as EventHandler, b as PlayerEvent, c as PlayerEventMap, d as PlayerState, e as Plugin, S as SourceHandler } from './types-Cine0xi3.js';
1
+ import { M as MediaElement, P as Player } from './types-vxIcXgJz.js';
2
+ export { A as AdQuartile, E as EventBus, a as EventHandler, b as PlayerEvent, c as PlayerEventMap, d as PlayerState, e as Plugin, Q as QualityLevel, R as RecoveryConfig, S as SeekableRange, f as SourceHandler, V as VideCue, g as VideTextTrack } from './types-vxIcXgJz.js';
3
3
 
4
- /** Create a vide player instance wrapping the given video element. */
5
- declare function createPlayer(el: HTMLVideoElement): Player;
4
+ /** Create a vide player instance wrapping the given media element. */
5
+ declare function createPlayer(el: MediaElement): Player;
6
6
 
7
7
  /** Core: HTMLMediaElement error. */
8
8
  declare const ERR_MEDIA = 1000;
@@ -25,4 +25,4 @@ declare const ERR_DRM_LICENSE = 4002;
25
25
  /** DRM: certificate request failed. */
26
26
  declare const ERR_DRM_CERTIFICATE = 4003;
27
27
 
28
- export { ERR_DASH_IMPORT, ERR_DASH_PLAYBACK, ERR_DRM_CERTIFICATE, ERR_DRM_DETECTION, ERR_DRM_LICENSE, ERR_DRM_UNSUPPORTED, ERR_HLS_FATAL, ERR_HLS_IMPORT, ERR_HLS_UNSUPPORTED, ERR_MEDIA, Player, createPlayer };
28
+ export { ERR_DASH_IMPORT, ERR_DASH_PLAYBACK, ERR_DRM_CERTIFICATE, ERR_DRM_DETECTION, ERR_DRM_LICENSE, ERR_DRM_UNSUPPORTED, ERR_HLS_FATAL, ERR_HLS_IMPORT, ERR_HLS_UNSUPPORTED, ERR_MEDIA, MediaElement, Player, createPlayer };
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- export{e as ERR_DASH_IMPORT,f as ERR_DASH_PLAYBACK,j as ERR_DRM_CERTIFICATE,h as ERR_DRM_DETECTION,i as ERR_DRM_LICENSE,g as ERR_DRM_UNSUPPORTED,d as ERR_HLS_FATAL,c as ERR_HLS_IMPORT,b as ERR_HLS_UNSUPPORTED,a as ERR_MEDIA}from'./chunk-DWXOYV4E.mjs';var x={idle:["loading","playing","error"],loading:["ready","playing","error"],ready:["playing","loading","ad:loading","error"],playing:["paused","buffering","loading","ad:loading","ended","error"],paused:["playing","loading","ad:loading","ended","error"],buffering:["playing","loading","error"],"ad:loading":["ad:playing","playing","error"],"ad:playing":["ad:paused","playing","error"],"ad:paused":["ad:playing","playing","error"],ended:["idle","loading","error"],error:["idle","loading"]};function B(e,r){return x[e].includes(r)}function F(e){return e.readyState>=3?e.paused?"ready":"playing":e.readyState>=1?"loading":"idle"}function $(e){let r=F(e),g=new Map,p=[],f=false,v=[],i=null,y=e.getAttribute("src")??"",E=false,m=new Map;function S(t){let n=g.get(t);return n||(n=new Set,g.set(t,n)),n}function d(t,n){let a=g.get(t);if(a)for(let l of a)try{l(n);}catch(c){console.error("[vide] Event handler error:",c);}}function o(t){if(t===r)return;if(!B(r,t)){console.warn(`[vide] Invalid transition: ${r} \u2192 ${t}`);return}let n=r;r=t,d("statechange",{from:n,to:t});}function s(){return r==="ad:loading"||r==="ad:playing"||r==="ad:paused"}function L(){!s()&&e.paused&&o("loading");}function P(){r==="loading"&&o("ready");}function R(){s()||o("playing"),d("play",void 0);}function b(){s()||o("paused"),d("pause",void 0);}function k(){r==="playing"&&o("buffering");}function H(){(r==="buffering"||r==="ready")&&o("playing");}function _(){s()||o("ended"),d("ended",void 0);}function w(){d("timeupdate",{currentTime:e.currentTime,duration:e.duration});}function T(){let t=e.error;s()||o("error"),d("error",{code:t?.code??1e3,message:t?.message??"Unknown error",source:"core"});}e.addEventListener("loadstart",L),e.addEventListener("canplay",P),e.addEventListener("play",R),e.addEventListener("pause",b),e.addEventListener("waiting",k),e.addEventListener("playing",H),e.addEventListener("ended",_),e.addEventListener("timeupdate",w),e.addEventListener("error",T);let M=new Set(["statechange","play","pause","ended","timeupdate","error","ad:start","ad:end","ad:skip","ad:click","ad:error","ad:impression","ad:loaded","ad:quartile","ad:mute","ad:unmute","ad:volumeChange","ad:fullscreen","ad:breakStart","ad:breakEnd","destroy"]);function A(){e.removeEventListener("loadstart",L),e.removeEventListener("canplay",P),e.removeEventListener("play",R),e.removeEventListener("pause",b),e.removeEventListener("waiting",k),e.removeEventListener("playing",H),e.removeEventListener("ended",_),e.removeEventListener("timeupdate",w),e.removeEventListener("error",T);}function O(){if(i||E)return;let t=e.querySelectorAll("source");for(let n of t){let a=n.getAttribute("src"),l=n.getAttribute("type")??void 0;if(a){for(let c of v)if(c.canHandle(a,l)){i=c,y=a,o("loading"),c.load(a,e);for(let D of t)D.remove();return}}}}let u={get el(){return e},get state(){return r},on(t,n){M.has(t)?S(t).add(n):e.addEventListener(t,n);},off(t,n){M.has(t)?S(t).delete(n):e.removeEventListener(t,n);},emit:d,once(t,n){let a=l=>{u.off(t,a),n(l);};u.on(t,a);},play(){return e.play()},pause(){e.pause();},get currentTime(){return e.currentTime},set currentTime(t){e.currentTime=t;},get duration(){return e.duration},set duration(t){},get volume(){return e.volume},set volume(t){e.volume=t;},get muted(){return e.muted},set muted(t){e.muted=t;},get playbackRate(){return e.playbackRate},set playbackRate(t){e.playbackRate=t;},get paused(){return e.paused},get ended(){return e.ended},get readyState(){return e.readyState},get buffered(){return e.buffered},get seekable(){return e.seekable},get seeking(){return e.seeking},get videoWidth(){return e.videoWidth},get videoHeight(){return e.videoHeight},get networkState(){return e.networkState},get loop(){return e.loop},set loop(t){e.loop=t;},get autoplay(){return e.autoplay},set autoplay(t){e.autoplay=t;},get poster(){return e.poster},set poster(t){e.poster=t;},get preload(){return e.preload},set preload(t){e.preload=t;},get defaultPlaybackRate(){return e.defaultPlaybackRate},set defaultPlaybackRate(t){e.defaultPlaybackRate=t;},get defaultMuted(){return e.defaultMuted},set defaultMuted(t){e.defaultMuted=t;},get crossOrigin(){return e.crossOrigin},set crossOrigin(t){e.crossOrigin=t;},get controls(){return e.controls},set controls(t){e.controls=t;},get src(){return y},set src(t){if(i&&(i.unload(e),i=null),E=true,y=t,!t){e.removeAttribute("src");return}for(let n of v)if(n.canHandle(t)){i=n,o("loading"),n.load(t,e);return}e.src=t;},registerSourceHandler(t){if(f){console.warn("[vide] Cannot register source handler after destroy");return}v.push(t),!E&&!i&&O();},addEventListener(t,n,a){e.addEventListener(t,n,a);},removeEventListener(t,n,a){e.removeEventListener(t,n,a);},use(t){if(f){console.warn("[vide] Cannot use plugin after destroy");return}let n=t.setup(u);n&&p.push(n);},setPluginData(t,n){m.set(t,n);},getPluginData(t){return m.get(t)},destroy(){if(!f){f=true,i&&(i.unload(e),i=null);for(let t of p)try{t();}catch(n){console.error("[vide] Plugin cleanup error:",n);}p.length=0,d("destroy",void 0),A(),g.clear(),m.clear();}}};return u._setState=o,u}export{$ as createPlayer};
1
+ export{e as ERR_DASH_IMPORT,f as ERR_DASH_PLAYBACK,j as ERR_DRM_CERTIFICATE,h as ERR_DRM_DETECTION,i as ERR_DRM_LICENSE,g as ERR_DRM_UNSUPPORTED,d as ERR_HLS_FATAL,c as ERR_HLS_IMPORT,b as ERR_HLS_UNSUPPORTED,a as ERR_MEDIA}from'./chunk-DWXOYV4E.mjs';var ne={idle:["loading","playing","error"],loading:["ready","playing","error"],ready:["playing","loading","ad:loading","error"],playing:["paused","buffering","loading","ad:loading","ended","error"],paused:["playing","loading","ad:loading","ended","error"],buffering:["playing","loading","error"],"ad:loading":["ad:playing","playing","error"],"ad:playing":["ad:paused","playing","error"],"ad:paused":["ad:playing","playing","error"],ended:["idle","loading","error"],error:["idle","loading"]};function re(t,a){return ne[t].includes(a)}function ae(t){return t.readyState>=3?t.paused?"ready":"playing":t.readyState>=1?"loading":"idle"}function ie(t){let a=ae(t),g=t instanceof HTMLAudioElement,p=new Map,E=[],l=false,k=[],d=null,m=t.getAttribute("src")??"",L=false,o=new Map,h=t.duration===Number.POSITIVE_INFINITY,b=null;function x(e){let n=p.get(e);return n||(n=new Set,p.set(e,n)),n}function i(e,n){let r=p.get(e);if(r)for(let u of r)try{u(n);}catch(y){console.error("[vide] Event handler error:",y);}}function s(e){if(e===a)return;if(!re(a,e)){console.warn(`[vide] Invalid transition: ${a} \u2192 ${e}`);return}let n=a;a=e,i("statechange",{from:n,to:e});}function v(){return a==="ad:loading"||a==="ad:playing"||a==="ad:paused"}function S(){!v()&&t.paused&&s("loading");}function R(){a==="loading"&&s("ready");}function P(){v()||s("playing"),i("play",void 0);}function H(){v()||s("paused"),i("pause",void 0);}function w(){a==="playing"&&s("buffering");}function C(){(a==="buffering"||a==="ready")&&s("playing");}function I(){v()||s("ended"),i("ended",void 0);}function M(){i("timeupdate",{currentTime:t.currentTime,duration:t.duration});}function _(){let e=t.error;v()||s("error"),i("error",{code:e?.code??1e3,message:e?.message??"Unknown error",source:"core"});}function A(){let e=t.duration===Number.POSITIVE_INFINITY;e!==h&&(h=e,i("livestatechange",{isLive:e}));}t.addEventListener("durationchange",A),t.addEventListener("loadstart",S),t.addEventListener("canplay",R),t.addEventListener("play",P),t.addEventListener("pause",H),t.addEventListener("waiting",w),t.addEventListener("playing",C),t.addEventListener("ended",I),t.addEventListener("timeupdate",M),t.addEventListener("error",_);function T(e,n){return {id:n,label:e.label,language:e.language,kind:e.kind,active:e.mode==="showing"}}function V(e){if(!e)return [];let n=[];for(let r=0;r<e.length;r++){let u=e[r];n.push({startTime:u.startTime,endTime:u.endTime,text:u.text??""});}return n}let c=new Map;function Q(e){if(c.has(e))return;let n=()=>{e.mode==="showing"&&i("cuechange",{cues:V(e.activeCues)});};c.set(e,n),e.addEventListener("cuechange",n);}function j(e){let n=c.get(e);n&&(e.removeEventListener("cuechange",n),c.delete(e));}function O(){let e=[];for(let n=0;n<t.textTracks.length;n++)e.push(T(t.textTracks[n],n));i("texttracksavailable",{tracks:e});}function D(){for(let e=0;e<t.textTracks.length;e++)Q(t.textTracks[e]);O();}function q(e){e.track&&j(e.track),O();}let N=typeof t.textTracks.addEventListener=="function";if(N){t.textTracks.addEventListener("addtrack",D),t.textTracks.addEventListener("removetrack",q);for(let e=0;e<t.textTracks.length;e++)Q(t.textTracks[e]);}let U=new Set(["statechange","play","pause","ended","timeupdate","livestatechange","error","ad:start","ad:end","ad:skip","ad:click","ad:error","ad:impression","ad:loaded","ad:quartile","ad:mute","ad:unmute","ad:volumeChange","ad:fullscreen","ad:breakStart","ad:breakEnd","qualitiesavailable","qualitychange","texttrackchange","texttracksavailable","cuechange","destroy"]);function K(){if(t.removeEventListener("durationchange",A),t.removeEventListener("loadstart",S),t.removeEventListener("canplay",R),t.removeEventListener("play",P),t.removeEventListener("pause",H),t.removeEventListener("waiting",w),t.removeEventListener("playing",C),t.removeEventListener("ended",I),t.removeEventListener("timeupdate",M),t.removeEventListener("error",_),N){t.textTracks.removeEventListener("addtrack",D),t.textTracks.removeEventListener("removetrack",q);for(let[e,n]of c)e.removeEventListener("cuechange",n);c.clear();}}function Y(){if(d||L)return;let e=t.querySelectorAll("source");for(let n of e){let r=n.getAttribute("src"),u=n.getAttribute("type")??void 0;if(r){for(let y of k)if(y.canHandle(r,u)){d=y,m=r,s("loading"),y.load(r,t);for(let W of e)W.remove();return}}}}let f={get el(){return t},get state(){return a},on(e,n){U.has(e)?x(e).add(n):t.addEventListener(e,n);},off(e,n){U.has(e)?x(e).delete(n):t.removeEventListener(e,n);},emit:i,once(e,n){let r=u=>{f.off(e,r),n(u);};f.on(e,r);},play(){return t.play()},pause(){t.pause();},get currentTime(){return t.currentTime},set currentTime(e){t.currentTime=e;},get duration(){return t.duration},set duration(e){},get volume(){return t.volume},set volume(e){t.volume=e;},get muted(){return t.muted},set muted(e){t.muted=e;},get playbackRate(){return t.playbackRate},set playbackRate(e){t.playbackRate=e;},get paused(){return t.paused},get ended(){return t.ended},get readyState(){return t.readyState},get buffered(){return t.buffered},get seekable(){return t.seekable},get seeking(){return t.seeking},get isLive(){return l?false:t.duration===Number.POSITIVE_INFINITY},get seekableRange(){return l||t.seekable.length===0?null:{start:t.seekable.start(0),end:t.seekable.end(0)}},get qualities(){return o.get("qualities")??[]},get currentQuality(){return o.get("currentQuality")??null},get isAutoQuality(){return o.get("autoQuality")??true},get isAudio(){return g},setQuality(e){let n=o.get("qualitySetter");n&&n(e);},get textTracks(){return t.textTracks},getTextTracks(){let e=[];for(let n=0;n<t.textTracks.length;n++)e.push(T(t.textTracks[n],n));return e},getActiveTextTrack(){for(let e=0;e<t.textTracks.length;e++)if(t.textTracks[e].mode==="showing")return T(t.textTracks[e],e);return null},get activeCues(){for(let e=0;e<t.textTracks.length;e++)if(t.textTracks[e].mode==="showing")return V(t.textTracks[e].activeCues);return []},setTextTrack(e){for(let r=0;r<t.textTracks.length;r++)t.textTracks[r].mode=r===e?"showing":"disabled";let n=e>=0&&e<t.textTracks.length?T(t.textTracks[e],e):null;i("texttrackchange",{track:n});},addTextTrack(e){let n=document.createElement("track");n.src=e.src,n.label=e.label,n.srclang=e.language,n.kind=e.kind??"subtitles",e.default&&(n.default=true),t.appendChild(n);},get videoWidth(){return g?0:t.videoWidth},get videoHeight(){return g?0:t.videoHeight},get networkState(){return t.networkState},get loop(){return t.loop},set loop(e){t.loop=e;},get autoplay(){return t.autoplay},set autoplay(e){t.autoplay=e;},get poster(){return g?"":t.poster},set poster(e){g||(t.poster=e);},get preload(){return t.preload},set preload(e){t.preload=e;},get defaultPlaybackRate(){return t.defaultPlaybackRate},set defaultPlaybackRate(e){t.defaultPlaybackRate=e;},get defaultMuted(){return t.defaultMuted},set defaultMuted(e){t.defaultMuted=e;},get crossOrigin(){return t.crossOrigin},set crossOrigin(e){t.crossOrigin=e;},get controls(){return t.controls},set controls(e){t.controls=e;},get src(){return m},set src(e){if(d&&(d.unload(t),d=null),o.delete("qualities"),o.delete("currentQuality"),o.delete("autoQuality"),o.delete("qualitySetter"),b=null,L=true,m=e,!e){t.removeAttribute("src");return}for(let n of k)if(n.canHandle(e)){d=n,s("loading"),n.load(e,t);return}t.src=e;},registerSourceHandler(e){if(l){console.warn("[vide] Cannot register source handler after destroy");return}k.push(e),!L&&!d&&Y();},addEventListener(e,n,r){t.addEventListener(e,n,r);},removeEventListener(e,n,r){t.removeEventListener(e,n,r);},use(e){if(l){console.warn("[vide] Cannot use plugin after destroy");return}let n=e.setup(f);n&&E.push(n);},setPluginData(e,n){if(o.set(e,n),e==="qualities")i("qualitiesavailable",{qualities:n});else if(e==="currentQuality"){let r=n;i("qualitychange",{from:b,to:r}),b=r;}},getPluginData(e){return o.get(e)},destroy(){if(!l){l=true,d&&(d.unload(t),d=null);for(let e of E)try{e();}catch(n){console.error("[vide] Plugin cleanup error:",n);}E.length=0,i("destroy",void 0),K(),p.clear(),o.clear();}}};return f._setState=s,f}export{ie as createPlayer};
@@ -1,5 +1,5 @@
1
- import { b as AdPlugin } from '../types-8aPf_wxJ.js';
2
- import '../types-Cine0xi3.js';
1
+ import { b as AdPlugin } from '../types-CAJmacV6.js';
2
+ import '../types-vxIcXgJz.js';
3
3
 
4
4
  interface OmidPluginOptions {
5
5
  /** Partner identification for the OM SDK. */
@@ -1,2 +1,2 @@
1
- function E(e,t,r){let n=true;t.adEvents.loaded(t.vastProperties),t.adEvents.impressionOccurred(),t.mediaEvents.start(r,e.el.muted?0:e.el.volume);function o(i){n&&(i.quartile==="firstQuartile"?t.mediaEvents.firstQuartile():i.quartile==="midpoint"?t.mediaEvents.midpoint():i.quartile==="thirdQuartile"&&t.mediaEvents.thirdQuartile());}function s(i){n&&(i.to==="ad:paused"?t.mediaEvents.pause():i.to==="ad:playing"&&i.from==="ad:paused"&&t.mediaEvents.resume());}function d(){n&&(n=false,t.mediaEvents.complete(),t.finish());}function a(){n&&(n=false,t.mediaEvents.skipped(),t.finish());}function u(){n&&(n=false,t.error("Ad playback error"),t.finish());}function c(){n&&(n=false,t.finish());}function l(i){n&&t.mediaEvents.volumeChange(i.volume);}function p(i){if(!n)return;let v=i.fullscreen?"fullscreen":"normal";t.mediaEvents.playerStateChange(v);}return e.on("ad:quartile",o),e.on("statechange",s),e.on("ad:end",d),e.on("ad:skip",a),e.on("ad:error",u),e.on("destroy",c),e.on("ad:volumeChange",l),e.on("ad:fullscreen",p),()=>{n=false,e.off("ad:quartile",o),e.off("statechange",s),e.off("ad:end",d),e.off("ad:skip",a),e.off("ad:error",u),e.off("destroy",c),e.off("ad:volumeChange",l),e.off("ad:fullscreen",p);}}function w(e,t){return new Promise((r,n)=>{let o=document.createElement("script");o.src=e,o.async=true;let s=setTimeout(()=>{o.remove(),n(new Error(`OM SDK script load timeout: ${e}`));},t);o.onload=()=>{clearTimeout(s),r();},o.onerror=()=>{clearTimeout(s),o.remove(),n(new Error(`OM SDK script load failed: ${e}`));},document.head.appendChild(o);})}function b(){let t=globalThis.OmidSessionClient;if(!t)return null;let r=t.default??t;return typeof r.AdSession!="function"?null:r}async function h(e,t,r){let n=Date.now();if(await w(e,r),t){let s=Date.now()-n,d=Math.max(r-s,1e3);await w(t,d);}let o=b();if(!o)throw new Error("OM SDK namespace not found after script load");return o}function P(e,t,r){let n=new e.Partner(r.partner.name,r.partner.version),o=r.verifications.filter(m=>m.resourceUrl).map(m=>new e.VerificationScriptResource(m.resourceUrl,m.vendor,m.parameters,"full")),s=new e.Context(n,o,r.contentUrl,r.customReferenceData);s.setVideoElement(t);let d=t.parentElement;d&&s.setSlotElement(d),s.setServiceWindow(window);let a=new e.AdSession(s);if(a.setCreativeType("video"),a.setImpressionType("beginToRender"),!a.isSupported())throw new Error("OM SDK session not supported in this environment");let u=false,c=false,l=null;a.registerSessionObserver(m=>{m.type==="sessionStart"&&(u=true,l&&(l(true),l=null));}),a.start();let p=new e.AdEvents(a),i=new e.MediaEvents(a),v=r.position??"standalone",f=r.skipOffset!==void 0,O=r.skipOffset??-1,S=r.isAutoPlay??true,y=new e.VastProperties(f,O,S,v);return {get adEvents(){return p},get mediaEvents(){return i},get vastProperties(){return y},get started(){return u},waitForStart(m){return u?Promise.resolve(true):new Promise(g=>{l=g,setTimeout(()=>{u||(l=null,g(false));},m);})},finish(){c||(c=true,a.finish());},error(m){a.error("video",m);}}}var A="https://pagead2.googlesyndication.com/omsdk/releases/live/omweb-v1.js";function D(e){return {name:"omid",setup(t,r){let n=r.verifications??[];if(n.length===0)return;let o=false,s=null,d=null,a=e.timeout??5e3,u=e.serviceScriptUrl??A,c={...e,serviceScriptUrl:u,verifications:n,skipOffset:r.creatives[0]?.linear?.skipOffset},l=h(u,e.sessionClientUrl,a).catch(i=>i);async function p(){if(!o)try{let i=await l;if(o)return;if(i instanceof Error)throw i;let f=P(i,t.el,c);if(d=f,o){f.finish();return}let O=await f.waitForStart(a);if(o){f.finish();return}if(!O){console.warn("[vide:omid] Session start timed out"),f.finish();return}let S=Number.isFinite(t.el.duration)?t.el.duration:0;s=E(t,f,S);}catch(i){if(o)return;console.warn("[vide:omid] Failed to initialize:",i instanceof Error?i.message:String(i)),t.emit("ad:error",{error:i instanceof Error?i:new Error(String(i)),source:"omid"});}}return p(),()=>{o=true,s&&(s(),s=null),d&&(d.finish(),d=null);}}}}
2
- export{D as omid};
1
+ function E(e,t,r){let n=true;t.adEvents.loaded(t.vastProperties),t.adEvents.impressionOccurred(),t.mediaEvents.start(r,e.el.muted?0:e.el.volume);function o(i){n&&(i.quartile==="firstQuartile"?t.mediaEvents.firstQuartile():i.quartile==="midpoint"?t.mediaEvents.midpoint():i.quartile==="thirdQuartile"&&t.mediaEvents.thirdQuartile());}function s(i){n&&(i.to==="ad:paused"?t.mediaEvents.pause():i.to==="ad:playing"&&i.from==="ad:paused"&&t.mediaEvents.resume());}function d(){n&&(n=false,t.mediaEvents.complete(),t.finish());}function a(){n&&(n=false,t.mediaEvents.skipped(),t.finish());}function u(){n&&(n=false,t.error("Ad playback error"),t.finish());}function c(){n&&(n=false,t.finish());}function l(i){n&&t.mediaEvents.volumeChange(i.volume);}function p(i){if(!n)return;let v=i.fullscreen?"fullscreen":"normal";t.mediaEvents.playerStateChange(v);}return e.on("ad:quartile",o),e.on("statechange",s),e.on("ad:end",d),e.on("ad:skip",a),e.on("ad:error",u),e.on("destroy",c),e.on("ad:volumeChange",l),e.on("ad:fullscreen",p),()=>{n=false,e.off("ad:quartile",o),e.off("statechange",s),e.off("ad:end",d),e.off("ad:skip",a),e.off("ad:error",u),e.off("destroy",c),e.off("ad:volumeChange",l),e.off("ad:fullscreen",p);}}function w(e,t){return new Promise((r,n)=>{let o=document.createElement("script");o.src=e,o.async=true;let s=setTimeout(()=>{o.remove(),n(new Error(`OM SDK script load timeout: ${e}`));},t);o.onload=()=>{clearTimeout(s),r();},o.onerror=()=>{clearTimeout(s),o.remove(),n(new Error(`OM SDK script load failed: ${e}`));},document.head.appendChild(o);})}function b(){let t=globalThis.OmidSessionClient;if(!t)return null;let r=t.default??t;return typeof r.AdSession!="function"?null:r}async function h(e,t,r){let n=Date.now();if(await w(e,r),t){let s=Date.now()-n,d=Math.max(r-s,1e3);await w(t,d);}let o=b();if(!o)throw new Error("OM SDK namespace not found after script load");return o}function P(e,t,r){let n=new e.Partner(r.partner.name,r.partner.version),o=r.verifications.filter(m=>m.resourceUrl).map(m=>new e.VerificationScriptResource(m.resourceUrl,m.vendor,m.parameters,"full")),s=new e.Context(n,o,r.contentUrl,r.customReferenceData);s.setVideoElement(t);let d=t.parentElement;d&&s.setSlotElement(d),s.setServiceWindow(window);let a=new e.AdSession(s);if(a.setCreativeType("video"),a.setImpressionType("beginToRender"),!a.isSupported())throw new Error("OM SDK session not supported in this environment");let u=false,c=false,l=null;a.registerSessionObserver(m=>{m.type==="sessionStart"&&(u=true,l&&(l(true),l=null));}),a.start();let p=new e.AdEvents(a),i=new e.MediaEvents(a),v=r.position??"standalone",f=r.skipOffset!==void 0,O=r.skipOffset??-1,S=r.isAutoPlay??true,y=new e.VastProperties(f,O,S,v);return {get adEvents(){return p},get mediaEvents(){return i},get vastProperties(){return y},get started(){return u},waitForStart(m){return u?Promise.resolve(true):new Promise(g=>{l=g,setTimeout(()=>{u||(l=null,g(false));},m);})},finish(){c||(c=true,a.finish());},error(m){a.error("video",m);}}}var A="https://pagead2.googlesyndication.com/omsdk/releases/live/omweb-v1.js";function j(e){return {name:"omid",setup(t,r){let n=r.verifications??[];if(n.length===0)return;let o=false,s=null,d=null,a=e.timeout??5e3,u=e.serviceScriptUrl??A,c={...e,serviceScriptUrl:u,verifications:n,skipOffset:r.creatives[0]?.linear?.skipOffset},l=h(u,e.sessionClientUrl,a).catch(i=>i);async function p(){if(!o)try{let i=await l;if(o)return;if(i instanceof Error)throw i;let f=P(i,t.el,c);if(d=f,o){f.finish();return}let O=await f.waitForStart(a);if(o){f.finish();return}if(!O){console.warn("[vide:omid] Session start timed out"),f.finish();return}let S=Number.isFinite(t.el.duration)?t.el.duration:0;s=E(t,f,S);}catch(i){if(o)return;console.warn("[vide:omid] Failed to initialize:",i instanceof Error?i.message:String(i)),t.emit("ad:error",{error:i instanceof Error?i:new Error(String(i)),source:"omid"});}}return p(),()=>{o=true,s&&(s(),s=null),d&&(d.finish(),d=null);}}}}
2
+ export{j as omid};
@@ -1,5 +1,5 @@
1
- import { b as AdPlugin } from '../types-8aPf_wxJ.js';
2
- import '../types-Cine0xi3.js';
1
+ import { b as AdPlugin } from '../types-CAJmacV6.js';
2
+ import '../types-vxIcXgJz.js';
3
3
 
4
4
  interface SimidPluginOptions {
5
5
  /** Container element to mount the SIMID iframe into. */
@@ -1,4 +1,4 @@
1
- import { e as Plugin } from '../types-Cine0xi3.js';
1
+ import { e as Plugin } from '../types-vxIcXgJz.js';
2
2
 
3
3
  /** Parsed ad break metadata from stream signals. */
4
4
  interface AdBreakMetadata {
@@ -1,4 +1,4 @@
1
- import { P as Player } from './types-Cine0xi3.js';
1
+ import { P as Player } from './types-vxIcXgJz.js';
2
2
 
3
3
  interface VastResponse {
4
4
  version: string;
@@ -1,3 +1,4 @@
1
+ type MediaElement = HTMLVideoElement | HTMLAudioElement;
1
2
  type PlayerState = "idle" | "loading" | "ready" | "playing" | "paused" | "buffering" | "ad:loading" | "ad:playing" | "ad:paused" | "ended" | "error";
2
3
  type AdQuartile = "start" | "firstQuartile" | "midpoint" | "thirdQuartile" | "complete";
3
4
  interface PlayerEventMap {
@@ -12,10 +13,15 @@ interface PlayerEventMap {
12
13
  currentTime: number;
13
14
  duration: number;
14
15
  };
16
+ livestatechange: {
17
+ isLive: boolean;
18
+ };
15
19
  error: {
16
20
  code: number;
17
21
  message: string;
18
22
  source: string;
23
+ recoverable?: boolean | undefined;
24
+ retryCount?: number | undefined;
19
25
  };
20
26
  "ad:start": {
21
27
  adId: string;
@@ -64,38 +70,82 @@ interface PlayerEventMap {
64
70
  "ad:breakEnd": {
65
71
  breakId: string | undefined;
66
72
  };
73
+ qualitiesavailable: {
74
+ qualities: QualityLevel[];
75
+ };
76
+ qualitychange: {
77
+ from: QualityLevel | null;
78
+ to: QualityLevel;
79
+ };
80
+ texttrackchange: {
81
+ track: VideTextTrack | null;
82
+ };
83
+ texttracksavailable: {
84
+ tracks: VideTextTrack[];
85
+ };
86
+ cuechange: {
87
+ cues: VideCue[];
88
+ };
67
89
  destroy: undefined;
68
90
  }
69
91
  type PlayerEvent = keyof PlayerEventMap;
92
+ interface RecoveryConfig {
93
+ maxRetries: number;
94
+ retryDelay: number;
95
+ backoffMultiplier: number;
96
+ }
70
97
  type EventHandler<T> = (data: T) => void;
71
- /** HTMLVideoElement event names not already covered by PlayerEventMap. */
72
- type NativeVideoEvent = Exclude<keyof HTMLVideoElementEventMap, keyof PlayerEventMap>;
98
+ /** Native media event names not already covered by PlayerEventMap. */
99
+ type NativeMediaEvent = Exclude<keyof HTMLMediaElementEventMap, keyof PlayerEventMap>;
73
100
  interface EventBus {
74
101
  on<K extends PlayerEvent>(event: K, handler: EventHandler<PlayerEventMap[K]>): void;
75
- on<K extends NativeVideoEvent>(event: K, handler: (ev: HTMLVideoElementEventMap[K]) => void): void;
102
+ on<K extends NativeMediaEvent>(event: K, handler: (ev: HTMLMediaElementEventMap[K]) => void): void;
76
103
  on(event: string, handler: (...args: any[]) => void): void;
77
104
  off<K extends PlayerEvent>(event: K, handler: EventHandler<PlayerEventMap[K]>): void;
78
- off<K extends NativeVideoEvent>(event: K, handler: (ev: HTMLVideoElementEventMap[K]) => void): void;
105
+ off<K extends NativeMediaEvent>(event: K, handler: (ev: HTMLMediaElementEventMap[K]) => void): void;
79
106
  off(event: string, handler: (...args: any[]) => void): void;
80
107
  emit<K extends PlayerEvent>(event: K, data: PlayerEventMap[K]): void;
81
108
  once<K extends PlayerEvent>(event: K, handler: EventHandler<PlayerEventMap[K]>): void;
82
- once<K extends NativeVideoEvent>(event: K, handler: (ev: HTMLVideoElementEventMap[K]) => void): void;
109
+ once<K extends NativeMediaEvent>(event: K, handler: (ev: HTMLMediaElementEventMap[K]) => void): void;
83
110
  once(event: string, handler: (...args: any[]) => void): void;
84
111
  }
112
+ interface SeekableRange {
113
+ start: number;
114
+ end: number;
115
+ }
116
+ interface QualityLevel {
117
+ id: number;
118
+ width: number;
119
+ height: number;
120
+ bitrate: number;
121
+ label: string;
122
+ }
123
+ interface VideTextTrack {
124
+ id: number;
125
+ label: string;
126
+ language: string;
127
+ kind: "subtitles" | "captions" | "descriptions" | "chapters" | "metadata";
128
+ active: boolean;
129
+ }
130
+ interface VideCue {
131
+ startTime: number;
132
+ endTime: number;
133
+ text: string;
134
+ }
85
135
  interface SourceHandler {
86
136
  /** Whether this handler can process the given URL/type. */
87
137
  canHandle(url: string, type?: string): boolean;
88
- /** Load the source into the video element. */
89
- load(url: string, videoElement: HTMLVideoElement): void;
138
+ /** Load the source into the media element. */
139
+ load(url: string, mediaElement: MediaElement): void;
90
140
  /** Unload the source and clean up. */
91
- unload(videoElement: HTMLVideoElement): void;
141
+ unload(mediaElement: MediaElement): void;
92
142
  }
93
143
  interface Plugin {
94
144
  name: string;
95
145
  setup(player: Player): (() => void) | undefined;
96
146
  }
97
147
  interface Player extends EventBus {
98
- readonly el: HTMLVideoElement;
148
+ readonly el: MediaElement;
99
149
  readonly state: PlayerState;
100
150
  play(): Promise<void>;
101
151
  pause(): void;
@@ -110,6 +160,25 @@ interface Player extends EventBus {
110
160
  readonly buffered: TimeRanges;
111
161
  readonly seekable: TimeRanges;
112
162
  readonly seeking: boolean;
163
+ readonly isLive: boolean;
164
+ readonly seekableRange: SeekableRange | null;
165
+ readonly qualities: QualityLevel[];
166
+ readonly currentQuality: QualityLevel | null;
167
+ setQuality(id: number): void;
168
+ readonly isAutoQuality: boolean;
169
+ readonly isAudio: boolean;
170
+ readonly textTracks: TextTrackList;
171
+ getTextTracks(): VideTextTrack[];
172
+ getActiveTextTrack(): VideTextTrack | null;
173
+ readonly activeCues: VideCue[];
174
+ setTextTrack(id: number): void;
175
+ addTextTrack(options: {
176
+ src: string;
177
+ label: string;
178
+ language: string;
179
+ kind?: "subtitles" | "captions";
180
+ default?: boolean;
181
+ }): void;
113
182
  readonly videoWidth: number;
114
183
  readonly videoHeight: number;
115
184
  readonly networkState: number;
@@ -121,11 +190,11 @@ interface Player extends EventBus {
121
190
  defaultMuted: boolean;
122
191
  crossOrigin: string | null;
123
192
  controls: boolean;
124
- /** Web-standard addEventListener, delegates to the underlying HTMLVideoElement. */
125
- addEventListener<K extends keyof HTMLVideoElementEventMap>(type: K, listener: (ev: HTMLVideoElementEventMap[K]) => void, options?: boolean | AddEventListenerOptions): void;
193
+ /** Web-standard addEventListener, delegates to the underlying media element. */
194
+ addEventListener<K extends keyof HTMLMediaElementEventMap>(type: K, listener: (ev: HTMLMediaElementEventMap[K]) => void, options?: boolean | AddEventListenerOptions): void;
126
195
  addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
127
- /** Web-standard removeEventListener, delegates to the underlying HTMLVideoElement. */
128
- removeEventListener<K extends keyof HTMLVideoElementEventMap>(type: K, listener: (ev: HTMLVideoElementEventMap[K]) => void, options?: boolean | EventListenerOptions): void;
196
+ /** Web-standard removeEventListener, delegates to the underlying media element. */
197
+ removeEventListener<K extends keyof HTMLMediaElementEventMap>(type: K, listener: (ev: HTMLMediaElementEventMap[K]) => void, options?: boolean | EventListenerOptions): void;
129
198
  removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
130
199
  /** Current media source URL. Setting triggers SourceHandler lookup. */
131
200
  src: string;
@@ -139,4 +208,4 @@ interface Player extends EventBus {
139
208
  getPluginData(key: string): unknown;
140
209
  }
141
210
 
142
- export type { AdQuartile as A, EventBus as E, Player as P, SourceHandler as S, EventHandler as a, PlayerEvent as b, PlayerEventMap as c, PlayerState as d, Plugin as e };
211
+ export type { AdQuartile as A, EventBus as E, MediaElement as M, Player as P, QualityLevel as Q, RecoveryConfig as R, SeekableRange as S, VideCue as V, EventHandler as a, PlayerEvent as b, PlayerEventMap as c, PlayerState as d, Plugin as e, SourceHandler as f, VideTextTrack as g };
@@ -1,5 +1,5 @@
1
- import { P as Player, d as PlayerState, e as Plugin } from '../types-Cine0xi3.js';
2
- import { b as AdPlugin, e as VastAd } from '../types-8aPf_wxJ.js';
1
+ import { P as Player, d as PlayerState, e as Plugin } from '../types-vxIcXgJz.js';
2
+ import { b as AdPlugin, e as VastAd } from '../types-CAJmacV6.js';
3
3
 
4
4
  /** A single UI component that can be independently mounted and connected. */
5
5
  interface UIComponent {
@@ -39,7 +39,7 @@ declare function createAdCountdown(adState: AdUIStateRef): UIComponent;
39
39
 
40
40
  declare function createAdLabel(): UIComponent;
41
41
 
42
- declare function createAdOverlay(): UIComponent;
42
+ declare function createAdOverlay(adState: AdUIStateRef): UIComponent;
43
43
 
44
44
  declare function createAdSkip(adState: AdUIStateRef): UIComponent;
45
45
 
package/dist/ui/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- function P(e){return {name:"ui-ad",setup(t,n){let r=n.creatives.find(o=>o.linear)?.linear;if(r)return e.set({adId:n.id,skipOffset:r.skipOffset,clickThrough:r.clickThrough,duration:r.duration}),()=>{e.clear();}}}}function C(e){return `vide-ui--${e.replace(":","-")}`}function f(e){return e==="ad:loading"||e==="ad:playing"||e==="ad:paused"}function S(e,t){e.classList.add(C(t.state));function n({from:r,to:o}){e.classList.remove(C(r)),e.classList.add(C(o));}return t.on("statechange",n),()=>t.off("statechange",n)}function b(e){if(!Number.isFinite(e)||e<0)return "0:00";let t=Math.floor(e),n=Math.floor(t/3600),r=Math.floor(t%3600/60),o=t%60,i=n>0?String(r).padStart(2,"0"):String(r),l=String(o).padStart(2,"0");return n>0?`${n}:${i}:${l}`:`${i}:${l}`}function u(e,t){let n=document.createElement(e);return n.className=t,n}function A(){let e={current:null,set(t){e.current=t;},clear(){e.current=null;}};return e}function M(e){let t=null,n=null;function r(){if(!t||!n||!f(n.state))return;let o=e.current?.duration??(Number.isFinite(n.el.duration)?n.el.duration:0),i=n.el.currentTime,l=Math.max(0,Math.ceil(o-i));t.textContent=`Ad \xB7 ${l}s`;}return {mount(o){t=u("div","vide-ad-countdown"),o.appendChild(t);},connect(o){n=o,n.on("timeupdate",r);},destroy(){t&&(t.remove(),t=null),n&&(n.off("timeupdate",r),n=null);}}}function T(){let e=null;return {mount(t){e=u("div","vide-ad-label"),e.textContent="Ad",t.appendChild(e);},connect(t){},destroy(){e&&(e.remove(),e=null);}}}function k(){let e=null,t=null;function n(){t&&(t.el.click(),t.el.paused?Promise.resolve(t.el.play()).catch(()=>{}):t.el.pause());}return {mount(r){e=u("div","vide-ad-overlay"),r.appendChild(e);},connect(r){t=r,e&&e.addEventListener("click",n);},destroy(){e&&(e.removeEventListener("click",n),e.remove(),e=null),t=null;}}}var x="http://www.w3.org/2000/svg";function y(e,t="0 0 24 24"){let n=document.createElementNS(x,"svg");n.setAttribute("viewBox",t),n.setAttribute("width","24"),n.setAttribute("height","24"),n.setAttribute("fill","currentColor"),n.setAttribute("aria-hidden","true");for(let r of e){let o=document.createElementNS(x,"path");o.setAttribute("d",r),n.appendChild(o);}return n}function L(){return y(["M8 5v14l11-7z"])}function I(){return y(["M6 19h4V5H6v14zm8-14v14h4V5h-4z"])}function U(){return y(["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"])}function H(){return y(["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"])}function V(){return y(["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 4l-1.88 1.88L12 7.76V4z"])}function w(){return y(["M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"])}function j(){return y(["M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"])}function F(){return y(["M5 18l10-6L5 6v12zm12-12v12h2V6h-2z"])}function D(e){let t=null,n=null,r=null;function o(){!r||!e.current||t?.classList.contains("vide-skip--disabled")||r.emit("ad:skip",{adId:e.current.adId});}function i(){if(!t||!n||!r||!f(r.state))return;if(!e.current||e.current.skipOffset===void 0){t.style.display="none";return}t.style.display="";let{skipOffset:a}=e.current,m=r.el.currentTime;if(m>=a)t.classList.remove("vide-skip--disabled"),n.textContent="Skip Ad";else {t.classList.add("vide-skip--disabled");let d=Math.max(0,Math.ceil(a-m));n.textContent=`Skip in ${d}s`;}}function l({to:a}){!t||!n||f(a)||(t.style.display="none",t.classList.add("vide-skip--disabled"),n.textContent="");}return {mount(a){t=u("button","vide-skip vide-skip--disabled"),t.type="button",t.setAttribute("aria-label","Skip ad"),t.style.display="none",n=u("span","vide-skip__label"),t.appendChild(n),t.appendChild(F()),a.appendChild(t);},connect(a){r=a,t&&(t.addEventListener("click",o),r.on("timeupdate",i),r.on("statechange",l));},destroy(){t&&(t.removeEventListener("click",o),t.remove(),t=null,n=null),r&&(r.off("timeupdate",i),r.off("statechange",l),r=null);}}}var J=3e3;function _(){let e=null,t=null,n=null;function r(){if(!t)return true;let d=t.state;return d==="paused"||d==="ended"||d==="idle"||d==="ready"||f(d)}function o(){e&&e.classList.remove("vide-ui--autohide");}function i(){l(),!r()&&(n=setTimeout(()=>{e&&e.classList.add("vide-ui--autohide");},J));}function l(){n!==null&&(clearTimeout(n),n=null);}function a(){o(),i();}function m({to:d}){d==="paused"||d==="ended"||d==="idle"||d==="ready"||f(d)?(l(),o()):i();}return {mount(d){e=d.closest(".vide-ui")??d;},connect(d){t=d,e&&(e.addEventListener("mousemove",a),e.addEventListener("touchstart",a),e.addEventListener("keydown",a),t.on("statechange",m),i());},destroy(){l(),e&&(e.removeEventListener("mousemove",a),e.removeEventListener("touchstart",a),e.removeEventListener("keydown",a),e.classList.remove("vide-ui--autohide"),e=null),t&&(t.off("statechange",m),t=null);}}}function G(){let e=null,t=null;function n(){if(t){if(t.state==="ended"){let o=function({to:i}){i==="ready"&&(t?.off("statechange",o),t?.play().catch(()=>{}));};t.on("statechange",o),t.el.currentTime=0,t.el.load();return}t.play().catch(()=>{});}}return {mount(r){e=u("button","vide-bigplay"),e.type="button",e.setAttribute("aria-label","Play video"),e.appendChild(L()),r.appendChild(e);},connect(r){t=r,e&&e.addEventListener("click",n);},destroy(){e&&(e.removeEventListener("click",n),e.remove(),e=null),t=null;}}}var Q=200;function N(e){let t=null,n=null,r=null,o=null;function i(){n&&(n.state==="playing"||n.state==="ad:playing"?n.pause():n.play().catch(()=>{}));}function l(){!o||e.has("fullscreen")||(document.fullscreenElement!=null?document.exitFullscreen().catch(()=>{}):o.requestFullscreen&&o.requestFullscreen().catch(()=>{}));}function a(){if(n){if(f(n.state)){n.el.click(),i();return}if(r!==null){clearTimeout(r),r=null,l();return}r=setTimeout(()=>{r=null,i();},Q);}}return {mount(m){t=u("div","vide-clickplay"),o=m.closest(".vide-ui")?.parentElement??m,m.appendChild(t);},connect(m){n=m,t&&t.addEventListener("click",a);},destroy(){r!==null&&(clearTimeout(r),r=null),t&&(t.removeEventListener("click",a),t.remove(),t=null),n=null,o=null;}}}function z(){let e=null,t=null,n=null;function r({message:o}){t&&(t.textContent=o);}return {mount(o){e=u("div","vide-error"),t=u("span","vide-error__message"),e.appendChild(t),o.appendChild(e);},connect(o){n=o,n.on("error",r);},destroy(){e&&(e.remove(),e=null,t=null),n&&(n.off("error",r),n=null);}}}function R(){let e=null,t=null,n=null;function r(){return document.fullscreenElement!=null||document.webkitFullscreenElement!=null}function o(a){e&&(n&&n.remove(),n=a?j():w(),e.appendChild(n));}function i(){t&&(r()?typeof document.exitFullscreen=="function"?document.exitFullscreen().catch(()=>{}):typeof document.webkitExitFullscreen=="function"&&document.webkitExitFullscreen():typeof t.requestFullscreen=="function"?t.requestFullscreen().catch(()=>{}):typeof t.webkitRequestFullscreen=="function"?t.webkitRequestFullscreen():t.querySelector("video")?.webkitEnterFullscreen?.());}function l(){if(!e)return;let a=r();a?(e.classList.add("vide-fullscreen--active"),e.setAttribute("aria-label","Exit fullscreen")):(e.classList.remove("vide-fullscreen--active"),e.setAttribute("aria-label","Fullscreen")),o(a);}return {mount(a){t=a.closest(".vide-ui")?.parentElement??a,e=u("button","vide-fullscreen"),e.type="button",e.setAttribute("aria-label","Fullscreen"),o(false),a.appendChild(e);},connect(){e&&(e.addEventListener("click",i),document.addEventListener("fullscreenchange",l),document.addEventListener("webkitfullscreenchange",l));},destroy(){e&&(e.removeEventListener("click",i),e.remove(),e=null,n=null),document.removeEventListener("fullscreenchange",l),document.removeEventListener("webkitfullscreenchange",l),t=null;}}}function B(e){let t=null,n=null,{excluded:r}=e;function o(i){if(!n)return;let l=!r.has("volume"),a=!r.has("progress"),m=!r.has("fullscreen"),d=f(n.state);switch(i.key){case " ":case "k":case "K":i.preventDefault(),n.state==="playing"||n.state==="ad:playing"?n.pause():n.play().catch(()=>{});break;case "ArrowLeft":if(!a||d)return;i.preventDefault(),n.currentTime=Math.max(0,n.el.currentTime-5);break;case "ArrowRight":if(!a||d)return;i.preventDefault(),n.currentTime=Math.min(n.el.duration||0,n.el.currentTime+5);break;case "ArrowUp":if(!l)return;i.preventDefault(),n.volume=Math.min(1,n.volume+.1),n.muted&&(n.muted=false);break;case "ArrowDown":if(!l)return;i.preventDefault(),n.volume=Math.max(0,n.volume-.1);break;case "m":case "M":if(!l)return;i.preventDefault(),n.muted=!n.muted;break;case "f":case "F":if(!m)return;if(i.preventDefault(),document.fullscreenElement!=null)document.exitFullscreen().catch(()=>{});else {let p=t?.closest(".vide-ui")?.parentElement??t;p?.requestFullscreen&&p.requestFullscreen().catch(()=>{});}break;default:if(i.key.length===1&&i.key>="0"&&i.key<="9"&&a&&!d){i.preventDefault();let p=Number.parseInt(i.key,10)/10,v=n.el.duration;Number.isFinite(v)&&v>0&&(n.currentTime=p*v);}break}}return {mount(i){t=i.closest(".vide-ui")??i,t.setAttribute("tabindex","0");},connect(i){n=i,t&&t.addEventListener("keydown",o);},destroy(){t&&(t.removeEventListener("keydown",o),t.removeAttribute("tabindex"),t=null),n=null;}}}function K(){let e=null;return {mount(t){e=u("div","vide-loader");let n=u("div","vide-loader__spinner");e.appendChild(n),t.appendChild(e);},connect(t){},destroy(){e&&(e.remove(),e=null);}}}function O(){let e=null,t=null,n=null;function r(l){e&&(n&&n.remove(),n=l?I():L(),e.appendChild(n));}function o(){t&&(t.state==="playing"?t.pause():t.play().catch(()=>{}));}function i({to:l}){e&&(l==="playing"?(e.classList.add("vide-play--playing"),e.classList.remove("vide-play--paused"),e.setAttribute("aria-label","Pause"),r(true)):(l==="paused"||l==="ready"||l==="ended")&&(e.classList.remove("vide-play--playing"),e.classList.add("vide-play--paused"),e.setAttribute("aria-label","Play"),r(false)));}return {mount(l){e=u("button","vide-play vide-play--paused"),e.type="button",e.setAttribute("aria-label","Play"),r(false),l.appendChild(e);},connect(l){t=l,e&&(e.addEventListener("click",o),t.on("statechange",i));},destroy(){e&&(e.removeEventListener("click",o),e.remove(),e=null,n=null),t&&(t.off("statechange",i),t=null);}}}function q(e){let t=null;return {mount(n){t=u("div","vide-poster");let r=u("img","vide-poster__image");r.src=e.src,r.alt="",t.appendChild(r),n.appendChild(t);},connect(n){},destroy(){t&&(t.remove(),t=null);}}}function $(){let e=null,t=null,n=null,r=null,o=null,i=false;function l(s){if(!e)return 0;let c=e.getBoundingClientRect();return c.width===0?0:Math.max(0,Math.min(1,(s.clientX-c.left)/c.width))}function a(s){e&&e.style.setProperty("--vide-progress",String(s));}function m(){if(!o||!n)return;let s=o.el;if(s.buffered.length>0&&s.duration>0){let E=s.buffered.end(s.buffered.length-1)/s.duration;n.style.setProperty("--vide-progress-buffered",String(Math.min(1,E)));}}function d(){if(i||!o)return;let{currentTime:s,duration:c}=o.el;c>0&&a(s/c),m(),e&&(e.setAttribute("aria-valuenow",String(Math.floor(s))),Number.isFinite(c)&&e.setAttribute("aria-valuemax",String(Math.floor(c))));}function p(s){!o||!e||f(o.state)||(i=true,e.classList.add("vide-progress--dragging"),e.setPointerCapture(s.pointerId),a(l(s)));}function v(s){i&&a(l(s));}function h(s){if(!i||!o)return;i=false,e&&(e.classList.remove("vide-progress--dragging"),e.releasePointerCapture(s.pointerId));let c=l(s),E=o.el.duration;Number.isFinite(E)&&E>0&&(o.currentTime=c*E);}function g({to:s}){e&&(f(s)?e.classList.add("vide-progress--disabled"):e.classList.remove("vide-progress--disabled"));}return {mount(s){e=u("div","vide-progress"),e.setAttribute("role","slider"),e.setAttribute("aria-label","Seek"),e.setAttribute("aria-valuemin","0"),e.setAttribute("aria-valuemax","0"),e.setAttribute("aria-valuenow","0"),n=u("div","vide-progress__buffered"),t=u("div","vide-progress__bar"),r=u("div","vide-progress__handle"),e.appendChild(n),e.appendChild(t),e.appendChild(r),s.appendChild(e);},connect(s){o=s,e&&(o.on("timeupdate",d),o.on("statechange",g),e.addEventListener("pointerdown",p),e.addEventListener("pointermove",v),e.addEventListener("pointerup",h));},destroy(){e&&(e.removeEventListener("pointerdown",p),e.removeEventListener("pointermove",v),e.removeEventListener("pointerup",h),e.remove(),e=null,t=null,n=null,r=null),o&&(o.off("timeupdate",d),o.off("statechange",g),o=null);}}}function X(){let e=null,t=null,n=null,r=null;function o({currentTime:i,duration:l}){t&&(t.textContent=b(i)),n&&(n.textContent=b(l));}return {mount(i){e=u("div","vide-time"),t=u("span","vide-time__current");let l=u("span","vide-time__separator");n=u("span","vide-time__duration"),t.textContent="0:00",l.textContent="/",n.textContent="0:00",e.appendChild(t),e.appendChild(l),e.appendChild(n),i.appendChild(e);},connect(i){r=i,r.on("timeupdate",o);},destroy(){e&&(e.remove(),e=null,t=null,n=null),r&&(r.off("timeupdate",o),r=null);}}}function Y(){let e=null,t=null,n=null,r=null,o=false,i=null;function l(){if(!t||!r)return;i&&i.remove(),r.muted||r.volume===0?i=V():r.volume<.5?i=H():i=U(),t.appendChild(i);}function a(){if(!r||!e||!t)return;r.muted||r.volume===0?(e.classList.add("vide-volume--muted"),t.setAttribute("aria-label","Unmute")):(e.classList.remove("vide-volume--muted"),t.setAttribute("aria-label","Mute"));let c=r.muted?0:r.volume;e.style.setProperty("--vide-volume",String(c)),n&&n.setAttribute("aria-valuenow",String(Math.round(c*100))),l();}function m(s){if(!n)return 0;let c=n.getBoundingClientRect();return c.width===0?0:Math.max(0,Math.min(1,(s.clientX-c.left)/c.width))}function d(){r&&(r.muted=!r.muted);}function p(){o||a();}function v(s){if(!r||!n)return;o=true,n.setPointerCapture(s.pointerId);let c=m(s);r.volume=c,r.muted&&c>0&&(r.muted=false),a();}function h(s){if(!o||!r)return;let c=m(s);r.volume=c,r.muted&&c>0&&(r.muted=false),a();}function g(s){!o||!n||(o=false,n.releasePointerCapture(s.pointerId));}return {mount(s){e=u("div","vide-volume"),t=u("button","vide-volume__button"),t.type="button",t.setAttribute("aria-label","Mute"),n=u("div","vide-volume__slider"),n.setAttribute("role","slider"),n.setAttribute("aria-label","Volume"),n.setAttribute("aria-valuemin","0"),n.setAttribute("aria-valuemax","100"),n.setAttribute("aria-valuenow","100");let c=u("div","vide-volume__track"),E=u("div","vide-volume__filled");n.appendChild(c),n.appendChild(E),e.appendChild(t),e.appendChild(n),s.appendChild(e);},connect(s){r=s,!(!t||!n)&&(t.addEventListener("click",d),n.addEventListener("pointerdown",v),n.addEventListener("pointermove",h),n.addEventListener("pointerup",g),r.el.addEventListener("volumechange",p),a());},destroy(){t&&t.removeEventListener("click",d),n&&(n.removeEventListener("pointerdown",v),n.removeEventListener("pointermove",h),n.removeEventListener("pointerup",g)),r&&(r.el.removeEventListener("volumechange",p),r=null),e&&(e.remove(),e=null,t=null,n=null,i=null);}}}function W(e,t,n){e.mount(t),e.connect(n);}function st(e){let t=A(),n=new Set(e.exclude);return {name:"ui",setup(r){let o=document.createElement("div");o.className="vide-ui",o.setAttribute("role","region"),o.setAttribute("aria-label","Video player"),e.container.appendChild(o);let i=[];function l(p,v,h){n.has(p)||(W(v,h,r),i.push(v));}if(l("loader",K(),o),l("error",z(),o),l("bigplay",G(),o),e.poster&&l("poster",q({src:e.poster}),o),l("clickplay",N(n),o),!n.has("ad-overlay")||!n.has("ad-label")||!n.has("ad-countdown")||!n.has("ad-skip")){let p=document.createElement("div");p.className="vide-ad",o.appendChild(p),l("ad-overlay",k(),p),l("ad-label",T(),p),l("ad-countdown",M(t),p),l("ad-skip",D(t),p);}let m=document.createElement("div");m.className="vide-controls",m.addEventListener("click",p=>p.stopPropagation()),o.appendChild(m),l("play",O(),m),l("progress",$(),m),l("time",X(),m),l("volume",Y(),m),l("fullscreen",R(),m),l("autohide",_(),o),l("keyboard",B({excluded:n}),o);let d=S(o,r);return ()=>{for(let p of i)p.destroy();d(),o.remove();}},getAdPlugin(){return ()=>[P(t)]}}}
2
- export{S as connectStateClasses,M as createAdCountdown,T as createAdLabel,k as createAdOverlay,D as createAdSkip,A as createAdUIState,_ as createAutohide,G as createBigPlay,N as createClickPlay,z as createErrorDisplay,R as createFullscreen,B as createKeyboard,K as createLoader,O as createPlayButton,q as createPoster,$ as createProgress,X as createTimeDisplay,Y as createVolume,b as formatTime,f as isAdState,C as stateToClass,st as ui,P as uiAdPlugin};
1
+ function P(e){return {name:"ui-ad",setup(n,t){let r=t.creatives.find(o=>o.linear)?.linear;if(r)return e.set({adId:t.id,skipOffset:r.skipOffset,clickThrough:r.clickThrough,duration:r.duration}),()=>{e.clear();}}}}function b(e){return `vide-ui--${e.replace(":","-")}`}function f(e){return e==="ad:loading"||e==="ad:playing"||e==="ad:paused"}function A(e,n){e.classList.add(b(n.state));function t({from:r,to:o}){e.classList.remove(b(r)),e.classList.add(b(o));}return n.on("statechange",t),()=>n.off("statechange",t)}function C(e){if(!Number.isFinite(e)||e<0)return "0:00";let n=Math.floor(e),t=Math.floor(n/3600),r=Math.floor(n%3600/60),o=n%60,i=t>0?String(r).padStart(2,"0"):String(r),l=String(o).padStart(2,"0");return t>0?`${t}:${i}:${l}`:`${i}:${l}`}function u(e,n){let t=document.createElement(e);return t.className=n,t}function S(){let e={current:null,set(n){e.current=n;},clear(){e.current=null;}};return e}function M(e){let n=null,t=null;function r(){if(!n||!t||!f(t.state))return;let o=e.current?.duration??(Number.isFinite(t.el.duration)?t.el.duration:0),i=t.el.currentTime,l=Math.max(0,Math.ceil(o-i));n.textContent=`Ad \xB7 ${l}s`;}return {mount(o){n=u("div","vide-ad-countdown"),o.appendChild(n);},connect(o){t=o,t.on("timeupdate",r);},destroy(){n&&(n.remove(),n=null),t&&(t.off("timeupdate",r),t=null);}}}function T(){let e=null;return {mount(n){e=u("div","vide-ad-label"),e.textContent="Ad",n.appendChild(e);},connect(n){},destroy(){e&&(e.remove(),e=null);}}}function k(e){let n=null,t=null;function r(){if(!t)return;t.el.click();let o=e.current?.clickThrough;o?(window.open(o,"_blank"),t.el.pause()):t.el.paused?Promise.resolve(t.el.play()).catch(()=>{}):t.el.pause();}return {mount(o){n=u("div","vide-ad-overlay"),o.appendChild(n);},connect(o){t=o,n&&n.addEventListener("click",r);},destroy(){n&&(n.removeEventListener("click",r),n.remove(),n=null),t=null;}}}var x="http://www.w3.org/2000/svg";function y(e,n="0 0 24 24"){let t=document.createElementNS(x,"svg");t.setAttribute("viewBox",n),t.setAttribute("width","24"),t.setAttribute("height","24"),t.setAttribute("fill","currentColor"),t.setAttribute("aria-hidden","true");for(let r of e){let o=document.createElementNS(x,"path");o.setAttribute("d",r),t.appendChild(o);}return t}function L(){return y(["M8 5v14l11-7z"])}function I(){return y(["M6 19h4V5H6v14zm8-14v14h4V5h-4z"])}function U(){return y(["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"])}function H(){return y(["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"])}function V(){return y(["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 4l-1.88 1.88L12 7.76V4z"])}function w(){return y(["M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"])}function j(){return y(["M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"])}function F(){return y(["M5 18l10-6L5 6v12zm12-12v12h2V6h-2z"])}function _(e){let n=null,t=null,r=null;function o(){!r||!e.current||n?.classList.contains("vide-skip--disabled")||r.emit("ad:skip",{adId:e.current.adId});}function i(){if(!n||!t||!r||!f(r.state))return;if(!e.current||e.current.skipOffset===void 0){n.style.display="none";return}n.style.display="";let{skipOffset:a}=e.current,m=r.el.currentTime;if(m>=a)n.classList.remove("vide-skip--disabled"),t.textContent="Skip Ad";else {n.classList.add("vide-skip--disabled");let d=Math.max(0,Math.ceil(a-m));t.textContent=`Skip in ${d}s`;}}function l({to:a}){!n||!t||f(a)||(n.style.display="none",n.classList.add("vide-skip--disabled"),t.textContent="");}return {mount(a){n=u("button","vide-skip vide-skip--disabled"),n.type="button",n.setAttribute("aria-label","Skip ad"),n.style.display="none",t=u("span","vide-skip__label"),n.appendChild(t),n.appendChild(F()),a.appendChild(n);},connect(a){r=a,n&&(n.addEventListener("click",o),r.on("timeupdate",i),r.on("statechange",l));},destroy(){n&&(n.removeEventListener("click",o),n.remove(),n=null,t=null),r&&(r.off("timeupdate",i),r.off("statechange",l),r=null);}}}var J=3e3;function D(){let e=null,n=null,t=null;function r(){if(!n)return true;let d=n.state;return d==="paused"||d==="ended"||d==="idle"||d==="ready"||f(d)}function o(){e&&e.classList.remove("vide-ui--autohide");}function i(){l(),!r()&&(t=setTimeout(()=>{e&&e.classList.add("vide-ui--autohide");},J));}function l(){t!==null&&(clearTimeout(t),t=null);}function a(){o(),i();}function m({to:d}){d==="paused"||d==="ended"||d==="idle"||d==="ready"||f(d)?(l(),o()):i();}return {mount(d){e=d.closest(".vide-ui")??d;},connect(d){n=d,e&&(e.addEventListener("mousemove",a),e.addEventListener("touchstart",a),e.addEventListener("keydown",a),n.on("statechange",m),i());},destroy(){l(),e&&(e.removeEventListener("mousemove",a),e.removeEventListener("touchstart",a),e.removeEventListener("keydown",a),e.classList.remove("vide-ui--autohide"),e=null),n&&(n.off("statechange",m),n=null);}}}function G(){let e=null,n=null;function t(){if(n){if(n.state==="ended"){let o=function({to:i}){i==="ready"&&(n?.off("statechange",o),n?.play().catch(()=>{}));};n.on("statechange",o),n.el.currentTime=0,n.el.load();return}n.play().catch(()=>{});}}return {mount(r){e=u("button","vide-bigplay"),e.type="button",e.setAttribute("aria-label","Play video"),e.appendChild(L()),r.appendChild(e);},connect(r){n=r,e&&e.addEventListener("click",t);},destroy(){e&&(e.removeEventListener("click",t),e.remove(),e=null),n=null;}}}var Q=200;function N(e){let n=null,t=null,r=null,o=null;function i(){t&&(t.state==="playing"||t.state==="ad:playing"?t.pause():t.play().catch(()=>{}));}function l(){!o||e.has("fullscreen")||(document.fullscreenElement!=null?document.exitFullscreen().catch(()=>{}):o.requestFullscreen&&o.requestFullscreen().catch(()=>{}));}function a(){if(t){if(f(t.state)){t.el.click(),i();return}if(r!==null){clearTimeout(r),r=null,l();return}r=setTimeout(()=>{r=null,i();},Q);}}return {mount(m){n=u("div","vide-clickplay"),o=m.closest(".vide-ui")?.parentElement??m,m.appendChild(n);},connect(m){t=m,n&&n.addEventListener("click",a);},destroy(){r!==null&&(clearTimeout(r),r=null),n&&(n.removeEventListener("click",a),n.remove(),n=null),t=null,o=null;}}}function z(){let e=null,n=null,t=null;function r({message:o}){n&&(n.textContent=o);}return {mount(o){e=u("div","vide-error"),n=u("span","vide-error__message"),e.appendChild(n),o.appendChild(e);},connect(o){t=o,t.on("error",r);},destroy(){e&&(e.remove(),e=null,n=null),t&&(t.off("error",r),t=null);}}}function R(){let e=null,n=null,t=null;function r(){return document.fullscreenElement!=null||document.webkitFullscreenElement!=null}function o(a){e&&(t&&t.remove(),t=a?j():w(),e.appendChild(t));}function i(){n&&(r()?typeof document.exitFullscreen=="function"?document.exitFullscreen().catch(()=>{}):typeof document.webkitExitFullscreen=="function"&&document.webkitExitFullscreen():typeof n.requestFullscreen=="function"?n.requestFullscreen().catch(()=>{}):typeof n.webkitRequestFullscreen=="function"?n.webkitRequestFullscreen():n.querySelector("video")?.webkitEnterFullscreen?.());}function l(){if(!e)return;let a=r();a?(e.classList.add("vide-fullscreen--active"),e.setAttribute("aria-label","Exit fullscreen")):(e.classList.remove("vide-fullscreen--active"),e.setAttribute("aria-label","Fullscreen")),o(a);}return {mount(a){n=a.closest(".vide-ui")?.parentElement??a,e=u("button","vide-fullscreen"),e.type="button",e.setAttribute("aria-label","Fullscreen"),o(false),a.appendChild(e);},connect(){e&&(e.addEventListener("click",i),document.addEventListener("fullscreenchange",l),document.addEventListener("webkitfullscreenchange",l));},destroy(){e&&(e.removeEventListener("click",i),e.remove(),e=null,t=null),document.removeEventListener("fullscreenchange",l),document.removeEventListener("webkitfullscreenchange",l),n=null;}}}function B(e){let n=null,t=null,{excluded:r}=e;function o(i){if(!t)return;let l=!r.has("volume"),a=!r.has("progress"),m=!r.has("fullscreen"),d=f(t.state);switch(i.key){case " ":case "k":case "K":i.preventDefault(),t.state==="playing"||t.state==="ad:playing"?t.pause():t.play().catch(()=>{});break;case "ArrowLeft":if(!a||d)return;i.preventDefault(),t.currentTime=Math.max(0,t.el.currentTime-5);break;case "ArrowRight":if(!a||d)return;i.preventDefault(),t.currentTime=Math.min(t.el.duration||0,t.el.currentTime+5);break;case "ArrowUp":if(!l)return;i.preventDefault(),t.volume=Math.min(1,t.volume+.1),t.muted&&(t.muted=false);break;case "ArrowDown":if(!l)return;i.preventDefault(),t.volume=Math.max(0,t.volume-.1);break;case "m":case "M":if(!l)return;i.preventDefault(),t.muted=!t.muted;break;case "f":case "F":if(!m)return;if(i.preventDefault(),document.fullscreenElement!=null)document.exitFullscreen().catch(()=>{});else {let p=n?.closest(".vide-ui")?.parentElement??n;p?.requestFullscreen&&p.requestFullscreen().catch(()=>{});}break;default:if(i.key.length===1&&i.key>="0"&&i.key<="9"&&a&&!d){i.preventDefault();let p=Number.parseInt(i.key,10)/10,v=t.el.duration;Number.isFinite(v)&&v>0&&(t.currentTime=p*v);}break}}return {mount(i){n=i.closest(".vide-ui")??i,n.setAttribute("tabindex","0");},connect(i){t=i,n&&n.addEventListener("keydown",o);},destroy(){n&&(n.removeEventListener("keydown",o),n.removeAttribute("tabindex"),n=null),t=null;}}}function K(){let e=null;return {mount(n){e=u("div","vide-loader");let t=u("div","vide-loader__spinner");e.appendChild(t),n.appendChild(e);},connect(n){},destroy(){e&&(e.remove(),e=null);}}}function O(){let e=null,n=null,t=null;function r(l){e&&(t&&t.remove(),t=l?I():L(),e.appendChild(t));}function o(){n&&(n.state==="playing"?n.pause():n.play().catch(()=>{}));}function i({to:l}){e&&(l==="playing"||l==="ad:playing"?(e.classList.add("vide-play--playing"),e.classList.remove("vide-play--paused"),e.setAttribute("aria-label","Pause"),r(true)):(l==="paused"||l==="ready"||l==="ended"||l==="ad:paused")&&(e.classList.remove("vide-play--playing"),e.classList.add("vide-play--paused"),e.setAttribute("aria-label","Play"),r(false)));}return {mount(l){e=u("button","vide-play vide-play--paused"),e.type="button",e.setAttribute("aria-label","Play"),r(false),l.appendChild(e);},connect(l){n=l,e&&(e.addEventListener("click",o),n.on("statechange",i));},destroy(){e&&(e.removeEventListener("click",o),e.remove(),e=null,t=null),n&&(n.off("statechange",i),n=null);}}}function q(e){let n=null;return {mount(t){n=u("div","vide-poster");let r=u("img","vide-poster__image");r.src=e.src,r.alt="",n.appendChild(r),t.appendChild(n);},connect(t){},destroy(){n&&(n.remove(),n=null);}}}function $(){let e=null,n=null,t=null,r=null,o=null,i=false;function l(s){if(!e)return 0;let c=e.getBoundingClientRect();return c.width===0?0:Math.max(0,Math.min(1,(s.clientX-c.left)/c.width))}function a(s){e&&e.style.setProperty("--vide-progress",String(s));}function m(){if(!o||!t)return;let s=o.el;if(s.buffered.length>0&&s.duration>0){let g=s.buffered.end(s.buffered.length-1)/s.duration;t.style.setProperty("--vide-progress-buffered",String(Math.min(1,g)));}}function d(){if(i||!o)return;let{currentTime:s,duration:c}=o.el;c>0&&a(s/c),m(),e&&(e.setAttribute("aria-valuenow",String(Math.floor(s))),Number.isFinite(c)&&e.setAttribute("aria-valuemax",String(Math.floor(c))));}function p(s){!o||!e||f(o.state)||(i=true,e.classList.add("vide-progress--dragging"),e.setPointerCapture(s.pointerId),a(l(s)));}function v(s){i&&a(l(s));}function h(s){if(!i||!o)return;i=false,e&&(e.classList.remove("vide-progress--dragging"),e.releasePointerCapture(s.pointerId));let c=l(s),g=o.el.duration;Number.isFinite(g)&&g>0&&(o.currentTime=c*g);}function E({to:s}){e&&(f(s)?e.classList.add("vide-progress--disabled"):e.classList.remove("vide-progress--disabled"));}return {mount(s){e=u("div","vide-progress"),e.setAttribute("role","slider"),e.setAttribute("aria-label","Seek"),e.setAttribute("aria-valuemin","0"),e.setAttribute("aria-valuemax","0"),e.setAttribute("aria-valuenow","0"),t=u("div","vide-progress__buffered"),n=u("div","vide-progress__bar"),r=u("div","vide-progress__handle"),e.appendChild(t),e.appendChild(n),e.appendChild(r),s.appendChild(e);},connect(s){o=s,e&&(o.on("timeupdate",d),o.on("statechange",E),e.addEventListener("pointerdown",p),e.addEventListener("pointermove",v),e.addEventListener("pointerup",h));},destroy(){e&&(e.removeEventListener("pointerdown",p),e.removeEventListener("pointermove",v),e.removeEventListener("pointerup",h),e.remove(),e=null,n=null,t=null,r=null),o&&(o.off("timeupdate",d),o.off("statechange",E),o=null);}}}function X(){let e=null,n=null,t=null,r=null;function o({currentTime:i,duration:l}){n&&(n.textContent=C(i)),t&&(t.textContent=C(l));}return {mount(i){e=u("div","vide-time"),n=u("span","vide-time__current");let l=u("span","vide-time__separator");t=u("span","vide-time__duration"),n.textContent="0:00",l.textContent="/",t.textContent="0:00",e.appendChild(n),e.appendChild(l),e.appendChild(t),i.appendChild(e);},connect(i){r=i,r.on("timeupdate",o);},destroy(){e&&(e.remove(),e=null,n=null,t=null),r&&(r.off("timeupdate",o),r=null);}}}function Y(){let e=null,n=null,t=null,r=null,o=false,i=null;function l(){if(!n||!r)return;i&&i.remove(),r.muted||r.volume===0?i=V():r.volume<.5?i=H():i=U(),n.appendChild(i);}function a(){if(!r||!e||!n)return;r.muted||r.volume===0?(e.classList.add("vide-volume--muted"),n.setAttribute("aria-label","Unmute")):(e.classList.remove("vide-volume--muted"),n.setAttribute("aria-label","Mute"));let c=r.muted?0:r.volume;e.style.setProperty("--vide-volume",String(c)),t&&t.setAttribute("aria-valuenow",String(Math.round(c*100))),l();}function m(s){if(!t)return 0;let c=t.getBoundingClientRect();return c.width===0?0:Math.max(0,Math.min(1,(s.clientX-c.left)/c.width))}function d(){r&&(r.muted=!r.muted);}function p(){o||a();}function v(s){if(!r||!t)return;o=true,t.setPointerCapture(s.pointerId);let c=m(s);r.volume=c,r.muted&&c>0&&(r.muted=false),a();}function h(s){if(!o||!r)return;let c=m(s);r.volume=c,r.muted&&c>0&&(r.muted=false),a();}function E(s){!o||!t||(o=false,t.releasePointerCapture(s.pointerId));}return {mount(s){e=u("div","vide-volume"),n=u("button","vide-volume__button"),n.type="button",n.setAttribute("aria-label","Mute"),t=u("div","vide-volume__slider"),t.setAttribute("role","slider"),t.setAttribute("aria-label","Volume"),t.setAttribute("aria-valuemin","0"),t.setAttribute("aria-valuemax","100"),t.setAttribute("aria-valuenow","100");let c=u("div","vide-volume__track"),g=u("div","vide-volume__filled");t.appendChild(c),t.appendChild(g),e.appendChild(n),e.appendChild(t),s.appendChild(e);},connect(s){r=s,!(!n||!t)&&(n.addEventListener("click",d),t.addEventListener("pointerdown",v),t.addEventListener("pointermove",h),t.addEventListener("pointerup",E),r.el.addEventListener("volumechange",p),a());},destroy(){n&&n.removeEventListener("click",d),t&&(t.removeEventListener("pointerdown",v),t.removeEventListener("pointermove",h),t.removeEventListener("pointerup",E)),r&&(r.el.removeEventListener("volumechange",p),r=null),e&&(e.remove(),e=null,n=null,t=null,i=null);}}}function W(e,n,t){e.mount(n),e.connect(t);}function st(e){let n=S(),t=new Set(e.exclude);return {name:"ui",setup(r){r.isAudio&&(t.add("fullscreen"),t.add("poster"));let o=document.createElement("div");o.className="vide-ui",o.setAttribute("role","region"),o.setAttribute("aria-label",r.isAudio?"Audio player":"Video player"),e.container.appendChild(o);let i=[];function l(p,v,h){t.has(p)||(W(v,h,r),i.push(v));}if(l("loader",K(),o),l("error",z(),o),l("bigplay",G(),o),e.poster&&l("poster",q({src:e.poster}),o),l("clickplay",N(t),o),!t.has("ad-overlay")||!t.has("ad-label")||!t.has("ad-countdown")||!t.has("ad-skip")){let p=document.createElement("div");p.className="vide-ad",o.appendChild(p),l("ad-overlay",k(n),p),l("ad-label",T(),p),l("ad-countdown",M(n),p),l("ad-skip",_(n),p);}let m=document.createElement("div");m.className="vide-controls",m.addEventListener("click",p=>p.stopPropagation()),o.appendChild(m),l("play",O(),m),l("progress",$(),m),l("time",X(),m),l("volume",Y(),m),l("fullscreen",R(),m),l("autohide",D(),o),l("keyboard",B({excluded:t}),o);let d=A(o,r);return ()=>{for(let p of i)p.destroy();d(),o.remove();}},getAdPlugin(){return ()=>[P(n)]}}}
2
+ export{A as connectStateClasses,M as createAdCountdown,T as createAdLabel,k as createAdOverlay,_ as createAdSkip,S as createAdUIState,D as createAutohide,G as createBigPlay,N as createClickPlay,z as createErrorDisplay,R as createFullscreen,B as createKeyboard,K as createLoader,O as createPlayButton,q as createPoster,$ as createProgress,X as createTimeDisplay,Y as createVolume,C as formatTime,f as isAdState,b as stateToClass,st as ui,P as uiAdPlugin};
@@ -1,6 +1,6 @@
1
- import { e as Plugin } from '../types-Cine0xi3.js';
2
- import { V as VastResponse, R as ResolveOptions, a as VastPluginOptions } from '../types-8aPf_wxJ.js';
3
- export { A as AdCategory, b as AdPlugin, c as AdVerification, d as VastProgressEvent } from '../types-8aPf_wxJ.js';
1
+ import { e as Plugin } from '../types-vxIcXgJz.js';
2
+ import { V as VastResponse, R as ResolveOptions, a as VastPluginOptions } from '../types-CAJmacV6.js';
3
+ export { A as AdCategory, b as AdPlugin, c as AdVerification, d as VastProgressEvent } from '../types-CAJmacV6.js';
4
4
 
5
5
  /**
6
6
  * Parse a VAST XML string into a VastResponse object.
@@ -0,0 +1 @@
1
+ var Vide=(function(exports){'use strict';var F=1e3,B=2e3,$=2001,z=2002,G=3e3,J=3001,X=4e3,Z=4001,ee=4002,te=4003;var ne={idle:["loading","playing","error"],loading:["ready","playing","error"],ready:["playing","loading","ad:loading","error"],playing:["paused","buffering","loading","ad:loading","ended","error"],paused:["playing","loading","ad:loading","ended","error"],buffering:["playing","loading","error"],"ad:loading":["ad:playing","playing","error"],"ad:playing":["ad:paused","playing","error"],"ad:paused":["ad:playing","playing","error"],ended:["idle","loading","error"],error:["idle","loading"]};function re(t,a){return ne[t].includes(a)}function ae(t){return t.readyState>=3?t.paused?"ready":"playing":t.readyState>=1?"loading":"idle"}function ie(t){let a=ae(t),g=t instanceof HTMLAudioElement,E=new Map,y=[],c=false,k=[],d=null,m=t.getAttribute("src")??"",L=false,o=new Map,b=t.duration===Number.POSITIVE_INFINITY,R=null;function x(e){let n=E.get(e);return n||(n=new Set,E.set(e,n)),n}function i(e,n){let r=E.get(e);if(r)for(let u of r)try{u(n);}catch(p){console.error("[vide] Event handler error:",p);}}function s(e){if(e===a)return;if(!re(a,e)){console.warn(`[vide] Invalid transition: ${a} \u2192 ${e}`);return}let n=a;a=e,i("statechange",{from:n,to:e});}function v(){return a==="ad:loading"||a==="ad:playing"||a==="ad:paused"}function h(){!v()&&t.paused&&s("loading");}function S(){a==="loading"&&s("ready");}function P(){v()||s("playing"),i("play",void 0);}function _(){v()||s("paused"),i("pause",void 0);}function I(){a==="playing"&&s("buffering");}function H(){(a==="buffering"||a==="ready")&&s("playing");}function M(){v()||s("ended"),i("ended",void 0);}function A(){i("timeupdate",{currentTime:t.currentTime,duration:t.duration});}function C(){let e=t.error;v()||s("error"),i("error",{code:e?.code??1e3,message:e?.message??"Unknown error",source:"core"});}function w(){let e=t.duration===Number.POSITIVE_INFINITY;e!==b&&(b=e,i("livestatechange",{isLive:e}));}t.addEventListener("durationchange",w),t.addEventListener("loadstart",h),t.addEventListener("canplay",S),t.addEventListener("play",P),t.addEventListener("pause",_),t.addEventListener("waiting",I),t.addEventListener("playing",H),t.addEventListener("ended",M),t.addEventListener("timeupdate",A),t.addEventListener("error",C);function T(e,n){return {id:n,label:e.label,language:e.language,kind:e.kind,active:e.mode==="showing"}}function D(e){if(!e)return [];let n=[];for(let r=0;r<e.length;r++){let u=e[r];n.push({startTime:u.startTime,endTime:u.endTime,text:u.text??""});}return n}let l=new Map;function O(e){if(l.has(e))return;let n=()=>{e.mode==="showing"&&i("cuechange",{cues:D(e.activeCues)});};l.set(e,n),e.addEventListener("cuechange",n);}function K(e){let n=l.get(e);n&&(e.removeEventListener("cuechange",n),l.delete(e));}function V(){let e=[];for(let n=0;n<t.textTracks.length;n++)e.push(T(t.textTracks[n],n));i("texttracksavailable",{tracks:e});}function N(){for(let e=0;e<t.textTracks.length;e++)O(t.textTracks[e]);V();}function Q(e){e.track&&K(e.track),V();}let q=typeof t.textTracks.addEventListener=="function";if(q){t.textTracks.addEventListener("addtrack",N),t.textTracks.addEventListener("removetrack",Q);for(let e=0;e<t.textTracks.length;e++)O(t.textTracks[e]);}let U=new Set(["statechange","play","pause","ended","timeupdate","livestatechange","error","ad:start","ad:end","ad:skip","ad:click","ad:error","ad:impression","ad:loaded","ad:quartile","ad:mute","ad:unmute","ad:volumeChange","ad:fullscreen","ad:breakStart","ad:breakEnd","qualitiesavailable","qualitychange","texttrackchange","texttracksavailable","cuechange","destroy"]);function Y(){if(t.removeEventListener("durationchange",w),t.removeEventListener("loadstart",h),t.removeEventListener("canplay",S),t.removeEventListener("play",P),t.removeEventListener("pause",_),t.removeEventListener("waiting",I),t.removeEventListener("playing",H),t.removeEventListener("ended",M),t.removeEventListener("timeupdate",A),t.removeEventListener("error",C),q){t.textTracks.removeEventListener("addtrack",N),t.textTracks.removeEventListener("removetrack",Q);for(let[e,n]of l)e.removeEventListener("cuechange",n);l.clear();}}function j(){if(d||L)return;let e=t.querySelectorAll("source");for(let n of e){let r=n.getAttribute("src"),u=n.getAttribute("type")??void 0;if(r){for(let p of k)if(p.canHandle(r,u)){d=p,m=r,s("loading"),p.load(r,t);for(let W of e)W.remove();return}}}}let f={get el(){return t},get state(){return a},on(e,n){U.has(e)?x(e).add(n):t.addEventListener(e,n);},off(e,n){U.has(e)?x(e).delete(n):t.removeEventListener(e,n);},emit:i,once(e,n){let r=u=>{f.off(e,r),n(u);};f.on(e,r);},play(){return t.play()},pause(){t.pause();},get currentTime(){return t.currentTime},set currentTime(e){t.currentTime=e;},get duration(){return t.duration},set duration(e){},get volume(){return t.volume},set volume(e){t.volume=e;},get muted(){return t.muted},set muted(e){t.muted=e;},get playbackRate(){return t.playbackRate},set playbackRate(e){t.playbackRate=e;},get paused(){return t.paused},get ended(){return t.ended},get readyState(){return t.readyState},get buffered(){return t.buffered},get seekable(){return t.seekable},get seeking(){return t.seeking},get isLive(){return c?false:t.duration===Number.POSITIVE_INFINITY},get seekableRange(){return c||t.seekable.length===0?null:{start:t.seekable.start(0),end:t.seekable.end(0)}},get qualities(){return o.get("qualities")??[]},get currentQuality(){return o.get("currentQuality")??null},get isAutoQuality(){return o.get("autoQuality")??true},get isAudio(){return g},setQuality(e){let n=o.get("qualitySetter");n&&n(e);},get textTracks(){return t.textTracks},getTextTracks(){let e=[];for(let n=0;n<t.textTracks.length;n++)e.push(T(t.textTracks[n],n));return e},getActiveTextTrack(){for(let e=0;e<t.textTracks.length;e++)if(t.textTracks[e].mode==="showing")return T(t.textTracks[e],e);return null},get activeCues(){for(let e=0;e<t.textTracks.length;e++)if(t.textTracks[e].mode==="showing")return D(t.textTracks[e].activeCues);return []},setTextTrack(e){for(let r=0;r<t.textTracks.length;r++)t.textTracks[r].mode=r===e?"showing":"disabled";let n=e>=0&&e<t.textTracks.length?T(t.textTracks[e],e):null;i("texttrackchange",{track:n});},addTextTrack(e){let n=document.createElement("track");n.src=e.src,n.label=e.label,n.srclang=e.language,n.kind=e.kind??"subtitles",e.default&&(n.default=true),t.appendChild(n);},get videoWidth(){return g?0:t.videoWidth},get videoHeight(){return g?0:t.videoHeight},get networkState(){return t.networkState},get loop(){return t.loop},set loop(e){t.loop=e;},get autoplay(){return t.autoplay},set autoplay(e){t.autoplay=e;},get poster(){return g?"":t.poster},set poster(e){g||(t.poster=e);},get preload(){return t.preload},set preload(e){t.preload=e;},get defaultPlaybackRate(){return t.defaultPlaybackRate},set defaultPlaybackRate(e){t.defaultPlaybackRate=e;},get defaultMuted(){return t.defaultMuted},set defaultMuted(e){t.defaultMuted=e;},get crossOrigin(){return t.crossOrigin},set crossOrigin(e){t.crossOrigin=e;},get controls(){return t.controls},set controls(e){t.controls=e;},get src(){return m},set src(e){if(d&&(d.unload(t),d=null),o.delete("qualities"),o.delete("currentQuality"),o.delete("autoQuality"),o.delete("qualitySetter"),R=null,L=true,m=e,!e){t.removeAttribute("src");return}for(let n of k)if(n.canHandle(e)){d=n,s("loading"),n.load(e,t);return}t.src=e;},registerSourceHandler(e){if(c){console.warn("[vide] Cannot register source handler after destroy");return}k.push(e),!L&&!d&&j();},addEventListener(e,n,r){t.addEventListener(e,n,r);},removeEventListener(e,n,r){t.removeEventListener(e,n,r);},use(e){if(c){console.warn("[vide] Cannot use plugin after destroy");return}let n=e.setup(f);n&&y.push(n);},setPluginData(e,n){if(o.set(e,n),e==="qualities")i("qualitiesavailable",{qualities:n});else if(e==="currentQuality"){let r=n;i("qualitychange",{from:R,to:r}),R=r;}},getPluginData(e){return o.get(e)},destroy(){if(!c){c=true,d&&(d.unload(t),d=null);for(let e of y)try{e();}catch(n){console.error("[vide] Plugin cleanup error:",n);}y.length=0,i("destroy",void 0),Y(),E.clear(),o.clear();}}};return f._setState=s,f}exports.ERR_DASH_IMPORT=G;exports.ERR_DASH_PLAYBACK=J;exports.ERR_DRM_CERTIFICATE=te;exports.ERR_DRM_DETECTION=Z;exports.ERR_DRM_LICENSE=ee;exports.ERR_DRM_UNSUPPORTED=X;exports.ERR_HLS_FATAL=z;exports.ERR_HLS_IMPORT=$;exports.ERR_HLS_UNSUPPORTED=B;exports.ERR_MEDIA=F;exports.createPlayer=ie;return exports;})({});
@@ -0,0 +1,2 @@
1
+ (function(){'use strict';var w=Object.defineProperty;var T=(e,t)=>()=>(e&&(t=e(e=0)),t);var C=(e,t)=>{for(var o in t)w(e,o,{get:t[o],enumerable:true});};var R={};C(R,{default:()=>k});var I,k,E=T(()=>{I=globalThis.dashjs,k=I;});function P(e){return e>=2160?"4K":e>=1440?"1440p":e>=1080?"1080p":e>=720?"720p":e>=480?"480p":e>=360?"360p":e>=240?"240p":`${e}p`}var q="application/dash+xml",A={maxRetries:3,retryDelay:3e3,backoffMultiplier:2};function Q(e){try{return new URL(e,"https://placeholder.invalid").pathname.endsWith(".mpd")}catch{return e.includes(".mpd")}}function _(e){return e.toLowerCase()===q}function M(e={}){return {name:"dash",setup(t){let o=null,d=false,f=e.recovery===false?false:{...A,...e.recovery??{}},u=0,g=null,p="",l=null;function m(){g!==null&&(clearTimeout(g),g=null);}function S(n){if(f===false||d||u>=f.maxRetries||!l)return false;u++;let a=f.retryDelay*f.backoffMultiplier**(u-1);return m(),g=setTimeout(()=>{d||!l||(n.reset(),n.initialize(l,p,l.autoplay));},a),true}let b={canHandle(n,a){return a&&_(a)?true:Q(n)},load(n,a){this.unload(a),L(n,a);},unload(n){m(),u=0,p="",l=null,o&&(o.destroy(),o=null);}};function L(n,a){p=n,l=a,Promise.resolve().then(()=>(E(),R)).then(y=>{if(d)return;let h=y.default,r=h.MediaPlayer().create();o=r,t.setPluginData("dash",r);let D=t.getPluginData("drm");D?.dashConfig&&r.updateSettings(D.dashConfig),e.dashConfig&&r.updateSettings(e.dashConfig),r.on(h.MediaPlayer.events.ERROR,s=>{if(typeof s.error=="object"&&s.error!==null){let c=S(r);t.emit("error",{code:s.error.code,message:s.error.message,source:"dash",recoverable:c,retryCount:c?u:void 0});}else t.emit("error",{code:3001,message:`DASH error: ${String(s.error)}`,source:"dash"});}),r.on(h.MediaPlayer.events.STREAM_INITIALIZED,()=>{u>0&&(u=0,m());let c=r.getBitrateInfoListFor("video").map(i=>({id:i.qualityIndex,width:i.width,height:i.height,bitrate:i.bitrate,label:P(i.height)}));t.setPluginData("qualities",c),t.setPluginData("qualitySetter",i=>{i===-1?r.updateSettings({streaming:{abr:{autoSwitchBitrate:{video:true}}}}):(r.updateSettings({streaming:{abr:{autoSwitchBitrate:{video:false}}}}),r.setQualityFor("video",i,true)),t.setPluginData("autoQuality",i===-1);});}),r.on(h.MediaPlayer.events.QUALITY_CHANGE_RENDERED,s=>{if(s.mediaType!=="video")return;let i=t.qualities.find(v=>v.id===s.newQuality);if(i){t.setPluginData("currentQuality",i);let v=r.getSettings();t.setPluginData("autoQuality",v?.streaming?.abr?.autoSwitchBitrate?.video??true);}}),r.initialize(a,n,a.autoplay);}).catch(y=>{d||t.emit("error",{code:3e3,message:y instanceof Error?`Failed to load dashjs: ${y.message}`:"Failed to load dashjs",source:"dash"});});}return t.registerSourceHandler(b),()=>{d=true,m(),b.unload(t.el);}}}}var B=globalThis.Vide??(globalThis.Vide={});B.dash=M;
2
+ })();
@@ -0,0 +1 @@
1
+ (function(){'use strict';function l(e){let r={licenseUrl:e.licenseUrl,serverCertificateUrl:e.certificateUrl};if(e.headers){let t=e.headers;r.licenseXhrSetup=n=>{for(let[i,s]of Object.entries(t))n.setRequestHeader(i,s);};}return {emeEnabled:true,drmSystems:{"com.apple.fps.1_0":r}}}function g(e){let r={serverURL:e.licenseUrl,serverCertificateURL:e.certificateUrl};return e.headers&&(r.httpRequestHeaders=e.headers),{streaming:{protection:{data:{"com.apple.fps.1_0":r}}}}}function h(e){let r={licenseUrl:e.licenseUrl};if(e.headers){let t=e.headers;r.licenseXhrSetup=n=>{for(let[i,s]of Object.entries(t))n.setRequestHeader(i,s);};}return {emeEnabled:true,drmSystems:{"com.widevine.alpha":r}}}function v(e){let r={serverURL:e.licenseUrl};return e.headers&&(r.httpRequestHeaders=e.headers),{streaming:{protection:{data:{"com.widevine.alpha":r}}}}}function u(e){return e.keySystem==="com.widevine.alpha"&&e.widevine?h(e.widevine):e.keySystem==="com.apple.fps.1_0"&&e.fairplay?l(e.fairplay):{}}function y(e){return e.keySystem==="com.widevine.alpha"&&e.widevine?v(e.widevine):e.keySystem==="com.apple.fps.1_0"&&e.fairplay?g(e.fairplay):{}}var w="com.apple.fps.1_0",S=[{initDataTypes:["cenc"],videoCapabilities:[{contentType:'video/mp4;codecs="avc1.42E01E"'}]}],K=[{initDataTypes:["sinf"],videoCapabilities:[{contentType:'video/mp4;codecs="avc1.42E01E"'}]}];async function m(e){for(let r of e)try{let t=r===w?K:S;return await navigator.requestMediaKeySystemAccess(r,t),r}catch{}return null}var R="com.apple.fps.1_0",M=[{initDataTypes:["cenc"],videoCapabilities:[{contentType:'video/mp4;codecs="avc1.42E01E"'}]}],P=[{initDataTypes:["sinf"],videoCapabilities:[{contentType:'video/mp4;codecs="avc1.42E01E"'}]}];function p(e,r,t){let n=false,i=[],s=null,a=o=>{if(n||e.mediaKeys&&e.mediaKeys!==s||!s||!o.initData)return;let f=s.createSession("temporary");i.push(f),f.generateRequest(o.initDataType,o.initData).then(()=>{},c=>{n||t(c instanceof Error?c:new Error("generateRequest failed"));}),f.addEventListener("message",c=>{n||D(c,f,r,t,()=>n);}),f.addEventListener("keystatuseschange",()=>{if(!n)for(let[,c]of f.keyStatuses)(c==="expired"||c==="internal-error")&&t(new Error(`Key status: ${c}`));});},d=r.keySystem===R?P:M;return navigator.requestMediaKeySystemAccess(r.keySystem,d).then(o=>{if(!n)return o.createMediaKeys()}).then(o=>{if(!(n||!o)&&(s=o,r.keySystem===R&&r.certificateUrl))return U(r.certificateUrl,r.headers,t,()=>n).then(f=>{if(!(n||!f))return s?.setServerCertificate(f.buffer)})}).then(()=>{n||!s||(e.mediaKeys||e.setMediaKeys(s),e.addEventListener("encrypted",a));}).catch(o=>{n||t(o instanceof Error?o:new Error("EME setup failed"));}),()=>{n=true,e.removeEventListener("encrypted",a);for(let o of i)o.close().catch(()=>{});}}async function U(e,r,t,n){try{let i=await fetch(e,r?{headers:r}:{});if(!i.ok)throw new Error(`Certificate fetch failed: ${i.status} ${i.statusText}`);let s=await i.arrayBuffer();return n()?null:new Uint8Array(s)}catch(i){return n()||t(i instanceof Error?i:new Error("Certificate fetch failed")),null}}function D(e,r,t,n,i){let s=new Uint8Array(e.message);Promise.resolve(t.prepareLicenseRequest?t.prepareLicenseRequest(s):s).then(a=>{if(!i())return fetch(t.licenseUrl,{method:"POST",body:a.buffer,...t.headers?{headers:t.headers}:{}})}).then(a=>{if(!(i()||!a)){if(!a.ok)throw new Error(`License request failed: ${a.status} ${a.statusText}`);return a.arrayBuffer()}}).then(a=>{if(i()||!a)return;let d=new Uint8Array(a);return Promise.resolve(t.processLicenseResponse?t.processLicenseResponse(d):d)}).then(a=>{if(!(i()||!a))return r.update(a.buffer)}).catch(a=>{i()||n(a instanceof Error?a:new Error("License exchange failed"));});}function C(e){return {name:"drm",setup(r){let t=false,n,i=[];return e.widevine&&i.push("com.widevine.alpha"),e.fairplay&&i.push("com.apple.fps.1_0"),i.length===0?(console.warn("[vide/drm] No DRM configuration provided"),()=>{}):(m(i).then(s=>{if(t)return;if(!s){r.emit("error",{code:4e3,message:"No supported DRM key system found",source:"drm"});return}let a={keySystem:s,widevine:e.widevine,fairplay:e.fairplay},d={keySystem:s,hlsConfig:u(a),dashConfig:y(a)};r.setPluginData("drm",d);let o=s!=="com.widevine.alpha",f=o?e.fairplay:e.widevine;if(!f)return;let c={keySystem:s,licenseUrl:f.licenseUrl,headers:f.headers,prepareLicenseRequest:f.prepareLicenseRequest,processLicenseResponse:f.processLicenseResponse};o&&(c.certificateUrl=f.certificateUrl),n=p(r.el,c,E=>{t||r.emit("error",{code:4002,message:E.message,source:"drm"});});}).catch(s=>{t||r.emit("error",{code:4001,message:s instanceof Error?`DRM detection failed: ${s.message}`:"DRM detection failed",source:"drm"});}),()=>{t=true,n?.();})}}}var L=globalThis.Vide??(globalThis.Vide={});Object.assign(L,{drm:C,detectKeySystem:m,dashDrmConfig:y,hlsDrmConfig:u,setupEme:p});})();