UNPKG

@vime/core

Version:

Customizable, extensible, accessible and framework agnostic media player.

1 lines 15.2 kB
import{r as t,c as i,h as s,g as e}from"./p-aa8acb66.js";import{p as n,D as h,q as r,n as o,l as a,c as d,w as c,x as u,e as l,u as v,h as p}from"./p-b018976f.js";import{d as f,e as g,f as m,g as P}from"./p-d84b1c8a.js";import{L as T}from"./p-e855e573.js";import{M as b}from"./p-8b74fa0e.js";import{V as y}from"./p-415151d7.js";import{w as k,c as w}from"./p-17652948.js";import{w as C}from"./p-ad08a3bd.js";import{a as x,v as S,h as M}from"./p-b0ea4d0d.js";import{F as E,m as j}from"./p-111a8e5b.js";import"./p-121aab6e.js";import"./p-8acb8eb5.js";import"./p-cbbce638.js";import"./p-152748b8.js";var R=function(t,i,s,e){return new(s||(s=Promise))((function(n,h){function r(t){try{a(e.next(t))}catch(t){h(t)}}function o(t){try{a(e.throw(t))}catch(t){h(t)}}function a(t){var i;t.done?n(t.value):(i=t.value,i instanceof s?i:new s((function(t){t(i)}))).then(r,o)}a((e=e.apply(t,i||[])).next())}))};class F extends E{constructor(t,i){super(t),this.host=t,this.presentationController=i}get isFullscreen(){return this.presentationController.isFullscreenMode}get isSupported(){return this.presentationController.isSupported}makeEnterFullscreenRequest(){return R(this,void 0,void 0,(function*(){return this.presentationController.setPresentationMode("fullscreen")}))}makeExitFullscreenRequest(){return R(this,void 0,void 0,(function*(){return this.presentationController.setPresentationMode("inline")}))}addFullscreenChangeEventListener(){return this.isSupported?(this.presentationController.on("change",this.handlePresentationModeChange.bind(this)),()=>{this.presentationController.off("change",this.handlePresentationModeChange.bind(this))}):n}handlePresentationModeChange(){this.handleFullscreenChange()}addFullscreenErrorEventListener(){return n}}class L{constructor(t){this.host=t,this.disposal=new h,this.emitter=j();const i=t.disconnectedCallback;t.disconnectedCallback=()=>{return s=this,e=void 0,h=function*(){yield this.destroy(),null==i||i.call(t)},new((n=void 0)||(n=Promise))((function(t,i){function r(t){try{a(h.next(t))}catch(t){i(t)}}function o(t){try{a(h.throw(t))}catch(t){i(t)}}function a(i){var s;i.done?t(i.value):(s=i.value,s instanceof n?s:new n((function(t){t(s)}))).then(r,o)}a((h=h.apply(s,e||[])).next())}));var s,e,n,h}}get videoElement(){var t;if("video"===(null===(t=this.host.mediaEl)||void 0===t?void 0:t.tagName.toLowerCase()))return this.host.mediaEl}get presentationMode(){var t;return null===(t=this.videoElement)||void 0===t?void 0:t.webkitPresentationMode}get isInlineMode(){return"inline"===this.presentationMode}get isPictureInPictureMode(){return"inline"===this.presentationMode}get isFullscreenMode(){return"fullscreen"===this.presentationMode}get isSupported(){var t,i,s;return f&&r(null===(t=this.videoElement)||void 0===t?void 0:t.webkitSetPresentationMode)&&null!==(s=null===(i=this.videoElement)||void 0===i?void 0:i.webkitSupportsFullscreen)&&void 0!==s&&s}setPresentationMode(t){var i,s;null===(s=null===(i=this.videoElement)||void 0===i?void 0:i.webkitSetPresentationMode)||void 0===s||s.call(i,t)}on(t,i){this.emitter.on(t,i)}off(t,i){this.emitter.off(t,i)}destroy(){this.setPresentationMode("inline"),this.disposal.empty()}addPresentationModeChangeEventListener(){return!this.isSupported||o(this.videoElement)?n:a(this.videoElement,"webkitpresentationmodechanged",this.handlePresentationModeChange.bind(this))}handlePresentationModeChange(){this.emitter.emit("change",this.presentationMode)}}var A=function(t,i,s,e){return new(s||(s=Promise))((function(n,h){function r(t){try{a(e.next(t))}catch(t){h(t)}}function o(t){try{a(e.throw(t))}catch(t){h(t)}}function a(t){var i;t.done?n(t.value):(i=t.value,i instanceof s?i:new s((function(t){t(i)}))).then(r,o)}a((e=e.apply(t,i||[])).next())}))};const I=class{constructor(s){t(this,s),this.vmLoadStart=i(this,"vmLoadStart",7),this.vmError=i(this,"vmError",7),this.vmMediaElChange=i(this,"vmMediaElChange",7),this.vmSrcSetChange=i(this,"vmSrcSetChange",7),this.textTracksDisposal=new h,this.wasPausedBeforeSeeking=!0,this.currentSrcSet=[],this.mediaQueryDisposal=new h,this.willAttach=!1,this.preload="metadata",this.playbackRates=[.25,.5,.75,1,1.25,1.5,2],this.language="en",this.autoplay=!1,this.controls=!1,this.loop=!1,this.muted=!1,this.playsinline=!1,this.noConnect=!1,this.paused=!0,this.currentTime=0,this.volume=0,this.playbackReady=!1,this.playbackStarted=!1,this.presentationController=new L(this),this.fullscreenController=new F(this,this.presentationController),this.currentTextTrack=-1,this.hasCustomTextManager=!1,this.isTextTrackVisible=!0,this.shouldRenderNativeTextTracks=!0,d(this),k(this),C(this,["playbackReady","playbackStarted","currentTime","volume","paused","currentTextTrack","isTextTrackVisible","shouldRenderNativeTextTracks"]),c(this,"vm-poster",(t=>{[this.vmPoster]=t}))}onMediaTitleChange(){this.dispatch("mediaTitle",this.mediaTitle)}onPosterChange(){var t;this.playbackStarted||null===(t=this.mediaEl)||void 0===t||t.load()}onViewTypeChange(){this.dispatch("viewType",this.viewType)}connectedCallback(){this.initLazyLoader(),this.dispatch=w(this),this.onViewTypeChange(),this.onPosterChange(),this.onMediaTitleChange(),this.addPresentationControllerListeners()}componentDidRender(){this.prevMediaEl!==this.mediaEl&&(this.prevMediaEl=this.mediaEl,this.vmMediaElChange.emit(this.mediaEl),this.presentationController.addPresentationModeChangeEventListener())}componentDidLoad(){this.onViewTypeChange()}disconnectedCallback(){var t;this.mediaQueryDisposal.empty(),this.textTracksDisposal.empty(),this.cancelTimeUpdates(),null===(t=this.lazyLoader)||void 0===t||t.destroy(),this.wasPausedBeforeSeeking=!0}initLazyLoader(){this.lazyLoader=new T(this.host,["data-src","data-poster"],(()=>{if(o(this.mediaEl))return;const t=this.mediaEl.getAttribute("data-poster");u(t)||this.mediaEl.setAttribute("poster",t),this.refresh(),this.didSrcSetChange()}))}refresh(){if(o(this.mediaEl))return;const{children:t}=this.mediaEl;for(let i=0;i<=t.length-1;i+=1){const s=t[i],e=s.getAttribute("data-src")||s.getAttribute("src")||s.getAttribute("data-vs");s.removeAttribute("src"),u(e)||(s.setAttribute("data-vs",e),s.setAttribute("src",e))}}didSrcSetChange(){if(o(this.mediaEl))return;const t=Array.from(this.mediaEl.querySelectorAll("source")).map((t=>{var i;return{src:t.getAttribute("data-vs"),media:null!==(i=t.getAttribute("data-media"))&&void 0!==i?i:void 0,ref:t}}));(this.currentSrcSet.length!==t.length||t.some(((t,i)=>this.currentSrcSet[i].src!==t.src)))&&(this.currentSrcSet=t,this.onSrcSetChange())}onSrcSetChange(){var t;this.textTracksDisposal.empty(),this.mediaQueryDisposal.empty(),this.vmLoadStart.emit(),this.vmSrcSetChange.emit(this.currentSrcSet),this.willAttach||null===(t=this.mediaEl)||void 0===t||t.load()}hasCustomPoster(){return!f&&!l(this.vmPoster)}cancelTimeUpdates(){v(this.timeRAF)&&window.cancelAnimationFrame(this.timeRAF),this.timeRAF=void 0}requestTimeUpdates(){var t,i;this.dispatch("currentTime",null!==(i=null===(t=this.mediaEl)||void 0===t?void 0:t.currentTime)&&void 0!==i?i:0),this.timeRAF=window.requestAnimationFrame((()=>{this.requestTimeUpdates()}))}getMediaType(){const{currentSrc:t}=this.mediaEl;return x.test(t)?b.Audio:S.test(t)||M.test(t)?b.Video:void 0}onLoadedMetadata(){this.mediaEl.volume=this.volume/100,this.listenToTextTracksForChanges(),this.onTextTracksChange(),this.onProgress(),this.dispatch("currentPoster",this.poster),this.dispatch("duration",this.mediaEl.duration),this.dispatch("playbackRates",this.playbackRates),this.willAttach||(this.dispatch("currentSrc",this.mediaEl.currentSrc),this.dispatch("mediaType",this.getMediaType()),this.dispatch("playbackReady",!0))}onProgress(){const{buffered:t,duration:i}=this.mediaEl,s=0===t.length?0:t.end(t.length-1);this.dispatch("buffered",s>i?i:s)}onPlay(){this.requestTimeUpdates(),this.dispatch("paused",!1),this.playbackStarted||this.dispatch("playbackStarted",!0)}onPause(){this.cancelTimeUpdates(),this.dispatch("paused",!0),this.dispatch("buffering",!1)}onPlaying(){this.dispatch("playing",!0),this.dispatch("buffering",!1)}onSeeking(){this.wasPausedBeforeSeeking||(this.wasPausedBeforeSeeking=this.mediaEl.paused),this.dispatch("currentTime",this.mediaEl.currentTime),this.dispatch("seeking",!0)}onSeeked(){(0!==this.currentTime||this.playbackStarted)&&(this.dispatch("seeking",!1),this.playbackStarted&&this.wasPausedBeforeSeeking||this.attemptToPlay(),this.wasPausedBeforeSeeking=!0)}onRateChange(){this.dispatch("playbackRate",this.mediaEl.playbackRate)}onVolumeChange(){this.dispatch("muted",this.mediaEl.muted),this.dispatch("volume",100*this.mediaEl.volume)}onDurationChange(){this.dispatch("duration",this.mediaEl.duration)}onWaiting(){this.dispatch("buffering",!0)}onSuspend(){this.dispatch("buffering",!1)}onEnded(){this.loop||this.dispatch("playbackEnded",!0)}onError(){this.vmError.emit(this.mediaEl.error)}attemptToPlay(){var t;try{null===(t=this.mediaEl)||void 0===t||t.play()}catch(t){this.vmError.emit(t)}}togglePiPInChrome(t){var i;return t?null===(i=this.mediaEl)||void 0===i?void 0:i.requestPictureInPicture():document.exitPictureInPicture()}togglePiPInSafari(t){var i,s;const e=t?"picture-in-picture":"inline";if(!(null===(i=this.mediaEl)||void 0===i?void 0:i.webkitSupportsPresentationMode(e)))throw new Error("PiP API is not available.");return null===(s=this.mediaEl)||void 0===s?void 0:s.webkitSetPresentationMode(e)}togglePiP(t){return A(this,void 0,void 0,(function*(){if(g())return this.togglePiPInChrome(t);if(m())return this.togglePiPInSafari(t);throw new Error("PiP API is not available.")}))}onEnterPiP(){this.dispatch("isPiPActive",!0)}onLeavePiP(){this.dispatch("isPiPActive",!1)}addPresentationControllerListeners(){this.presentationController.on("change",(t=>{this.dispatch("isPiPActive","picture-in-picture"===t),this.dispatch("isFullscreenActive","fullscreen"===t)}))}getAdapter(){return A(this,void 0,void 0,(function*(){return{getInternalPlayer:()=>A(this,void 0,void 0,(function*(){return this.mediaEl})),play:()=>A(this,void 0,void 0,(function*(){var t;return null===(t=this.mediaEl)||void 0===t?void 0:t.play()})),pause:()=>A(this,void 0,void 0,(function*(){var t;return null===(t=this.mediaEl)||void 0===t?void 0:t.pause()})),canPlay:t=>A(this,void 0,void 0,(function*(){return p(t)&&(x.test(t)||S.test(t))})),setCurrentTime:t=>A(this,void 0,void 0,(function*(){this.mediaEl&&(this.mediaEl.currentTime=t)})),setMuted:t=>A(this,void 0,void 0,(function*(){this.mediaEl&&(this.mediaEl.muted=t)})),setVolume:t=>A(this,void 0,void 0,(function*(){this.mediaEl&&(this.mediaEl.volume=t/100)})),canSetPlaybackRate:()=>A(this,void 0,void 0,(function*(){return!0})),setPlaybackRate:t=>A(this,void 0,void 0,(function*(){this.mediaEl&&(this.mediaEl.playbackRate=t)})),canSetPiP:()=>A(this,void 0,void 0,(function*(){return P()})),enterPiP:()=>this.togglePiP(!0),exitPiP:()=>this.togglePiP(!1),canSetFullscreen:()=>A(this,void 0,void 0,(function*(){return this.fullscreenController.isSupported})),enterFullscreen:()=>this.fullscreenController.requestFullscreen(),exitFullscreen:()=>this.fullscreenController.exitFullscreen(),setCurrentTextTrack:t=>A(this,void 0,void 0,(function*(){t!==this.currentTextTrack&&this.toggleTextTrackModes(t)})),setTextTrackVisibility:t=>A(this,void 0,void 0,(function*(){this.isTextTrackVisible=t,this.toggleTextTrackModes(this.currentTextTrack)}))}}))}onHasCustomTextManagerChange(){this.hasCustomTextManager?this.textTracksDisposal.empty():this.playbackReady&&this.listenToTextTracksForChanges()}onShouldRenderNativeTextTracksChange(){this.hasCustomTextManager||this.toggleTextTrackModes(this.currentTextTrack)}onProviderConnect(t){this.noConnect&&t.stopImmediatePropagation()}onProviderDisconnect(t){this.noConnect&&t.stopImmediatePropagation()}getFilteredTextTracks(){const t=[],i=Array.from(this.mediaEl.textTracks);for(let s=0;s<i.length;s+=1){const e=i[s];"subtitles"!==e.kind&&"captions"!==e.kind||!e.label||t.push(i[s])}return t}listenToTextTracksForChanges(){this.hasCustomTextManager||(this.textTracksDisposal.empty(),l(this.mediaEl)||this.textTracksDisposal.add(a(this.mediaEl.textTracks,"change",this.onTextTracksChange.bind(this))))}onTextTracksChange(){var t;const i=this.getFilteredTextTracks();let s=-1;for(let t=0;t<i.length;t+=1)if("hidden"===i[t].mode)s=t;else if("showing"===i[t].mode){s=t;break}this.shouldRenderNativeTextTracks||"showing"!==(null===(t=i[s])||void 0===t?void 0:t.mode)?(this.shouldRenderNativeTextTracks&&(this.isTextTrackVisible=-1!==s&&"showing"===i[s].mode,this.dispatch("isTextTrackVisible",this.isTextTrackVisible)),this.dispatch("textTracks",i),this.dispatch("currentTextTrack",this.shouldRenderNativeTextTracks&&!this.isTextTrackVisible?-1:s)):i[s].mode="hidden"}toggleTextTrackModes(t){if(o(this.mediaEl))return;const{textTracks:i}=this.mediaEl;if(-1===t)Array.from(i).forEach((t=>{t.mode="disabled"}));else{const t=i[this.currentTextTrack];t&&(t.mode="disabled")}const s=i[t];s&&(s.mode=this.isTextTrackVisible&&this.shouldRenderNativeTextTracks?"showing":"hidden"),this.dispatch("currentTextTrack",this.shouldRenderNativeTextTracks&&!this.isTextTrackVisible?-1:t),this.dispatch("isTextTrackVisible",this.isTextTrackVisible)}render(){const t={autoplay:this.autoplay,muted:this.muted,playsinline:this.playsinline,playsInline:this.playsinline,"x5-playsinline":this.playsinline,"webkit-playsinline":this.playsinline,controls:this.controls,crossorigin:""===this.crossOrigin?"anonymous":this.crossOrigin,controlslist:this.controlsList,"data-poster":this.hasCustomPoster()?void 0:this.poster,loop:this.loop,preload:this.preload,disablePictureInPicture:this.disablePiP,autoPictureInPicture:this.autoPiP,disableRemotePlayback:this.disableRemotePlayback,"x-webkit-airplay":this.disableRemotePlayback?"deny":"allow",ref:t=>{this.mediaEl=t},onLoadedMetadata:this.onLoadedMetadata.bind(this),onProgress:this.onProgress.bind(this),onPlay:this.onPlay.bind(this),onPause:this.onPause.bind(this),onPlaying:this.onPlaying.bind(this),onSeeking:this.onSeeking.bind(this),onSeeked:this.onSeeked.bind(this),onRateChange:this.onRateChange.bind(this),onVolumeChange:this.onVolumeChange.bind(this),onDurationChange:this.onDurationChange.bind(this),onWaiting:this.onWaiting.bind(this),onSuspend:this.onSuspend.bind(this),onEnded:this.onEnded.bind(this),onError:this.onError.bind(this)},i=s("audio",Object.assign({class:"lazy"},t),s("slot",null),"Your browser does not support the",s("code",null,"audio"),"element."),e=s("video",Object.assign({class:"lazy"},t,{onenterpictureinpicture:this.onEnterPiP.bind(this),onleavepictureinpicture:this.onLeavePiP.bind(this)}),s("slot",null),"Your browser does not support the",s("code",null,"video"),"element.");return this.viewType===y.Audio?i:e}get host(){return e(this)}static get watchers(){return{mediaTitle:["onMediaTitleChange"],poster:["onPosterChange"],viewType:["onViewTypeChange"],hasCustomTextManager:["onHasCustomTextManagerChange"],shouldRenderNativeTextTracks:["onShouldRenderNativeTextTracksChange"]}}};I.style="audio.sc-vm-file,video.sc-vm-file{border-radius:inherit;vertical-align:middle;width:100%;outline:0}video.sc-vm-file{position:absolute;top:0;left:0;border:0;height:100%;user-select:none}";export{I as vm_file}