@munsonlabs/video-player 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- import{Fragment as e,Transition as t,computed as n,createBlock as r,createCommentVNode as i,createElementBlock as a,createElementVNode as o,createStaticVNode as s,createVNode as c,defineComponent as l,inject as u,mergeProps as d,nextTick as f,normalizeClass as p,normalizeProps as m,normalizeStyle as h,onBeforeUnmount as g,onMounted as _,openBlock as v,provide as y,reactive as b,ref as x,toDisplayString as S,toRef as C,unref as w,watch as T,withCtx as E,withModifiers as D}from"vue";import O from"video.js";const k={},A=[{test:e=>/youtu\.be|youtube\.com/.test(e),key:`youtube`,tech:`Youtube`,type:`video/youtube`,load:()=>import(`./youtube-CNXFp2IX.mjs`)},{test:e=>/vimeo\.com|player\.vimeo\.com/.test(e),key:`vimeo`,tech:`Vimeo`,type:`video/vimeo`,load:()=>import(`./vimeo-BHc3ewpt.mjs`)},{test:e=>/dailymotion\.com|dai\.ly/.test(e),key:`dailymotion`,tech:`Dailymotion`,type:`video/dailymotion`,load:()=>import(`./dailymotion-BgVShGbi.mjs`)},{test:e=>/cdn\.jwplayer\.com/.test(e)||e.startsWith(`jwplayer://`),key:`jwplayer`,tech:null,type:`video/jwplayer`,load:()=>import(`./jwplayer-C3SeHLno.mjs`)},{test:e=>e.startsWith(`brightcove://`),key:`brightcove`,tech:null,type:`video/brightcove`,load:()=>import(`./brightcove-CQ7KZDbD.mjs`)}];function j(e){return A.find(t=>t.test(e))?.key??`html5`}async function M(e){let t=A.find(t=>t.test(e));if(!t)return{tech:null,type:null,adTagUrl:null};k[t.key]||(k[t.key]=t.load());let n=null,{prefetchConfig:r}=await k[t.key];return r&&(n=(await r(e).catch(()=>null))?.adTagUrl??null),{tech:t.tech,type:t.type,adTagUrl:n}}const N=new Set([`Youtube`,`Vimeo`,`Dailymotion`]);function P(e){return!N.has(e)}function F(){return window.google?.ima?Promise.resolve():new Promise((e,t)=>{let n=document.createElement(`script`);n.src=`https://imasdk.googleapis.com/js/sdkloader/ima3.js`,n.onload=e,n.onerror=()=>t(Error(`Failed to load Google IMA SDK`)),document.head.appendChild(n)})}async function ee(e,t){return!t||!P(e)?!1:(await F(),await import(`videojs-contrib-ads`),await import(`videojs-ima`),!0)}function te(e,t,n={}){e.ima({adTagUrl:t,showControlsForJSAds:!1,...n})}function ne(){return/iPad|iPhone|iPod/.test(navigator.userAgent)||/Mac/.test(navigator.userAgent)&&navigator.maxTouchPoints>1}function re(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled)}function ie(e){(e.requestFullscreen||e.webkitRequestFullscreen)?.call(e)}function I(){(document.exitFullscreen||document.webkitExitFullscreen)?.call(document)}function L(e,t){O.registerTech(e,t)}function R(e){let[t,n]=e.split(`:`).map(Number);return{isPortrait:n>t,cssRatio:`${t}/${n}`}}function ae(e){return!e||isNaN(e)?`0:00`:`${Math.floor(e/60)}:${String(Math.floor(e%60)).padStart(2,`0`)}`}function oe(e){return e.filter(e=>e.src&&(e.type===`application/x-mpegURL`||e.type===`video/mp4`)).sort((e,t)=>e.type===`application/x-mpegURL`?-1:1)}const z=new Set;function se(e){return z.add(e),()=>z.delete(e)}function ce(e){z.forEach(t=>t!==e&&t())}const B=`video-select`,V=`video-toggle`,H=`video-state`,le=`fullscreen-pending`,ue=`fullscreen-pending-done`;function U(){try{return JSON.parse(localStorage.getItem(`player:positions`)??`[]`)}catch{return[]}}function W(e){localStorage.setItem(`player:positions`,JSON.stringify(e))}function G(e,t){if(t<5)return;let n=U().filter(t=>t.url!==e);n.unshift({url:e,time:t}),W(n.slice(0,5))}function de(e){return U().find(t=>t.url===e)?.time??null}function fe(e){W(U().filter(t=>t.url!==e))}function K(e,t,r){let i=null,a=!1,o=null,s=null,c=x(!1),l=x(!1),u=x(!1),d=x(!1),f=x(0),p=x(0),m=x(0),h=x(1),v=x(t.muted??t.autoplay??!1),y=x(!1),b=x(t.playbackRate??1),S=x(!1),C=x(!1),w=x(!1),E=x(``),D=x(!1),k=x(!1),A=x(!1),j=n(()=>p.value?f.value/p.value*100:0),N=n(()=>Math.max(m.value,j.value)),F=()=>i.tech({IWillNotUseThisInPlugins:!0});function ne(){let e=F();if(typeof e?.enterFullscreen==`function`){e.enterFullscreen();return}let t=e?.el();if(typeof t?.webkitEnterFullscreen==`function`){t.webkitEnterFullscreen();return}i.requestFullscreen()}function re(){let e=F();typeof e?.exitFullscreen==`function`?e.exitFullscreen():i.exitFullscreen()}function ie(){i&&(k.value?re():ne())}function I(){let e=document;k.value=!!(document.fullscreenElement||e.webkitFullscreenElement)}function L(e,n={}){r(`state-change`,{type:e,currentTime:f.value,duration:p.value,src:t.videoUrl,...n,payload:t.payload})}function R(){!i||!l.value||(i.paused()?i.play():i.pause())}function oe(e){i?.currentTime(p.value*(e/100))}function z(){i?.muted(!i.muted())}function B(e){i&&(i.volume(e),i.muted(e===0))}function V(){y.value=!y.value}function H(e){i&&(i.playbackRate(e),b.value=e)}function U(){i.ready(()=>{l.value=!0,S.value=!!F()?.featuresPlaybackRate});let e=()=>{let e=i.duration();e>0&&isFinite(e)&&(p.value=e)};i.on([`adstart`,`ads-pod-started`],()=>{ce(W),u.value=!0,L(`adstart`)}),i.on([`adend`,`ads-pod-ended`],()=>{u.value=!1,L(`adend`)}),i.on(`play`,()=>{if(ce(W),C.value=!0,c.value=!0,!a){let e=de(t.videoUrl);e&&i.currentTime(e),a=!0}L(`play`)}),i.on(`pause`,()=>{c.value=!1,G(t.videoUrl,i.currentTime()),L(`pause`)}),i.on(`ended`,()=>{c.value=!1,y.value?(i.currentTime(0),i.play()):(fe(t.videoUrl),L(`ended`))}),i.on(`seeked`,()=>{L(`seeked`)}),i.on(`error`,()=>{let e=i.error();E.value=e?.message||`This video could not be played.`,w.value=!0,l.value=!0,L(`error`,{error:e})}),i.on(`waiting`,()=>{d.value=!0}),i.on(`playing`,()=>{d.value=!1}),i.on(`canplay`,()=>{d.value=!1}),i.on(`timeupdate`,()=>{f.value=i.currentTime(),p.value||e()}),i.on(`durationchange`,e),i.on(`progress`,()=>{let e=i.duration();m.value=e?i.bufferedEnd()/e*100:0}),i.on(`volumechange`,()=>{let e=i.muted();h.value=i.volume(),v.value=e,C.value&&L(`volumechange`,{isMuted:e})}),i.on(`ratechange`,()=>{let e=i.playbackRate();b.value=e,C.value&&L(`ratechange`,{playbackRate:e})}),i.on(`fullscreenchange`,()=>{k.value=i.isFullscreen()}),i.on(le,()=>{A.value=!0}),i.on(ue,()=>{A.value=!1})}function W(){i?.pause()}T(()=>t.muted,e=>{!i||e===void 0||i.muted(e)}),T(()=>t.playbackRate,e=>{!i||e===void 0||i.playbackRate(e)}),_(async()=>{document.addEventListener(`fullscreenchange`,I),document.addEventListener(`webkitfullscreenchange`,I),document.addEventListener(`visibilitychange`,K);let{tech:n,type:r,adTagUrl:a}=await M(t.videoUrl),c=n?[n,`Html5`]:[`Html5`],l=t.adTagUrl||a||``,u=await ee(n??`Html5`,l);if(!e.value)return;let d={src:t.videoUrl,...r&&{type:r}};D.value=!!(t.nativeUi&&!P(n??``)),i=O(e.value,{techOrder:c,controls:!1,fluid:!0,aspectRatio:t.aspectRatio??`16:9`,poster:t.poster||``,playsinline:!0,autoplay:t.autoplay,muted:t.muted??t.autoplay,playbackRate:b.value,adTagUrl:l,youtube:{nativeUi:D.value},vimeo:{nativeUi:D.value},dailymotion:{nativeUi:D.value},...!u&&{sources:[d]},...t.techOptions}),u&&(te(i,l,t.imaOptions??{}),i.src(d)),o=se(W),U(),s=new IntersectionObserver(([e])=>{!e.isIntersecting&&i&&!i.paused()&&!k.value&&i.pause()},{threshold:.1}),e.value&&s.observe(e.value)});function K(){document.visibilityState===`hidden`&&i&&G(t.videoUrl,i.currentTime())}return g(()=>{i&&G(t.videoUrl,i.currentTime()),o?.(),s?.disconnect(),document.removeEventListener(`visibilitychange`,K),document.removeEventListener(`fullscreenchange`,I),document.removeEventListener(`webkitfullscreenchange`,I),i?.dispose(),i=null}),{isPlaying:c,isReady:l,isAdPlaying:u,isBuffering:d,current:f,total:p,vol:h,isMuted:v,isLooping:y,playbackRate:b,hasStarted:C,isError:w,errorMessage:E,progress:j,bufferedDisplay:N,isFullscreen:k,isFullscreenPending:A,fmt:ae,togglePlay:R,seek:oe,toggleMute:z,setVolume:B,toggleFullscreen:ie,toggleLoop:V,setPlaybackRate:H,supportsPlaybackRate:S,nativeUi:D}}function pe(e){let t=x(!0),n=x(!1),r=null;function i(e=3500){clearTimeout(r??void 0),r=setTimeout(()=>{t.value=!1,n.value=!1},e)}function a(){clearTimeout(r??void 0)}function o(){n.value=!0,t.value=!0,i()}function s(){n.value=!1,e.value&&i()}function c(){e.value&&i()}function l(){t.value=!0,e.value&&i()}function u(){t.value=!0,i()}function d(){e.value&&i(600)}return T(e,e=>{e?i():(clearTimeout(r??void 0),t.value=!0)}),g(()=>clearTimeout(r??void 0)),{showHUD:t,isOpen:n,scheduleHide:i,pauseHide:a,onVideoTap:l,onMouseMove:u,onMouseLeave:d,openControls:o,closeControls:s,keepOpen:c}}const q=Symbol(`player`),J=Symbol(`hud`),Y=Symbol(`action`);var X=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n};const me={},he={viewBox:`0 0 24 24`,fill:`currentColor`};function ge(e,t){return v(),a(`svg`,he,[...t[0]||=[o(`path`,{d:`M8 5v14l11-7z`},null,-1)]])}var _e=X(me,[[`render`,ge]]);const ve={},ye={viewBox:`0 0 24 24`,fill:`currentColor`};function be(e,t){return v(),a(`svg`,ye,[...t[0]||=[o(`path`,{d:`M6 19h4V5H6v14zm8-14v14h4V5h-4z`},null,-1)]])}var xe=X(ve,[[`render`,be]]);const Se=[`aria-label`];var Z=X(l({__name:`PlayPauseButton`,props:{isPlaying:{type:Boolean,required:!0},size:{type:String,default:`sm`}},emits:[`toggle-play`],setup(e){return(t,n)=>(v(),a(`button`,{class:p([`ppbtn`,`ppbtn--${e.size}`]),"aria-label":e.isPlaying?`Pause`:`Play`,onClick:n[0]||=D(e=>t.$emit(`toggle-play`),[`stop`])},[e.isPlaying?(v(),r(xe,{key:0})):(v(),r(_e,{key:1}))],10,Se))}}),[[`__scopeId`,`data-v-85902525`]]);const Ce={},we={viewBox:`0 0 24 24`,fill:`currentColor`};function Te(e,t){return v(),a(`svg`,we,[...t[0]||=[o(`path`,{d:`M3 9v6h4l5 5V4L7 9H3zm13.5 3A4.5 4.5 0 0 0 14 7.97v8.05c1.48-.73 2.5-2.25 2.5-4.02z`},null,-1)]])}var Q=X(Ce,[[`render`,Te]]);const Ee={},De={viewBox:`0 0 24 24`,fill:`currentColor`};function Oe(e,t){return v(),a(`svg`,De,[...t[0]||=[o(`path`,{d:`M16.5 12A4.5 4.5 0 0 0 14 7.97v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51A8.796 8.796 0 0 0 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06A8.99 8.99 0 0 0 17.73 18L19 19.27 20.27 18 5.27 3 4.27 3zM12 4L9.91 6.09 12 8.18V4z`},null,-1)]])}var $=X(Ee,[[`render`,Oe]]);const ke={},Ae={viewBox:`0 0 24 24`,fill:`currentColor`};function je(e,t){return v(),a(`svg`,Ae,[...t[0]||=[o(`path`,{d:`M7 7h10v3l4-4-4-4v3H5v6h2V7zm10 10H7v-3l-4 4 4 4v-3h12v-6h-2v4z`},null,-1)]])}var Me=X(ke,[[`render`,je]]);const Ne={},Pe={viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`};function Fe(e,t){return v(),a(`svg`,Pe,[...t[0]||=[s(`<line x1="4" y1="6" x2="20" y2="6"></line><line x1="4" y1="12" x2="20" y2="12"></line><line x1="4" y1="18" x2="20" y2="18"></line><circle cx="9" cy="6" r="2.5" fill="currentColor" stroke="none"></circle><circle cx="15" cy="12" r="2.5" fill="currentColor" stroke="none"></circle><circle cx="9" cy="18" r="2.5" fill="currentColor" stroke="none"></circle>`,6)]])}var Ie=X(Ne,[[`render`,Fe]]);const Le={class:`hud`},Re=[`aria-label`],ze=[`aria-label`],Be=[`aria-label`,`innerHTML`];var Ve=X(l({__name:`HudButtons`,setup(t){let s=u(q),l=u(J),d=u(Y),f=n(()=>d?.value??null),m=n(()=>!!f.value&&typeof f.value==`object`),h=n(()=>m.value?f.value:null),g=n(()=>f.value===`mute`?s.isMuted?`Unmute`:`Mute`:f.value===`loop`?s.isLooping?`Disable loop`:`Loop`:``);function _(){f.value===`mute`?s.toggleMute():f.value===`loop`&&s.toggleLoop()}return(t,n)=>(v(),a(`div`,Le,[i(` Built-in: mute `),f.value===`mute`?(v(),a(`button`,{key:0,class:p([`hud__btn`,{"hud__btn--active":w(s).isMuted}]),"aria-label":g.value,onClick:D(_,[`stop`])},[!w(s).isMuted&&w(s).vol>0?(v(),r(Q,{key:0})):(v(),r($,{key:1}))],10,Re)):f.value===`loop`?(v(),a(e,{key:1},[i(` Built-in: loop `),o(`button`,{class:p([`hud__btn`,{"hud__btn--active":w(s).isLooping}]),"aria-label":g.value,onClick:D(_,[`stop`])},[c(Me)],10,ze)],2112)):m.value&&h.value?(v(),a(e,{key:2},[i(` Custom action `),o(`button`,{class:`hud__btn`,"aria-label":h.value.label,onClick:n[0]||=D(e=>h.value.onClick(),[`stop`]),innerHTML:h.value.icon},null,8,Be)],2112)):(v(),a(e,{key:3},[i(` No action — spacer keeps layout balanced `),n[2]||=o(`div`,{class:`hud__spacer`},null,-1)],2112)),c(Z,{"is-playing":w(s).isPlaying,size:`lg`,onTogglePlay:w(s).togglePlay},null,8,[`is-playing`,`onTogglePlay`]),o(`button`,{class:`hud__btn`,"aria-label":`Show controls`,onClick:n[1]||=D((...e)=>w(l).openControls&&w(l).openControls(...e),[`stop`])},[c(Ie)])]))}}),[[`__scopeId`,`data-v-a6d118e7`]]);const He={},Ue={viewBox:`0 0 24 24`,fill:`currentColor`};function We(e,t){return v(),a(`svg`,Ue,[...t[0]||=[o(`path`,{d:`M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z`},null,-1)]])}var Ge=X(He,[[`render`,We]]);const Ke={},qe={viewBox:`0 0 24 24`,fill:`currentColor`};function Je(e,t){return v(),a(`svg`,qe,[...t[0]||=[o(`path`,{d:`M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z`},null,-1)]])}var Ye=X(Ke,[[`render`,Je]]);const Xe={},Ze={viewBox:`0 0 24 24`,fill:`currentColor`};function Qe(e,t){return v(),a(`svg`,Ze,[...t[0]||=[o(`path`,{d:`M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z`},null,-1)]])}var $e=X(Xe,[[`render`,Qe]]);const et={},tt={viewBox:`0 0 24 24`,fill:`currentColor`};function nt(e,t){return v(),a(`svg`,tt,[...t[0]||=[o(`path`,{d:`M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z`},null,-1)]])}var rt=X(et,[[`render`,nt]]);const it={class:`controls__vol-header`},at=[`aria-label`],ot={class:`controls__vol-body`},st=[`value`],ct={class:`controls__vol-pct`},lt=[`value`],ut={class:`controls__row`},dt={class:`controls__play-wrap`},ft={key:0,class:`controls__buf-spinner`},pt={class:`controls__time`},mt={key:2,class:`controls__fs-wrap`},ht={key:0,class:`controls__fs-spinner`},gt=[`aria-label`];var _t=X(l({__name:`ControlsPopup`,setup(t){let s=u(q),l=u(J),d=u(`compact`),m=x(!1),_=x(null);g(()=>{m.value=!1});function y(e){if(!document.startViewTransition||!_.value){e();return}_.value.style.viewTransitionName=`controls-popup`,document.startViewTransition(async()=>{e(),await f()}).finished.finally(()=>{_.value&&(_.value.style.viewTransitionName=``)})}let b=n(()=>s.isMuted?0:Math.round(s.vol*100)),C=null;function T(){C=setTimeout(()=>{C=null,y(()=>{m.value=!0})},350)}function E(){C&&(clearTimeout(C),C=null,s.toggleMute())}function O(){clearTimeout(C),C=null}function k(e){s.seek(Number(e.target.value))}function A(e){s.setVolume(Number(e.target.value)/100)}let j=[.5,.75,1,1.25,1.5,2];function M(){let e=j[(j.indexOf(s.playbackRate)+1)%j.length];s.setPlaybackRate(e)}function N(e){return e===1?`1×`:`${e}×`}return(t,n)=>(v(),a(`div`,{ref_key:`popupEl`,ref:_,class:p([`controls`,{"controls--fs":w(s).isFullscreen}]),onMousemove:n[14]||=D((...e)=>w(l).keepOpen&&w(l).keepOpen(...e),[`stop`])},[m.value?(v(),a(e,{key:0},[o(`div`,it,[o(`button`,{class:`controls__btn`,"aria-label":`Back`,onClick:n[0]||=e=>y(()=>m.value=!1)},[c(Ye)]),n[15]||=o(`span`,{class:`controls__vol-label`},`Volume`,-1),o(`button`,{class:`controls__btn`,"aria-label":w(s).isMuted?`Unmute`:`Mute`,onClick:n[1]||=e=>w(s).toggleMute()},[!w(s).isMuted&&w(s).vol>0?(v(),r(Q,{key:0})):(v(),r($,{key:1}))],8,at)]),o(`div`,ot,[o(`input`,{type:`range`,min:`0`,max:`100`,step:`1`,value:b.value,class:`controls__vol-slider`,style:h({"--v":b.value+`%`}),"aria-label":`Volume`,onInput:A,onMousedown:n[2]||=e=>w(l).pauseHide(),onMouseup:n[3]||=e=>w(l).scheduleHide(),onTouchstartPassive:n[4]||=e=>w(l).pauseHide(),onTouchend:n[5]||=e=>w(l).scheduleHide()},null,44,st),o(`span`,ct,S(b.value)+`%`,1)])],64)):(v(),a(e,{key:1},[w(d)?i(`v-if`,!0):(v(),a(`input`,{key:0,type:`range`,min:`0`,max:`100`,value:w(s).progress,class:`controls__seek`,style:h({"--p":w(s).progress+`%`,"--b":w(s).bufferedDisplay+`%`}),onInput:k,onMousedown:n[6]||=e=>w(l).pauseHide(),onMouseup:n[7]||=e=>w(l).scheduleHide(),onTouchstartPassive:n[8]||=e=>w(l).pauseHide(),onTouchend:n[9]||=e=>w(l).scheduleHide()},null,44,lt)),o(`div`,ut,[o(`div`,dt,[w(s).isBuffering?(v(),a(`div`,ft)):(v(),r(Z,{key:1,"is-playing":w(s).isPlaying,size:`sm`,onTogglePlay:n[10]||=e=>w(s).togglePlay()},null,8,[`is-playing`]))]),o(`span`,pt,S(w(s).fmt(w(s).current))+` / `+S(w(s).fmt(w(s).total)),1),!w(d)&&w(s).supportsPlaybackRate?(v(),a(`button`,{key:0,class:p([`controls__btn controls__btn--rate`,{"controls__btn--active":w(s).playbackRate!==1}]),"aria-label":`Playback rate`,onClick:M},S(N(w(s).playbackRate)),3)):i(`v-if`,!0),w(d)?i(`v-if`,!0):(v(),a(`button`,{key:1,class:p([`controls__btn`,{"controls__btn--active":w(s).isLooping}]),"aria-label":`Toggle loop`,onClick:n[11]||=e=>w(s).toggleLoop()},[c(Me)],2)),o(`button`,{class:`controls__btn`,"aria-label":`Volume`,onMousedown:T,onMouseup:E,onMouseleave:O,onTouchstartPassive:T,onTouchend:D(E,[`prevent`]),onTouchcancel:O},[!w(s).isMuted&&w(s).vol>0?(v(),r(Q,{key:0})):(v(),r($,{key:1}))],32),w(d)?i(`v-if`,!0):(v(),a(`div`,mt,[w(s).isFullscreenPending?(v(),a(`div`,ht)):(v(),a(`button`,{key:1,class:`controls__btn`,"aria-label":w(s).isFullscreen?`Exit fullscreen`:`Fullscreen`,onClick:n[12]||=e=>w(s).toggleFullscreen()},[w(s).isFullscreen?(v(),r(rt,{key:0})):(v(),r($e,{key:1}))],8,gt))])),o(`button`,{class:`controls__btn controls__btn--close`,"aria-label":`Close`,onClick:n[13]||=e=>w(l).closeControls()},[c(Ge)])])],64))],34))}}),[[`__scopeId`,`data-v-5712aad4`]]);const vt={key:0,class:`overlay__spinner`},yt={key:0,class:`overlay__error`};var bt=X(l({__name:`PlayerOverlay`,setup(n){let r=u(q),s=u(J);return(n,l)=>(v(),a(e,null,[i(` Inactive until content has started so platform ad UIs (skip buttons etc.) remain reachable `),o(`div`,{class:`overlay__tap-capture`,style:h({pointerEvents:!w(r).hasStarted||w(r).isAdPlaying?`none`:void 0}),onClick:l[0]||=(...e)=>w(s).onVideoTap&&w(s).onVideoTap(...e),onTouchend:l[1]||=D((...e)=>w(s).onVideoTap&&w(s).onVideoTap(...e),[`prevent`,`stop`])},null,36),c(t,{name:`fade`},{default:E(()=>[!w(r).isReady&&!w(r).isError?(v(),a(`div`,vt,[...l[3]||=[o(`div`,{class:`overlay__spinner-ring`},null,-1)]])):i(`v-if`,!0)]),_:1}),c(t,{name:`fade`},{default:E(()=>[w(r).isError?(v(),a(`div`,yt,[o(`p`,null,S(w(r).errorMessage||`This video could not be played.`),1)])):i(`v-if`,!0)]),_:1}),i(` Hidden in fullscreen while the controls popup is open `),o(`div`,{class:p([`overlay__hud`,{"overlay__hud--visible":w(s).showHUD&&w(r).isReady&&!w(r).isError&&!(w(s).isOpen&&w(r).isFullscreen)}])},[c(Ve)],2),c(t,{name:`popup`},{default:E(()=>[w(s).isOpen&&w(r).isReady&&!w(r).isError?(v(),a(`div`,{key:0,class:p([`overlay__popup`,{"overlay__popup--fs":w(r).isFullscreen}]),onClick:l[2]||=D(()=>{},[`stop`])},[c(_t)],2)):i(`v-if`,!0)]),_:1})],64))}}),[[`__scopeId`,`data-v-f3307b98`]]);const xt={class:`player`},St={"data-vjs-player":``},Ct={key:1,class:`player__native-play`};var wt=X(l({__name:`VideoPlayer`,props:{videoUrl:{type:String,required:!0},title:{type:String,required:!1,default:``},poster:{type:String,required:!1,default:``},aspectRatio:{type:String,required:!1,default:`16:9`},platform:{type:String,required:!1,default:``},techOptions:{type:Object,required:!1,default:()=>({})},adTagUrl:{type:String,required:!1,default:``},imaOptions:{type:Object,required:!1},autoplay:{type:Boolean,required:!1,default:!1},muted:{type:Boolean,required:!1},playbackRate:{type:Number,required:!1},nativeUi:{type:Boolean,required:!1,default:!1},autoStage:{type:Boolean,required:!1,default:!1},lazy:{type:Boolean,required:!1,default:!0},payload:{type:Object,required:!1,default:()=>({})},action:{type:[String,Object,null],required:!1,default:null}},emits:[`state-change`],setup(e,{expose:t,emit:n}){let s=e,l=n,u=x(null),d=b(K(u,s,l)),f=b(pe(C(d,`isPlaying`)));y(q,d),y(J,f),y(Y,C(s,`action`));let{isPortrait:m,cssRatio:g}=R(s.aspectRatio);return t(d),(e,t)=>(v(),a(`div`,xt,[o(`div`,{class:p([`player__shell`,{"player__shell--portrait":w(m)}]),style:h({aspectRatio:w(g)}),onMousemove:t[0]||=e=>f.onMouseMove(),onContextmenuCapture:t[1]||=D(()=>{},[`prevent`]),onMouseleave:t[2]||=e=>f.onMouseLeave()},[o(`div`,St,[o(`video`,{ref_key:`videoEl`,ref:u,class:`video-js`,playsinline:``},null,512),d.nativeUi?i(`v-if`,!0):(v(),r(bt,{key:0})),d.nativeUi&&!d.hasStarted?(v(),a(`div`,Ct,[c(Z,{"is-playing":!1,size:`lg`,onTogglePlay:d.togglePlay},null,8,[`onTogglePlay`])])):i(`v-if`,!0)])],38)]))}}),[[`__scopeId`,`data-v-4ab3cf75`]]);const Tt=x(0),Et=n(()=>Tt.value>0);function Dt(){Tt.value++}function Ot(){Tt.value--}const kt=[`src`],At={class:`stage__idle-body`},jt={class:`stage__idle-btn`},Mt={class:`stage__idle-title`},Nt={key:1,class:`stage__idle-empty`};var Pt=X(l({__name:`VideoStage`,emits:[`state-change`],setup(t,{emit:n}){let s=n,l=x(null),u=x(null),f=x(!1),m=x(!1),b=x(null),C=x(null),w=x(!1),E=x(null);y(`compact`,w);let O=null;T(w,e=>{E.value=e&&C.value?C.value.offsetHeight:null});function k(){O?.disconnect(),b.value&&(O=new IntersectionObserver(([e])=>{w.value=!e.isIntersecting},{threshold:1}),O.observe(b.value))}T(b,k);function A(){u.value&&(u.value={...u.value,autoplay:!0},f.value=!0)}function j(){u.value=null,f.value=!1,m.value=!1,w.value=!1,E.value=null,M()}function M(){window.dispatchEvent(new CustomEvent(H,{detail:{currentVideoUrl:u.value?.videoUrl??null,isPlaying:m.value}}))}function N(e){let t=e.detail;if(u.value?.videoUrl===t.videoUrl&&f.value){l.value?.togglePlay();return}u.value=t,f.value=!1,m.value=!1,M(),f.value=!0}function P(e){let t=e.detail;!u.value||t.videoUrl!==u.value.videoUrl||(f.value?l.value?.togglePlay():(u.value={...u.value,autoplay:!0},f.value=!0))}function F(e){e.type===`play`&&(m.value=!0),(e.type===`pause`||e.type===`ended`)&&(m.value=!1),M(),s(`state-change`,e)}return _(()=>{Dt(),window.addEventListener(B,N),window.addEventListener(V,P)}),g(()=>{Ot(),window.removeEventListener(B,N),window.removeEventListener(V,P),O?.disconnect()}),(t,n)=>(v(),a(`div`,{ref_key:`wrapperEl`,ref:b,class:`stage-wrapper`,style:h(E.value?{height:E.value+`px`}:{})},[o(`div`,{ref_key:`stageEl`,ref:C,class:p([`stage`,{"stage--minified":w.value&&u.value&&f.value}])},[w.value&&u.value&&f.value?(v(),a(`button`,{key:0,class:`stage__dismiss`,"aria-label":`Close`,onClick:D(j,[`stop`])},[c(Ge)])):i(`v-if`,!0),u.value&&f.value?(v(),r(wt,d({ref_key:`playerRef`,ref:l,key:u.value.videoUrl},u.value,{onStateChange:F}),null,16)):(v(),a(`div`,{key:2,class:`stage__idle`,style:h({aspectRatio:u.value?.aspectRatio||`16:9`}),onClick:A},[u.value?.poster?(v(),a(`img`,{key:0,src:u.value.poster,class:`stage__idle-poster`},null,8,kt)):i(`v-if`,!0),n[0]||=o(`div`,{class:`stage__idle-scrim`},null,-1),o(`div`,At,[u.value?(v(),a(e,{key:0},[o(`div`,jt,[c(_e)]),o(`p`,Mt,S(u.value.title),1)],64)):(v(),a(`p`,Nt,`Select a video to play`))])],4))],2)],4))}}),[[`__scopeId`,`data-v-fb8c86cf`]]);const Ft={class:`placeholder`},It=[`src`,`alt`],Lt={class:`placeholder__btn-wrap`},Rt={key:2,class:`placeholder__footer`},zt={class:`placeholder__title`};var Bt=X(l({__name:`VideoPlaceholder`,props:{videoUrl:{type:String,required:!0},title:{type:String,required:!1,default:``},poster:{type:String,required:!1,default:``},aspectRatio:{type:String,required:!1,default:`16:9`},platform:{type:String,required:!1,default:``},techOptions:{type:Object,required:!1,default:()=>({})},adTagUrl:{type:String,required:!1,default:``},imaOptions:{type:Object,required:!1},autoplay:{type:Boolean,required:!1,default:!1},muted:{type:Boolean,required:!1},playbackRate:{type:Number,required:!1},nativeUi:{type:Boolean,required:!1,default:!1},autoStage:{type:Boolean,required:!1,default:!1},lazy:{type:Boolean,required:!1},payload:{type:Object,required:!1,default:()=>({})},action:{type:[String,Object,null],required:!1,default:null}},setup(e){let t=e,{isPortrait:n,cssRatio:r}=R(t.aspectRatio),s=x(!1),l=x(!1);function u(e){let n=e.detail;s.value=n.currentVideoUrl===t.videoUrl,l.value=s.value&&n.isPlaying}function d(e){window.dispatchEvent(new CustomEvent(B,{detail:{...t,...e!==void 0&&{autoplay:e}}}))}function f(){d(!0)}return _(()=>{window.addEventListener(H,u),t.autoStage&&d()}),g(()=>window.removeEventListener(H,u)),(t,u)=>(v(),a(`div`,Ft,[o(`div`,{class:p([`placeholder__shell`,{"placeholder__shell--portrait":w(n),"placeholder__shell--active":s.value}]),style:h({aspectRatio:w(r)}),onClick:f},[e.poster?(v(),a(`img`,{key:0,class:`placeholder__poster`,src:e.poster,alt:e.title},null,8,It)):i(`v-if`,!0),u[0]||=o(`div`,{class:`placeholder__scrim`},null,-1),e.platform?(v(),a(`span`,{key:1,class:p([`placeholder__badge`,`badge--${e.platform}`])},S(e.platform),3)):i(`v-if`,!0),o(`div`,Lt,[c(Z,{"is-playing":s.value&&l.value,size:`lg`,onTogglePlay:f},null,8,[`is-playing`])]),e.title?(v(),a(`div`,Rt,[o(`p`,zt,S(e.title),1)])):i(`v-if`,!0)],6)]))}}),[[`__scopeId`,`data-v-dbcb4f82`]]),Vt=l({__name:`VideoItem`,props:{videoUrl:{type:String,required:!0},title:{type:String,required:!1},poster:{type:String,required:!1},aspectRatio:{type:String,required:!1},platform:{type:String,required:!1},techOptions:{type:Object,required:!1},adTagUrl:{type:String,required:!1},imaOptions:{type:Object,required:!1},autoplay:{type:Boolean,required:!1},muted:{type:Boolean,required:!1},playbackRate:{type:Number,required:!1},nativeUi:{type:Boolean,required:!1},autoStage:{type:Boolean,required:!1},lazy:{type:Boolean,required:!1,default:!0},payload:{type:Object,required:!1},action:{type:[String,Object,null],required:!1,default:null}},emits:[`state-change`],setup(t,{emit:n}){let i=t,o=n,s=x(!1);return(t,n)=>w(Et)?(v(),r(Bt,m(d({key:0},t.$props)),null,16)):(v(),a(e,{key:1},[i.lazy&&!s.value&&!i.autoplay?(v(),r(Bt,d({key:0},t.$props,{onClickCapture:n[0]||=e=>s.value=!0}),null,16)):(v(),r(wt,d({key:1},i,{autoplay:s.value||i.autoplay,onStateChange:n[1]||=e=>o(`state-change`,e)}),null,16,[`autoplay`]))],64))}});export{Y as a,le as c,ne as d,oe as f,j as g,re as h,wt as i,ue as l,ie as m,Bt as n,J as o,L as p,Pt as r,q as s,Vt as t,I as u};
@@ -1 +0,0 @@
1
- import{f as e}from"./VideoItem-C2dc1Nw7.mjs";import t from"video.js";const n={};function r(e){let t=e.match(/^brightcove:\/\/([^/]+)\/([^/]+)\/([^/]+)\/([^/]+)$/);return t?{accountId:t[1],playerId:t[2],embed:t[3],videoId:t[4]}:null}function i(e){return(e?.plugins??[]).find(e=>e.name===`ima3`)?.options?.serverUrl??null}async function a(e,t,r,a){let o=`${e}/${t}_${r}`;if(n[o])return n[o];let s=await fetch(`https://players.brightcove.net/${e}/${t}_${r}/config.json`);if(!s.ok)throw Error(`Brightcove: could not load player config (${s.status})`);let c=await s.json(),l=a??c?.video_cloud?.policy_key;if(!l)throw Error(`Brightcove: policy_key not found in player config`);let u={policyKey:l,adTagUrl:i(c)};return n[o]=u,u}async function o(e,t){let n=r(e);if(!n)return null;let{accountId:i,playerId:o,embed:s}=n;return a(i,o,s,t)}async function s(t,n,r){let i=await fetch(`https://edge.api.brightcove.com/playback/v1/accounts/${t}/videos/${n}`,{headers:{Accept:`application/json;pk=${r}`}});if(!i.ok)throw Error(`Brightcove Playback API error: ${i.status}`);let a=await i.json(),o=e(a.sources||[]);if(!o.length)throw Error(`Brightcove: no playable sources found`);return{sources:o.map(e=>({src:e.src,type:e.type})),poster:a.poster??a.thumbnail??null}}t.use(`video/brightcove`,e=>({setSource(n,i){let o=r(n.src);if(!o){i(Error(`Brightcove: invalid src — expected "brightcove://accountId/playerId/embed/videoId"`),n);return}let{accountId:c,playerId:l,embed:u,videoId:d}=o,f=e.options_?.brightcove?.policyKey;(async()=>{try{let{policyKey:n}=await a(c,l,u,f);t.log(`Brightcove: resolved policy key, fetching sources…`);let{sources:r,poster:o}=await s(c,d,n);t.log(`Brightcove: sources resolved`,r),o&&!e.poster()&&e.poster(o),i(null,r[0])}catch(e){t.log.error(`Brightcove error:`,e.message),i(e,n)}})()}}));export{o as prefetchConfig};
@@ -1 +0,0 @@
1
- import{c as e,d as t,h as n,l as r,p as i,u as a}from"./VideoItem-C2dc1Nw7.mjs";import{t as o}from"./loadScript-Du6JsTc2.mjs";import s from"video.js";const c=s.getTech(`Tech`);var l=class i extends c{constructor(e,t){super(e,t),this._currentTime=0,this._duration=0,this._volume=1,this._muted=!1,this._paused=!0,this._seeking=!1,this._dm=null,this.setSrc(this.options_.source),this.setTimeout(()=>{this.el_&&(this.el_.parentNode.classList.add(`vjs-dailymotion`),this.initPlayer())})}createEl(){let e=document.createElement(`div`);return e.setAttribute(`id`,this.options_.techId),e.setAttribute(`class`,`vjs-tech`),e.setAttribute(`style`,`position:absolute;top:0;left:0;right:0;bottom:0;overflow:hidden`),e}async initPlayer(){let e=this.options_,t=e.source?.dailymotion?.playerId??e.playerId;if(!t){s.log.error(`Dailymotion Tech: dailymotion.playerId option is required`);return}if(!this.videoId){s.log.error(`Dailymotion Tech: could not parse video ID from source URL`);return}this._playerId=t;let n=this.el_?.parentNode;for(;n&&!n.classList?.contains(`player-shell`);)n=n.parentNode;this._shell=n;try{let n=await o(`https://geo.dailymotion.com/libs/player/${t}.js`,t).then(()=>window.dailymotion);if(!this.el_)return;this._dm_sdk=n;let r=await n.createPlayer(this.options_.techId,{video:this.videoId,params:{autoplay:!!e.autoplay,mute:!!e.muted}});if(!this.el_)return;this._dm=r;let{events:i}=this._dm_sdk;this.triggerReady(),this.playOnReady&&this.play(),r.on(i.PLAYER_CRITICALPATHREADY,e=>{let t=e.videoThumbnails;if(t){let e=t[Object.keys(t).map(Number).sort((e,t)=>t-e)[0]];e&&this.trigger({type:`posterchange`,src:e})}}),r.on(i.VIDEO_PLAY,()=>{this._paused=!1,this.trigger(`play`),this.trigger(`playing`)}),r.on(i.VIDEO_PLAYING,()=>{this._paused=!1,this.trigger(`play`),this.trigger(`playing`)}),r.on(i.VIDEO_PAUSE,()=>{this._paused=!0,this.trigger(`pause`)}),r.on(i.VIDEO_END,()=>{this._paused=!0,this.trigger(`ended`)}),r.on(i.VIDEO_TIMECHANGE,e=>{this._currentTime=e.videoTime??this._currentTime,this._duration=e.videoDuration??this._duration,this.trigger(`timeupdate`)}),r.on(i.VIDEO_DURATIONCHANGE,e=>{this._duration=e.videoDuration??this._duration,this.trigger(`durationchange`)}),r.on(i.VIDEO_SEEKSTART,()=>{this._seeking=!0,this.trigger(`seeking`)}),r.on(i.VIDEO_SEEKEND,e=>{this._seeking=!1,this._currentTime=e.videoTime??this._currentTime,this.trigger(`seeked`)}),r.on(i.PLAYER_VOLUMECHANGE,e=>{this._volume=e.playerVolume??this._volume,this._muted=e.playerIsMuted??this._muted,this.trigger(`volumechange`)}),r.on(i.PLAYER_ERROR,()=>this.trigger(`error`)),i.AD_START&&r.on(i.AD_START,()=>this.trigger(`adstart`)),i.AD_END&&r.on(i.AD_END,()=>this.trigger(`adend`))}catch(e){s.log.error(`Dailymotion:`,e.message)}}play(){this._dm?this._dm.play():this.playOnReady=!0}pause(){this._dm?.pause()}paused(){return this._paused}seeking(){return this._seeking}currentTime(){return this._currentTime}setCurrentTime(e){this._currentTime=e,this._dm?.seek(e),this._seeking=!0,this.trigger(`seeking`)}duration(){return this._duration}volume(){return this._volume}setVolume(e){this._volume=e,this._dm?.setVolume(e)}muted(){return this._muted}setMuted(e){this._muted=e,this._dm?.setMute(e)}playbackRate(){return 1}setPlaybackRate(){}buffered(){return s.createTimeRange(0,this._currentTime)}seekable(){return s.createTimeRange(0,this._duration)}currentSrc(){return this.source?.src??``}ended(){return!1}preload(){}load(){}reset(){}networkState(){return+!!this._dm}readyState(){return this._dm?4:0}supportsFullScreen(){return n()}enterFullscreen(){if(t()){this._spawnIosFullscreen();return}(this._shell?.requestFullscreen||this._shell?.webkitRequestFullscreen)?.call(this._shell)}exitFullscreen(){a()}_spawnIosFullscreen(){let t=this._currentTime;this._dm?.pause(),this.player_.trigger(e);let n=document.createElement(`div`);n.style.cssText=`position:fixed;inset:0;z-index:99999;opacity:0;pointer-events:none`,document.body.appendChild(n);let i=document.createElement(`iframe`);i.src=`https://geo.dailymotion.com/player/${this._playerId}.html?video=${this.videoId}&autoplay=1&startTime=${Math.floor(t)}`,i.setAttribute(`allow`,`autoplay; fullscreen`),i.setAttribute(`allowfullscreen`,`true`),i.style.cssText=`width:100%;height:100%;border:0`,n.appendChild(i);let a=!1,o=()=>{a||(a=!0,document.removeEventListener(`fullscreenchange`,s),document.removeEventListener(`webkitfullscreenchange`,s),this.player_.trigger(r),n.remove(),this._dm?.seek(t),this._dm?.play())},s=()=>{!document.fullscreenElement&&!document.webkitFullscreenElement&&o()};document.addEventListener(`fullscreenchange`,s),document.addEventListener(`webkitfullscreenchange`,s),i.onload=()=>this.player_.trigger(`fullscreen-pending-done`)}setSrc(e){e?.src&&(this.source=e,this.videoId=i.parseVideoId(e.src),this.options_.autoplay&&(this.playOnReady=!0))}dispose(){this._dm?.destroy?.(),this._dm=null,this.el_?.parentNode?.classList.remove(`vjs-dailymotion`),c.prototype.dispose.call(this)}};l.isSupported=()=>!0,l.canPlayType=e=>e===`video/dailymotion`?`probably`:``,l.canPlaySource=({type:e,src:t})=>e===`video/dailymotion`?`probably`:/dailymotion\.com|dai\.ly/.test(t)?`maybe`:``,l.parseVideoId=e=>{let t=e.match(/[?&]video=([a-zA-Z0-9]+)/);if(t)return t[1];let n=e.match(/(?:dailymotion\.com\/(?:embed\/)?video\/|dai\.ly\/)([a-zA-Z0-9]+)/);return n?n[1]:null},i(`Dailymotion`,l);export{l as default};
@@ -1,204 +0,0 @@
1
- import { ComputedRef, InjectionKey, Plugin, Ref, UnwrapNestedRefs } from "vue";
2
-
3
- //#region src/types.d.ts
4
- type Platform = 'youtube' | 'vimeo' | 'dailymotion' | 'jwplayer' | 'brightcove' | 'html5';
5
- type BuiltinAction = 'mute' | 'loop';
6
- interface CustomAction {
7
- icon: string;
8
- label: string;
9
- onClick: () => void;
10
- }
11
- type PlayerAction = BuiltinAction | CustomAction;
12
- type StateChangeType = 'play' | 'pause' | 'ended' | 'seeked' | 'error' | 'adstart' | 'adend' | 'volumechange' | 'ratechange';
13
- interface StateChangeEvent {
14
- type: StateChangeType;
15
- currentTime: number;
16
- duration: number;
17
- src: string;
18
- error?: {
19
- code: number;
20
- message: string;
21
- } | null;
22
- isMuted?: boolean;
23
- playbackRate?: number;
24
- payload?: Record<string, unknown>;
25
- }
26
- interface PlayerProps {
27
- videoUrl: string;
28
- title?: string;
29
- poster?: string;
30
- aspectRatio?: string;
31
- platform?: string;
32
- techOptions?: Record<string, unknown>;
33
- adTagUrl?: string;
34
- imaOptions?: Record<string, unknown>;
35
- autoplay?: boolean;
36
- muted?: boolean;
37
- playbackRate?: number;
38
- nativeUi?: boolean;
39
- autoStage?: boolean;
40
- lazy?: boolean;
41
- payload?: Record<string, unknown>;
42
- action?: PlayerAction | null;
43
- }
44
- type VideoSelectDetail = PlayerProps;
45
- interface VideoStateDetail {
46
- currentVideoUrl: string | null;
47
- isPlaying: boolean;
48
- }
49
- interface VideoToggleDetail {
50
- videoUrl: string;
51
- }
52
- interface VideoEntry extends PlayerProps {
53
- platform: Platform;
54
- }
55
- //#endregion
56
- //#region src/components/VideoPlayer.vue.d.ts
57
- type __VLS_Props$1 = PlayerProps & {
58
- action?: PlayerAction | null;
59
- };
60
- declare const __VLS_export$3: import("vue").DefineComponent<__VLS_Props$1, {
61
- isPlaying: boolean;
62
- isReady: boolean;
63
- isAdPlaying: boolean;
64
- isBuffering: boolean;
65
- current: number;
66
- total: number;
67
- vol: number;
68
- isMuted: boolean;
69
- isLooping: boolean;
70
- playbackRate: number;
71
- hasStarted: boolean;
72
- isError: boolean;
73
- errorMessage: string;
74
- progress: number;
75
- bufferedDisplay: number;
76
- isFullscreen: boolean;
77
- isFullscreenPending: boolean;
78
- fmt: (s: number) => string;
79
- togglePlay: () => void;
80
- seek: (val: number) => void;
81
- toggleMute: () => void;
82
- setVolume: (val: number) => void;
83
- toggleFullscreen: () => void;
84
- toggleLoop: () => void;
85
- setPlaybackRate: (rate: number) => void;
86
- supportsPlaybackRate: boolean;
87
- nativeUi: boolean;
88
- }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
89
- "state-change": (event: StateChangeEvent) => any;
90
- }, string, import("vue").PublicProps, Readonly<__VLS_Props$1> & Readonly<{
91
- "onState-change"?: ((event: StateChangeEvent) => any) | undefined;
92
- }>, {
93
- title: string;
94
- poster: string;
95
- aspectRatio: string;
96
- platform: string;
97
- techOptions: Record<string, unknown>;
98
- adTagUrl: string;
99
- autoplay: boolean;
100
- nativeUi: boolean;
101
- autoStage: boolean;
102
- lazy: boolean;
103
- payload: Record<string, unknown>;
104
- action: PlayerAction | null;
105
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
106
- declare const _default$3: typeof __VLS_export$3;
107
- //#endregion
108
- //#region src/components/VideoStage.vue.d.ts
109
- declare const __VLS_export$2: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
110
- "state-change": (event: StateChangeEvent) => any;
111
- }, string, import("vue").PublicProps, Readonly<{}> & Readonly<{
112
- "onState-change"?: ((event: StateChangeEvent) => any) | undefined;
113
- }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
114
- declare const _default$2: typeof __VLS_export$2;
115
- //#endregion
116
- //#region src/components/VideoPlaceholder.vue.d.ts
117
- declare const __VLS_export$1: import("vue").DefineComponent<PlayerProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<PlayerProps> & Readonly<{}>, {
118
- title: string;
119
- poster: string;
120
- aspectRatio: string;
121
- platform: string;
122
- techOptions: Record<string, unknown>;
123
- adTagUrl: string;
124
- autoplay: boolean;
125
- nativeUi: boolean;
126
- autoStage: boolean;
127
- payload: Record<string, unknown>;
128
- action: PlayerAction | null;
129
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
130
- declare const _default$1: typeof __VLS_export$1;
131
- //#endregion
132
- //#region src/components/VideoItem.vue.d.ts
133
- type __VLS_Props = VideoSelectDetail & {
134
- action?: PlayerAction | null;
135
- };
136
- declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
137
- "state-change": (event: StateChangeEvent) => any;
138
- }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
139
- "onState-change"?: ((event: StateChangeEvent) => any) | undefined;
140
- }>, {
141
- lazy: boolean;
142
- action: PlayerAction | null;
143
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
144
- declare const _default: typeof __VLS_export;
145
- //#endregion
146
- //#region src/adapters/index.d.ts
147
- declare function getPlatform(url: any): string;
148
- //#endregion
149
- //#region src/composables/usePlayer.d.ts
150
- interface UsePlayerReturn {
151
- isPlaying: Ref<boolean>;
152
- isReady: Ref<boolean>;
153
- isAdPlaying: Ref<boolean>;
154
- isBuffering: Ref<boolean>;
155
- current: Ref<number>;
156
- total: Ref<number>;
157
- vol: Ref<number>;
158
- isMuted: Ref<boolean>;
159
- isLooping: Ref<boolean>;
160
- playbackRate: Ref<number>;
161
- hasStarted: Ref<boolean>;
162
- isError: Ref<boolean>;
163
- errorMessage: Ref<string>;
164
- progress: ComputedRef<number>;
165
- bufferedDisplay: ComputedRef<number>;
166
- isFullscreen: Ref<boolean>;
167
- isFullscreenPending: Ref<boolean>;
168
- fmt: (s: number) => string;
169
- togglePlay: () => void;
170
- seek: (val: number) => void;
171
- toggleMute: () => void;
172
- setVolume: (val: number) => void;
173
- toggleFullscreen: () => void;
174
- toggleLoop: () => void;
175
- setPlaybackRate: (rate: number) => void;
176
- supportsPlaybackRate: Ref<boolean>;
177
- nativeUi: Ref<boolean>;
178
- }
179
- //#endregion
180
- //#region src/composables/useHud.d.ts
181
- interface UseHudReturn {
182
- showHUD: Ref<boolean>;
183
- isOpen: Ref<boolean>;
184
- scheduleHide: (delay?: number) => void;
185
- pauseHide: () => void;
186
- onVideoTap: () => void;
187
- onMouseMove: () => void;
188
- onMouseLeave: () => void;
189
- openControls: () => void;
190
- closeControls: () => void;
191
- keepOpen: () => void;
192
- }
193
- //#endregion
194
- //#region src/composables/playerContext.d.ts
195
- type PlayerContext = UnwrapNestedRefs<UsePlayerReturn>;
196
- type HudContext = UnwrapNestedRefs<UseHudReturn>;
197
- declare const PlayerKey: InjectionKey<PlayerContext>;
198
- declare const HudKey: InjectionKey<HudContext>;
199
- declare const ActionKey: InjectionKey<Ref<PlayerAction | null | undefined>>;
200
- //#endregion
201
- //#region src/index.d.ts
202
- declare const VideoPlayerPlugin: Plugin;
203
- //#endregion
204
- export { VideoToggleDetail as S, StateChangeEvent as _, PlayerContext as a, VideoSelectDetail as b, _default as c, _default$3 as d, BuiltinAction as f, PlayerProps as g, PlayerAction as h, HudKey as i, _default$1 as l, Platform as m, ActionKey as n, PlayerKey as o, CustomAction as p, HudContext as r, getPlatform as s, VideoPlayerPlugin as t, _default$2 as u, StateChangeType as v, VideoStateDetail as x, VideoEntry as y };
@@ -1 +0,0 @@
1
- import{f as e}from"./VideoItem-C2dc1Nw7.mjs";import t from"video.js";const n={};function r(e){return e.match(/cdn\.jwplayer\.com\/videos\/([^-]+)/)?.[1]??e.match(/cdn\.jwplayer\.com\/manifests\/([^.]+)/)?.[1]??e.match(/^jwplayer:\/\/([^/]+)$/)?.[1]??null}function i(e){let t=e?.advertising?.schedule;return Array.isArray(t)&&t.length?t[0].tag??null:e?.advertising?.tag??null}async function a(t){if(n[t])return n[t];let r=await fetch(`https://cdn.jwplayer.com/v2/media/${t}`);if(!r.ok)throw Error(`JW Platform API error: ${r.status}`);let a=(await r.json()).playlist?.[0];if(!a)throw Error(`JW Platform: empty playlist`);let o=e((a.sources??[]).map(e=>({src:e.file,type:e.type})));if(!o.length)throw Error(`JW Platform: no playable sources found`);let s={src:o[0].src,type:o[0].type,poster:a.image??null,adTagUrl:i(a)};return n[t]=s,s}async function o(e){let t=r(e);if(!t)throw Error(`JW Platform: unrecognised source URL: ${e}`);let n=await a(t);if(e.startsWith(`jwplayer://`))return n;let i=/\.mp4(\?|$)/.test(e)?`video/mp4`:`application/x-mpegURL`;return{...n,src:e,type:i}}async function s(e){let t=r(e);return t?a(t).catch(()=>null):null}t.use(`video/jwplayer`,e=>({setSource(n,r){(async()=>{try{let{src:i,type:a,poster:s}=await o(n.src);t.log(`JW Platform: resolved source`,i),s&&!e.poster()&&e.poster(s),r(null,{src:i,type:a})}catch(e){t.log.error(`JW Platform error:`,e.message),r(e,n)}})()}}));export{s as prefetchConfig};
@@ -1 +0,0 @@
1
- import{h as e,m as t,p as n,u as r}from"./VideoItem-C2dc1Nw7.mjs";import i from"video.js";import a from"@vimeo/player";const o=i.getTech(`Tech`);var s=class n extends o{constructor(e,t){super(e,t),this._currentTime=0,this._duration=0,this._volume=1,this._muted=!1,this._paused=!0,this._seeking=!1,this.setSrc(this.options_.source,!0),this.setTimeout(()=>{this.el_&&(this.el_.parentNode.classList.add(`vjs-vimeo`),this.initVimeoPlayer())})}createEl(){let e=document.createElement(`div`);e.setAttribute(`id`,this.options_.techId),e.setAttribute(`style`,`width:100%;height:100%;top:0;left:0;position:absolute`),e.setAttribute(`class`,`vjs-tech`);let t=document.createElement(`div`);return t.appendChild(e),t}initVimeoPlayer(){if(!this.url||!this.url.videoId)return;let e={id:this.url.videoId,byline:!1,portrait:!1,title:!1,transparent:!0,controls:!!this.options_.nativeUi,autopause:!1,width:`100%`,height:`100%`};this.options_.autoplay!==void 0&&(e.autoplay=this.options_.autoplay),this.options_.loop!==void 0&&(e.loop=this.options_.loop),this.options_.muted!==void 0&&(e.muted=this.options_.muted),this.vimeoPlayer=new a(this.options_.techId,e),this.vimeoPlayer.ready().then(()=>this.onPlayerReady()).catch(e=>{this.player_.error({code:4,message:e?.message||`This video is unavailable or cannot be embedded here.`})}),this.vimeoPlayer.on(`play`,()=>{this._paused=!1,this.trigger(`play`),this.trigger(`playing`)}),this.vimeoPlayer.on(`pause`,()=>{this._paused=!0,this.trigger(`pause`)}),this.vimeoPlayer.on(`ended`,()=>{this._paused=!0,this.trigger(`ended`)}),this.vimeoPlayer.on(`timeupdate`,({seconds:e,duration:t})=>{this._currentTime=e,this._duration=t,this.trigger(`timeupdate`),t&&!this._durationSet&&(this._durationSet=!0,this.trigger(`durationchange`))}),this.vimeoPlayer.on(`loaded`,()=>{this._durationSet=!1,this.trigger(`loadedmetadata`),this.trigger(`durationchange`)}),this.vimeoPlayer.on(`seeking`,({seconds:e})=>{this._currentTime=e,this._seeking=!0,this.trigger(`seeking`)}),this.vimeoPlayer.on(`seeked`,({seconds:e})=>{this._currentTime=e,this._seeking=!1,this.trigger(`seeked`),this.trigger(`timeupdate`)}),this.vimeoPlayer.on(`bufferstart`,()=>this.trigger(`waiting`)),this.vimeoPlayer.on(`bufferend`,()=>this.trigger(`canplay`)),this.vimeoPlayer.on(`volumechange`,({volume:e})=>{this._volume=e,this.trigger(`volumechange`)}),this.vimeoPlayer.on(`error`,e=>this.trigger(`error`,e)),this.vimeoPlayer.on(`fullscreenchange`,({fullscreen:e})=>{this.trigger(`fullscreenchange`,{isFullscreen:e})})}enterFullscreen(){t(this.player_.el().parentElement)}exitFullscreen(){r()}onPlayerReady(){this.triggerReady(),this.options_.muted&&this.vimeoPlayer.setMuted(!0),this.playOnReady&&this.play()}setSrc(e){!e||!e.src||(this.source=e,this.url=n.parseUrl(e.src),this.options_.autoplay&&(this.playOnReady=!0))}play(){if(!this.vimeoPlayer){this.playOnReady=!0;return}this.vimeoPlayer.play().catch(()=>{})}pause(){this.vimeoPlayer?.pause().catch(()=>{})}paused(){return this._paused}seeking(){return this._seeking}currentTime(){return this._currentTime}setCurrentTime(e){this.vimeoPlayer?.setCurrentTime(e).catch(()=>{}),this.trigger(`timeupdate`),this.trigger(`seeking`)}duration(){return this._duration}volume(){return this._volume}setVolume(e){this._volume=e,this.vimeoPlayer?.setVolume(e).catch(()=>{})}muted(){return this._muted}setMuted(e){this._muted=e,this.vimeoPlayer?.setMuted(e).then(()=>{this.setTimeout(()=>this.trigger(`volumechange`),50)}).catch(()=>{})}buffered(){return i.createTimeRange(0,this._currentTime)}seekable(){return i.createTimeRange(0,this._duration)}playbackRate(){return this._playbackRate||1}setPlaybackRate(e){this._playbackRate=e,this.vimeoPlayer?.setPlaybackRate(e).catch(()=>{}),this.trigger(`ratechange`)}preload(){}load(){}reset(){}currentSrc(){return this.source?.src||``}ended(){return!1}networkState(){return+!!this.vimeoPlayer}readyState(){return this.vimeoPlayer?4:0}supportsFullScreen(){return e()}dispose(){this.vimeoPlayer?.destroy().catch(()=>{}),this.vimeoPlayer=null,this.el_?.parentNode?.classList.remove(`vjs-vimeo`),o.prototype.dispose.call(this)}};s.isSupported=()=>!0,s.canPlayType=e=>e===`video/vimeo`?`probably`:``,s.canPlaySource=({type:e,src:t})=>e===`video/vimeo`?`probably`:/vimeo\.com|player\.vimeo\.com/.test(t)?`maybe`:``,s.parseUrl=e=>{let t={videoId:null},n=e.match(/(?:vimeo\.com\/(?:video\/|channels\/[^/]+\/|groups\/[^/]+\/videos\/)?|player\.vimeo\.com\/video\/)(\d+)/);return n&&(t.videoId=n[1]),t},n(`Vimeo`,s);export{s as default};
@@ -1 +0,0 @@
1
- import{c as e,d as t,h as n,l as r,m as i,p as a,u as o}from"./VideoItem-C2dc1Nw7.mjs";import{t as s}from"./loadScript-Du6JsTc2.mjs";import c from"video.js";const l=c.getTech(`Tech`),u=c.browser.IS_IOS||c.browser.IS_NATIVE_ANDROID;var d=class a extends l{constructor(e,t){super(e,t),this.setPoster(e.poster),this.setSrc(this.options_.source),this.setTimeout(()=>{this.el_&&(this.el_.parentNode.classList.add(`vjs-youtube`),u&&this.el_.parentNode.classList.add(`vjs-youtube-mobile`),a.isApiReady?this.initYTPlayer():a.apiReadyQueue.push(this))})}createEl(){let e=document.createElement(`div`);e.setAttribute(`id`,this.options_.techId),e.setAttribute(`style`,`width:100%;height:100%;top:0;left:0;position:absolute`),e.setAttribute(`class`,`vjs-tech`);let t=document.createElement(`div`);if(t.appendChild(e),!u&&!this.options_.nativeUi&&!this.options_.ytControls){let e=document.createElement(`div`);e.setAttribute(`class`,`vjs-iframe-blocker`),e.setAttribute(`style`,`position:absolute;top:0;left:0;width:100%;height:100%`),e.onclick=()=>this.pause(),t.appendChild(e)}return t}initYTPlayer(){let e=this.options_,t={controls:+!!e.nativeUi,modestbranding:1,rel:0,showinfo:0,mute:+!!e.muted,loop:+!!e.loop,origin:window.location.origin,allowfullscreen:1,fullscreen:1,fs:1,...e.iv_load_policy!==void 0&&{iv_load_policy:e.iv_load_policy},...e.cc_load_policy!==void 0&&{cc_load_policy:e.cc_load_policy},...e.color!==void 0&&{color:e.color},...e.hl!==void 0&&{hl:e.hl},...e.playsinline!==void 0&&{playsinline:e.playsinline},...e.rel!==void 0&&{rel:e.rel},...e.start!==void 0&&{start:e.start},...e.end!==void 0&&{end:e.end},...e.ytControls!==void 0&&{controls:e.ytControls},...e.customVars};e.youtube&&Object.assign(t,e.youtube),this.activeVideoId=this.url?.videoId??null,this.ytPlayer=new window.YT.Player(this.options_.techId,{videoId:this.activeVideoId,playerVars:t,...e.enablePrivacyEnhancedMode&&{host:`https://www.youtube-nocookie.com`},events:{onReady:this.onPlayerReady.bind(this),onStateChange:this.onPlayerStateChange.bind(this),onPlaybackRateChange:this.onPlayerPlaybackRateChange.bind(this),onVolumeChange:this.onPlayerVolumeChange.bind(this),onError:this.onPlayerError.bind(this)}}),window.yt=this.ytPlayer}onPlayerReady(){this.ytPlayer.getAvailablePlaybackRates().length>1&&(this.featuresPlaybackRate=!0),this.playerReady_=!0,this.triggerReady(),this.playOnReady?this.play():this.cueOnReady&&(this.cueVideoById_(this.url.videoId),this.activeVideoId=this.url.videoId)}_isAdPlaying(){try{let e=this.ytPlayer?.getPlayerResponse()?.adPlacements;return Array.isArray(e)&&e.length>0}catch{return!1}}onPlayerStateChange(e){let t=e.data;if(t===this.lastState||this.errorNumber)return;this.lastState=t;let n=this._isAdPlaying();switch(n!==this._adWasPlaying&&(this._adWasPlaying=n,this.trigger(n?`adstart`:`adend`)),t){case-1:this.trigger(`loadstart`),this.trigger(`loadedmetadata`),this.trigger(`durationchange`),this.trigger(`ratechange`);break;case YT.PlayerState.ENDED:this.trigger(`ended`);break;case YT.PlayerState.PLAYING:this.trigger(`timeupdate`),this.trigger(`durationchange`),this.trigger(`playing`),this.trigger(`play`),this.isSeeking&&this.onSeeked();break;case YT.PlayerState.PAUSED:this.trigger(`canplay`),this.isSeeking||this.trigger(`pause`);break;case YT.PlayerState.BUFFERING:this.player_.trigger(`waiting`);break;case YT.PlayerState.CUED:this.trigger(`canplay`);break}this.startInterval&&=(clearInterval(this.startInterval),null),t===YT.PlayerState.PLAYING&&(this.startInterval=setInterval(()=>this.trigger(`timeupdate`),250))}onPlayerPlaybackRateChange(){this.trigger(`ratechange`)}onPlayerVolumeChange(){this.trigger(`volumechange`)}onPlayerError(e){this.errorNumber=e.data,this.trigger(`error`),this.setTimeout(()=>{this.errorNumber=null},0)}play(){this.url?.videoId&&(this.wasPausedBeforeSeek=!1,this.isReady_?this.activeVideoId===this.url.videoId?this.ytPlayer.playVideo():(this.loadVideoById_(this.url.videoId),this.activeVideoId=this.url.videoId):(this.trigger(`waiting`),this.playOnReady=!0))}pause(){this.ytPlayer?.pauseVideo()}paused(){return this.ytPlayer?this.lastState!==YT.PlayerState.PLAYING&&this.lastState!==YT.PlayerState.BUFFERING:!0}loadVideoById_(e){this.ytPlayer.loadVideoById({videoId:e})}cueVideoById_(e){this.ytPlayer.cueVideoById({videoId:e})}currentTime(){return this.ytPlayer?.getCurrentTime()??0}setCurrentTime(e){this.lastState===YT.PlayerState.PAUSED&&(this.timeBeforeSeek=this.currentTime()),this.isSeeking||(this.wasPausedBeforeSeek=this.paused()),this.ytPlayer.seekTo(e,!0),this.trigger(`timeupdate`),this.trigger(`seeking`),this.isSeeking=!0,this.lastState===YT.PlayerState.PAUSED&&this.timeBeforeSeek!==e&&(clearInterval(this.checkSeekedInPauseInterval),this.checkSeekedInPauseInterval=setInterval(()=>{this.lastState!==YT.PlayerState.PAUSED||!this.isSeeking?clearInterval(this.checkSeekedInPauseInterval):this.currentTime()!==this.timeBeforeSeek&&(this.trigger(`timeupdate`),this.onSeeked())},250))}onSeeked(){clearInterval(this.checkSeekedInPauseInterval),this.isSeeking=!1,this.wasPausedBeforeSeek&&this.pause(),this.trigger(`seeked`)}seeking(){return this.isSeeking}seekable(){return c.createTimeRange(0,this.ytPlayer?.getDuration()??0)}duration(){return this.ytPlayer?.getDuration()??0}ended(){return this.ytPlayer?this.lastState===YT.PlayerState.ENDED:!1}volume(){return this.ytPlayer?this.ytPlayer.getVolume()/100:1}setVolume(e){this.ytPlayer?.setVolume(e*100)}muted(){return this.ytPlayer?.isMuted()??!1}setMuted(e){this.ytPlayer&&(e?this.ytPlayer.mute():this.ytPlayer.unMute(),this.setTimeout(()=>this.trigger(`volumechange`),50))}buffered(){return this.ytPlayer?.getVideoLoadedFraction?c.createTimeRange(0,this.ytPlayer.getVideoLoadedFraction()*this.ytPlayer.getDuration()):c.createTimeRange()}playbackRate(){return this.ytPlayer?.getPlaybackRate()??1}setPlaybackRate(e){this.ytPlayer?.setPlaybackRate(e)}currentSrc(){return this.source?.src??``}preload(){}load(){}reset(){}networkState(){if(!this.ytPlayer)return 0;switch(this.ytPlayer.getPlayerState()){case-1:return 0;case 3:return 2;default:return 1}}readyState(){if(!this.ytPlayer)return 0;switch(this.ytPlayer.getPlayerState()){case-1:return 0;case 5:return 1;case 3:return 2;default:return 4}}supportsFullScreen(){return n()}setSrc(e){e?.src&&(this.source=e,this.url=a.parseUrl(e.src),!this.options_.poster&&this.url.videoId&&(this.poster_=`https://img.youtube.com/vi/${this.url.videoId}/0.jpg`,this.setTimeout(()=>{this.trigger(`posterchange`),this.checkHighResPoster()},0)),this.options_.autoplay&&!u?this.isReady_?this.play():this.playOnReady=!0:this.activeVideoId!==this.url.videoId&&(this.isReady_?(this.cueVideoById_(this.url.videoId),this.activeVideoId=this.url.videoId):this.cueOnReady=!0))}poster(){return u?null:this.poster_}setPoster(e){this.poster_=e}autoplay(){return this.options_.autoplay}setAutoplay(e){this.options_.autoplay=e}loop(){return this.options_.loop}setLoop(e){this.options_.loop=e}checkHighResPoster(){let e=`https://img.youtube.com/vi/${this.url.videoId}/maxresdefault.jpg`,t=new Image;t.onload=()=>{(t.naturalHeight||t.height)<=90||(this.poster_=e,this.trigger(`posterchange`))},t.src=e}enterFullscreen(){if(t()&&this.ytPlayer){this._spawnIosFullscreen();return}i(this.player_.el().parentElement)}exitFullscreen(){o()}_spawnIosFullscreen(){let t=this.ytPlayer,n=t.getCurrentTime(),{video_id:i}=t.getVideoData();t.pauseVideo(),this.player_.trigger(e);let a=document.createElement(`div`);a.style.cssText=`position:fixed;inset:0;z-index:99999;opacity:0;pointer-events:none`,document.body.appendChild(a);let o=document.createElement(`div`);o.id=`yt-fs-${Date.now()}`,a.appendChild(o);let s=null,c=!1,l=()=>{if(c)return;c=!0,this.player_.trigger(r);let e=s?s.getCurrentTime():n;try{s?.destroy()}catch{}a.remove(),t.seekTo(e,!0),this.trigger(`timeupdate`)};s=new window.YT.Player(o.id,{videoId:i,playerVars:{playsinline:0,autoplay:1,controls:1,modestbranding:1,rel:0,start:Math.floor(n)},events:{onReady:e=>{this.player_.trigger(r),e.target.seekTo(n,!0),e.target.playVideo()},onStateChange:e=>{(e.data===window.YT.PlayerState.PAUSED||e.data===window.YT.PlayerState.ENDED)&&l()}}})}dispose(){clearInterval(this.startInterval),this.ytPlayer?(this.ytPlayer.stopVideo?.(),this.ytPlayer.destroy?.()):a.apiReadyQueue=a.apiReadyQueue.filter(e=>e!==this),this.ytPlayer=null,this.el_?.parentNode?.classList.remove(`vjs-youtube`,`vjs-youtube-mobile`),l.prototype.dispose.call(this)}};d.isApiReady=!1,d.apiReadyQueue=[],d.isSupported=()=>!0,d.canPlayType=e=>e===`video/youtube`?`probably`:``,d.canPlaySource=({type:e,src:t})=>e===`video/youtube`?`probably`:/youtu\.be|youtube\.com/.test(t)?`maybe`:``,d.parseUrl=e=>{let t={videoId:null,listId:null},n=e.match(/^.*(youtu\.be\/|v\/|u\/\w\/|embed\/|watch\?v=|shorts\/|&v=)([^#&?]*).*/);n?.[2]?.length===11&&(t.videoId=n[2]);let r=e.match(/[?&]list=([^#&?]+)/);return r?.[1]&&(t.listId=r[1]),t},typeof document<`u`&&s(`https://www.youtube.com/iframe_api`).then(()=>{window.YT.ready(()=>{d.isApiReady=!0,d.apiReadyQueue.forEach(e=>e.initYTPlayer()),d.apiReadyQueue=[]})}),a(`Youtube`,d);export{d as default};