@mintplayer/vue-video-player 3.0.0 → 3.1.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
@@ -32,6 +32,9 @@ const playerState = ref(EPlayerState.unstarted);
32
32
  </template>
33
33
  ```
34
34
 
35
+ `volume` and `mute` are kept across media, also when the next URL plays on another platform. Leave
36
+ them unbound to start at the first platform's own settings; they no longer default to `0` / `false`.
37
+
35
38
  ## Building
36
39
 
37
40
  Run `nx build vue-video-player` to bundle the library with Vite.
@@ -0,0 +1 @@
1
+ const e=require("./src-CluKb0O6.js"),t=require("./takeUntil-MRP2QN5v.js"),n=require("./timer-mrjvJwyN.js");var r=require("./src-CYCud0_r.js").t(),i=class{get id(){return`soundcloud`}urlRegexes=[new RegExp(/(?<id>http[s]{0,1}:\/\/(www\.){0,1}soundcloud\.com\/.+)$/,`g`)];loadApi(){return(0,r.loadScript)(`https://w.soundcloud.com/player/api.js`)}prepareHtml(e){let t=encodeURIComponent(e.initialVideoId??``);return`<iframe id="${e.domId}" width="${e.width}" height="${e.height}" style="max-width:100%" src="https://w.soundcloud.com/player/?url=${t}&amp;show_teaser=false&amp;" allow="autoplay"></iframe>`}createPlayer(r,i){return new Promise((a,o)=>{if(!r.element)return o(`The SoundCloud api requires the options.element to be set`);let s=new e.i,c=SC.Widget(r.element.getElementsByTagName(`iframe`)[0]),l=50,u=50,d=!1,f=0,p=()=>{d||(u=l),d=!0},m=e.r({capabilities:[e.t.volume,e.t.mute,e.t.getTitle],loadVideoById:e=>c.load(e,{auto_play:r.autoplay}),setPlayerState:t=>{switch(t){case e.n.playing:c.play();break;case e.n.paused:c.pause();break;case e.n.ended:case e.n.unstarted:}},setMute:e=>{f=Date.now(),e?(p(),c.setVolume(0)):(d=!1,l=u,c.setVolume(u))},setVolume:e=>{d?u=e:(l=e,c.setVolume(e))},setProgress:e=>c.seekTo(e*1e3),setSize:(e,t)=>{if(r.element){let n=r.element.querySelector(`iframe`);n&&(n.width=String(e),n.height=String(t))}},getTitle:()=>new Promise(e=>c.getCurrentSound(t=>e(t.description??t.title))),setFullscreen:e=>{e&&(console.warn(`SoundCloud player doesn't support fullscreen mode`),setTimeout(()=>m.onFullscreenChange(!1),50))},getFullscreen:()=>new Promise(e=>e(!1)),setPip:e=>{e&&(console.warn(`SoundCloud player doesn't support PIP mode`),setTimeout(()=>m.onPipChange(!1),50))},getPip:()=>new Promise(e=>e(!1)),destroy:()=>s.next(!0)});c.bind(SC.Widget.Events.READY,()=>{a(m),typeof window<`u`&&n.t(0,50).pipe(t.t(s),t.t(i)).subscribe(()=>{c.getVolume(e=>{let t=Date.now()-f>150;e>0?(l=e,t&&(d=!1)):t&&p(),m.onVolumeChange(d?u:e),m.onMuteChange(e===0)})})}),c.bind(SC.Widget.Events.PLAY,()=>{m.onStateChange(e.n.playing),c.getDuration(e=>m.onDurationChange(e/1e3))}),c.bind(SC.Widget.Events.PAUSE,()=>m.onStateChange(e.n.paused)),c.bind(SC.Widget.Events.FINISH,()=>m.onStateChange(e.n.ended)),c.bind(SC.Widget.Events.PLAY_PROGRESS,e=>m.onCurrentTimeChange(e.currentPosition/1e3))})}};exports.SoundcloudApiService=i;
@@ -0,0 +1 @@
1
+ const e=require("./src-CluKb0O6.js"),t=require("./takeUntil-MRP2QN5v.js"),n=require("./timer-mrjvJwyN.js");var r=require("./src-CYCud0_r.js").t(),i=class{get id(){return`vimeo`}urlRegexes=[new RegExp(/http[s]{0,1}:\/\/(www\.){0,1}vimeo\.com\/(?<id>[0-9]+)$/,`g`)];loadApi(){return(0,r.loadScript)(`https://player.vimeo.com/api/player.js`)}prepareHtml(e){return`<div id="${e.domId}" style="max-width:100%"></div>`}createPlayer(r,i){return new Promise((a,o)=>{if(!r.domId)return o(`The Vimeo api requires the options.domId to be set`);if(!r.initialVideoId)return o(`Vimeo requires an initial video`);let s=new e.i,c,l=new Vimeo.Player(r.domId,{id:r.initialVideoId,width:r.width,height:r.height,autoplay:r.autoplay,pip:!0}),u=null,d=!1,f=0,p=e=>{u=e;let t=d;return Promise.resolve(l.setVolume(e/100)).then(()=>{t&&d&&l.setMuted(!0)}).catch(()=>void 0)},m=e=>(d=e.muted,f=Date.now(),e.muted&&l.setMuted(!0),e.volume===null?Promise.resolve():p(e.volume));l.ready().then(()=>{c=e.r({capabilities:[e.t.fullscreen,e.t.pictureInPicture,e.t.volume,e.t.mute,e.t.getTitle],loadVideoById:e=>{let t={volume:u,muted:d};Promise.resolve(l.loadVideo(e)).then(()=>m(t)).catch(()=>void 0)},setPlayerState:t=>{switch(t){case e.n.playing:l.play();break;case e.n.paused:l.pause();break;case e.n.ended:case e.n.unstarted:}},setVolume:e=>{p(e)},setMute:e=>{d=e,f=Date.now(),l.setMuted(e)},setProgress:e=>l.setCurrentTime(e),setSize:(e,t)=>{if(r.element){let n=r.element.querySelector(`div iframe`);n&&(n.width=String(e),n.height=String(t))}},getTitle:()=>l.getVideoTitle(),setFullscreen:e=>{e?l.requestFullscreen():l.exitFullscreen()},getFullscreen:()=>l.getFullscreen(),setPip:e=>{e?(l.requestPictureInPicture(),setTimeout(()=>{l.getPictureInPicture().then(t=>{t!==e&&(console.warn(`To enable pip from outside its iframe, you need to first focus the player, then call setPip`),c.onPipChange(t))})},50)):l.exitPictureInPicture()},getPip:()=>l.getPictureInPicture(),destroy:()=>{s.next(!0),l.destroy()}}),a(c)});let h=!1;l.on(`loaded`,()=>{c.onStateChange(e.n.unstarted),typeof window<`u`&&(setTimeout(()=>r.autoplay&&l.play(),600),h||(h=!0,n.t(0,50).pipe(t.t(s),t.t(i)).subscribe(()=>{l.getMuted().then(e=>{Date.now()-f>150&&(d=e),c.onMuteChange(e)})})),l.getVolume().then(e=>c.onVolumeChange(e*100)),l.getDuration().then(e=>c.onDurationChange(e)))}),l.on(`play`,()=>c.onStateChange(e.n.playing)),l.on(`pause`,()=>c.onStateChange(e.n.paused)),l.on(`ended`,()=>c.onStateChange(e.n.ended)),l.on(`volumechange`,e=>{u=e.volume*100,c.onVolumeChange(u)}),l.on(`timeupdate`,e=>c.onCurrentTimeChange(e.seconds)),l.on(`enterpictureinpicture`,()=>c.onPipChange(!0)),l.on(`leavepictureinpicture`,()=>c.onPipChange(!1)),l.on(`fullscreenchange`,e=>c.onFullscreenChange(e.fullscreen))})}};exports.VimeoApiService=i;
@@ -18,8 +18,14 @@ var s = o(), c = class {
18
18
  createPlayer(o, s) {
19
19
  return new Promise((c, l) => {
20
20
  if (!o.element) return l("The SoundCloud api requires the options.element to be set");
21
- let u = new e(), d = SC.Widget(o.element.getElementsByTagName("iframe")[0]), f = 50, p = 50, m = n({
22
- capabilities: [r.volume, r.getTitle],
21
+ let u = new e(), d = SC.Widget(o.element.getElementsByTagName("iframe")[0]), f = 50, p = 50, m = !1, h = 0, g = () => {
22
+ m || (p = f), m = !0;
23
+ }, _ = n({
24
+ capabilities: [
25
+ r.volume,
26
+ r.mute,
27
+ r.getTitle
28
+ ],
23
29
  loadVideoById: (e) => d.load(e, { auto_play: o.autoplay }),
24
30
  setPlayerState: (e) => {
25
31
  switch (e) {
@@ -34,10 +40,10 @@ var s = o(), c = class {
34
40
  }
35
41
  },
36
42
  setMute: (e) => {
37
- e ? (p = f, d.setVolume(0)) : d.setVolume(p);
43
+ h = Date.now(), e ? (g(), d.setVolume(0)) : (m = !1, f = p, d.setVolume(p));
38
44
  },
39
45
  setVolume: (e) => {
40
- f = e, d.setVolume(e);
46
+ m ? p = e : (f = e, d.setVolume(e));
41
47
  },
42
48
  setProgress: (e) => d.seekTo(e * 1e3),
43
49
  setSize: (e, t) => {
@@ -48,24 +54,25 @@ var s = o(), c = class {
48
54
  },
49
55
  getTitle: () => new Promise((e) => d.getCurrentSound((t) => e(t.description ?? t.title))),
50
56
  setFullscreen: (e) => {
51
- e && (console.warn("SoundCloud player doesn't support fullscreen mode"), setTimeout(() => m.onFullscreenChange(!1), 50));
57
+ e && (console.warn("SoundCloud player doesn't support fullscreen mode"), setTimeout(() => _.onFullscreenChange(!1), 50));
52
58
  },
53
59
  getFullscreen: () => new Promise((e) => e(!1)),
54
60
  setPip: (e) => {
55
- e && (console.warn("SoundCloud player doesn't support PIP mode"), setTimeout(() => m.onPipChange(!1), 50));
61
+ e && (console.warn("SoundCloud player doesn't support PIP mode"), setTimeout(() => _.onPipChange(!1), 50));
56
62
  },
57
63
  getPip: () => new Promise((e) => e(!1)),
58
64
  destroy: () => u.next(!0)
59
65
  });
60
66
  d.bind(SC.Widget.Events.READY, () => {
61
- c(m), typeof window < "u" && a(0, 50).pipe(i(u), i(s)).subscribe(() => {
67
+ c(_), typeof window < "u" && a(0, 50).pipe(i(u), i(s)).subscribe(() => {
62
68
  d.getVolume((e) => {
63
- e > 0 && (f = e), m.onVolumeChange(e), m.onMuteChange(e === 0);
69
+ let t = Date.now() - h > 150;
70
+ e > 0 ? (f = e, t && (m = !1)) : t && g(), _.onVolumeChange(m ? p : e), _.onMuteChange(e === 0);
64
71
  });
65
72
  });
66
73
  }), d.bind(SC.Widget.Events.PLAY, () => {
67
- m.onStateChange(t.playing), d.getDuration((e) => m.onDurationChange(e / 1e3));
68
- }), d.bind(SC.Widget.Events.PAUSE, () => m.onStateChange(t.paused)), d.bind(SC.Widget.Events.FINISH, () => m.onStateChange(t.ended)), d.bind(SC.Widget.Events.PLAY_PROGRESS, (e) => m.onCurrentTimeChange(e.currentPosition / 1e3));
74
+ _.onStateChange(t.playing), d.getDuration((e) => _.onDurationChange(e / 1e3));
75
+ }), d.bind(SC.Widget.Events.PAUSE, () => _.onStateChange(t.paused)), d.bind(SC.Widget.Events.FINISH, () => _.onStateChange(t.ended)), d.bind(SC.Widget.Events.PLAY_PROGRESS, (e) => _.onCurrentTimeChange(e.currentPosition / 1e3));
69
76
  });
70
77
  }
71
78
  };
@@ -24,7 +24,13 @@ var s = o(), c = class {
24
24
  height: o.height,
25
25
  autoplay: o.autoplay,
26
26
  pip: !0
27
- });
27
+ }), p = null, m = !1, h = 0, g = (e) => {
28
+ p = e;
29
+ let t = m;
30
+ return Promise.resolve(f.setVolume(e / 100)).then(() => {
31
+ t && m && f.setMuted(!0);
32
+ }).catch(() => void 0);
33
+ }, _ = (e) => (m = e.muted, h = Date.now(), e.muted && f.setMuted(!0), e.volume === null ? Promise.resolve() : g(e.volume));
28
34
  f.ready().then(() => {
29
35
  d = n({
30
36
  capabilities: [
@@ -34,7 +40,13 @@ var s = o(), c = class {
34
40
  r.mute,
35
41
  r.getTitle
36
42
  ],
37
- loadVideoById: (e) => f.loadVideo(e),
43
+ loadVideoById: (e) => {
44
+ let t = {
45
+ volume: p,
46
+ muted: m
47
+ };
48
+ Promise.resolve(f.loadVideo(e)).then(() => _(t)).catch(() => void 0);
49
+ },
38
50
  setPlayerState: (e) => {
39
51
  switch (e) {
40
52
  case t.playing:
@@ -47,8 +59,12 @@ var s = o(), c = class {
47
59
  case t.unstarted:
48
60
  }
49
61
  },
50
- setVolume: (e) => f.setVolume(e / 100),
51
- setMute: (e) => f.setMuted(e),
62
+ setVolume: (e) => {
63
+ g(e);
64
+ },
65
+ setMute: (e) => {
66
+ m = e, h = Date.now(), f.setMuted(e);
67
+ },
52
68
  setProgress: (e) => f.setCurrentTime(e),
53
69
  setSize: (e, t) => {
54
70
  if (o.element) {
@@ -73,11 +89,17 @@ var s = o(), c = class {
73
89
  u.next(!0), f.destroy();
74
90
  }
75
91
  }), c(d);
76
- }), f.on("loaded", () => {
77
- d.onStateChange(t.unstarted), typeof window < "u" && (setTimeout(() => o.autoplay && f.play(), 600), a(0, 50).pipe(i(u), i(s)).subscribe(() => {
78
- f.getMuted().then((e) => d.onMuteChange(e));
79
- }), f.getVolume().then((e) => d.onVolumeChange(e * 100)), f.getDuration().then((e) => d.onDurationChange(e)));
80
- }), f.on("play", () => d.onStateChange(t.playing)), f.on("pause", () => d.onStateChange(t.paused)), f.on("ended", () => d.onStateChange(t.ended)), f.on("volumechange", (e) => d.onVolumeChange(e.volume * 100)), f.on("timeupdate", (e) => d.onCurrentTimeChange(e.seconds)), f.on("enterpictureinpicture", () => d.onPipChange(!0)), f.on("leavepictureinpicture", () => d.onPipChange(!1)), f.on("fullscreenchange", (e) => d.onFullscreenChange(e.fullscreen));
92
+ });
93
+ let v = !1;
94
+ f.on("loaded", () => {
95
+ d.onStateChange(t.unstarted), typeof window < "u" && (setTimeout(() => o.autoplay && f.play(), 600), v || (v = !0, a(0, 50).pipe(i(u), i(s)).subscribe(() => {
96
+ f.getMuted().then((e) => {
97
+ Date.now() - h > 150 && (m = e), d.onMuteChange(e);
98
+ });
99
+ })), f.getVolume().then((e) => d.onVolumeChange(e * 100)), f.getDuration().then((e) => d.onDurationChange(e)));
100
+ }), f.on("play", () => d.onStateChange(t.playing)), f.on("pause", () => d.onStateChange(t.paused)), f.on("ended", () => d.onStateChange(t.ended)), f.on("volumechange", (e) => {
101
+ p = e.volume * 100, d.onVolumeChange(p);
102
+ }), f.on("timeupdate", (e) => d.onCurrentTimeChange(e.seconds)), f.on("enterpictureinpicture", () => d.onPipChange(!0)), f.on("leavepictureinpicture", () => d.onPipChange(!1)), f.on("fullscreenchange", (e) => d.onFullscreenChange(e.fullscreen));
81
103
  });
82
104
  }
83
105
  };
package/index.css CHANGED
@@ -1,2 +1,2 @@
1
- .vue-video-player[data-v-6080c43c]{justify-content:center;align-items:center;display:flex}.vue-video-player>div[data-v-6080c43c]{width:100%}
1
+ .vue-video-player[data-v-9f2a491a]{justify-content:center;align-items:center;display:flex}.vue-video-player>div[data-v-9f2a491a]{width:100%}
2
2
  /*$vite$:1*/
package/index.js CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./src-CluKb0O6.js"),t=require("./BehaviorSubject-B43NQ6Ep.js"),n=require("./debounceTime-B4ed_w3_.js"),r=require("./takeUntil-MRP2QN5v.js"),i=require("./mapOneOrManyArgs-gqACUB3e.js"),a=require("./filter-Ck2Y29AT.js");let o=require("vue");function s(t,n){return n===void 0&&(n=e.c),t??=c,e.o(function(r,i){var a,o=!0;r.subscribe(e.a(i,function(e){var r=n(e);(o||!t(a,r))&&(o=!1,a=r,i.next(e))}))})}function c(e,t){return e===t}function l(e,t){return t.map(t=>{let n=t.urlRegexes.map(t=>new RegExp(t).exec(e)).filter(e=>e!==null);return n.length===0||n[0]===null||!n[0].groups?null:t.match2id?{api:t,id:t.match2id(n[0])}:{api:t,id:n[0].groups.id}}).filter(e=>e!==null).map(e=>e)}var u=class o{constructor(o,c){this.url$=new t.t(null),this.apis$=new t.t([]),this.host$=new t.t(void 0),this.videoRequest$=new t.t(null),this.playerInfo=null,this.domId=`player`,this.handlers=[],this.volumeObserver$=new e.i,this.muteObserver$=new e.i,this.currentTimeObserver$=new e.i,this.durationObserver$=new e.i,this.playerStateObserver$=new e.i,this.pipObserver$=new e.i,this.fullscreenObserver$=new e.i,this._width=600,this._height=450,this.autoplay=!0,this._volume=0,this._mute=!1,this._isFullscreen=!1,this._isPip=!1,this.destroyed$=new e.i,this.host$.next(c),this.apis$.next(o||[]),n.n([this.url$,this.host$,this.apis$]).pipe(n.t(20),r.t(this.destroyed$)).subscribe(([e,t,n])=>{if(t){if(e===null)this.playerInfo?.adapter?.destroy(),this.playerInfo=null,t.innerHTML=``;else{let t=l(e,n);if(t.length>0)this.videoRequest$.next(t[0]);else if(n.length>0)throw`No player found for url ${e}`}}}),n.n([this.videoRequest$,this.host$]).pipe(a.t(([e,t])=>!!t)).pipe(r.t(this.destroyed$)).subscribe(([e,t])=>{e?e.api.loadApi().then(()=>{e.api.id===this.playerInfo?.platformId&&e.api.canReusePlayer!==!1?this.playerInfo.adapter.loadVideoById(e.id):(this.playerInfo?.adapter?.destroy(),this.setHtml(e,t),e.api.createPlayer({width:this.width,height:this.height,autoplay:this.autoplay,domId:this.domId,element:t,initialVideoId:e.id},this.destroyed$).then(t=>{this.playerInfo={platformId:e.api.id,videoId:e.id,adapter:t},t.onStateChange=e=>this.playerStateObserver$.next(e),t.onMuteChange=e=>this.muteObserver$.next(e),t.onVolumeChange=e=>this.volumeObserver$.next(e),t.onCurrentTimeChange=e=>this.currentTimeObserver$.next(e),t.onDurationChange=e=>this.durationObserver$.next(e),t.onPipChange=e=>this.pipObserver$.next(e),t.onFullscreenChange=e=>this.fullscreenObserver$.next(e),this.invokeEvent(`capabilitiesChange`,t.capabilities)}).then(()=>{e!==null&&e.id!==void 0&&this.playerInfo?.adapter.loadVideoById(e.id)}),this.pipObserver$.next(!1),this.fullscreenObserver$.next(!1))}):(this.playerInfo?.adapter?.destroy(),t&&(t.innerHTML=``))}),this.volumeObserver$.pipe(n.t(20),s(),a.t(e=>e!==null),r.t(this.destroyed$)).subscribe(e=>this.invokeEvent(`volumeChange`,this._volume=e)),this.muteObserver$.pipe(n.t(20),s(),r.t(this.destroyed$)).subscribe(e=>this.invokeEvent(`muteChange`,this._mute=e)),this.playerStateObserver$.pipe(n.t(20),s(),r.t(this.destroyed$)).subscribe(e=>this.invokeEvent(`stateChange`,e)),this.pipObserver$.pipe(n.t(20),s(),r.t(this.destroyed$)).subscribe(e=>this.invokeEvent(`isPipChange`,this._isPip=e)),this.fullscreenObserver$.pipe(n.t(20),s(),r.t(this.destroyed$)).subscribe(e=>this.invokeEvent(`isFullscreenChange`,this._isFullscreen=e)),this.progressObserver$=n.n([this.currentTimeObserver$,this.durationObserver$]).pipe(n.t(10),r.t(this.destroyed$)).pipe(i.n(([e,t])=>({currentTime:e,duration:t}))),this.progressObserver$.pipe(r.t(this.destroyed$)).subscribe(e=>this.invokeEvent(`progressChange`,e))}get url(){return this.url$.value}set url(e){this.url$.next(e||null)}set apis(e){this.apis$.next(e)}set host(e){this.host$.next(e)}static{this.playerCounter=1}on(e,t){this.handlers.push({event:e,handler:t})}off(e,t){let n=this.handlers.findIndex(n=>n.event===e&&n.handler===t);n>-1&&this.handlers.splice(n,1)}invokeEvent(e,t){this.handlers.filter(t=>t.event===e).forEach(e=>e.handler(t))}setHtml(e,t){e?(this.domId=`player${o.playerCounter++}`,t.innerHTML=e.api.prepareHtml({domId:this.domId,width:this._width,height:this._height,initialVideoId:e.id,autoplay:this.autoplay})):t.innerHTML=``}get width(){return this._width}set width(e){this._width=e,this.playerInfo?.adapter.setSize(this._width,this._height)}get height(){return this._height}set height(e){this._height=e,this.playerInfo?.adapter.setSize(this._width,this._height)}set playerState(e){this.playerInfo?.adapter.setPlayerState(e)}getTitle(){return new Promise(e=>{let t=this.playerInfo?.adapter;t?t.getTitle().then(t=>e(t)):e(null)})}get volume(){return this._volume}set volume(e){this._volume=e,this.playerInfo?.adapter.setVolume(e)}get mute(){return this._mute}set mute(e){this._mute=e,this.playerInfo?.adapter.setMute(e)}get isFullscreen(){return this._isFullscreen}set isFullscreen(e){this.playerInfo&&this.playerInfo.adapter&&this.playerInfo.adapter.setFullscreen(e)}get isPip(){return this._isPip}set isPip(e){this.playerInfo&&this.playerInfo.adapter&&this.playerInfo.adapter.setPip(e)}setIsPip(e){this.playerInfo?.adapter?.setPip(e)}destroy(){this.playerInfo?.adapter?.destroy(),this.destroyed$.next(!0)}},d=()=>Promise.resolve().then(()=>require("./api-D5spnI9J.js")).then(e=>new e.DailymotionApiService),f=()=>Promise.resolve().then(()=>require("./api-C-ycGc3Y.js")).then(e=>new e.FacebookApiService),p=()=>Promise.resolve().then(()=>require("./api-BXwOuGGp.js")).then(e=>new e.FileApiService),m=()=>Promise.resolve().then(()=>require("./api-C355Aio5.js")).then(e=>new e.MixcloudApiService),h=()=>Promise.resolve().then(()=>require("./api-B6qyhEI3.js")).then(e=>new e.SoundcloudApiService),g=()=>Promise.resolve().then(()=>require("./api-D0zr0PoA.js")).then(e=>new e.SpotifyApiService),_=()=>Promise.resolve().then(()=>require("./api-CERg1lOE.js")).then(e=>new e.StreamableService),v=()=>Promise.resolve().then(()=>require("./api-noLuragZ.js")).then(e=>new e.TwitchApiService),y=()=>Promise.resolve().then(()=>require("./api-CjAlKHz7.js")).then(e=>new e.VidyardService),b=()=>Promise.resolve().then(()=>require("./api-C2TK5P8W.js")).then(e=>new e.VimeoApiService),x=()=>Promise.resolve().then(()=>require("./api-D55GaoJG.js")).then(e=>new e.WistiaService),S=()=>Promise.resolve().then(()=>require("./api-CExMX1Pt.js")).then(e=>new e.YoutubeApiService),C={class:`vue-video-player`},w=((e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n})((0,o.defineComponent)({__name:`vue-video-player`,props:{url:{},volume:{default:0},mute:{type:Boolean,default:!1},playerState:{default:e.n.unstarted}},emits:[`update:volume`,`update:mute`,`update:playerState`],setup(e,{emit:t}){let n=e,r=t,i=(0,o.ref)(null),a=(0,o.ref)(),s=e=>r(`update:volume`,e),c=e=>r(`update:mute`,e),l=e=>r(`update:playerState`,e);return(0,o.onMounted)(async()=>{let e=await Promise.all([S,d,b,h,m,v,g,_,f,p,y,x].map(e=>e())),t=i.value??void 0;a.value=new u(e,t),a.value.on(`volumeChange`,s),a.value.on(`muteChange`,c),a.value.on(`stateChange`,l),n.url!==void 0&&(a.value.url=n.url),a.value.volume=n.volume,a.value.mute=n.mute,a.value.playerState=n.playerState}),(0,o.watch)(()=>n.url,e=>{a.value&&(a.value.url=e)}),(0,o.watch)(()=>n.volume,e=>{a.value&&(a.value.volume=e)}),(0,o.watch)(()=>n.mute,e=>{a.value&&(a.value.mute=e)}),(0,o.watch)(()=>n.playerState,e=>{a.value&&(a.value.playerState=e)}),(0,o.onBeforeUnmount)(()=>{a.value&&=(a.value.off(`volumeChange`,s),a.value.off(`muteChange`,c),a.value.off(`stateChange`,l),a.value.destroy(),void 0)}),(e,t)=>((0,o.openBlock)(),(0,o.createElementBlock)(`div`,C,[(0,o.createElementVNode)(`div`,{ref_key:`container`,ref:i},null,512)]))}}),[[`__scopeId`,`data-v-6080c43c`]]);exports.VueVideoPlayer=w;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./src-CluKb0O6.js"),t=require("./BehaviorSubject-B43NQ6Ep.js"),n=require("./debounceTime-B4ed_w3_.js"),r=require("./takeUntil-MRP2QN5v.js"),i=require("./mapOneOrManyArgs-gqACUB3e.js"),a=require("./filter-Ck2Y29AT.js");let o=require("vue");function s(t,n){return n===void 0&&(n=e.c),t??=c,e.o(function(r,i){var a,o=!0;r.subscribe(e.a(i,function(e){var r=n(e);(o||!t(a,r))&&(o=!1,a=r,i.next(e))}))})}function c(e,t){return e===t}function l(e,t){return t.map(t=>{let n=t.urlRegexes.map(t=>new RegExp(t).exec(e)).filter(e=>e!==null);return n.length===0||n[0]===null||!n[0].groups?null:t.match2id?{api:t,id:t.match2id(n[0])}:{api:t,id:n[0].groups.id}}).filter(e=>e!==null).map(e=>e)}var u=class o{constructor(o,c){this.url$=new t.t(null),this.apis$=new t.t([]),this.host$=new t.t(void 0),this.videoRequest$=new t.t(null),this.playerInfo=null,this.domId=`player`,this.handlers=[],this.volumeObserver$=new e.i,this.muteObserver$=new e.i,this.currentTimeObserver$=new e.i,this.durationObserver$=new e.i,this.playerStateObserver$=new e.i,this.pipObserver$=new e.i,this.fullscreenObserver$=new e.i,this._width=600,this._height=450,this.autoplay=!0,this.desiredVolume=void 0,this.desiredMute=void 0,this.settleUntil=0,this.lastReapply=0,this._isFullscreen=!1,this._isPip=!1,this.destroyed$=new e.i,this.host$.next(c),this.apis$.next(o||[]),n.n([this.url$,this.host$,this.apis$]).pipe(n.t(20),r.t(this.destroyed$)).subscribe(([e,t,n])=>{if(t){if(e===null)this.playerInfo?.adapter?.destroy(),this.playerInfo=null,t.innerHTML=``;else{let t=l(e,n);if(t.length>0)this.videoRequest$.next(t[0]);else if(n.length>0)throw`No player found for url ${e}`}}}),n.n([this.videoRequest$,this.host$]).pipe(a.t(([e,t])=>!!t)).pipe(r.t(this.destroyed$)).subscribe(([e,t])=>{e?e.api.loadApi().then(()=>{e.api.id===this.playerInfo?.platformId&&e.api.canReusePlayer!==!1?this.loadAndApplySettings(this.playerInfo.adapter,e.id):(this.playerInfo?.adapter?.destroy(),this.setHtml(e,t),e.api.createPlayer({width:this.width,height:this.height,autoplay:this.autoplay,domId:this.domId,element:t,initialVideoId:e.id},this.destroyed$).then(t=>{this.playerInfo={platformId:e.api.id,videoId:e.id,adapter:t},t.onStateChange=e=>this.playerStateObserver$.next(e),t.onMuteChange=e=>this.muteObserver$.next(e),t.onVolumeChange=e=>this.volumeObserver$.next(e),t.onCurrentTimeChange=e=>this.currentTimeObserver$.next(e),t.onDurationChange=e=>this.durationObserver$.next(e),t.onPipChange=e=>this.pipObserver$.next(e),t.onFullscreenChange=e=>this.fullscreenObserver$.next(e),this.invokeEvent(`capabilitiesChange`,t.capabilities)}).then(()=>{let t=this.playerInfo?.adapter;t&&e.id!==void 0?this.loadAndApplySettings(t,e.id):t&&this.applySettings(t)}),this.pipObserver$.next(!1),this.fullscreenObserver$.next(!1))}):(this.playerInfo?.adapter?.destroy(),t&&(t.innerHTML=``))}),this.volumeObserver$.pipe(n.t(20),r.t(this.destroyed$)).subscribe(e=>this.onVolumeReport(e)),this.muteObserver$.pipe(n.t(20),r.t(this.destroyed$)).subscribe(e=>this.onMuteReport(e)),this.playerStateObserver$.pipe(n.t(20),s(),r.t(this.destroyed$)).subscribe(e=>this.invokeEvent(`stateChange`,e)),this.pipObserver$.pipe(n.t(20),s(),r.t(this.destroyed$)).subscribe(e=>this.invokeEvent(`isPipChange`,this._isPip=e)),this.fullscreenObserver$.pipe(n.t(20),s(),r.t(this.destroyed$)).subscribe(e=>this.invokeEvent(`isFullscreenChange`,this._isFullscreen=e)),this.progressObserver$=n.n([this.currentTimeObserver$,this.durationObserver$]).pipe(n.t(10),r.t(this.destroyed$)).pipe(i.n(([e,t])=>({currentTime:e,duration:t}))),this.progressObserver$.pipe(r.t(this.destroyed$)).subscribe(e=>this.invokeEvent(`progressChange`,e))}get url(){return this.url$.value}set url(e){this.url$.next(e||null)}set apis(e){this.apis$.next(e)}set host(e){this.host$.next(e)}static{this.playerCounter=1}on(e,t){this.handlers.push({event:e,handler:t})}off(e,t){let n=this.handlers.findIndex(n=>n.event===e&&n.handler===t);n>-1&&this.handlers.splice(n,1)}invokeEvent(e,t){this.handlers.filter(t=>t.event===e).forEach(e=>e.handler(t))}setHtml(e,t){e?(this.domId=`player${o.playerCounter++}`,t.innerHTML=e.api.prepareHtml({domId:this.domId,width:this._width,height:this._height,initialVideoId:e.id,autoplay:this.autoplay})):t.innerHTML=``}get width(){return this._width}set width(e){this._width=e,this.playerInfo?.adapter.setSize(this._width,this._height)}get height(){return this._height}set height(e){this._height=e,this.playerInfo?.adapter.setSize(this._width,this._height)}set playerState(e){this.playerInfo?.adapter.setPlayerState(e)}getTitle(){return new Promise(e=>{let t=this.playerInfo?.adapter;t?t.getTitle().then(t=>e(t)):e(null)})}static{this.SETTLE_MS=2e3}static{this.REAPPLY_INTERVAL_MS=250}get volume(){return this.desiredVolume??0}set volume(t){if(typeof t!=`number`||!Number.isFinite(t))return;this.desiredVolume=t;let n=this.playerInfo?.adapter;n&&this.can(n,e.t.volume)&&(this.openSettleWindow(),this.call(()=>n.setVolume(t)))}get mute(){return this.desiredMute??!1}set mute(t){if(typeof t!=`boolean`)return;this.desiredMute=t;let n=this.playerInfo?.adapter;n&&this.can(n,e.t.mute)&&(this.openSettleWindow(),this.call(()=>n.setMute(t)))}loadAndApplySettings(e,t){try{e.loadVideoById(t)}finally{this.applySettings(e)}}applySettings(t,n=!0){n&&this.openSettleWindow();let r=this.can(t,e.t.mute);if(r&&this.desiredMute===!0&&this.call(()=>t.setMute(!0)),this.desiredVolume!==void 0&&this.can(t,e.t.volume)){let e=this.desiredVolume;this.call(()=>t.setVolume(e))}r&&this.desiredMute===!1&&this.call(()=>t.setMute(!1))}onVolumeReport(e){typeof e==`number`&&Number.isFinite(e)&&(this.desiredVolume!==void 0&&Math.abs(this.desiredVolume-e)<.5||(this.desiredVolume!==void 0&&this.isSettling()?this.reapply():(this.desiredVolume=e,this.invokeEvent(`volumeChange`,e))))}onMuteReport(e){typeof e==`boolean`&&this.desiredMute!==e&&(this.desiredMute!==void 0&&this.isSettling()?this.reapply():(this.desiredMute=e,this.invokeEvent(`muteChange`,e)))}openSettleWindow(){this.settleUntil=Date.now()+o.SETTLE_MS}isSettling(){return Date.now()<this.settleUntil}reapply(){let e=this.playerInfo?.adapter,t=Date.now();e&&t-this.lastReapply>=o.REAPPLY_INTERVAL_MS&&(this.lastReapply=t,this.applySettings(e,!1))}can(e,t){return(e.capabilities??[]).includes(t)}call(e){try{e()}catch(e){console.warn(`VideoPlayer: the player rejected a volume or mute change`,e)}}get isFullscreen(){return this._isFullscreen}set isFullscreen(e){this.playerInfo&&this.playerInfo.adapter&&this.playerInfo.adapter.setFullscreen(e)}get isPip(){return this._isPip}set isPip(e){this.playerInfo&&this.playerInfo.adapter&&this.playerInfo.adapter.setPip(e)}setIsPip(e){this.playerInfo?.adapter?.setPip(e)}destroy(){this.playerInfo?.adapter?.destroy(),this.destroyed$.next(!0)}},d=()=>Promise.resolve().then(()=>require("./api-D5spnI9J.js")).then(e=>new e.DailymotionApiService),f=()=>Promise.resolve().then(()=>require("./api-C-ycGc3Y.js")).then(e=>new e.FacebookApiService),p=()=>Promise.resolve().then(()=>require("./api-BXwOuGGp.js")).then(e=>new e.FileApiService),m=()=>Promise.resolve().then(()=>require("./api-C355Aio5.js")).then(e=>new e.MixcloudApiService),h=()=>Promise.resolve().then(()=>require("./api-BPDz2Xi1.js")).then(e=>new e.SoundcloudApiService),g=()=>Promise.resolve().then(()=>require("./api-D0zr0PoA.js")).then(e=>new e.SpotifyApiService),_=()=>Promise.resolve().then(()=>require("./api-CERg1lOE.js")).then(e=>new e.StreamableService),v=()=>Promise.resolve().then(()=>require("./api-noLuragZ.js")).then(e=>new e.TwitchApiService),y=()=>Promise.resolve().then(()=>require("./api-CjAlKHz7.js")).then(e=>new e.VidyardService),b=()=>Promise.resolve().then(()=>require("./api-CMl9Bi4e.js")).then(e=>new e.VimeoApiService),x=()=>Promise.resolve().then(()=>require("./api-D55GaoJG.js")).then(e=>new e.WistiaService),S=()=>Promise.resolve().then(()=>require("./api-CExMX1Pt.js")).then(e=>new e.YoutubeApiService),C={class:`vue-video-player`},w=((e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n})((0,o.defineComponent)({__name:`vue-video-player`,props:{url:{},volume:{default:void 0},mute:{type:Boolean,default:void 0},playerState:{default:e.n.unstarted}},emits:[`update:volume`,`update:mute`,`update:playerState`],setup(e,{emit:t}){let n=e,r=t,i=(0,o.ref)(null),a=(0,o.ref)(),s=e=>r(`update:volume`,e),c=e=>r(`update:mute`,e),l=e=>r(`update:playerState`,e);return(0,o.onMounted)(async()=>{let e=await Promise.all([S,d,b,h,m,v,g,_,f,p,y,x].map(e=>e())),t=i.value??void 0;a.value=new u(e,t),a.value.on(`volumeChange`,s),a.value.on(`muteChange`,c),a.value.on(`stateChange`,l),n.url!==void 0&&(a.value.url=n.url),n.volume!==void 0&&(a.value.volume=n.volume),n.mute!==void 0&&(a.value.mute=n.mute),a.value.playerState=n.playerState}),(0,o.watch)(()=>n.url,e=>{a.value&&(a.value.url=e)}),(0,o.watch)(()=>n.volume,e=>{a.value&&e!==void 0&&(a.value.volume=e)}),(0,o.watch)(()=>n.mute,e=>{a.value&&e!==void 0&&(a.value.mute=e)}),(0,o.watch)(()=>n.playerState,e=>{a.value&&(a.value.playerState=e)}),(0,o.onBeforeUnmount)(()=>{a.value&&=(a.value.off(`volumeChange`,s),a.value.off(`muteChange`,c),a.value.off(`stateChange`,l),a.value.destroy(),void 0)}),(e,t)=>((0,o.openBlock)(),(0,o.createElementBlock)(`div`,C,[(0,o.createElementVNode)(`div`,{ref_key:`container`,ref:i},null,512)]))}}),[[`__scopeId`,`data-v-9f2a491a`]]);exports.VueVideoPlayer=w;
package/index.mjs CHANGED
@@ -1,13 +1,13 @@
1
- import { a as e, c as t, i as n, n as r, o as i } from "./src-BWj0KcGd.mjs";
2
- import { t as a } from "./BehaviorSubject-CMEAHufI.mjs";
3
- import { n as o, t as s } from "./debounceTime-T7webJ8G.mjs";
4
- import { t as c } from "./takeUntil-zxKl50Ag.mjs";
5
- import { n as l } from "./mapOneOrManyArgs-Djtipmha.mjs";
6
- import { t as u } from "./filter-LJ9oGNCV.mjs";
7
- import { createElementBlock as d, createElementVNode as f, defineComponent as p, onBeforeUnmount as m, onMounted as h, openBlock as g, ref as _, watch as v } from "vue";
1
+ import { a as e, c as t, i as n, n as r, o as i, t as a } from "./src-BWj0KcGd.mjs";
2
+ import { t as o } from "./BehaviorSubject-CMEAHufI.mjs";
3
+ import { n as s, t as c } from "./debounceTime-T7webJ8G.mjs";
4
+ import { t as l } from "./takeUntil-zxKl50Ag.mjs";
5
+ import { n as u } from "./mapOneOrManyArgs-Djtipmha.mjs";
6
+ import { t as d } from "./filter-LJ9oGNCV.mjs";
7
+ import { createElementBlock as f, createElementVNode as p, defineComponent as m, onBeforeUnmount as h, onMounted as g, openBlock as _, ref as v, watch as y } from "vue";
8
8
  // ../../../node_modules/rxjs/dist/esm5/internal/operators/distinctUntilChanged.js
9
- function y(n, r) {
10
- return r === void 0 && (r = t), n ??= b, i(function(t, i) {
9
+ function b(n, r) {
10
+ return r === void 0 && (r = t), n ??= x, i(function(t, i) {
11
11
  var a, o = !0;
12
12
  t.subscribe(e(i, function(e) {
13
13
  var t = r(e);
@@ -15,11 +15,11 @@ function y(n, r) {
15
15
  }));
16
16
  });
17
17
  }
18
- function b(e, t) {
18
+ function x(e, t) {
19
19
  return e === t;
20
20
  }
21
21
  // ../../video-player/src/lib/player-type-finder.ts
22
- function x(e, t) {
22
+ function S(e, t) {
23
23
  return t.map((t) => {
24
24
  let n = t.urlRegexes.map((t) => new RegExp(t).exec(e)).filter((e) => e !== null);
25
25
  return n.length === 0 || n[0] === null || !n[0].groups ? null : t.match2id ? {
@@ -32,24 +32,24 @@ function x(e, t) {
32
32
  }).filter((e) => e !== null).map((e) => e);
33
33
  }
34
34
  // ../../video-player/src/lib/video-player.ts
35
- var S = class e {
35
+ var C = class e {
36
36
  constructor(e, t) {
37
- this.url$ = new a(null), this.apis$ = new a([]), this.host$ = new a(void 0), this.videoRequest$ = new a(null), this.playerInfo = null, this.domId = "player", this.handlers = [], this.volumeObserver$ = new n(), this.muteObserver$ = new n(), this.currentTimeObserver$ = new n(), this.durationObserver$ = new n(), this.playerStateObserver$ = new n(), this.pipObserver$ = new n(), this.fullscreenObserver$ = new n(), this._width = 600, this._height = 450, this.autoplay = !0, this._volume = 0, this._mute = !1, this._isFullscreen = !1, this._isPip = !1, this.destroyed$ = new n(), this.host$.next(t), this.apis$.next(e || []), o([
37
+ this.url$ = new o(null), this.apis$ = new o([]), this.host$ = new o(void 0), this.videoRequest$ = new o(null), this.playerInfo = null, this.domId = "player", this.handlers = [], this.volumeObserver$ = new n(), this.muteObserver$ = new n(), this.currentTimeObserver$ = new n(), this.durationObserver$ = new n(), this.playerStateObserver$ = new n(), this.pipObserver$ = new n(), this.fullscreenObserver$ = new n(), this._width = 600, this._height = 450, this.autoplay = !0, this.desiredVolume = void 0, this.desiredMute = void 0, this.settleUntil = 0, this.lastReapply = 0, this._isFullscreen = !1, this._isPip = !1, this.destroyed$ = new n(), this.host$.next(t), this.apis$.next(e || []), s([
38
38
  this.url$,
39
39
  this.host$,
40
40
  this.apis$
41
- ]).pipe(s(20), c(this.destroyed$)).subscribe(([e, t, n]) => {
41
+ ]).pipe(c(20), l(this.destroyed$)).subscribe(([e, t, n]) => {
42
42
  if (t) {
43
43
  if (e === null) this.playerInfo?.adapter?.destroy(), this.playerInfo = null, t.innerHTML = "";
44
44
  else {
45
- let t = x(e, n);
45
+ let t = S(e, n);
46
46
  if (t.length > 0) this.videoRequest$.next(t[0]);
47
47
  else if (n.length > 0) throw `No player found for url ${e}`;
48
48
  }
49
49
  }
50
- }), o([this.videoRequest$, this.host$]).pipe(u(([e, t]) => !!t)).pipe(c(this.destroyed$)).subscribe(([e, t]) => {
50
+ }), s([this.videoRequest$, this.host$]).pipe(d(([e, t]) => !!t)).pipe(l(this.destroyed$)).subscribe(([e, t]) => {
51
51
  e ? e.api.loadApi().then(() => {
52
- e.api.id === this.playerInfo?.platformId && e.api.canReusePlayer !== !1 ? this.playerInfo.adapter.loadVideoById(e.id) : (this.playerInfo?.adapter?.destroy(), this.setHtml(e, t), e.api.createPlayer({
52
+ e.api.id === this.playerInfo?.platformId && e.api.canReusePlayer !== !1 ? this.loadAndApplySettings(this.playerInfo.adapter, e.id) : (this.playerInfo?.adapter?.destroy(), this.setHtml(e, t), e.api.createPlayer({
53
53
  width: this.width,
54
54
  height: this.height,
55
55
  autoplay: this.autoplay,
@@ -63,13 +63,14 @@ var S = class e {
63
63
  adapter: t
64
64
  }, t.onStateChange = (e) => this.playerStateObserver$.next(e), t.onMuteChange = (e) => this.muteObserver$.next(e), t.onVolumeChange = (e) => this.volumeObserver$.next(e), t.onCurrentTimeChange = (e) => this.currentTimeObserver$.next(e), t.onDurationChange = (e) => this.durationObserver$.next(e), t.onPipChange = (e) => this.pipObserver$.next(e), t.onFullscreenChange = (e) => this.fullscreenObserver$.next(e), this.invokeEvent("capabilitiesChange", t.capabilities);
65
65
  }).then(() => {
66
- e !== null && e.id !== void 0 && this.playerInfo?.adapter.loadVideoById(e.id);
66
+ let t = this.playerInfo?.adapter;
67
+ t && e.id !== void 0 ? this.loadAndApplySettings(t, e.id) : t && this.applySettings(t);
67
68
  }), this.pipObserver$.next(!1), this.fullscreenObserver$.next(!1));
68
69
  }) : (this.playerInfo?.adapter?.destroy(), t && (t.innerHTML = ""));
69
- }), this.volumeObserver$.pipe(s(20), y(), u((e) => e !== null), c(this.destroyed$)).subscribe((e) => this.invokeEvent("volumeChange", this._volume = e)), this.muteObserver$.pipe(s(20), y(), c(this.destroyed$)).subscribe((e) => this.invokeEvent("muteChange", this._mute = e)), this.playerStateObserver$.pipe(s(20), y(), c(this.destroyed$)).subscribe((e) => this.invokeEvent("stateChange", e)), this.pipObserver$.pipe(s(20), y(), c(this.destroyed$)).subscribe((e) => this.invokeEvent("isPipChange", this._isPip = e)), this.fullscreenObserver$.pipe(s(20), y(), c(this.destroyed$)).subscribe((e) => this.invokeEvent("isFullscreenChange", this._isFullscreen = e)), this.progressObserver$ = o([this.currentTimeObserver$, this.durationObserver$]).pipe(s(10), c(this.destroyed$)).pipe(l(([e, t]) => ({
70
+ }), this.volumeObserver$.pipe(c(20), l(this.destroyed$)).subscribe((e) => this.onVolumeReport(e)), this.muteObserver$.pipe(c(20), l(this.destroyed$)).subscribe((e) => this.onMuteReport(e)), this.playerStateObserver$.pipe(c(20), b(), l(this.destroyed$)).subscribe((e) => this.invokeEvent("stateChange", e)), this.pipObserver$.pipe(c(20), b(), l(this.destroyed$)).subscribe((e) => this.invokeEvent("isPipChange", this._isPip = e)), this.fullscreenObserver$.pipe(c(20), b(), l(this.destroyed$)).subscribe((e) => this.invokeEvent("isFullscreenChange", this._isFullscreen = e)), this.progressObserver$ = s([this.currentTimeObserver$, this.durationObserver$]).pipe(c(10), l(this.destroyed$)).pipe(u(([e, t]) => ({
70
71
  currentTime: e,
71
72
  duration: t
72
- }))), this.progressObserver$.pipe(c(this.destroyed$)).subscribe((e) => this.invokeEvent("progressChange", e));
73
+ }))), this.progressObserver$.pipe(l(this.destroyed$)).subscribe((e) => this.invokeEvent("progressChange", e));
73
74
  }
74
75
  get url() {
75
76
  return this.url$.value;
@@ -129,17 +130,71 @@ var S = class e {
129
130
  t ? t.getTitle().then((t) => e(t)) : e(null);
130
131
  });
131
132
  }
133
+ static {
134
+ this.SETTLE_MS = 2e3;
135
+ }
136
+ static {
137
+ this.REAPPLY_INTERVAL_MS = 250;
138
+ }
132
139
  get volume() {
133
- return this._volume;
140
+ return this.desiredVolume ?? 0;
134
141
  }
135
142
  set volume(e) {
136
- this._volume = e, this.playerInfo?.adapter.setVolume(e);
143
+ if (typeof e != "number" || !Number.isFinite(e)) return;
144
+ this.desiredVolume = e;
145
+ let t = this.playerInfo?.adapter;
146
+ t && this.can(t, a.volume) && (this.openSettleWindow(), this.call(() => t.setVolume(e)));
137
147
  }
138
148
  get mute() {
139
- return this._mute;
149
+ return this.desiredMute ?? !1;
140
150
  }
141
151
  set mute(e) {
142
- this._mute = e, this.playerInfo?.adapter.setMute(e);
152
+ if (typeof e != "boolean") return;
153
+ this.desiredMute = e;
154
+ let t = this.playerInfo?.adapter;
155
+ t && this.can(t, a.mute) && (this.openSettleWindow(), this.call(() => t.setMute(e)));
156
+ }
157
+ loadAndApplySettings(e, t) {
158
+ try {
159
+ e.loadVideoById(t);
160
+ } finally {
161
+ this.applySettings(e);
162
+ }
163
+ }
164
+ applySettings(e, t = !0) {
165
+ t && this.openSettleWindow();
166
+ let n = this.can(e, a.mute);
167
+ if (n && this.desiredMute === !0 && this.call(() => e.setMute(!0)), this.desiredVolume !== void 0 && this.can(e, a.volume)) {
168
+ let t = this.desiredVolume;
169
+ this.call(() => e.setVolume(t));
170
+ }
171
+ n && this.desiredMute === !1 && this.call(() => e.setMute(!1));
172
+ }
173
+ onVolumeReport(e) {
174
+ typeof e == "number" && Number.isFinite(e) && (this.desiredVolume !== void 0 && Math.abs(this.desiredVolume - e) < .5 || (this.desiredVolume !== void 0 && this.isSettling() ? this.reapply() : (this.desiredVolume = e, this.invokeEvent("volumeChange", e))));
175
+ }
176
+ onMuteReport(e) {
177
+ typeof e == "boolean" && this.desiredMute !== e && (this.desiredMute !== void 0 && this.isSettling() ? this.reapply() : (this.desiredMute = e, this.invokeEvent("muteChange", e)));
178
+ }
179
+ openSettleWindow() {
180
+ this.settleUntil = Date.now() + e.SETTLE_MS;
181
+ }
182
+ isSettling() {
183
+ return Date.now() < this.settleUntil;
184
+ }
185
+ reapply() {
186
+ let t = this.playerInfo?.adapter, n = Date.now();
187
+ t && n - this.lastReapply >= e.REAPPLY_INTERVAL_MS && (this.lastReapply = n, this.applySettings(t, !1));
188
+ }
189
+ can(e, t) {
190
+ return (e.capabilities ?? []).includes(t);
191
+ }
192
+ call(e) {
193
+ try {
194
+ e();
195
+ } catch (e) {
196
+ console.warn("VideoPlayer: the player rejected a volume or mute change", e);
197
+ }
143
198
  }
144
199
  get isFullscreen() {
145
200
  return this._isFullscreen;
@@ -159,18 +214,18 @@ var S = class e {
159
214
  destroy() {
160
215
  this.playerInfo?.adapter?.destroy(), this.destroyed$.next(!0);
161
216
  }
162
- }, C = () => import("./api-DcMW2iN2.mjs").then((e) => new e.DailymotionApiService()), w = () => import("./api-MxZ7gaDR.mjs").then((e) => new e.FacebookApiService()), T = () => import("./api-Be3WmSZ1.mjs").then((e) => new e.FileApiService()), E = () => import("./api-1vv4CoYw.mjs").then((e) => new e.MixcloudApiService()), D = () => import("./api-C2IVrne3.mjs").then((e) => new e.SoundcloudApiService()), O = () => import("./api-CqCgSUqk.mjs").then((e) => new e.SpotifyApiService()), k = () => import("./api-yj6szShM.mjs").then((e) => new e.StreamableService()), A = () => import("./api-O56wbN98.mjs").then((e) => new e.TwitchApiService()), j = () => import("./api-CcP3AdSm.mjs").then((e) => new e.VidyardService()), M = () => import("./api-CqCOtAUb.mjs").then((e) => new e.VimeoApiService()), N = () => import("./api-BvYiv0Ae.mjs").then((e) => new e.WistiaService()), P = () => import("./api-Bqn8VxG0.mjs").then((e) => new e.YoutubeApiService()), F = { class: "vue-video-player" }, I = /*#__PURE__*/ ((e, t) => {
217
+ }, w = () => import("./api-DcMW2iN2.mjs").then((e) => new e.DailymotionApiService()), T = () => import("./api-MxZ7gaDR.mjs").then((e) => new e.FacebookApiService()), E = () => import("./api-Be3WmSZ1.mjs").then((e) => new e.FileApiService()), D = () => import("./api-1vv4CoYw.mjs").then((e) => new e.MixcloudApiService()), O = () => import("./api-CawTwqXJ.mjs").then((e) => new e.SoundcloudApiService()), k = () => import("./api-CqCgSUqk.mjs").then((e) => new e.SpotifyApiService()), A = () => import("./api-yj6szShM.mjs").then((e) => new e.StreamableService()), j = () => import("./api-O56wbN98.mjs").then((e) => new e.TwitchApiService()), M = () => import("./api-CcP3AdSm.mjs").then((e) => new e.VidyardService()), N = () => import("./api-iuf2ThYe.mjs").then((e) => new e.VimeoApiService()), P = () => import("./api-BvYiv0Ae.mjs").then((e) => new e.WistiaService()), F = () => import("./api-Bqn8VxG0.mjs").then((e) => new e.YoutubeApiService()), I = { class: "vue-video-player" }, L = /*#__PURE__*/ ((e, t) => {
163
218
  let n = e.__vccOpts || e;
164
219
  for (let [e, r] of t) n[e] = r;
165
220
  return n;
166
- })(/* @__PURE__ */ p({
221
+ })(/* @__PURE__ */ m({
167
222
  __name: "vue-video-player",
168
223
  props: {
169
224
  url: {},
170
- volume: { default: 0 },
225
+ volume: { default: void 0 },
171
226
  mute: {
172
227
  type: Boolean,
173
- default: !1
228
+ default: void 0
174
229
  },
175
230
  playerState: { default: r.unstarted }
176
231
  },
@@ -180,37 +235,37 @@ var S = class e {
180
235
  "update:playerState"
181
236
  ],
182
237
  setup(e, { emit: t }) {
183
- let n = e, r = t, i = _(null), a = _(), o = (e) => r("update:volume", e), s = (e) => r("update:mute", e), c = (e) => r("update:playerState", e);
184
- return h(async () => {
238
+ let n = e, r = t, i = v(null), a = v(), o = (e) => r("update:volume", e), s = (e) => r("update:mute", e), c = (e) => r("update:playerState", e);
239
+ return g(async () => {
185
240
  let e = await Promise.all([
186
- P,
187
- C,
188
- M,
189
- D,
190
- E,
191
- A,
241
+ F,
242
+ w,
243
+ N,
192
244
  O,
245
+ D,
246
+ j,
193
247
  k,
194
- w,
248
+ A,
195
249
  T,
196
- j,
197
- N
250
+ E,
251
+ M,
252
+ P
198
253
  ].map((e) => e())), t = i.value ?? void 0;
199
- a.value = new S(e, t), a.value.on("volumeChange", o), a.value.on("muteChange", s), a.value.on("stateChange", c), n.url !== void 0 && (a.value.url = n.url), a.value.volume = n.volume, a.value.mute = n.mute, a.value.playerState = n.playerState;
200
- }), v(() => n.url, (e) => {
254
+ a.value = new C(e, t), a.value.on("volumeChange", o), a.value.on("muteChange", s), a.value.on("stateChange", c), n.url !== void 0 && (a.value.url = n.url), n.volume !== void 0 && (a.value.volume = n.volume), n.mute !== void 0 && (a.value.mute = n.mute), a.value.playerState = n.playerState;
255
+ }), y(() => n.url, (e) => {
201
256
  a.value && (a.value.url = e);
202
- }), v(() => n.volume, (e) => {
203
- a.value && (a.value.volume = e);
204
- }), v(() => n.mute, (e) => {
205
- a.value && (a.value.mute = e);
206
- }), v(() => n.playerState, (e) => {
257
+ }), y(() => n.volume, (e) => {
258
+ a.value && e !== void 0 && (a.value.volume = e);
259
+ }), y(() => n.mute, (e) => {
260
+ a.value && e !== void 0 && (a.value.mute = e);
261
+ }), y(() => n.playerState, (e) => {
207
262
  a.value && (a.value.playerState = e);
208
- }), m(() => {
263
+ }), h(() => {
209
264
  a.value &&= (a.value.off("volumeChange", o), a.value.off("muteChange", s), a.value.off("stateChange", c), a.value.destroy(), void 0);
210
- }), (e, t) => (g(), d("div", F, [f("div", {
265
+ }), (e, t) => (_(), f("div", I, [p("div", {
211
266
  ref_key: "container",
212
267
  ref: i
213
268
  }, null, 512)]));
214
269
  }
215
- }), [["__scopeId", "data-v-6080c43c"]]);
216
- export { I as VueVideoPlayer };
270
+ }), [["__scopeId", "data-v-9f2a491a"]]);
271
+ export { L as VueVideoPlayer };
package/lib/types.d.ts CHANGED
@@ -1,8 +1,10 @@
1
1
  import { EPlayerState } from '../../../../player-provider/src/index.ts';
2
2
  export interface VueVideoPlayerProps {
3
3
  url?: string;
4
- volume: number;
5
- mute: boolean;
4
+ /** Kept across media. Leave unset to start at the first platform's own volume. */
5
+ volume?: number;
6
+ /** Kept across media. Leave unset to start at the first platform's own mute state. */
7
+ mute?: boolean;
6
8
  playerState: EPlayerState;
7
9
  }
8
10
  export interface VueVideoPlayerEmits {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mintplayer/vue-video-player",
3
3
  "private": false,
4
- "version": "3.0.0",
4
+ "version": "3.1.0",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/MintPlayer/mintplayer-ng-video-player",
package/api-B6qyhEI3.js DELETED
@@ -1 +0,0 @@
1
- const e=require("./src-CluKb0O6.js"),t=require("./takeUntil-MRP2QN5v.js"),n=require("./timer-mrjvJwyN.js");var r=require("./src-CYCud0_r.js").t(),i=class{get id(){return`soundcloud`}urlRegexes=[new RegExp(/(?<id>http[s]{0,1}:\/\/(www\.){0,1}soundcloud\.com\/.+)$/,`g`)];loadApi(){return(0,r.loadScript)(`https://w.soundcloud.com/player/api.js`)}prepareHtml(e){let t=encodeURIComponent(e.initialVideoId??``);return`<iframe id="${e.domId}" width="${e.width}" height="${e.height}" style="max-width:100%" src="https://w.soundcloud.com/player/?url=${t}&amp;show_teaser=false&amp;" allow="autoplay"></iframe>`}createPlayer(r,i){return new Promise((a,o)=>{if(!r.element)return o(`The SoundCloud api requires the options.element to be set`);let s=new e.i,c=SC.Widget(r.element.getElementsByTagName(`iframe`)[0]),l=50,u=50,d=e.r({capabilities:[e.t.volume,e.t.getTitle],loadVideoById:e=>c.load(e,{auto_play:r.autoplay}),setPlayerState:t=>{switch(t){case e.n.playing:c.play();break;case e.n.paused:c.pause();break;case e.n.ended:case e.n.unstarted:}},setMute:e=>{e?(u=l,c.setVolume(0)):c.setVolume(u)},setVolume:e=>{l=e,c.setVolume(e)},setProgress:e=>c.seekTo(e*1e3),setSize:(e,t)=>{if(r.element){let n=r.element.querySelector(`iframe`);n&&(n.width=String(e),n.height=String(t))}},getTitle:()=>new Promise(e=>c.getCurrentSound(t=>e(t.description??t.title))),setFullscreen:e=>{e&&(console.warn(`SoundCloud player doesn't support fullscreen mode`),setTimeout(()=>d.onFullscreenChange(!1),50))},getFullscreen:()=>new Promise(e=>e(!1)),setPip:e=>{e&&(console.warn(`SoundCloud player doesn't support PIP mode`),setTimeout(()=>d.onPipChange(!1),50))},getPip:()=>new Promise(e=>e(!1)),destroy:()=>s.next(!0)});c.bind(SC.Widget.Events.READY,()=>{a(d),typeof window<`u`&&n.t(0,50).pipe(t.t(s),t.t(i)).subscribe(()=>{c.getVolume(e=>{e>0&&(l=e),d.onVolumeChange(e),d.onMuteChange(e===0)})})}),c.bind(SC.Widget.Events.PLAY,()=>{d.onStateChange(e.n.playing),c.getDuration(e=>d.onDurationChange(e/1e3))}),c.bind(SC.Widget.Events.PAUSE,()=>d.onStateChange(e.n.paused)),c.bind(SC.Widget.Events.FINISH,()=>d.onStateChange(e.n.ended)),c.bind(SC.Widget.Events.PLAY_PROGRESS,e=>d.onCurrentTimeChange(e.currentPosition/1e3))})}};exports.SoundcloudApiService=i;
package/api-C2TK5P8W.js DELETED
@@ -1 +0,0 @@
1
- const e=require("./src-CluKb0O6.js"),t=require("./takeUntil-MRP2QN5v.js"),n=require("./timer-mrjvJwyN.js");var r=require("./src-CYCud0_r.js").t(),i=class{get id(){return`vimeo`}urlRegexes=[new RegExp(/http[s]{0,1}:\/\/(www\.){0,1}vimeo\.com\/(?<id>[0-9]+)$/,`g`)];loadApi(){return(0,r.loadScript)(`https://player.vimeo.com/api/player.js`)}prepareHtml(e){return`<div id="${e.domId}" style="max-width:100%"></div>`}createPlayer(r,i){return new Promise((a,o)=>{if(!r.domId)return o(`The Vimeo api requires the options.domId to be set`);if(!r.initialVideoId)return o(`Vimeo requires an initial video`);let s=new e.i,c,l=new Vimeo.Player(r.domId,{id:r.initialVideoId,width:r.width,height:r.height,autoplay:r.autoplay,pip:!0});l.ready().then(()=>{c=e.r({capabilities:[e.t.fullscreen,e.t.pictureInPicture,e.t.volume,e.t.mute,e.t.getTitle],loadVideoById:e=>l.loadVideo(e),setPlayerState:t=>{switch(t){case e.n.playing:l.play();break;case e.n.paused:l.pause();break;case e.n.ended:case e.n.unstarted:}},setVolume:e=>l.setVolume(e/100),setMute:e=>l.setMuted(e),setProgress:e=>l.setCurrentTime(e),setSize:(e,t)=>{if(r.element){let n=r.element.querySelector(`div iframe`);n&&(n.width=String(e),n.height=String(t))}},getTitle:()=>l.getVideoTitle(),setFullscreen:e=>{e?l.requestFullscreen():l.exitFullscreen()},getFullscreen:()=>l.getFullscreen(),setPip:e=>{e?(l.requestPictureInPicture(),setTimeout(()=>{l.getPictureInPicture().then(t=>{t!==e&&(console.warn(`To enable pip from outside its iframe, you need to first focus the player, then call setPip`),c.onPipChange(t))})},50)):l.exitPictureInPicture()},getPip:()=>l.getPictureInPicture(),destroy:()=>{s.next(!0),l.destroy()}}),a(c)}),l.on(`loaded`,()=>{c.onStateChange(e.n.unstarted),typeof window<`u`&&(setTimeout(()=>r.autoplay&&l.play(),600),n.t(0,50).pipe(t.t(s),t.t(i)).subscribe(()=>{l.getMuted().then(e=>c.onMuteChange(e))}),l.getVolume().then(e=>c.onVolumeChange(e*100)),l.getDuration().then(e=>c.onDurationChange(e)))}),l.on(`play`,()=>c.onStateChange(e.n.playing)),l.on(`pause`,()=>c.onStateChange(e.n.paused)),l.on(`ended`,()=>c.onStateChange(e.n.ended)),l.on(`volumechange`,e=>c.onVolumeChange(e.volume*100)),l.on(`timeupdate`,e=>c.onCurrentTimeChange(e.seconds)),l.on(`enterpictureinpicture`,()=>c.onPipChange(!0)),l.on(`leavepictureinpicture`,()=>c.onPipChange(!1)),l.on(`fullscreenchange`,e=>c.onFullscreenChange(e.fullscreen))})}};exports.VimeoApiService=i;