vidply 1.0.26 → 1.0.27

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.
Files changed (45) hide show
  1. package/dist/dev/{vidply.HLSRenderer-X46P47LY.js → vidply.HLSRenderer-ENLZE4QS.js} +13 -8
  2. package/dist/dev/vidply.HLSRenderer-ENLZE4QS.js.map +7 -0
  3. package/dist/dev/{vidply.HTML5Renderer-LXQ3I45Q.js → vidply.HTML5Renderer-6SBDI6S2.js} +2 -2
  4. package/dist/dev/vidply.SoundCloudRenderer-CD7VJKNS.js +280 -0
  5. package/dist/dev/vidply.SoundCloudRenderer-CD7VJKNS.js.map +7 -0
  6. package/dist/dev/{vidply.VimeoRenderer-DCETT5IZ.js → vidply.VimeoRenderer-VPH4RNES.js} +17 -4
  7. package/dist/dev/vidply.VimeoRenderer-VPH4RNES.js.map +7 -0
  8. package/dist/dev/{vidply.YouTubeRenderer-QLMMD757.js → vidply.YouTubeRenderer-6MGKEFTZ.js} +14 -6
  9. package/dist/dev/vidply.YouTubeRenderer-6MGKEFTZ.js.map +7 -0
  10. package/dist/dev/{vidply.chunk-UEIJOJH6.js → vidply.chunk-BCOFCT6U.js} +4 -1
  11. package/dist/dev/vidply.chunk-BCOFCT6U.js.map +7 -0
  12. package/dist/dev/vidply.esm.js +288 -12
  13. package/dist/dev/vidply.esm.js.map +2 -2
  14. package/dist/legacy/vidply.js +609 -23
  15. package/dist/legacy/vidply.js.map +3 -3
  16. package/dist/legacy/vidply.min.js +1 -1
  17. package/dist/legacy/vidply.min.meta.json +26 -13
  18. package/dist/prod/vidply.HLSRenderer-CBXZ4RF2.min.js +6 -0
  19. package/dist/prod/{vidply.HTML5Renderer-XJCSUETP.min.js → vidply.HTML5Renderer-MY7XDV7R.min.js} +1 -1
  20. package/dist/prod/vidply.SoundCloudRenderer-MOR2CUFH.min.js +6 -0
  21. package/dist/prod/vidply.VimeoRenderer-3HBMM2WR.min.js +6 -0
  22. package/dist/prod/vidply.YouTubeRenderer-MFC2GMAC.min.js +6 -0
  23. package/dist/prod/vidply.chunk-OXXPY2XB.min.js +6 -0
  24. package/dist/prod/vidply.esm.min.js +6 -6
  25. package/dist/vidply.css +51 -0
  26. package/dist/vidply.esm.min.meta.json +56 -28
  27. package/dist/vidply.min.css +1 -1
  28. package/package.json +1 -1
  29. package/src/core/Player.js +117 -8
  30. package/src/features/PlaylistManager.js +312 -4
  31. package/src/renderers/HLSRenderer.js +17 -9
  32. package/src/renderers/HTML5Renderer.js +5 -0
  33. package/src/renderers/SoundCloudRenderer.js +355 -0
  34. package/src/renderers/VimeoRenderer.js +20 -4
  35. package/src/renderers/YouTubeRenderer.js +12 -6
  36. package/src/styles/vidply.css +51 -0
  37. package/dist/dev/vidply.HLSRenderer-X46P47LY.js.map +0 -7
  38. package/dist/dev/vidply.VimeoRenderer-DCETT5IZ.js.map +0 -7
  39. package/dist/dev/vidply.YouTubeRenderer-QLMMD757.js.map +0 -7
  40. package/dist/dev/vidply.chunk-UEIJOJH6.js.map +0 -7
  41. package/dist/prod/vidply.HLSRenderer-LDXSMWTI.min.js +0 -6
  42. package/dist/prod/vidply.VimeoRenderer-P3PU27S7.min.js +0 -6
  43. package/dist/prod/vidply.YouTubeRenderer-DGKKWB5M.min.js +0 -6
  44. package/dist/prod/vidply.chunk-BQBGEJF7.min.js +0 -6
  45. /package/dist/dev/{vidply.HTML5Renderer-LXQ3I45Q.js.map → vidply.HTML5Renderer-6SBDI6S2.js.map} +0 -0
@@ -171,7 +171,7 @@
171
171
  "format": "esm"
172
172
  },
173
173
  "src/renderers/HTML5Renderer.js": {
174
- "bytes": 9169,
174
+ "bytes": 9364,
175
175
  "imports": [],
176
176
  "format": "esm"
177
177
  },
@@ -280,17 +280,17 @@
280
280
  "format": "esm"
281
281
  },
282
282
  "src/renderers/YouTubeRenderer.js": {
283
- "bytes": 7465,
283
+ "bytes": 7895,
284
284
  "imports": [],
285
285
  "format": "esm"
286
286
  },
287
287
  "src/renderers/VimeoRenderer.js": {
288
- "bytes": 6978,
288
+ "bytes": 7665,
289
289
  "imports": [],
290
290
  "format": "esm"
291
291
  },
292
292
  "src/renderers/HLSRenderer.js": {
293
- "bytes": 9605,
293
+ "bytes": 9900,
294
294
  "imports": [
295
295
  {
296
296
  "path": "src/renderers/HTML5Renderer.js",
@@ -300,8 +300,13 @@
300
300
  ],
301
301
  "format": "esm"
302
302
  },
303
+ "src/renderers/SoundCloudRenderer.js": {
304
+ "bytes": 10665,
305
+ "imports": [],
306
+ "format": "esm"
307
+ },
303
308
  "src/core/Player.js": {
304
- "bytes": 208550,
309
+ "bytes": 214111,
305
310
  "imports": [
306
311
  {
307
312
  "path": "src/utils/EventEmitter.js",
@@ -388,6 +393,11 @@
388
393
  "kind": "dynamic-import",
389
394
  "original": "../renderers/HLSRenderer.js"
390
395
  },
396
+ {
397
+ "path": "src/renderers/SoundCloudRenderer.js",
398
+ "kind": "dynamic-import",
399
+ "original": "../renderers/SoundCloudRenderer.js"
400
+ },
391
401
  {
392
402
  "path": "<runtime>",
393
403
  "kind": "import-statement",
@@ -397,7 +407,7 @@
397
407
  "format": "esm"
398
408
  },
399
409
  "src/features/PlaylistManager.js": {
400
- "bytes": 37547,
410
+ "bytes": 48513,
401
411
  "imports": [
402
412
  {
403
413
  "path": "src/utils/DOMUtils.js",
@@ -492,7 +502,7 @@
492
502
  "bytesInOutput": 1638
493
503
  },
494
504
  "src/renderers/HTML5Renderer.js": {
495
- "bytesInOutput": 4822
505
+ "bytesInOutput": 4912
496
506
  },
497
507
  "src/utils/DraggableResizable.js": {
498
508
  "bytesInOutput": 14166
@@ -507,19 +517,22 @@
507
517
  "bytesInOutput": 43951
508
518
  },
509
519
  "src/renderers/YouTubeRenderer.js": {
510
- "bytesInOutput": 4266
520
+ "bytesInOutput": 4430
511
521
  },
512
522
  "src/renderers/VimeoRenderer.js": {
513
- "bytesInOutput": 4334
523
+ "bytesInOutput": 4651
514
524
  },
515
525
  "src/renderers/HLSRenderer.js": {
516
- "bytesInOutput": 5771
526
+ "bytesInOutput": 5898
527
+ },
528
+ "src/renderers/SoundCloudRenderer.js": {
529
+ "bytesInOutput": 5597
517
530
  },
518
531
  "src/utils/EventEmitter.js": {
519
532
  "bytesInOutput": 436
520
533
  },
521
534
  "src/core/Player.js": {
522
- "bytesInOutput": 77631
535
+ "bytesInOutput": 79360
523
536
  },
524
537
  "src/controls/ControlBar.js": {
525
538
  "bytesInOutput": 58454
@@ -534,13 +547,13 @@
534
547
  "bytesInOutput": 4025
535
548
  },
536
549
  "src/features/PlaylistManager.js": {
537
- "bytesInOutput": 17168
550
+ "bytesInOutput": 21797
538
551
  },
539
552
  "src/index.js": {
540
553
  "bytesInOutput": 1877
541
554
  }
542
555
  },
543
- "bytes": 298543
556
+ "bytes": 311196
544
557
  }
545
558
  }
546
559
  }
@@ -0,0 +1,6 @@
1
+ /*!
2
+ * Universal, Accessible Video Player
3
+ * (c) 2025 Matthias Peltzer
4
+ * Released under GPL-2.0-or-later License
5
+ */
6
+ var s=class{constructor(e){this.player=e,this.media=e.element,this.hls=null}async init(){this.canPlayNatively()?(this.player.log("Using native HLS support"),await this.initNative()):(this.player.log("Using hls.js for HLS support"),await this.initHlsJs())}canPlayNatively(){let e=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),t=/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream;return!e&&!t?!1:document.createElement("video").canPlayType("application/vnd.apple.mpegurl")!==""}async initNative(){let e=(await import("./vidply.HTML5Renderer-MY7XDV7R.min.js")).HTML5Renderer,t=new e(this.player);await t.init(),Object.getOwnPropertyNames(Object.getPrototypeOf(t)).forEach(i=>{i!=="constructor"&&typeof t[i]=="function"&&(this[i]=t[i].bind(t))})}async initHlsJs(){if(this.media.controls=!1,this.media.removeAttribute("controls"),window.Hls||await this.loadHlsJs(),!window.Hls.isSupported())throw new Error("HLS is not supported in this browser");this.hls=new window.Hls({debug:this.player.options.debug,enableWorker:!0,lowLatencyMode:!1,backBufferLength:90,maxBufferLength:30,maxMaxBufferLength:600,maxBufferSize:60*1e3*1e3,maxBufferHole:.5,manifestLoadingTimeOut:1e4,manifestLoadingMaxRetry:4,manifestLoadingRetryDelay:1e3,manifestLoadingMaxRetryTimeout:64e3,levelLoadingTimeOut:1e4,levelLoadingMaxRetry:4,levelLoadingRetryDelay:1e3,levelLoadingMaxRetryTimeout:64e3,fragLoadingTimeOut:2e4,fragLoadingMaxRetry:6,fragLoadingRetryDelay:1e3,fragLoadingMaxRetryTimeout:64e3}),this.hls.attachMedia(this.media);let e=this.player.currentSource;if(!e){let t=this.player.element.querySelector("source");t?e=t.getAttribute("src"):e=this.player.element.getAttribute("src")||this.player.element.src}if(this.player.log(`Loading HLS source: ${e}`,"log"),!e)throw new Error("No HLS source found");this.hls.loadSource(e),this.attachHlsEvents(),this.attachMediaEvents()}async loadHlsJs(){return new Promise((e,t)=>{let i=document.createElement("script");i.src="https://cdn.jsdelivr.net/npm/hls.js@latest",i.onload=()=>e(),i.onerror=()=>t(new Error("Failed to load hls.js")),document.head.appendChild(i)})}attachHlsEvents(){this.hls.on(window.Hls.Events.MANIFEST_PARSED,(e,t)=>{this.player.log("HLS manifest loaded, found "+t.levels.length+" quality levels"),this.player.emit("hlsmanifestparsed",t),this.player.container&&this.player.container.classList.remove("vidply-external-controls")}),this.hls.on(window.Hls.Events.LEVEL_SWITCHED,(e,t)=>{this.player.log("HLS level switched to "+t.level),this.player.emit("hlslevelswitched",t)}),this.hls.on(window.Hls.Events.ERROR,(e,t)=>{this.handleHlsError(t)}),this.hls.on(window.Hls.Events.FRAG_BUFFERED,()=>{this.player.state.buffering=!1})}attachMediaEvents(){this.media.addEventListener("loadedmetadata",()=>{this.player.state.duration=this.media.duration,this.player.emit("loadedmetadata")}),this.media.addEventListener("play",()=>{this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.emit("play"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player)}),this.media.addEventListener("pause",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player)}),this.media.addEventListener("ended",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player),this.player.options.loop&&(this.player.seek(0),this.player.play())}),this.media.addEventListener("timeupdate",()=>{this.player.state.currentTime=this.media.currentTime,this.player.emit("timeupdate",this.media.currentTime),this.player.options.onTimeUpdate&&this.player.options.onTimeUpdate.call(this.player,this.media.currentTime)}),this.media.addEventListener("volumechange",()=>{this.player.state.volume=this.media.volume,this.player.state.muted=this.media.muted,this.player.emit("volumechange",this.media.volume)}),this.media.addEventListener("waiting",()=>{this.player.state.buffering=!0,this.player.emit("waiting")}),this.media.addEventListener("canplay",()=>{this.player.state.buffering=!1,this.player.emit("canplay")}),this.media.addEventListener("error",()=>{this.player.handleError(this.media.error)})}handleHlsError(e){if(this.player.log(`HLS Error - Type: ${e.type}, Details: ${e.details}, Fatal: ${e.fatal}`,"warn"),e.response&&this.player.log(`Response code: ${e.response.code}, URL: ${e.response.url}`,"warn"),e.fatal)switch(e.type){case window.Hls.ErrorTypes.NETWORK_ERROR:this.player.log("Fatal network error, trying to recover...","error"),this.player.log(`Network error details: ${e.details}`,"error"),setTimeout(()=>{this.hls.startLoad()},1e3);break;case window.Hls.ErrorTypes.MEDIA_ERROR:this.player.log("Fatal media error, trying to recover...","error"),this.hls.recoverMediaError();break;default:this.player.log("Fatal error, cannot recover","error"),this.player.handleError(new Error(`HLS Error: ${e.type} - ${e.details}`)),this.hls.destroy();break}else this.player.log("Non-fatal HLS error: "+e.details,"warn")}play(){let e=window.scrollX,t=window.scrollY,i=this.media.play();window.scrollTo(e,t),i!==void 0&&i.catch(r=>{this.player.log("Play failed:",r,"warn")})}pause(){this.media.pause()}seek(e){this.media.currentTime=e}setVolume(e){this.media.volume=e}setMuted(e){this.media.muted=e}setPlaybackSpeed(e){this.media.playbackRate=e}switchQuality(e){this.hls&&(this.hls.currentLevel=e)}getQualities(){return this.hls&&this.hls.levels?this.hls.levels.map((e,t)=>({index:t,height:e.height,width:e.width,bitrate:e.bitrate,name:`${e.height}p`})):[]}getCurrentQuality(){return this.hls?this.hls.currentLevel:-1}destroy(){this.hls&&(this.hls.destroy(),this.hls=null)}};export{s as HLSRenderer};
@@ -3,4 +3,4 @@
3
3
  * (c) 2025 Matthias Peltzer
4
4
  * Released under GPL-2.0-or-later License
5
5
  */
6
- import{a}from"./vidply.chunk-BQBGEJF7.min.js";export{a as HTML5Renderer};
6
+ import{a}from"./vidply.chunk-OXXPY2XB.min.js";export{a as HTML5Renderer};
@@ -0,0 +1,6 @@
1
+ /*!
2
+ * Universal, Accessible Video Player
3
+ * (c) 2025 Matthias Peltzer
4
+ * Released under GPL-2.0-or-later License
5
+ */
6
+ var s=class{constructor(e){this.player=e,this.widget=null,this.trackUrl=null,this.isReady=!1,this.iframe=null,this.iframeId=null}async init(){if(this.trackUrl=this.player.currentSource||this.player.element.src||this.player.element.querySelector("source")?.src,!this.trackUrl||!this.isValidSoundCloudUrl(this.trackUrl))throw new Error("Invalid SoundCloud URL");await this.loadSoundCloudAPI(),this.createIframe(),await this.initializeWidget()}isValidSoundCloudUrl(e){return e.includes("soundcloud.com")||e.includes("api.soundcloud.com")}isPlaylist(){return this.trackUrl&&this.trackUrl.includes("/sets/")}getEmbedUrl(){let e=encodeURIComponent(this.trackUrl);return`https://w.soundcloud.com/player/?${new URLSearchParams({url:this.trackUrl,auto_play:this.player.options.autoplay?"true":"false",hide_related:"true",show_comments:"false",show_user:"true",show_reposts:"false",show_teaser:"false",visual:"false",color:"%23007bff"}).toString()}`}async loadSoundCloudAPI(){return window.SC&&window.SC.Widget?Promise.resolve():new Promise((e,t)=>{let i=document.createElement("script");i.src="https://w.soundcloud.com/player/api.js",i.onload=()=>{setTimeout(()=>{window.SC&&window.SC.Widget?e():t(new Error("SoundCloud Widget API not available"))},100)},i.onerror=()=>t(new Error("Failed to load SoundCloud Widget API")),document.head.appendChild(i)})}createIframe(){this.player.element.style.display="none",this.player.element.removeAttribute("poster"),this.player.videoWrapper&&(this.player.videoWrapper.classList.remove("vidply-forced-poster"),this.player.videoWrapper.style.removeProperty("--vidply-poster-image")),this.iframeId=`soundcloud-player-${Math.random().toString(36).substr(2,9)}`,this.iframe=document.createElement("iframe"),this.iframe.id=this.iframeId,this.iframe.scrolling="no",this.iframe.frameBorder="no",this.iframe.allow="autoplay",this.iframe.src=this.getEmbedUrl(),this.iframe.style.width="100%",this.iframe.style.display="block",this.isPlaylist()?(this.iframe.style.aspectRatio="16 / 9",this.iframe.classList.add("vidply-soundcloud-iframe","vidply-soundcloud-playlist")):(this.iframe.style.aspectRatio="16 / 3",this.iframe.classList.add("vidply-soundcloud-iframe")),this.iframe.style.maxHeight="100%",this.player.element.parentNode.insertBefore(this.iframe,this.player.element)}async initializeWidget(){return new Promise((e,t)=>{this.iframe.addEventListener("load",()=>{try{this.widget=window.SC.Widget(this.iframe),this.widget.bind(window.SC.Widget.Events.READY,()=>{this.isReady=!0,this.attachEvents(),this.player.container&&this.player.container.classList.add("vidply-external-controls"),this.widget.getCurrentSound(i=>{i&&(this.player.state.duration=i.duration/1e3,this.player.emit("loadedmetadata"))}),e()}),this.widget.bind(window.SC.Widget.Events.ERROR,i=>{this.player.handleError(new Error(`SoundCloud error: ${i.message||"Unknown error"}`))})}catch(i){t(i)}}),setTimeout(()=>{this.isReady||t(new Error("SoundCloud widget initialization timeout"))},1e4)})}attachEvents(){if(!this.widget)return;let e=window.SC.Widget.Events;this.widget.bind(e.PLAY,()=>{this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.emit("play"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player)}),this.widget.bind(e.PAUSE,()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player)}),this.widget.bind(e.FINISH,()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player),this.player.options.loop&&(this.seek(0),this.play())}),this.widget.bind(e.PLAY_PROGRESS,t=>{let i=t.currentPosition/1e3;this.player.state.currentTime=i,this.player.emit("timeupdate",i),this.player.options.onTimeUpdate&&this.player.options.onTimeUpdate.call(this.player,i)}),this.widget.bind(e.SEEK,t=>{this.player.state.currentTime=t.currentPosition/1e3,this.player.emit("seeked")}),this.widget.bind(e.LOAD_PROGRESS,t=>{if(this.player.state.duration){let i=t.loadedProgress*this.player.state.duration;this.player.emit("progress",i)}})}play(){if(this.isReady&&this.widget){let e=window.scrollX,t=window.scrollY;this.widget.play(),window.scrollTo(e,t)}}pause(){this.isReady&&this.widget&&this.widget.pause()}seek(e){this.isReady&&this.widget&&(this.widget.seekTo(e*1e3),this.player.state.currentTime=e)}setVolume(e){this.isReady&&this.widget&&(this.widget.setVolume(e*100),this.player.state.volume=e)}setMuted(e){this.isReady&&this.widget&&(e?this.widget.getVolume(t=>{this._previousVolume=t,this.widget.setVolume(0)}):this.widget.setVolume(this._previousVolume||100),this.player.state.muted=e)}setPlaybackSpeed(e){this.player.log("SoundCloud does not support playback speed control","warn")}getCurrentSound(){return new Promise(e=>{this.isReady&&this.widget?this.widget.getCurrentSound(t=>{e(t)}):e(null)})}destroy(){if(this.widget){let e=window.SC.Widget.Events;try{this.widget.unbind(e.READY),this.widget.unbind(e.PLAY),this.widget.unbind(e.PAUSE),this.widget.unbind(e.FINISH),this.widget.unbind(e.PLAY_PROGRESS),this.widget.unbind(e.SEEK),this.widget.unbind(e.LOAD_PROGRESS),this.widget.unbind(e.ERROR)}catch{}}this.iframe&&this.iframe.parentNode&&this.iframe.parentNode.removeChild(this.iframe),this.player.element&&(this.player.element.style.display=""),this.widget=null,this.isReady=!1}},a=s;export{s as SoundCloudRenderer,a as default};
@@ -0,0 +1,6 @@
1
+ /*!
2
+ * Universal, Accessible Video Player
3
+ * (c) 2025 Matthias Peltzer
4
+ * Released under GPL-2.0-or-later License
5
+ */
6
+ var a=class{constructor(e){this.player=e,this.vimeo=null,this.videoId=null,this.isReady=!1,this.iframe=null}async init(){let e=this.player.currentSource||this.player.element.src;if(this.videoId=this.extractVideoId(e),!this.videoId)throw new Error("Invalid Vimeo URL");await this.loadVimeoAPI(),this.createIframe(),await this.initializePlayer()}extractVideoId(e){let t=[/vimeo\.com\/(\d+)/,/vimeo\.com\/video\/(\d+)/,/player\.vimeo\.com\/video\/(\d+)/];for(let i of t){let s=e.match(i);if(s&&s[1])return s[1]}return null}async loadVimeoAPI(){return window.Vimeo&&window.Vimeo.Player?Promise.resolve():new Promise((e,t)=>{let i=document.createElement("script");i.src="https://player.vimeo.com/api/player.js",i.onload=()=>e(),i.onerror=()=>t(new Error("Failed to load Vimeo API")),document.head.appendChild(i)})}createIframe(){this.player.element.style.display="none",this.iframe=document.createElement("div"),this.iframe.id=`vimeo-player-${Math.random().toString(36).substr(2,9)}`,this.iframe.style.width="100%",this.iframe.style.aspectRatio="16 / 9",this.iframe.style.maxHeight="100%",this.player.element.parentNode.insertBefore(this.iframe,this.player.element)}async initializePlayer(){let e={id:this.videoId,width:"100%",height:"100%",controls:!0,autoplay:this.player.options.autoplay,muted:this.player.options.muted,loop:this.player.options.loop,keyboard:!1};this.player.options.startTime>0&&(e.startTime=this.player.options.startTime),this.vimeo=new window.Vimeo.Player(this.iframe.id,e),await this.vimeo.ready(),this.isReady=!0;let t=this.iframe.querySelector("iframe");t&&(t.style.width="100%",t.style.height="100%",t.setAttribute("width","100%"),t.setAttribute("height","100%")),this.player.container&&this.player.container.classList.add("vidply-external-controls"),this.attachEvents();try{let i=await this.vimeo.getDuration();this.player.state.duration=i,this.player.emit("loadedmetadata")}catch(i){this.player.log("Error getting duration:",i,"warn")}}attachEvents(){this.vimeo.on("play",()=>{this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.emit("play"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player)}),this.vimeo.on("pause",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player)}),this.vimeo.on("ended",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player)}),this.vimeo.on("timeupdate",e=>{this.player.state.currentTime=e.seconds,this.player.state.duration=e.duration,this.player.emit("timeupdate",e.seconds),this.player.options.onTimeUpdate&&this.player.options.onTimeUpdate.call(this.player,e.seconds)}),this.vimeo.on("volumechange",e=>{this.player.state.volume=e.volume,this.player.emit("volumechange",e.volume)}),this.vimeo.on("bufferstart",()=>{this.player.state.buffering=!0,this.player.emit("waiting")}),this.vimeo.on("bufferend",()=>{this.player.state.buffering=!1,this.player.emit("canplay")}),this.vimeo.on("seeking",()=>{this.player.state.seeking=!0,this.player.emit("seeking")}),this.vimeo.on("seeked",()=>{this.player.state.seeking=!1,this.player.emit("seeked")}),this.vimeo.on("playbackratechange",e=>{this.player.state.playbackSpeed=e.playbackRate,this.player.emit("ratechange",e.playbackRate)}),this.vimeo.on("error",e=>{this.player.handleError(new Error(`Vimeo error: ${e.message}`))})}play(){if(this.isReady&&this.vimeo){let e=window.scrollX,t=window.scrollY;this.vimeo.play().catch(i=>{this.player.log("Play error:",i,"warn")}),window.scrollTo(e,t)}}pause(){this.isReady&&this.vimeo&&this.vimeo.pause().catch(e=>{this.player.log("Pause error:",e,"warn")})}seek(e){this.isReady&&this.vimeo&&this.vimeo.setCurrentTime(e).catch(t=>{this.player.log("Seek error:",t,"warn")})}setVolume(e){this.isReady&&this.vimeo&&(this.vimeo.setVolume(e).catch(t=>{this.player.log("Volume error:",t,"warn")}),this.player.state.volume=e)}setMuted(e){this.isReady&&this.vimeo&&(e?this.vimeo.setVolume(0):this.vimeo.setVolume(this.player.state.volume),this.player.state.muted=e)}setPlaybackSpeed(e){this.isReady&&this.vimeo&&(this.vimeo.setPlaybackRate(e).catch(t=>{this.player.log("Playback rate error:",t,"warn")}),this.player.state.playbackSpeed=e)}destroy(){this.vimeo&&this.vimeo.destroy&&this.vimeo.destroy(),this.iframe&&this.iframe.parentNode&&this.iframe.parentNode.removeChild(this.iframe),this.player.element&&(this.player.element.style.display="")}};export{a as VimeoRenderer};
@@ -0,0 +1,6 @@
1
+ /*!
2
+ * Universal, Accessible Video Player
3
+ * (c) 2025 Matthias Peltzer
4
+ * Released under GPL-2.0-or-later License
5
+ */
6
+ var s=class{constructor(e){this.player=e,this.youtube=null,this.videoId=null,this.isReady=!1,this.iframe=null}async init(){let e=this.player.currentSource||this.player.element.src;if(this.videoId=this.extractVideoId(e),!this.videoId)throw new Error("Invalid YouTube URL");await this.loadYouTubeAPI(),this.createIframe(),await this.initializePlayer()}extractVideoId(e){let t=[/(?:youtube\.com\/watch\?v=|youtu\.be\/)([^&\s]+)/,/youtube\.com\/embed\/([^&\s]+)/];for(let i of t){let a=e.match(i);if(a&&a[1])return a[1]}return null}async loadYouTubeAPI(){return window.YT&&window.YT.Player?Promise.resolve():new Promise((e,t)=>{if(window.onYouTubeIframeAPIReady){let r=window.onYouTubeIframeAPIReady;window.onYouTubeIframeAPIReady=()=>{r(),e()};return}let i=document.createElement("script");i.src="https://www.youtube.com/iframe_api",window.onYouTubeIframeAPIReady=()=>{e()},i.onerror=()=>t(new Error("Failed to load YouTube API"));let a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(i,a)})}createIframe(){this.player.element.style.display="none",this.iframe=document.createElement("div"),this.iframe.id=`youtube-player-${Math.random().toString(36).substr(2,9)}`,this.iframe.style.width="100%",this.iframe.style.aspectRatio="16 / 9",this.iframe.style.maxHeight="100%",this.player.element.parentNode.insertBefore(this.iframe,this.player.element)}async initializePlayer(){return new Promise(e=>{this.youtube=new window.YT.Player(this.iframe.id,{videoId:this.videoId,width:"100%",height:"100%",playerVars:{controls:1,disablekb:0,fs:1,modestbranding:1,rel:0,showinfo:0,iv_load_policy:3,autoplay:this.player.options.autoplay?1:0,mute:this.player.options.muted?1:0,start:this.player.options.startTime||0},events:{onReady:t=>{this.isReady=!0,this.attachEvents(),this.player.container&&this.player.container.classList.add("vidply-external-controls"),e()},onStateChange:t=>this.handleStateChange(t),onError:t=>this.handleError(t)}})})}attachEvents(){this.timeUpdateInterval=setInterval(()=>{if(this.isReady&&this.youtube){let e=this.youtube.getCurrentTime(),t=this.youtube.getDuration();this.player.state.currentTime=e,this.player.state.duration=t,this.player.emit("timeupdate",e)}},250),this.youtube.getDuration&&(this.player.state.duration=this.youtube.getDuration(),this.player.emit("loadedmetadata"))}handleStateChange(e){let t=window.YT.PlayerState;switch(e.data){case t.PLAYING:this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.state.buffering=!1,this.player.emit("play"),this.player.emit("playing"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player);break;case t.PAUSED:this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player);break;case t.ENDED:this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player),this.player.options.loop&&(this.youtube.seekTo(0),this.youtube.playVideo());break;case t.BUFFERING:this.player.state.buffering=!0,this.player.emit("waiting");break;case t.CUED:this.player.emit("loadedmetadata");break}}handleError(e){let t={2:"Invalid video ID",5:"HTML5 player error",100:"Video not found",101:"Video not allowed to be played in embedded players",150:"Video not allowed to be played in embedded players"},i=new Error(t[e.data]||"YouTube player error");this.player.handleError(i)}play(){if(this.isReady&&this.youtube){let e=window.scrollX,t=window.scrollY;this.youtube.playVideo(),window.scrollTo(e,t)}}pause(){this.isReady&&this.youtube&&this.youtube.pauseVideo()}seek(e){this.isReady&&this.youtube&&this.youtube.seekTo(e,!0)}setVolume(e){this.isReady&&this.youtube&&(this.youtube.setVolume(e*100),this.player.state.volume=e)}setMuted(e){this.isReady&&this.youtube&&(e?this.youtube.mute():this.youtube.unMute(),this.player.state.muted=e)}setPlaybackSpeed(e){this.isReady&&this.youtube&&(this.youtube.setPlaybackRate(e),this.player.state.playbackSpeed=e)}destroy(){this.timeUpdateInterval&&clearInterval(this.timeUpdateInterval),this.youtube&&this.youtube.destroy&&this.youtube.destroy(),this.iframe&&this.iframe.parentNode&&this.iframe.parentNode.removeChild(this.iframe),this.player.element&&(this.player.element.style.display="")}};export{s as YouTubeRenderer};
@@ -0,0 +1,6 @@
1
+ /*!
2
+ * Universal, Accessible Video Player
3
+ * (c) 2025 Matthias Peltzer
4
+ * Released under GPL-2.0-or-later License
5
+ */
6
+ var n=class{constructor(e){this.player=e,this.media=e.element}async init(){this.media.controls=!1,this.media.removeAttribute("controls"),this.attachEvents(),this.media.preload=this.player.options.preload,this.media.load(),this.player.container&&this.player.container.classList.remove("vidply-external-controls")}attachEvents(){this.media.addEventListener("loadedmetadata",()=>{this.player.state.duration=this.media.duration,this.player.emit("loadedmetadata")}),this.media.addEventListener("play",()=>{this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.emit("play"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player),this.player.options.pauseOthersOnPlay&&this.pauseOtherPlayers()}),this.media.addEventListener("pause",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player)}),this.media.addEventListener("ended",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player),this.player.options.loop&&(this.player.seek(0),this.player.play())}),this.media.addEventListener("timeupdate",()=>{this.player.state.currentTime=this.media.currentTime,this.player.emit("timeupdate",this.media.currentTime),this.player.options.onTimeUpdate&&this.player.options.onTimeUpdate.call(this.player,this.media.currentTime)}),this.media.addEventListener("volumechange",()=>{this.player.state.volume=this.media.volume,this.player.state.muted=this.media.muted,this.player.emit("volumechange",this.media.volume),this.player.options.onVolumeChange&&this.player.options.onVolumeChange.call(this.player,this.media.volume)}),this.media.addEventListener("seeking",()=>{this.player.state.seeking=!0,this.player.emit("seeking")}),this.media.addEventListener("seeked",()=>{this.player.state.seeking=!1,this.player.emit("seeked")}),this.media.addEventListener("waiting",()=>{this.player.state.buffering=!0,this.player.emit("waiting")}),this.media.addEventListener("canplay",()=>{this.player.state.buffering=!1,this.player.emit("canplay")}),this.media.addEventListener("progress",()=>{if(this.media.buffered.length>0){let e=this.media.buffered.end(this.media.buffered.length-1);this.player.emit("progress",e)}}),this.media.addEventListener("error",e=>{this.player.handleError(this.media.error)}),this.media.addEventListener("ratechange",()=>{this.player.state.playbackSpeed=this.media.playbackRate,this.player.emit("ratechange",this.media.playbackRate)})}pauseOtherPlayers(){document.querySelectorAll(".vidply-player").forEach(t=>{if(t!==this.player.container){let i=t.querySelector("video, audio");i&&!i.paused&&i.pause()}})}play(){let e=window.scrollX,t=window.scrollY,i=this.media.play();window.scrollTo(e,t),i!==void 0&&i.catch(s=>{if(this.player.log("Play failed:",s,"warn"),this.player.options.autoplay&&!this.player.state.muted){this.player.log("Retrying play with muted audio","info"),this.media.muted=!0;let a=window.scrollX,r=window.scrollY;this.media.play().then(()=>{window.scrollTo(a,r)}).catch(l=>{this.player.handleError(l)})}})}pause(){this.media.pause()}seek(e){this.media.currentTime=e}setVolume(e){this.media.volume=e}setMuted(e){this.media.muted=e}setPlaybackSpeed(e){this.media.playbackRate=e}getQualities(){let e=Array.from(this.media.querySelectorAll("source"));return e.length<=1?[]:e.map((t,i)=>{let s=t.getAttribute("data-quality")||t.getAttribute("label")||"",a=t.getAttribute("data-height")||this.extractHeightFromLabel(s),r=t.getAttribute("data-width")||"";return{index:i,height:a?parseInt(a):0,width:r?parseInt(r):0,src:t.src,type:t.type,name:s||(a?`${a}p`:`Quality ${i+1}`)}}).filter(t=>t.height>0)}extractHeightFromLabel(e){let t=e.match(/(\d+)p/i);return t?parseInt(t[1]):0}switchQuality(e){let t=this.getQualities();if(e<0||e>=t.length){this.player.log("Invalid quality index","warn");return}let i=t[e],s=this.media.currentTime,a=!this.media.paused;if(this.media.currentSrc===i.src){this.player.log("Already at this quality level","info");return}this.player.log(`Switching to quality: ${i.name}`,"info"),this.media.src=i.src;let l=()=>{this.media.removeEventListener("loadedmetadata",l),this.media.currentTime=s,a&&this.media.play().catch(h=>{this.player.log("Failed to resume playback after quality switch","warn")}),this.player.emit("qualitychange",{quality:i.name,index:e})};this.media.addEventListener("loadedmetadata",l),this.media.load()}getCurrentQuality(){let e=this.getQualities(),t=this.media.currentSrc;for(let i=0;i<e.length;i++)if(e[i].src===t)return i;return 0}destroy(){this.media.removeEventListener("loadedmetadata",()=>{}),this.media.removeEventListener("play",()=>{}),this.media.removeEventListener("pause",()=>{})}};export{n as a};