@munsonlabs/video-player 0.0.7 → 0.0.9
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 +45 -61
- package/dist/element.d.mts +0 -1
- package/dist/element.mjs +13 -1
- package/dist/index.d.mts +18 -5
- package/dist/index.mjs +1 -1
- package/dist/style.css +1 -1
- package/package.json +2 -5
- package/dist/chunks/brightcove-BQ7atfxD.mjs +0 -1
- package/dist/chunks/brightcove-wzVhFaj0.mjs +0 -1
- package/dist/chunks/dailymotion-BkCqcmM9.mjs +0 -1
- package/dist/chunks/dailymotion-CEXthEHH.mjs +0 -1
- package/dist/chunks/jwplayer-BHEYGzXA.mjs +0 -1
- package/dist/chunks/jwplayer-DZmqU8XG.mjs +0 -1
- package/dist/chunks/loadScript-Du6JsTc2.mjs +0 -1
- package/dist/chunks/tech-BNI0cffg.mjs +0 -1
- package/dist/chunks/tech-DHDK_NLh.mjs +0 -1
- package/dist/chunks/video.cjs-gZWrkL0e.mjs +0 -239
- package/dist/chunks/videojs.ads-jA_s2l9Y.mjs +0 -3
- package/dist/chunks/videojs.ima-Ccon1y6f.mjs +0 -2
- package/dist/chunks/vimeo-C54chOVx.mjs +0 -1
- package/dist/chunks/vimeo-DiVKBACn.mjs +0 -15
- package/dist/chunks/youtube-CA2jLaes.mjs +0 -1
- package/dist/chunks/youtube-Db8hs64n.mjs +0 -1
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@ A Vue 3 video player supporting YouTube, Vimeo, Dailymotion, Brightcove, JW Play
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
npm install @munsonlabs/video-player
|
|
8
|
+
npm install @munsonlabs/video-player
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
## Vue Usage
|
|
@@ -49,25 +49,22 @@ import '@munsonlabs/video-player/style'
|
|
|
49
49
|
|
|
50
50
|
## VideoItem / VideoPlayer Props
|
|
51
51
|
|
|
52
|
-
| Prop | Type | Default | Description
|
|
53
|
-
| -------------- | -------------- | -------- |
|
|
54
|
-
| `videoUrl` | `string` | — | **Required.** The video URL or platform-specific URI
|
|
55
|
-
| `platform` | `string` | — | `youtube` · `vimeo` · `dailymotion` · `brightcove` · `jwplayer` · `html5`
|
|
56
|
-
| `title` | `string` | `''` | Video title
|
|
57
|
-
| `poster` | `string` | `''` | Poster image URL
|
|
58
|
-
| `aspectRatio` | `string` | `'16:9'` | e.g. `'16:9'`, `'9:16'`, `'4:3'`
|
|
59
|
-
| `autoplay` | `boolean` | `false` | Autoplay on mount (mutes automatically)
|
|
60
|
-
| `muted` | `boolean` | `false` | Start muted
|
|
61
|
-
| `lazy` | `boolean` | `true`\* | Show placeholder until clicked
|
|
62
|
-
| `nativeUi` | `boolean` | `false` | Use the platform's native controls (YouTube, Vimeo, Dailymotion only)
|
|
63
|
-
| `autoStage` | `boolean` | `false` | Immediately send this video to the stage on mount
|
|
64
|
-
| `playbackRate` | `number` | `1` | Initial playback rate
|
|
65
|
-
| `adTagUrl` | `string` | `''` | VAST or VMAP ad tag URL
|
|
66
|
-
| `
|
|
67
|
-
| `
|
|
68
|
-
| `payload` | `object` | `{}` | Arbitrary data attached to every `state-change` event |
|
|
69
|
-
| `action` | `PlayerAction` | `null` | Button shown in the player HUD — see [Actions](#actions) |
|
|
70
|
-
| `focusMode` | `boolean` | `false` | The "show controls" button centers the video and renders controls below it — see [Focus mode](#focus-mode) |
|
|
52
|
+
| Prop | Type | Default | Description |
|
|
53
|
+
| -------------- | -------------- | -------- | ------------------------------------------------------------------------- |
|
|
54
|
+
| `videoUrl` | `string` | — | **Required.** The video URL or platform-specific URI |
|
|
55
|
+
| `platform` | `string` | — | `youtube` · `vimeo` · `dailymotion` · `brightcove` · `jwplayer` · `html5` |
|
|
56
|
+
| `title` | `string` | `''` | Video title |
|
|
57
|
+
| `poster` | `string` | `''` | Poster image URL |
|
|
58
|
+
| `aspectRatio` | `string` | `'16:9'` | e.g. `'16:9'`, `'9:16'`, `'4:3'` |
|
|
59
|
+
| `autoplay` | `boolean` | `false` | Autoplay on mount (mutes automatically) |
|
|
60
|
+
| `muted` | `boolean` | `false` | Start muted |
|
|
61
|
+
| `lazy` | `boolean` | `true`\* | Show placeholder until clicked |
|
|
62
|
+
| `nativeUi` | `boolean` | `false` | Use the platform's native controls (YouTube, Vimeo, Dailymotion only) |
|
|
63
|
+
| `autoStage` | `boolean` | `false` | Immediately send this video to the stage on mount |
|
|
64
|
+
| `playbackRate` | `number` | `1` | Initial playback rate |
|
|
65
|
+
| `adTagUrl` | `string` | `''` | VAST or VMAP ad tag URL |
|
|
66
|
+
| `payload` | `object` | `{}` | Arbitrary data attached to every `state-change` event |
|
|
67
|
+
| `action` | `PlayerAction` | `null` | Button shown in the player HUD — see [Actions](#actions) |
|
|
71
68
|
|
|
72
69
|
\* `lazy` only has an effect on `VideoItem` (default `true`), which is what actually implements the placeholder-until-clicked behavior. `VideoPlayer` accepts the prop for type compatibility but defaults to `false` and never reads it — using `<VideoPlayer>` directly always mounts the real player immediately, regardless of `lazy`.
|
|
73
70
|
|
|
@@ -105,21 +102,22 @@ interface StateChangeEvent {
|
|
|
105
102
|
| 'firstQuartile'
|
|
106
103
|
| 'midpoint'
|
|
107
104
|
| 'thirdQuartile'
|
|
108
|
-
| '
|
|
109
|
-
| '
|
|
105
|
+
| 'controlsopen'
|
|
106
|
+
| 'controlsclose'
|
|
110
107
|
currentTime: number
|
|
111
108
|
duration: number
|
|
112
109
|
src: string
|
|
113
110
|
error?: { code: number; message: string } | null
|
|
114
111
|
isMuted?: boolean // volumechange only
|
|
115
112
|
playbackRate?: number // ratechange only
|
|
113
|
+
element?: HTMLElement | null // controlsopen/controlsclose only
|
|
116
114
|
payload?: Record<string, unknown>
|
|
117
115
|
}
|
|
118
116
|
```
|
|
119
117
|
|
|
120
118
|
`firstQuartile` / `midpoint` / `thirdQuartile` fire once each as playback crosses 25%, 50%, and 75% of the video's duration — useful for analytics integrations that expect IAB-style progress milestones. They reset and can fire again on loop restart.
|
|
121
119
|
|
|
122
|
-
`
|
|
120
|
+
`controlsopen` / `controlsclose` fire when the expanded controls popup mounts/unmounts (e.g. via the "show controls" button), with `element` set to the popup's root DOM node — handy for positioning your own UI relative to it, or measuring it. On `controlsclose`, `element` is a snapshot of the closing node; it's detached from the DOM immediately after.
|
|
123
121
|
|
|
124
122
|
On `error`, the player shows a "Retry" button that re-attempts loading the current source. You can also trigger this yourself via a template ref on `VideoPlayer`, which exposes a `retry()` method along with `togglePlay()`, `seek()`, `toggleMute()`, `setVolume()`, `toggleFullscreen()`, `toggleLoop()`, and `setPlaybackRate()`. Note this is on `VideoPlayer` specifically — `VideoItem` doesn't forward a ref to it, since it may be showing a lazy placeholder instead:
|
|
125
123
|
|
|
@@ -141,21 +139,6 @@ const player = ref(null)
|
|
|
141
139
|
|
|
142
140
|
---
|
|
143
141
|
|
|
144
|
-
## Focus mode
|
|
145
|
-
|
|
146
|
-
Set `focusMode` to change what the "show controls" button (in the HUD row) does: instead of overlaying the expanded controls on top of the video, the video centers itself on the page and the controls bar renders below it, dimming the rest of the page behind a backdrop.
|
|
147
|
-
|
|
148
|
-
```vue
|
|
149
|
-
<VideoItem video-url="..." platform="youtube" focus-mode />
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
- The video's original spot in the page keeps its size (an empty placeholder box) so surrounding layout doesn't jump while it's centered.
|
|
153
|
-
- Clicking the backdrop, pressing `Escape`, or the close button in the controls bar all return it to its original position.
|
|
154
|
-
- The move is animated via the [View Transitions API](https://developer.mozilla.org/en-US/docs/Web/API/View_Transitions_API) where supported, falling back to an instant toggle otherwise.
|
|
155
|
-
- The video element itself is never moved in the DOM (no `Teleport`) — it's purely a CSS `position: fixed` toggle — so YouTube/Vimeo/Dailymotion iframes are never reloaded by entering or exiting focus mode.
|
|
156
|
-
|
|
157
|
-
---
|
|
158
|
-
|
|
159
142
|
## Actions
|
|
160
143
|
|
|
161
144
|
The `action` prop adds a button to the player HUD. Pass a built-in string or a custom action object.
|
|
@@ -201,19 +184,11 @@ Pass an `adTagUrl` to enable pre-roll, mid-roll, or VMAP ad schedules via the Go
|
|
|
201
184
|
<VideoItem video-url="https://..." platform="html5" ad-tag-url="https://pubads.g.doubleclick.net/..." />
|
|
202
185
|
```
|
|
203
186
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
Use `imaOptions` to pass any option supported by [videojs-ima](https://github.com/googleads/videojs-ima), including `customParameters` for `cust_params`:
|
|
187
|
+
Ads are not supported on YouTube, Vimeo, or Dailymotion.
|
|
207
188
|
|
|
208
|
-
|
|
209
|
-
<VideoItem
|
|
210
|
-
video-url="https://..."
|
|
211
|
-
ad-tag-url="https://pubads.g.doubleclick.net/..."
|
|
212
|
-
:ima-options="{ customParameters: { section: 'news', topic: 'sport' } }"
|
|
213
|
-
/>
|
|
214
|
-
```
|
|
189
|
+
### Ad overlay UI
|
|
215
190
|
|
|
216
|
-
|
|
191
|
+
While an ad is playing, a small overlay shows an "Ad" badge with a countdown to the ad's end, and a mute button that controls the ad creative's own independent audio (separate from the content video's volume/mute state — muting the player has no effect on ad audio, and vice versa). If the ad is paused (e.g. by another player's cross-player pause coordination), a resume icon appears over it as well.
|
|
217
192
|
|
|
218
193
|
---
|
|
219
194
|
|
|
@@ -232,6 +207,22 @@ Set the variables on any ancestor of the player — e.g. a wrapper `<div>` or `:
|
|
|
232
207
|
|
|
233
208
|
Icons use `fill="currentColor"`, so `--mvp-btn-color` recolors the icon along with `--mvp-btn-bg` for the background. Hover state is a `filter: brightness()` lift on top of `--mvp-btn-bg`, so it works for both the default translucent look and a solid theme color.
|
|
234
209
|
|
|
210
|
+
### Controls popup position
|
|
211
|
+
|
|
212
|
+
The expanded controls popup is centered over the video by default. Set `--mvp-popup-align: flex-end` to anchor it to the bottom edge instead:
|
|
213
|
+
|
|
214
|
+
```css
|
|
215
|
+
.my-video-wrapper {
|
|
216
|
+
--mvp-popup-align: flex-end;
|
|
217
|
+
}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
Real fullscreen always docks the popup to the bottom regardless of this variable.
|
|
221
|
+
|
|
222
|
+
### Fullscreen controls
|
|
223
|
+
|
|
224
|
+
Outside fullscreen, the full controls bar only appears after clicking "show controls" and stays open until dismissed. In real fullscreen it behaves like a standard native/YouTube-style player instead: it auto-shows on activity (mouse move, tap) and auto-hides after a short period of inactivity, with no explicit open/close step needed.
|
|
225
|
+
|
|
235
226
|
---
|
|
236
227
|
|
|
237
228
|
## Window Events
|
|
@@ -299,16 +290,10 @@ Import the element bundle to register all components as native custom elements.
|
|
|
299
290
|
|
|
300
291
|
### Passing objects as web component attributes
|
|
301
292
|
|
|
302
|
-
Boolean and string props map directly to HTML attributes. Object props (`
|
|
293
|
+
Boolean and string props map directly to HTML attributes. Object props (`payload`) can be passed as inline JSON strings — Vue's custom element runtime parses them automatically:
|
|
303
294
|
|
|
304
295
|
```html
|
|
305
|
-
<video-item
|
|
306
|
-
video-url="https://..."
|
|
307
|
-
platform="html5"
|
|
308
|
-
ad-tag-url="https://..."
|
|
309
|
-
ima-options='{"customParameters":{"section":"news","topic":"sport"}}'
|
|
310
|
-
payload='{"articleId":"123"}'
|
|
311
|
-
></video-item>
|
|
296
|
+
<video-item video-url="https://..." platform="html5" ad-tag-url="https://..." payload='{"articleId":"123"}'></video-item>
|
|
312
297
|
```
|
|
313
298
|
|
|
314
299
|
For `action` (which contains a function), set it via JavaScript:
|
|
@@ -331,7 +316,6 @@ player.addEventListener('state-change', (e) => {
|
|
|
331
316
|
|
|
332
317
|
## Peer Dependencies
|
|
333
318
|
|
|
334
|
-
| Package
|
|
335
|
-
|
|
|
336
|
-
| `
|
|
337
|
-
| `vue` | `>=3` (Vue usage only) |
|
|
319
|
+
| Package | Version |
|
|
320
|
+
| ------- | ---------------------- |
|
|
321
|
+
| `vue` | `>=3` (Vue usage only) |
|
package/dist/element.d.mts
CHANGED
package/dist/element.mjs
CHANGED
|
@@ -1 +1,13 @@
|
|
|
1
|
-
import{a as e,t}from"./chunks/video.cjs-gZWrkL0e.mjs";import{C as n,D as r,E as i,O as a,S as o,T as s,a as c,b as l,g as u,h as d,i as f,m as p,o as m,p as h,r as g,v as _,w as v,x as y,y as b}from"./chunks/tech-DHDK_NLh.mjs";import{Fragment as x,Transition as S,computed as C,createBlock as w,createCommentVNode as T,createElementBlock as E,createElementVNode as D,createStaticVNode as O,createVNode as k,defineComponent as A,defineCustomElement as j,inject as M,mergeProps as N,nextTick as P,normalizeClass as F,normalizeProps as ee,normalizeStyle as I,onBeforeUnmount as L,onMounted as R,openBlock as z,provide as B,reactive as te,ref as V,toDisplayString as H,toRef as U,unref as W,watch as G,withCtx as ne,withModifiers as K}from"vue";import re from"video.js/dist/video-js.css?inline";var ie=e(t(),1);const ae={},oe=[{test:e=>/youtu\.be|youtube\.com/.test(e),key:`youtube`,tech:`Youtube`,type:`video/youtube`,load:()=>import(`./chunks/youtube-Db8hs64n.mjs`)},{test:e=>/vimeo\.com|player\.vimeo\.com/.test(e),key:`vimeo`,tech:`Vimeo`,type:`video/vimeo`,load:()=>import(`./chunks/vimeo-DiVKBACn.mjs`)},{test:e=>/dailymotion\.com|dai\.ly/.test(e),key:`dailymotion`,tech:`Dailymotion`,type:`video/dailymotion`,load:()=>import(`./chunks/dailymotion-CEXthEHH.mjs`)},{test:e=>/cdn\.jwplayer\.com/.test(e)||e.startsWith(`jwplayer://`),key:`jwplayer`,tech:null,type:`video/jwplayer`,load:()=>import(`./chunks/jwplayer-DZmqU8XG.mjs`)},{test:e=>e.startsWith(`brightcove://`),key:`brightcove`,tech:null,type:`video/brightcove`,load:()=>import(`./chunks/brightcove-BQ7atfxD.mjs`)}];async function se(e){let t=oe.find(t=>t.test(e));if(!t)return{tech:null,type:null,adTagUrl:null};ae[t.key]||(ae[t.key]=t.load());let n=null,{prefetchConfig:r}=await ae[t.key];return r&&(n=(await r(e).catch(()=>null))?.adTagUrl??null),{tech:t.tech,type:t.type,adTagUrl:n}}function ce(e){return!f(e)}function le(){return window.google?.ima?Promise.resolve():new Promise((e,t)=>{let n=document.createElement(`script`);n.src=u,n.onload=e,n.onerror=()=>t(Error(`Failed to load Google IMA SDK`)),document.head.appendChild(n)})}async function ue(t,n){return!n||!ce(t)?!1:(await le(),await import(`./chunks/videojs.ads-jA_s2l9Y.mjs`).then(t=>e(t.default,1)),await import(`./chunks/videojs.ima-Ccon1y6f.mjs`).then(t=>e(t.default,1)),!0)}function de(e,t,n={}){e.ima({adTagUrl:t,showControlsForJSAds:!1,...n})}const q=new Set;function fe(e){return q.add(e),()=>q.delete(e)}function pe(e){q.forEach(t=>{if(t!==e)try{t()}catch{}})}function me(e,t){let n=V(!1),r=V(!1);function i(){let e=document;n.value=!!(document.fullscreenElement||e.webkitFullscreenElement)}function a(){let n=t();if(typeof n?.enterFullscreen==`function`){n.enterFullscreen();return}let r=n?.el();if(typeof r?.webkitEnterFullscreen==`function`){r.webkitEnterFullscreen();return}e()?.requestFullscreen()}function o(){let n=t();if(typeof n?.exitFullscreen==`function`){n.exitFullscreen();return}e()?.exitFullscreen()}function c(){if(e()){if(n.value){o();return}a()}}function l(e){e.on(`fullscreenchange`,()=>{n.value=e.isFullscreen()??!1}),e.on(v,()=>{r.value=!0}),e.on(s,()=>{r.value=!1})}return R(()=>{document.addEventListener(`fullscreenchange`,i),document.addEventListener(`webkitfullscreenchange`,i)}),L(()=>{document.removeEventListener(`fullscreenchange`,i),document.removeEventListener(`webkitfullscreenchange`,i)}),{isFullscreen:n,isFullscreenPending:r,toggleFullscreen:c,attachPlayerEvents:l}}function he(){let e=V(!1),t=null;function n(){clearTimeout(t??void 0),e.value=!1}function r(r){r.on(`waiting`,()=>{clearTimeout(t??void 0),t=setTimeout(()=>{e.value=!0},500)}),r.on(`playing`,n),r.on(`canplay`,n)}return L(()=>clearTimeout(t??void 0)),{isBuffering:e,attachPlayerEvents:r,reset:n}}function ge(e,t,n){let r=new Set;function i(){if(!t.value)return;let i=e.value/t.value;for(let[e,t]of b)!r.has(e)&&i>=e&&(r.add(e),n(t))}function a(){r.clear()}return{checkQuartiles:i,reset:a}}function _e(){try{return JSON.parse(localStorage.getItem(`player:positions`)??`[]`)}catch{return[]}}function ve(e){localStorage.setItem(y,JSON.stringify(e))}function ye(e,t){if(t<5)return;let n=_e().filter(t=>t.url!==e);n.unshift({url:e,time:t}),ve(n.slice(0,5))}function be(e){return _e().find(t=>t.url===e)?.time??null}function xe(e){ve(_e().filter(t=>t.url!==e))}function Se(e,t,n){let r=!1;function i(t){if(r)return;let n=be(e);n&&t.currentTime(n),r=!0}function a(t){!t||n.value||ye(e,t.currentTime()??0)}function o(){xe(e)}function s(){document.visibilityState===`hidden`&&a(t())}return R(()=>document.addEventListener(`visibilitychange`,s)),L(()=>{a(t()),document.removeEventListener(`visibilitychange`,s)}),{restoreOnce:i,save:a,clear:o}}function Ce(e,t,n){let r=null;R(()=>{let i=e.value?.closest(`.player__shell`);i&&(r=new IntersectionObserver(([e])=>{let r=t();!e.isIntersecting&&r&&!r.paused()&&!n.value&&r.pause()},{threshold:.1}),r.observe(i))}),L(()=>r?.disconnect())}function we(e,t,n,r,i){function a(){let n=e();if(!(!n||!t.value)){if(n.paused()){n.play();return}n.pause()}}function o(t){e()?.currentTime(n.value*(t/100))}function s(){let t=e();t?.muted(!t.muted())}function c(t){let n=e();n&&(n.volume(t),n.muted(t===0))}function l(){r.value=!r.value}function u(t){let n=e();n&&(n.playbackRate(t),i.value=t)}return{togglePlay:a,seek:o,toggleMute:s,setVolume:c,toggleLoop:l,setPlaybackRate:u}}function Te(e,t){let{isPlaying:r,hasEnded:i,isReady:a,isAdPlaying:s,current:c,total:l,buffered:u,vol:d,isMuted:f,isLooping:p,playbackRate:m,supportsPlaybackRate:h,hasStarted:g,isError:_,errorMessage:v}=e,{getTech:y,fire:b,pauseThisPlayer:x,positionMemory:S,quartiles:C,buffering:w,fullscreen:T}=t;function E(e){e.ready(()=>{a.value=!0,h.value=!!y()?.featuresPlaybackRate});let t=()=>{let t=e.duration();t&&t>0&&isFinite(t)&&(l.value=t)};e.on([`adstart`,n],()=>{pe(x),s.value=!0,b(`adstart`)}),e.on([`adend`,o],()=>{s.value=!1,b(`adend`)}),e.on(`play`,()=>{pe(x),g.value=!0,r.value=!0,i.value=!1,S.restoreOnce(e),b(`play`)}),e.on(`pause`,()=>{r.value=!1,S.save(e),b(`pause`)}),e.on(`ended`,()=>{if(r.value=!1,C.reset(),w.reset(),p.value){e.currentTime(0),e.play();return}l.value&&(c.value=l.value),i.value=!0,S.clear(),b(`ended`)}),e.on(`seeked`,()=>{b(`seeked`)}),e.on(`error`,()=>{let t=e.error();v.value=t?.message||`This video could not be played.`,_.value=!0,a.value=!0,b(`error`,{error:t})}),e.on(`timeupdate`,()=>{i.value||(c.value=e.currentTime()??0,l.value||t(),C.checkQuartiles())}),e.on(`durationchange`,t),e.on(`progress`,()=>{let t=e.duration();u.value=t?e.bufferedEnd()/t*100:0}),e.on(`volumechange`,()=>{let t=e.muted();d.value=e.volume()??1,f.value=t??!1,g.value&&b(`volumechange`,{isMuted:t})}),e.on(`ratechange`,()=>{let t=e.playbackRate()??1;m.value=t,g.value&&b(`ratechange`,{playbackRate:t})}),w.attachPlayerEvents(e),T.attachPlayerEvents(e)}return{attachPlayerEvents:E}}function Ee(e,t,n){let r=null,i=null,a=null,o=V(!1),s=V(!1),c=V(!1),l=V(!1),u=V(0),d=V(0),f=V(0),p=V(1),m=V(t.muted??t.autoplay??!1),h=V(!1),_=V(t.playbackRate??1),v=V(!1),y=V(!1),b=V(!1),x=V(``),S=V(!1),w=C(()=>d.value?u.value/d.value*100:0),T=C(()=>Math.max(f.value,w.value)),E=()=>r,D=()=>r?.tech({IWillNotUseThisInPlugins:!0}),O=me(E,D),k=he(),A=Se(t.videoUrl,E,s);function j(e,r={}){n(`state-change`,{type:e,currentTime:u.value,duration:d.value,src:t.videoUrl,...r,payload:t.payload})}let M=ge(u,d,j);function N(){!r||!a||(b.value=!1,x.value=``,r.src(a))}function P(){r?.pause()}let F=we(E,c,d,h,_),{attachPlayerEvents:ee}=Te({isPlaying:o,hasEnded:s,isReady:c,isAdPlaying:l,current:u,total:d,buffered:f,vol:p,isMuted:m,isLooping:h,playbackRate:_,supportsPlaybackRate:v,hasStarted:y,isError:b,errorMessage:x},{getTech:D,fire:j,pauseThisPlayer:P,positionMemory:A,quartiles:M,buffering:k,fullscreen:O});return G(()=>t.muted,e=>{!r||e===void 0||r.muted(e)}),G(()=>t.playbackRate,e=>{!r||e===void 0||r.playbackRate(e)}),Ce(e,E,O.isFullscreen),R(async()=>{let{tech:n,type:o,adTagUrl:s}=await se(t.videoUrl),c=n?[n,`Html5`]:[`Html5`],l=t.adTagUrl||s||``,u=await ue(n??`Html5`,l);if(!e.value)return;let d={src:t.videoUrl,...o&&{type:o}};a=d,S.value=!!(t.nativeUi&&!ce(n??``)),r=(0,ie.default)(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:_.value,adTagUrl:l,youtube:{nativeUi:S.value},vimeo:{nativeUi:S.value},dailymotion:{nativeUi:S.value},...!u&&{sources:[d]},...t.techOptions}),u&&(de(r,l,t.imaOptions??{}),r.src(d)),i=fe(P),ee(r)}),L(()=>{i?.(),r?.dispose(),r=null}),{isPlaying:o,hasEnded:s,isReady:c,isAdPlaying:l,isBuffering:k.isBuffering,current:u,total:d,vol:p,isMuted:m,isLooping:h,playbackRate:_,hasStarted:y,isError:b,errorMessage:x,progress:w,bufferedDisplay:T,isFullscreen:O.isFullscreen,isFullscreenPending:O.isFullscreenPending,fmt:g,fire:j,retry:N,togglePlay:F.togglePlay,seek:F.seek,toggleMute:F.toggleMute,setVolume:F.setVolume,toggleFullscreen:O.toggleFullscreen,toggleLoop:F.toggleLoop,setPlaybackRate:F.setPlaybackRate,supportsPlaybackRate:v,nativeUi:S}}function De(e,t){let n=V(!0),r=V(!1),i=null,a=0;function o(e=400){a=Date.now()+e}function s(e=d){clearTimeout(i??void 0),i=setTimeout(()=>{n.value=!1,t?.value||(r.value=!1)},e)}function c(){clearTimeout(i??void 0)}function l(){r.value=!0,n.value=!0,s()}function u(){r.value=!1,e.value&&s()}function f(){e.value&&s()}function p(){n.value=!0,e.value&&s()}function m(){n.value=!0,s()}function h(){Date.now()<a||e.value&&s(600)}return G(e,e=>{if(!e){clearTimeout(i??void 0),n.value=!0;return}s()}),L(()=>clearTimeout(i??void 0)),{showHUD:n,isOpen:r,scheduleHide:s,pauseHide:c,onVideoTap:p,onMouseMove:m,onMouseLeave:h,openControls:l,closeControls:u,keepOpen:f,suppressMouseLeave:o}}function Oe(e,t,n){if(!document.startViewTransition||!e.value){n();return}e.value.style.viewTransitionName=t,document.startViewTransition(async()=>{n(),await P()}).finished.finally(()=>{e.value&&(e.value.style.viewTransitionName=``)})}function ke(e,t,n,r,i){let a=typeof document<`u`&&!!document.startViewTransition,o=C(()=>t.value&&a);G(()=>o.value&&!n.isFullscreen?r.isOpen:!1,t=>{let r=()=>{e.value=t,document.documentElement.toggleAttribute(`data-video-focused`,t),n.fire(t?`focusstart`:`focusend`)};if(n.isFullscreen){r();return}Oe(i,`player-focus`,r)}),G(()=>n.isFullscreen,()=>{r.isOpen&&r.closeControls()});function s(t){t.key===`Escape`&&e.value&&r.closeControls()}return R(()=>document.addEventListener(`keydown`,s)),L(()=>document.removeEventListener(`keydown`,s)),{focusModeEnabled:o}}function Ae(e,t){let n=V({width:0,height:0});function r(){n.value={width:window.innerWidth,height:window.innerHeight}}return R(()=>{r(),window.addEventListener(`resize`,r)}),L(()=>window.removeEventListener(`resize`,r)),C(()=>{if(!e.value)return{};let[r,i]=t.value.split(`:`).map(Number),a=Math.min(720,n.value.width-32),o=Math.min(n.value.height*p,n.value.height-32-140),s=a,c=s*i/r;return c>o&&(c=o,s=c*r/i),{width:`${s}px`,height:`${c}px`}})}const J=Symbol(`player`),Y=Symbol(`hud`),je=Symbol(`action`),Me=Symbol(`compact`);function X(e){let t=M(e);if(t===void 0)throw Error(`[video-player] missing "${String(e.description)}" context — this component must be rendered inside <VideoPlayer>`);return t}function Ne(e,t,n){return{hudVisible:C(()=>!e.isReady||e.isError||t.isOpen&&e.isFullscreen?!1:t.showHUD),popupVisible:C(()=>!e.isReady||e.isError||n.value&&!e.isFullscreen?!1:t.isOpen)}}function Pe(e,t,n){return C(()=>!(!e?.value||t.value||n.isFullscreen))}function Fe(e,t){let n=C(()=>e?.value??null),r=C(()=>!!n.value&&typeof n.value==`object`),i=C(()=>r.value?n.value:null),a=C(()=>n.value===`mute`?t.isMuted?`Unmute`:`Mute`:n.value===`loop`?t.isLooping?`Disable loop`:`Loop`:``);function o(){n.value===`mute`?t.toggleMute():n.value===`loop`&&t.toggleLoop()}return{currentAction:n,isCustom:r,customAction:i,builtinLabel:a,onBuiltinClick:o}}var Z=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n};const Ie={},Le={viewBox:`0 0 24 24`,fill:`currentColor`};function Re(e,t){return z(),E(`svg`,Le,[...t[0]||=[D(`path`,{d:`M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z`},null,-1)]])}var ze=Z(Ie,[[`render`,Re]]);const Be={},Ve={viewBox:`0 0 24 24`,fill:`currentColor`};function He(e,t){return z(),E(`svg`,Ve,[...t[0]||=[D(`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 Ue=Z(Be,[[`render`,He]]);const We={},Ge={viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`};function Ke(e,t){return z(),E(`svg`,Ge,[...t[0]||=[O(`<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 qe=Z(We,[[`render`,Ke]]);const Je={},Ye={viewBox:`0 0 24 24`,fill:`currentColor`};function Xe(e,t){return z(),E(`svg`,Ye,[...t[0]||=[D(`path`,{d:`M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z`},null,-1)]])}var Ze=Z(Je,[[`render`,Xe]]);const Qe={},$e={viewBox:`0 0 24 24`,fill:`currentColor`};function et(e,t){return z(),E(`svg`,$e,[...t[0]||=[D(`path`,{d:`M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z`},null,-1)]])}var tt=Z(Qe,[[`render`,et]]);const nt={},rt={viewBox:`0 0 24 24`,fill:`currentColor`};function it(e,t){return z(),E(`svg`,rt,[...t[0]||=[D(`path`,{d:`M7 7h10v3l4-4-4-4v3H5v6h2V7zm10 10H7v-3l-4 4 4 4v-3h12v-6h-2v4z`},null,-1)]])}var at=Z(nt,[[`render`,it]]);const ot={},st={viewBox:`0 0 24 24`,fill:`currentColor`};function ct(e,t){return z(),E(`svg`,st,[...t[0]||=[D(`path`,{d:`M6 19h4V5H6v14zm8-14v14h4V5h-4z`},null,-1)]])}var lt=Z(ot,[[`render`,ct]]);const ut={},dt={viewBox:`0 0 24 24`,fill:`currentColor`};function ft(e,t){return z(),E(`svg`,dt,[...t[0]||=[D(`path`,{d:`M8 5v14l11-7z`},null,-1)]])}var pt=Z(ut,[[`render`,ft]]);const mt={},ht={viewBox:`0 0 24 24`,fill:`currentColor`};function gt(e,t){return z(),E(`svg`,ht,[...t[0]||=[D(`path`,{d:`M12 5V1L7 6l5 5V7c3.31 0 6 2.69 6 6s-2.69 6-6 6-6-2.69-6-6H4c0 4.42 3.58 8 8 8s8-3.58 8-8-3.58-8-8-8z`},null,-1)]])}var _t=Z(mt,[[`render`,gt]]);const vt={},yt={viewBox:`0 0 24 24`,fill:`currentColor`};function bt(e,t){return z(),E(`svg`,yt,[...t[0]||=[D(`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 xt=Z(vt,[[`render`,bt]]);const St={},Ct={viewBox:`0 0 24 24`,fill:`currentColor`};function wt(e,t){return z(),E(`svg`,Ct,[...t[0]||=[D(`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 Tt=Z(St,[[`render`,wt]]);const Et=[`aria-label`];var Q=Z(A({__name:`PlayPauseButton`,props:{isPlaying:{type:Boolean,required:!0},hasEnded:{type:Boolean,required:!1,default:!1},size:{type:String,required:!1,default:`sm`}},emits:[`toggle-play`],setup(e){let t=e,n=C(()=>t.isPlaying?`Pause`:t.hasEnded?`Replay`:`Play`);return(t,r)=>(z(),E(`button`,{class:F([`ppbtn`,`ppbtn--${e.size}`]),"aria-label":n.value,onClick:r[0]||=K(e=>t.$emit(`toggle-play`),[`stop`])},[e.isPlaying?(z(),w(W(lt),{key:0})):e.hasEnded?(z(),w(W(_t),{key:1})):(z(),w(W(pt),{key:2}))],10,Et))}}),[[`__scopeId`,`data-v-85902525`]]),Dt=A({__name:`VolumeIcon`,setup(e){let t=X(J),n=C(()=>!t.isMuted&&t.vol>0);return(e,t)=>n.value?(z(),w(W(Tt),{key:0})):(z(),w(W(xt),{key:1}))}}),$=Z(A({__name:`Spinner`,props:{size:{type:Number,required:!1,default:14},borderWidth:{type:Number,required:!1,default:2}},setup(e){return(t,n)=>(z(),E(`div`,{class:`spinner`,style:I({width:`${e.size}px`,height:`${e.size}px`,borderWidth:`${e.borderWidth}px`})},null,4))}}),[[`__scopeId`,`data-v-259be2b2`]]);const Ot={class:`hud`},kt=[`aria-label`],At=[`aria-label`],jt=[`aria-label`,`innerHTML`],Mt={key:3,class:`hud__spacer`},Nt={class:`hud__play-wrap`},Pt={key:5,class:`hud__spacer`};var Ft=Z(A({__name:`HudButtons`,props:{isFocused:{type:Boolean,required:!1,default:!1}},setup(e){let t=X(J),n=X(Y),{currentAction:r,isCustom:i,customAction:a,builtinLabel:o,onBuiltinClick:s}=Fe(M(je),t);return(c,l)=>(z(),E(`div`,Ot,[!e.isFocused&&W(r)===`mute`?(z(),E(`button`,{key:0,class:F([`hud__btn`,{"hud__btn--active":W(t).isMuted}]),"aria-label":W(o),onClick:l[0]||=K((...e)=>W(s)&&W(s)(...e),[`stop`])},[k(Dt)],10,kt)):!e.isFocused&&W(r)===`loop`?(z(),E(`button`,{key:1,class:F([`hud__btn`,{"hud__btn--active":W(t).isLooping}]),"aria-label":W(o),onClick:l[1]||=K((...e)=>W(s)&&W(s)(...e),[`stop`])},[k(W(at))],10,At)):!e.isFocused&&W(i)&&W(a)?(z(),E(`button`,{key:2,class:`hud__btn`,"aria-label":W(a).label,onClick:l[2]||=K(e=>W(a).onClick(),[`stop`]),innerHTML:W(a).icon},null,8,jt)):(z(),E(`div`,Mt)),D(`div`,Nt,[k(Q,{"is-playing":W(t).isPlaying,"has-ended":W(t).hasEnded,size:`lg`,onTogglePlay:W(t).togglePlay},null,8,[`is-playing`,`has-ended`,`onTogglePlay`]),W(t).isBuffering?(z(),w($,{key:0,class:`hud__buf-spinner`})):T(`v-if`,!0)]),e.isFocused?(z(),E(`div`,Pt)):(z(),E(`button`,{key:4,class:`hud__btn`,"aria-label":`Show controls`,onClick:l[3]||=K((...e)=>W(n).openControls&&W(n).openControls(...e),[`stop`])},[k(W(qe))]))]))}}),[[`__scopeId`,`data-v-a6d118e7`]]);function It(e){let t=V(null),n=C(()=>t.value??e.progress),r=null;function i(){r&&clearTimeout(r),r=null,t.value=null}function a(e){r&&clearTimeout(r),r=null,t.value=Number(e.target.value)}function o(n){let a=Number(n.target.value);t.value=a,e.seek(a),r&&clearTimeout(r),r=setTimeout(i,l)}return G(()=>e.current,()=>{if(t.value===null||!e.total)return;let n=t.value/100*e.total;Math.abs(e.current-n)<1&&i()}),L(i),{displaySeek:n,onSeekInput:a,onSeekChange:o}}function Lt(e){function t(){let t=_.indexOf(e.playbackRate);e.setPlaybackRate(_[(t+1)%_.length])}function n(e){return`${e}×`}return{cycleRate:t,fmtRate:n}}const Rt={class:`controls__vol-header`},zt=[`aria-label`],Bt={class:`controls__vol-body`},Vt=[`value`],Ht={class:`controls__vol-pct`};var Ut=Z(A({__name:`VolumePanel`,emits:[`back`],setup(e){let t=X(J),n=X(Y),r=C(()=>t.isMuted?0:Math.round(t.vol*100));function i(e){t.setVolume(Number(e.target.value)/100)}return(e,a)=>(z(),E(x,null,[D(`div`,Rt,[D(`button`,{class:`controls__btn`,"aria-label":`Back`,onClick:a[0]||=t=>e.$emit(`back`)},[k(W(ze))]),a[6]||=D(`span`,{class:`controls__vol-label`},`Volume`,-1),D(`button`,{class:`controls__btn`,"aria-label":W(t).isMuted?`Unmute`:`Mute`,onClick:a[1]||=e=>W(t).toggleMute()},[k(Dt)],8,zt)]),D(`div`,Bt,[D(`input`,{type:`range`,min:`0`,max:`100`,step:`1`,value:r.value,class:`controls__vol-slider`,style:I({"--v":r.value+`%`}),"aria-label":`Volume`,onInput:i,onMousedown:a[2]||=e=>W(n).pauseHide(),onMouseup:a[3]||=e=>W(n).scheduleHide(),onTouchstartPassive:a[4]||=e=>W(n).pauseHide(),onTouchend:a[5]||=e=>W(n).scheduleHide()},null,44,Vt),D(`span`,Ht,H(r.value)+`%`,1)])],64))}}),[[`__scopeId`,`data-v-10b0ae67`]]);const Wt=[`value`],Gt={class:`controls__row`},Kt={class:`controls__play-wrap`},qt={class:`controls__time`},Jt=[`aria-label`,`innerHTML`],Yt={key:3,class:`controls__fs-wrap`},Xt=[`aria-label`];var Zt=Z(A({__name:`ControlsPopup`,props:{focusMode:{type:Boolean,required:!1,default:!1}},setup(e){let t=e,n=X(J),r=X(Y),i=Pe(M(Me),U(t,`focusMode`),n),{isCustom:a,customAction:o}=Fe(M(je),n),s=V(!1),l=V(null);L(()=>{s.value=!1});function u(e){r.suppressMouseLeave(),Oe(l,`controls-popup`,e)}function d(){if(c()){n.toggleMute();return}u(()=>{s.value=!0})}let{displaySeek:f,onSeekInput:p,onSeekChange:m}=It(n),{cycleRate:h,fmtRate:g}=Lt(n);return(t,c)=>(z(),E(`div`,{ref_key:`popupEl`,ref:l,class:F([`controls`,{"controls--fs":W(n).isFullscreen||e.focusMode}]),onMousemove:c[13]||=K((...e)=>W(r).keepOpen&&W(r).keepOpen(...e),[`stop`])},[s.value?(z(),w(Ut,{key:0,onBack:c[0]||=e=>u(()=>s.value=!1)})):(z(),E(x,{key:1},[W(i)?T(`v-if`,!0):(z(),E(`input`,{key:0,type:`range`,min:`0`,max:`100`,value:W(f),class:`controls__seek`,style:I({"--p":W(f)+`%`,"--b":W(n).bufferedDisplay+`%`}),onInput:c[1]||=(...e)=>W(p)&&W(p)(...e),onChange:c[2]||=(...e)=>W(m)&&W(m)(...e),onMousedown:c[3]||=e=>W(r).pauseHide(),onMouseup:c[4]||=e=>W(r).scheduleHide(),onTouchstartPassive:c[5]||=e=>W(r).pauseHide(),onTouchend:c[6]||=e=>W(r).scheduleHide()},null,44,Wt)),D(`div`,Gt,[D(`div`,Kt,[W(n).isBuffering?(z(),w($,{key:0})):(z(),w(Q,{key:1,"is-playing":W(n).isPlaying,"has-ended":W(n).hasEnded,size:`sm`,onTogglePlay:c[7]||=e=>W(n).togglePlay()},null,8,[`is-playing`,`has-ended`]))]),D(`span`,qt,H(W(n).fmt(W(n).current))+` / `+H(W(n).fmt(W(n).total)),1),!W(i)&&W(n).supportsPlaybackRate?(z(),E(`button`,{key:0,class:F([`controls__btn controls__btn--rate`,{"controls__btn--active":W(n).playbackRate!==1}]),"aria-label":`Playback rate`,onClick:c[8]||=(...e)=>W(h)&&W(h)(...e)},H(W(g)(W(n).playbackRate)),3)):T(`v-if`,!0),W(i)?T(`v-if`,!0):(z(),E(`button`,{key:1,class:F([`controls__btn`,{"controls__btn--active":W(n).isLooping}]),"aria-label":`Toggle loop`,onClick:c[9]||=e=>W(n).toggleLoop()},[k(W(at))],2)),D(`button`,{class:`controls__btn`,"aria-label":`Volume`,onClick:d},[k(Dt)]),W(a)&&W(o)?(z(),E(`button`,{key:2,class:`controls__btn`,"aria-label":W(o).label,onClick:c[10]||=e=>W(o).onClick(),innerHTML:W(o).icon},null,8,Jt)):T(`v-if`,!0),W(i)?T(`v-if`,!0):(z(),E(`div`,Yt,[W(n).isFullscreenPending?(z(),w($,{key:0})):(z(),E(`button`,{key:1,class:`controls__btn`,"aria-label":W(n).isFullscreen?`Exit fullscreen`:`Fullscreen`,onClick:c[11]||=e=>W(n).toggleFullscreen()},[W(n).isFullscreen?(z(),w(W(tt),{key:0})):(z(),w(W(Ze),{key:1}))],8,Xt))])),D(`button`,{class:`controls__btn controls__btn--close`,"aria-label":`Close`,onClick:c[12]||=e=>W(r).closeControls()},[k(W(Ue))])])],64))],34))}}),[[`__scopeId`,`data-v-5712aad4`]]);const Qt={key:0,class:`overlay__spinner`},$t={key:0,class:`overlay__error`};var en=Z(A({__name:`PlayerOverlay`,props:{focusMode:{type:Boolean,required:!1,default:!1},isFocused:{type:Boolean,required:!1,default:!1},disableTapCapture:{type:Boolean,required:!1,default:!1}},setup(e){let t=e,n=X(J),r=X(Y),{hudVisible:i,popupVisible:a}=Ne(n,r,U(t,`focusMode`));return(t,o)=>(z(),E(x,null,[e.disableTapCapture?T(`v-if`,!0):(z(),E(`div`,{key:0,class:`overlay__tap-capture`,style:I({pointerEvents:!W(n).hasStarted||W(n).isAdPlaying?`none`:void 0}),onClick:o[0]||=(...e)=>W(r).onVideoTap&&W(r).onVideoTap(...e),onTouchend:o[1]||=K((...e)=>W(r).onVideoTap&&W(r).onVideoTap(...e),[`prevent`,`stop`])},null,36)),k(S,{name:`fade`},{default:ne(()=>[!W(n).isReady&&!W(n).isError?(z(),E(`div`,Qt,[k($,{size:40,"border-width":3})])):T(`v-if`,!0)]),_:1}),k(S,{name:`fade`},{default:ne(()=>[W(n).isError?(z(),E(`div`,$t,[D(`p`,null,H(W(n).errorMessage||`This video could not be played.`),1),D(`button`,{class:`overlay__retry`,onClick:o[2]||=K((...e)=>W(n).retry&&W(n).retry(...e),[`stop`])},`Retry`)])):T(`v-if`,!0)]),_:1}),D(`div`,{class:F([`overlay__hud`,{"overlay__hud--visible":W(i)}])},[k(Ft,{"is-focused":e.isFocused},null,8,[`is-focused`])],2),k(S,{name:`popup`},{default:ne(()=>[W(a)?(z(),E(`div`,{key:0,class:F([`overlay__popup`,{"overlay__popup--fs":W(n).isFullscreen}]),onClick:o[3]||=K(()=>{},[`stop`])},[k(Zt)],2)):T(`v-if`,!0)]),_:1})],64))}}),[[`__scopeId`,`data-v-f3307b98`]]);const tn=[`data-focused`],nn={"data-vjs-player":``},rn=[`poster`],an={key:1,class:`player__native-play`};var on=Z(A({__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:h},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:!1},payload:{type:Object,required:!1,default:()=>({})},action:{type:[String,Object,null],required:!1,default:null},focusMode:{type:Boolean,required:!1,default:!1},disableTapCapture:{type:Boolean,required:!1,default:!1}},emits:[`state-change`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=V(null),o=te(Ee(a,r,i)),s=V(!1),c=te(De(U(o,`isPlaying`),s));B(J,o),B(Y,c),B(je,U(r,`action`));let{isPortrait:l,cssRatio:u}=m(r.aspectRatio),d=V(null),{focusModeEnabled:f}=ke(s,U(r,`focusMode`),o,c,d),p=Ae(s,U(r,`aspectRatio`)),h=C(()=>!r.poster&&!o.isReady);return t(o),(e,t)=>(z(),E(`div`,{class:`player`,"data-focused":s.value?``:null},[s.value?(z(),E(`div`,{key:0,class:F([`player__placeholder`,{"player__shell--portrait":W(l)}]),style:I({aspectRatio:W(u)})},null,6)):T(`v-if`,!0),s.value?(z(),E(`div`,{key:1,class:`player__backdrop`,onClick:t[0]||=e=>c.closeControls()})):T(`v-if`,!0),D(`div`,{ref_key:`focusFrameEl`,ref:d,class:F([`player__focus-frame`,{"player__focus-frame--active":s.value}])},[D(`div`,{class:F([`player__shell`,{"player__shell--portrait":W(l)}]),style:I([{aspectRatio:W(u)},W(p)]),onMousemove:t[1]||=e=>c.onMouseMove(),onContextmenuCapture:t[2]||=K(()=>{},[`prevent`]),onMouseleave:t[3]||=e=>c.onMouseLeave()},[D(`div`,nn,[D(`video`,{ref_key:`videoEl`,ref:a,class:F([`video-js`,{"video-js--hidden":h.value}]),poster:r.poster,playsinline:``},null,10,rn),o.nativeUi?T(`v-if`,!0):(z(),w(en,{key:0,"focus-mode":W(f),"is-focused":s.value,"disable-tap-capture":r.disableTapCapture},null,8,[`focus-mode`,`is-focused`,`disable-tap-capture`])),o.nativeUi&&!o.hasStarted?(z(),E(`div`,an,[k(Q,{"is-playing":!1,size:`lg`,onTogglePlay:o.togglePlay},null,8,[`onTogglePlay`])])):T(`v-if`,!0)])],38),s.value?(z(),E(`div`,{key:0,class:`player__focus-controls`,onClick:t[4]||=K(()=>{},[`stop`])},[k(Zt,{"focus-mode":``})])):T(`v-if`,!0)],2)],8,tn))}}),[[`__scopeId`,`data-v-4ab3cf75`]]);const sn=V(0),cn=C(()=>sn.value>0);function ln(){sn.value++}function un(){sn.value--}function dn(e,t){window.dispatchEvent(new CustomEvent(e,{detail:t}))}function fn(e,t){let n=e=>t(e.detail);R(()=>window.addEventListener(e,n)),L(()=>window.removeEventListener(e,n))}const pn=[`src`],mn={class:`stage__idle-body`},hn={class:`stage__idle-btn`},gn={class:`stage__idle-title`},_n={key:1,class:`stage__idle-empty`};var vn=Z(A({__name:`VideoStage`,props:{pinPosition:{type:String,required:!1,default:`bottom-right`}},emits:[`state-change`],setup(e,{emit:t}){let n=t,o=V(null),s=V(null),c=V(!1),l=V(!1),u=V(null),d=V(null),f=V(!1);B(Me,f);let p=C(()=>f.value&&!!s.value&&c.value),h=C(()=>m(s.value?.aspectRatio||`16:9`).cssRatio),g=V(null),_=V(null);G(f,e=>{g.value=e&&d.value?{height:d.value.offsetHeight,width:d.value.offsetWidth}:null});let v=C(()=>{if(!g.value)return{};let{height:e,width:t}=g.value,n=_.value&&t?_.value/t:1;return{height:`${Math.round(e*n)}px`}}),y=null,b=null;function S(){y?.disconnect(),b?.disconnect(),u.value&&(y=new IntersectionObserver(([e])=>{f.value=!e.isIntersecting},{threshold:1}),y.observe(u.value),b=new ResizeObserver(([e])=>{_.value=e.contentRect.width}),b.observe(u.value))}G(u,S);function O(){s.value&&(s.value={...s.value,autoplay:!0},c.value=!0)}function A(){s.value=null,c.value=!1,l.value=!1,f.value=!1,g.value=null,j()}function j(){dn(r,{currentVideoUrl:s.value?.videoUrl??null,isPlaying:l.value})}function M(e){if(s.value?.videoUrl===e.videoUrl&&c.value){o.value?.togglePlay();return}s.value=e,c.value=!1,l.value=!1,j(),c.value=!0}function P(e){if(!(!s.value||e.videoUrl!==s.value.videoUrl)){if(!c.value){s.value={...s.value,autoplay:!0},c.value=!0;return}o.value?.togglePlay()}}function ee(e){e.type===`play`&&(l.value=!0),(e.type===`pause`||e.type===`ended`)&&(l.value=!1),j(),n(`state-change`,e)}return fn(i,M),fn(a,P),R(ln),L(()=>{un(),y?.disconnect(),b?.disconnect()}),(t,n)=>(z(),E(`div`,{ref_key:`wrapperEl`,ref:u,class:`stage-wrapper`,style:I(v.value)},[D(`div`,{ref_key:`stageEl`,ref:d,class:F([`stage`,{"stage--minified":p.value,[`stage--pin-${e.pinPosition}`]:p.value}])},[p.value?(z(),E(`button`,{key:0,class:`stage__dismiss`,"aria-label":`Close`,onClick:K(A,[`stop`])},[k(W(Ue))])):T(`v-if`,!0),s.value&&c.value?(z(),w(on,N({ref_key:`playerRef`,ref:o,key:s.value.videoUrl},s.value,{onStateChange:ee}),null,16)):(z(),E(`div`,{key:2,class:`stage__idle`,style:I({aspectRatio:h.value}),onClick:O},[s.value?.poster?(z(),E(`img`,{key:0,src:s.value.poster,class:`stage__idle-poster`},null,8,pn)):T(`v-if`,!0),n[0]||=D(`div`,{class:`stage__idle-scrim`},null,-1),D(`div`,mn,[s.value?(z(),E(x,{key:0},[D(`div`,hn,[k(W(pt))]),D(`p`,gn,H(s.value.title),1)],64)):(z(),E(`p`,_n,`Select a video to play`))])],4))],2)],4))}}),[[`__scopeId`,`data-v-fb8c86cf`]]);const yn={class:`placeholder`},bn=[`src`,`alt`],xn={class:`placeholder__btn-wrap`},Sn={key:2,class:`placeholder__footer`},Cn={class:`placeholder__title`};var wn=Z(A({__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:h},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},focusMode:{type:Boolean,required:!1},disableTapCapture:{type:Boolean,required:!1}},setup(e){let t=e,{isPortrait:n,cssRatio:a}=m(t.aspectRatio),o=V(!1),s=V(!1);fn(r,e=>{o.value=e.currentVideoUrl===t.videoUrl,s.value=o.value&&e.isPlaying});function c(e){dn(i,{...t,...e!==void 0&&{autoplay:e}})}function l(){c(!0)}return R(()=>{t.autoStage&&c()}),(t,r)=>(z(),E(`div`,yn,[D(`div`,{class:F([`placeholder__shell`,{"placeholder__shell--portrait":W(n),"placeholder__shell--active":o.value}]),style:I({aspectRatio:W(a)}),onClick:l},[e.poster?(z(),E(`img`,{key:0,class:`placeholder__poster`,src:e.poster,alt:e.title},null,8,bn)):T(`v-if`,!0),r[0]||=D(`div`,{class:`placeholder__scrim`},null,-1),e.platform?(z(),E(`span`,{key:1,class:F([`placeholder__badge`,`badge--${e.platform}`])},H(e.platform),3)):T(`v-if`,!0),D(`div`,xn,[k(Q,{"is-playing":o.value&&s.value,size:`lg`,onTogglePlay:l},null,8,[`is-playing`])]),e.title?(z(),E(`div`,Sn,[D(`p`,Cn,H(e.title),1)])):T(`v-if`,!0)],6)]))}}),[[`__scopeId`,`data-v-dbcb4f82`]]),Tn=A({__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},focusMode:{type:Boolean,required:!1},disableTapCapture:{type:Boolean,required:!1}},emits:[`state-change`],setup(e,{emit:t}){let n=e,r=t,i=V(!1);return(e,t)=>W(cn)?(z(),w(wn,ee(N({key:0},n)),null,16)):(z(),E(x,{key:1},[n.lazy&&!i.value&&!n.autoplay?(z(),w(wn,N({key:0},n,{onClickCapture:t[0]||=e=>i.value=!0}),null,16)):(z(),w(on,N({key:1},n,{autoplay:i.value||n.autoplay,onStateChange:t[1]||=e=>r(`state-change`,e)}),null,16,[`autoplay`]))],64))}});const En=j(on,{shadowRoot:!1,styles:[re]}),Dn=j(vn,{shadowRoot:!1}),On=j(wn,{shadowRoot:!1}),kn=j(Tn,{shadowRoot:!1});customElements.define(`video-player`,En),customElements.define(`video-stage`,Dn),customElements.define(`video-placeholder`,On),customElements.define(`video-item`,kn);export{kn as VideoItemElement,On as VideoPlaceholderElement,En as VideoPlayerElement,Dn as VideoStageElement};
|
|
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,createTextVNode as c,createVNode as l,defineComponent as u,defineCustomElement as d,inject as f,mergeProps as p,nextTick as m,normalizeClass as h,normalizeProps as g,normalizeStyle as _,onBeforeUnmount as v,onMounted as y,openBlock as b,provide as x,reactive as S,ref as C,toDisplayString as w,toRef as T,unref as E,watch as D,withCtx as O,withModifiers as k}from"vue";import A from"hls.js";var j=Object.create,M=Object.defineProperty,N=Object.getOwnPropertyDescriptor,P=Object.getOwnPropertyNames,F=Object.getPrototypeOf,I=Object.prototype.hasOwnProperty,L=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),R=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=P(t),a=0,o=i.length,s;a<o;a++)s=i[a],!I.call(e,s)&&s!==n&&M(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=N(t,s))||r.enumerable});return e},z=(e,t,n)=>(n=e==null?{}:j(F(e)),R(t||!e||!e.__esModule?M(n,`default`,{value:e,enumerable:!0}):n,e));function B(){return/iPad|iPhone|iPod/.test(navigator.userAgent)||/Mac/.test(navigator.userAgent)&&navigator.maxTouchPoints>1}function V(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled)}function H(e){(e.requestFullscreen||e.webkitRequestFullscreen)?.call(e)}function U(){(document.exitFullscreen||document.webkitExitFullscreen)?.call(document)}function W(e){let[t,n]=e.split(`:`).map(Number);return{isPortrait:n>t,cssRatio:`${t}/${n}`}}function ee(e){return!e||isNaN(e)?`0:00`:`${Math.floor(e/60)}:${String(Math.floor(e%60)).padStart(2,`0`)}`}function G(e,t=(...e)=>String(e[0])){let n={};return async(...r)=>{let i=t(...r);if(n[i])return n[i];let a=await e(...r);return n[i]=a,a}}function te(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 ne=`video-select`,re=`video-state`,ie=`fullscreen-pending`,ae=`fullscreen-pending-done`,oe=`mvp-youtube`,se=`mvp-vimeo`,ce=`mvp-dailymotion`,le=`mvp-ad-playing`,K=`mvp-ad-paused`,ue=`16:9`,de=[.5,.75,1,1.25,1.5,2],fe=[[.25,`firstQuartile`],[.5,`midpoint`],[.75,`thirdQuartile`]];function pe(e){return e.match(/cdn\.jwplayer\.com\/videos\/([^-]+)/)?.[1]??e.match(/cdn\.jwplayer\.com\/manifests\/([^.]+)/)?.[1]??e.match(/^jwplayer:\/\/([^/]+)$/)?.[1]??null}function me(e){let t=e?.advertising?.schedule;return Array.isArray(t)&&t.length?t[0].tag??null:e?.advertising?.tag??null}const he=G(async e=>{let t=await fetch(`https://cdn.jwplayer.com/v2/media/${e}`);if(!t.ok)throw Error(`JW Platform API error: ${t.status}`);let n=(await t.json()).playlist?.[0];if(!n)throw Error(`JW Platform: empty playlist`);let r=te((n.sources??[]).map(e=>({src:e.file,type:e.type})));if(!r.length)throw Error(`JW Platform: no playable sources found`);return{src:r[0].src,type:r[0].type,poster:n.image??null,adTagUrl:me(n)}});async function ge(e){let t=pe(e);if(!t)throw Error(`JW Platform: unrecognised source URL: ${e}`);let n=await he(t);if(e.startsWith(`jwplayer://`))return n;let r=/\.mp4(\?|#|$)/.test(e)?`video/mp4`:`application/x-mpegURL`;return{...n,src:e,type:r}}function _e(e){let t=e.match(/^brightcove:\/\/([^/]+)\/([^/]+)\/([^/]+)\/([^/]+)$/);return t?{accountId:t[1],playerId:t[2],embed:t[3],videoId:t[4]}:null}function ve(e){return(e?.plugins??[]).find(e=>e.name===`ima3`)?.options?.serverUrl??null}const ye=G(async(e,t,n,r)=>{let i=await fetch(`https://players.brightcove.net/${e}/${t}_${n}/config.json`);if(!i.ok)throw Error(`Brightcove: could not load player config (${i.status})`);let a=await i.json(),o=r??a?.video_cloud?.policy_key;if(!o)throw Error(`Brightcove: policy_key not found in player config`);return{policyKey:o,adTagUrl:ve(a)}},(e,t,n)=>`${e}/${t}_${n}`);async function be(e,t,n){let r=await fetch(`https://edge.api.brightcove.com/playback/v1/accounts/${e}/videos/${t}`,{headers:{Accept:`application/json;pk=${n}`}});if(!r.ok)throw Error(`Brightcove Playback API error: ${r.status}`);let i=await r.json(),a=te(i.sources||[]);if(!a.length)throw Error(`Brightcove: no playable sources found`);return{sources:a.map(e=>({src:e.src,type:e.type})),poster:i.poster??i.thumbnail??null}}async function xe(e,t){let n=_e(e);if(!n)throw Error(`Brightcove: invalid src — expected "brightcove://accountId/playerId/embed/videoId"`);let{accountId:r,playerId:i,embed:a,videoId:o}=n,{policyKey:s,adTagUrl:c}=await ye(r,i,a,t),{sources:l,poster:u}=await be(r,o,s);return{...l[0],poster:u,adTagUrl:c}}function q(){let e=new Map;function t(t,n){for(let r of Array.isArray(t)?t:[t])e.has(r)||e.set(r,new Set),e.get(r)?.add(n)}function n(t,n){e.get(t)?.delete(n)}function r(t,...n){e.get(t)?.forEach(e=>e(...n))}function i(){e.clear()}return{on:t,off:n,trigger:r,dispose:i}}const Se={};function Ce(e,t=e){return Se[t]||(Se[t]=new Promise((t,n)=>{let r=document.createElement(`script`);r.src=e,r.onload=()=>t(),r.onerror=()=>n(Error(`Failed to load script: ${e}`)),document.head.appendChild(r)})),Se[t]}let we=0;function Te(e,t){e.parentElement?.classList.add(t);let n=`${t}-${++we}`,r=document.createElement(`div`);r.id=n,r.className=`mvp-tech`,r.style.cssText=`width:100%;height:100%;top:0;left:0;position:absolute`;let i=document.createElement(`div`);return i.style.cssText=`width:100%;height:100%;position:absolute;inset:0;opacity:0;pointer-events:none;transition:opacity 0.2s`,i.appendChild(r),e.parentElement?.insertBefore(i,e),{techId:n,wrapper:i,innerDiv:r}}function Ee(e,t){e.style.display=`none`,t.style.opacity=`1`,t.style.pointerEvents=``}function De(e,t,n){t.remove(),e.parentElement?.classList.remove(n),e.style.display=``}function Oe(e){return e.closest(`.player__shell`)}function ke(e){e.trigger(ie);let t=document.createElement(`div`);t.style.cssText=`position:fixed;inset:0;z-index:99999;opacity:0;pointer-events:none`,document.body.appendChild(t);let n=!1;function r(r){n||(n=!0,e.trigger(ae),t.remove(),r?.())}return{overlay:t,finish:r}}function Ae(e,t){return t===e.PlayerState.PLAYING||t===e.PlayerState.BUFFERING}function je(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}let Me=!1,Ne=!1;const J=[];function Pe(){Ne||(Ne=!0,Ce(`https://www.youtube.com/iframe_api`).then(()=>{window.YT?.ready(()=>{Me=!0,J.forEach(e=>e()),J.length=0})}))}function Fe(e,t){Pe();let n=q(),{techId:r,wrapper:i}=Te(e,oe),a=je(t.src),o=null,s=a.videoId,c=!1,l=!1,u=!1,d=null,f=!1,p=null,m=!1,h=new Set,g=null,_={active:!1,wasPaused:!1,timeBefore:0,catchUpInterval:null};function v(e,t=0){let n=setTimeout(()=>{h.delete(n),e()},t);h.add(n)}function y(){try{let e=o?.getPlayerResponse()?.adPlacements;return Array.isArray(e)&&e.length>0}catch{return!1}}function b(e){o?.loadVideoById({videoId:e})}function x(e){o?.cueVideoById({videoId:e})}function S(){a.videoId&&(_.wasPaused=!1,c?s===a.videoId?o?.playVideo():(b(a.videoId),s=a.videoId):(n.trigger(`waiting`),l=!0))}function C(){_.catchUpInterval&&clearInterval(_.catchUpInterval),_.active=!1,_.wasPaused&&o?.pauseVideo(),n.trigger(`seeked`)}function w(){m=(o?.getAvailablePlaybackRates()??[]).length>1,c=!0,t.muted&&o?.mute(),l?S():u&&a.videoId&&(x(a.videoId),s=a.videoId)}function T(e){if(e===d||p!==null)return;d=e;let t=y();t!==f&&(f=t,n.trigger(t?`adstart`:`adend`));let r=window.YT;if(r){switch(e){case-1:n.trigger(`loadstart`),n.trigger(`loadedmetadata`),n.trigger(`durationchange`),n.trigger(`ratechange`);break;case r.PlayerState.ENDED:n.trigger(`ended`);break;case r.PlayerState.PLAYING:n.trigger(`timeupdate`),n.trigger(`durationchange`),n.trigger(`playing`),n.trigger(`play`),_.active&&C();break;case r.PlayerState.PAUSED:n.trigger(`canplay`),_.active||n.trigger(`pause`);break;case r.PlayerState.BUFFERING:n.trigger(`waiting`);break;case r.PlayerState.CUED:n.trigger(`canplay`);break}g&&=(clearInterval(g),null),e===r.PlayerState.PLAYING&&(g=setInterval(()=>n.trigger(`timeupdate`),250))}}function E(){let e={controls:+!!t.nativeUi,modestbranding:1,rel:0,showinfo:0,mute:+!!t.muted,origin:window.location.origin,allowfullscreen:1,fullscreen:1,fs:1,playsinline:1,...t.customVars};s=a.videoId,o=new window.YT.Player(r,{videoId:s??void 0,playerVars:e,events:{onReady:w,onStateChange:e=>T(e.data),onPlaybackRateChange:()=>n.trigger(`ratechange`),onVolumeChange:()=>n.trigger(`volumechange`),onError:e=>{p=e.data,n.trigger(`error`),v(()=>{p=null})}}})}Me?E():J.push(E),t.autoplay?c?S():l=!0:a.videoId&&(u=!0);function D(){if(!o)return;let e=o.getCurrentTime(),{video_id:t}=o.getVideoData();o.pauseVideo();let{overlay:r,finish:i}=ke(n),a=document.createElement(`div`);a.id=`yt-fs-${Math.random().toString(36).slice(2)}`,r.appendChild(a);let s=null,c=()=>{i(()=>{let t=s?.getCurrentTime()??e;try{s?.destroy()}catch{}o?.seekTo(t,!0),n.trigger(`timeupdate`)})};s=new window.YT.Player(a.id,{videoId:t,playerVars:{playsinline:0,autoplay:1,controls:1,modestbranding:1,rel:0,start:Math.floor(e)},events:{onReady:t=>{i(),t.target.seekTo(e,!0),t.target.playVideo()},onStateChange:e=>{let t=window.YT;t&&(e.data===t.PlayerState.PAUSED||e.data===t.PlayerState.ENDED)&&c()}}})}function O(){if(B()&&o){D();return}let t=Oe(e);t&&H(t)}function k(){U()}return{el:i,play:S,pause:()=>o?.pauseVideo(),paused:()=>{if(!o)return!0;let e=window.YT;return!e||!Ae(e,d)},currentTime:()=>o?.getCurrentTime()??0,setCurrentTime:e=>{if(!o)return;let t=window.YT;t&&d===t.PlayerState.PAUSED&&(_.timeBefore=o.getCurrentTime()),_.active||(_.wasPaused=!t||!Ae(t,d)),o.seekTo(e,!0),n.trigger(`timeupdate`),n.trigger(`seeking`),_.active=!0,t&&d===t.PlayerState.PAUSED&&_.timeBefore!==e&&(_.catchUpInterval&&clearInterval(_.catchUpInterval),_.catchUpInterval=setInterval(()=>{d!==t.PlayerState.PAUSED||!_.active?_.catchUpInterval&&clearInterval(_.catchUpInterval):o&&o.getCurrentTime()!==_.timeBefore&&(n.trigger(`timeupdate`),C())},250))},duration:()=>o?.getDuration()??0,volume:()=>o?o.getVolume()/100:1,setVolume:e=>o?.setVolume(e*100),muted:()=>o?.isMuted()??!1,setMuted:e=>{o&&(e?o.mute():o.unMute(),v(()=>n.trigger(`volumechange`),50))},playbackRate:()=>o?.getPlaybackRate()??1,setPlaybackRate:e=>o?.setPlaybackRate(e),bufferedEnd:()=>o?.getVideoLoadedFraction?o.getVideoLoadedFraction()*o.getDuration():0,error:()=>p===null?null:{code:p,message:`This video could not be played.`},setSrc:e=>{let t=je(e);a.videoId=t.videoId,a.listId=t.listId,a.videoId&&(c?(b(a.videoId),s=a.videoId):u=!0)},featuresPlaybackRate:()=>m,supportsFullScreen:V,enterFullscreen:O,exitFullscreen:k,on:n.on,off:n.off,dispose:()=>{if(h.forEach(clearTimeout),h.clear(),g&&clearInterval(g),_.catchUpInterval&&clearInterval(_.catchUpInterval),o)try{o.stopVideo(),o.destroy()}catch{}else{let e=J.indexOf(E);e!==-1&&J.splice(e,1)}o=null,De(e,i,oe),n.dispose()}}}
|
|
2
|
+
/*! @vimeo/player v2.30.4 | (c) 2026 Vimeo | MIT License | https://github.com/vimeo/player.js */
|
|
3
|
+
/*!
|
|
4
|
+
* weakmap-polyfill v2.0.4 - ECMAScript6 WeakMap polyfill
|
|
5
|
+
* https://github.com/polygonplanet/weakmap-polyfill
|
|
6
|
+
* Copyright (c) 2015-2021 polygonplanet <polygon.planet.aqua@gmail.com>
|
|
7
|
+
* @license MIT
|
|
8
|
+
*/
|
|
9
|
+
/*! Native Promise Only
|
|
10
|
+
v0.8.1 (c) Kyle Simpson
|
|
11
|
+
MIT License: http://getify.mit-license.org
|
|
12
|
+
*/
|
|
13
|
+
var Ie=z(L(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?t.exports=r():typeof define==`function`&&define.amd?define(r):(n=typeof globalThis<`u`?globalThis:n||self,n.Vimeo=n.Vimeo||{},n.Vimeo.Player=r())})(e,(function(){let e=typeof global<`u`&&{}.toString.call(global)===`[object global]`,t=typeof Bun<`u`,n=typeof Deno<`u`,r=typeof WebSocketPair==`function`&&caches?.default!==void 0,i=e||t||n||r;function a(e,t){return e.indexOf(t.toLowerCase())===0?e:`${t.toLowerCase()}${e.substr(0,1).toUpperCase()}${e.substr(1)}`}function o(e){return!!(e&&e.nodeType===1&&`nodeName`in e&&e.ownerDocument&&e.ownerDocument.defaultView)}function s(e){return!isNaN(parseFloat(e))&&isFinite(e)&&Math.floor(e)==e}function c(e){return/^(https?:)?\/\/((((player|www)\.)?vimeo\.com)|((player\.)?[a-zA-Z0-9-]+\.(videoji\.(hk|cn)|vimeo\.work)))(?=$|\/)/.test(e)}function l(e){return/^https:\/\/player\.((vimeo\.com)|([a-zA-Z0-9-]+\.(videoji\.(hk|cn)|vimeo\.work)))\/video\/\d+/.test(e)}function u(e){let t=(e||``).match(/^(?:https?:)?(?:\/\/)?([^/?]+)/),n=(t&&t[1]||``).replace(`player.`,``);for(let e of[`.videoji.hk`,`.vimeo.work`,`.videoji.cn`])if(n.endsWith(e))return n;return`vimeo.com`}function d(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=e.id,n=e.url,r=t||n;if(!r)throw Error(`An id or url must be passed, either in an options object or as a data-vimeo-id or data-vimeo-url attribute.`);if(s(r))return`https://vimeo.com/${r}`;if(c(r))return r.replace(`http:`,`https:`);throw TypeError(t?`“${t}” is not a valid video id.`:`“${r}” is not a vimeo.com url.`)}let f=function(e,t,n){let r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:`addEventListener`,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:`removeEventListener`,a=typeof t==`string`?[t]:t;return a.forEach(t=>{e[r](t,n)}),{cancel:()=>a.forEach(t=>e[i](t,n))}};function p(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:document;if(!e||!t||typeof t.querySelectorAll!=`function`)return null;let n=t.querySelectorAll(`iframe`);for(let t=0;t<n.length;t++)if(n[t]&&n[t].contentWindow===e)return n[t];return null}let m=Array.prototype.indexOf!==void 0,h=typeof window<`u`&&window.postMessage!==void 0;if(!i&&(!m||!h))throw Error(`Sorry, the Vimeo Player API is not available in this browser.`);var g=typeof globalThis<`u`?globalThis:typeof window<`u`?window:typeof global<`u`?global:typeof self<`u`?self:{};function _(e,t){return t={exports:{}},e(t,t.exports),t.exports}(function(e){if(e.WeakMap)return;var t=Object.prototype.hasOwnProperty,n=Object.defineProperty&&function(){try{return Object.defineProperty({},"x",{value:1}).x===1}catch{}}(),r=function(e,t,r){n?Object.defineProperty(e,t,{configurable:!0,writable:!0,value:r}):e[t]=r};e.WeakMap=function(){function e(){if(this===void 0)throw TypeError(`Constructor WeakMap requires 'new'`);if(r(this,`_id`,a(`_WeakMap`)),arguments.length>0)throw TypeError(`WeakMap iterable is not supported`)}r(e.prototype,`delete`,function(e){if(n(this,`delete`),!i(e))return!1;var t=e[this._id];return t&&t[0]===e?(delete e[this._id],!0):!1}),r(e.prototype,`get`,function(e){if(n(this,`get`),i(e)){var t=e[this._id];if(t&&t[0]===e)return t[1]}}),r(e.prototype,`has`,function(e){if(n(this,`has`),!i(e))return!1;var t=e[this._id];return!!(t&&t[0]===e)}),r(e.prototype,`set`,function(e,t){if(n(this,`set`),!i(e))throw TypeError(`Invalid value used as weak map key`);var a=e[this._id];return a&&a[0]===e?(a[1]=t,this):(r(e,this._id,[e,t]),this)});function n(e,n){if(!i(e)||!t.call(e,`_id`))throw TypeError(n+` method called on incompatible receiver `+typeof e)}function a(e){return e+`_`+o()+`.`+o()}function o(){return Math.random().toString().substring(2)}return r(e,`_polyfill`,!0),e}();function i(e){return Object(e)===e}})(typeof globalThis<`u`?globalThis:typeof self<`u`?self:typeof window<`u`?window:g);var v=_(function(e){(function(t,n,r){n[t]=n[t]||r(),e.exports&&=n[t]})(`Promise`,g,function(){var e,t,n,r=Object.prototype.toString,i=typeof setImmediate<`u`?function(e){return setImmediate(e)}:setTimeout;try{Object.defineProperty({},"x",{}),e=function(e,t,n,r){return Object.defineProperty(e,t,{value:n,writable:!0,configurable:r!==!1})}}catch{e=function(e,t,n){return e[t]=n,e}}n=function(){var e,n,r;function i(e,t){this.fn=e,this.self=t,this.next=void 0}return{add:function(t,a){r=new i(t,a),n?n.next=r:e=r,n=r,r=void 0},drain:function(){var r=e;for(e=n=t=void 0;r;)r.fn.call(r.self),r=r.next}}}();function a(e,r){n.add(e,r),t||=i(n.drain)}function o(e){var t,n=typeof e;return e!=null&&(n==`object`||n==`function`)&&(t=e.then),typeof t==`function`&&t}function s(){for(var e=0;e<this.chain.length;e++)c(this,this.state===1?this.chain[e].success:this.chain[e].failure,this.chain[e]);this.chain.length=0}function c(e,t,n){var r,i;try{t===!1?n.reject(e.msg):(r=t===!0?e.msg:t.call(void 0,e.msg),r===n.promise?n.reject(TypeError(`Promise-chain cycle`)):(i=o(r))?i.call(r,n.resolve,n.reject):n.resolve(r))}catch(e){n.reject(e)}}function l(e){var t,n=this;if(!n.triggered){n.triggered=!0,n.def&&(n=n.def);try{(t=o(e))?a(function(){var r=new f(n);try{t.call(e,function(){l.apply(r,arguments)},function(){u.apply(r,arguments)})}catch(e){u.call(r,e)}}):(n.msg=e,n.state=1,n.chain.length>0&&a(s,n))}catch(e){u.call(new f(n),e)}}}function u(e){var t=this;t.triggered||(t.triggered=!0,t.def&&(t=t.def),t.msg=e,t.state=2,t.chain.length>0&&a(s,t))}function d(e,t,n,r){for(var i=0;i<t.length;i++)(function(i){e.resolve(t[i]).then(function(e){n(i,e)},r)})(i)}function f(e){this.def=e,this.triggered=!1}function p(e){this.promise=e,this.state=0,this.triggered=!1,this.chain=[],this.msg=void 0}function m(e){if(typeof e!=`function`)throw TypeError(`Not a function`);if(this.__NPO__!==0)throw TypeError(`Not a promise`);this.__NPO__=1;var t=new p(this);this.then=function(e,n){var r={success:typeof e!=`function`||e,failure:typeof n==`function`&&n};return r.promise=new this.constructor(function(e,t){if(typeof e!=`function`||typeof t!=`function`)throw TypeError(`Not a function`);r.resolve=e,r.reject=t}),t.chain.push(r),t.state!==0&&a(s,t),r.promise},this.catch=function(e){return this.then(void 0,e)};try{e.call(void 0,function(e){l.call(t,e)},function(e){u.call(t,e)})}catch(e){u.call(t,e)}}var h=e({},`constructor`,m,!1);return m.prototype=h,e(h,`__NPO__`,0,!1),e(m,`resolve`,function(e){var t=this;return e&&typeof e==`object`&&e.__NPO__===1?e:new t(function(t,n){if(typeof t!=`function`||typeof n!=`function`)throw TypeError(`Not a function`);t(e)})}),e(m,`reject`,function(e){return new this(function(t,n){if(typeof t!=`function`||typeof n!=`function`)throw TypeError(`Not a function`);n(e)})}),e(m,`all`,function(e){var t=this;return r.call(e)==`[object Array]`?e.length===0?t.resolve([]):new t(function(n,r){if(typeof n!=`function`||typeof r!=`function`)throw TypeError(`Not a function`);var i=e.length,a=Array(i),o=0;d(t,e,function(e,t){a[e]=t,++o===i&&n(a)},r)}):t.reject(TypeError(`Not an array`))}),e(m,`race`,function(e){var t=this;return r.call(e)==`[object Array]`?new t(function(n,r){if(typeof n!=`function`||typeof r!=`function`)throw TypeError(`Not a function`);d(t,e,function(e,t){n(t)},r)}):t.reject(TypeError(`Not an array`))}),m})});let y=new WeakMap;function b(e,t,n){let r=y.get(e.element)||{};t in r||(r[t]=[]),r[t].push(n),y.set(e.element,r)}function x(e,t){return(y.get(e.element)||{})[t]||[]}function S(e,t,n){let r=y.get(e.element)||{};if(!r[t])return!0;if(!n)return r[t]=[],y.set(e.element,r),!0;let i=r[t].indexOf(n);return i!==-1&&r[t].splice(i,1),y.set(e.element,r),r[t]&&r[t].length===0}function C(e,t){let n=x(e,t);if(n.length<1)return!1;let r=n.shift();return S(e,t,r),r}function w(e,t){let n=y.get(e);y.set(t,n),y.delete(e)}function T(e){if(typeof e==`string`)try{e=JSON.parse(e)}catch(e){return console.warn(e),{}}return e}function E(e,t,n){if(!e.element.contentWindow||!e.element.contentWindow.postMessage)return;let r={method:t};n!==void 0&&(r.value=n);let i=parseFloat(navigator.userAgent.toLowerCase().replace(/^.*msie (\d+).*$/,`$1`));i>=8&&i<10&&(r=JSON.stringify(r)),e.element.contentWindow.postMessage(r,e.origin)}function D(e,t){t=T(t);let n=[],r;if(t.event)t.event===`error`&&x(e,t.data.method).forEach(n=>{let r=Error(t.data.message);r.name=t.data.name,n.reject(r),S(e,t.data.method,n)}),n=x(e,`event:${t.event}`),r=t.data;else if(t.method){let i=C(e,t.method);i&&(n.push(i),r=t.value)}n.forEach(t=>{try{if(typeof t==`function`){t.call(e,r);return}t.resolve(r)}catch{}})}let O=`airplay.audio_tracks.audiotrack.autopause.autoplay.background.byline.cc.chapter_id.chapters.chromecast.color.colors.controls.disable_context_menu.dnt.end_time.fullscreen.height.id.initial_quality.interactive_params.keyboard.loop.maxheight.max_quality.maxwidth.min_quality.muted.play_button_position.playsinline.portrait.preload.progress_bar.quality.quality_selector.responsive.skipping_forward.speed.start_time.texttrack.thumbnail_id.title.transcript.transparent.unmute_button.url.vimeo_logo.volume.watch_full_video.width`.split(`.`);function k(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return O.reduce((t,n)=>{let r=e.getAttribute(`data-vimeo-${n}`);return(r||r===``)&&(t[n]=r===``?1:r),t},t)}function A(e,t){let{html:n}=e;if(!t)throw TypeError(`An element must be provided`);if(t.getAttribute(`data-vimeo-initialized`)!==null)return t.querySelector(`iframe`);let r=document.createElement(`div`);return r.innerHTML=n,t.appendChild(r.firstChild),t.setAttribute(`data-vimeo-initialized`,`true`),t.querySelector(`iframe`)}function j(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0;return new Promise((r,i)=>{if(!c(e))throw TypeError(`“${e}” is not a vimeo.com url.`);let a=`https://${u(e)}/api/oembed.json?url=${encodeURIComponent(e)}`;for(let e in t)t.hasOwnProperty(e)&&(a+=`&${e}=${encodeURIComponent(t[e])}`);let o=`XDomainRequest`in window?new XDomainRequest:new XMLHttpRequest;o.open(`GET`,a,!0),o.onload=function(){if(o.status===404){i(Error(`“${e}” was not found.`));return}if(o.status===403){i(Error(`“${e}” is not embeddable.`));return}try{let t=JSON.parse(o.responseText);if(t.domain_status_code===403){A(t,n),i(Error(`“${e}” is not embeddable.`));return}r(t)}catch(e){i(e)}},o.onerror=function(){let e=o.status?` (${o.status})`:``;i(Error(`There was an error fetching the embed code from Vimeo${e}.`))},o.send()})}function M(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:document,t=[].slice.call(e.querySelectorAll(`[data-vimeo-id], [data-vimeo-url]`)),n=e=>{`console`in window&&console.error&&console.error(`There was an error creating an embed: ${e}`)};t.forEach(e=>{try{if(e.getAttribute(`data-vimeo-defer`)!==null)return;let t=k(e);j(d(t),t,e).then(t=>A(t,e)).catch(n)}catch(e){n(e)}})}function N(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:document;window.VimeoPlayerResizeEmbeds_||(window.VimeoPlayerResizeEmbeds_=!0,window.addEventListener(`message`,t=>{if(!c(t.origin)||!t.data||t.data.event!==`spacechange`)return;let n=t.source?p(t.source,e):null;if(n){let e=n.parentElement;e.style.paddingBottom=`${t.data.data[0].bottom}px`}}))}function P(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:document;window.VimeoSeoMetadataAppended||(window.VimeoSeoMetadataAppended=!0,window.addEventListener(`message`,t=>{if(!c(t.origin))return;let n=T(t.data);if(!n||n.event!==`ready`)return;let r=t.source?p(t.source,e):null;r&&l(r.src)&&new U(r).callMethod(`appendVideoMetadata`,window.location.href)}))}function F(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:document;if(window.VimeoCheckedUrlTimeParam)return;window.VimeoCheckedUrlTimeParam=!0;let t=e=>{`console`in window&&console.error&&console.error(`There was an error getting video Id: ${e}`)};window.addEventListener(`message`,n=>{if(!c(n.origin))return;let r=T(n.data);if(!r||r.event!==`ready`)return;let i=n.source?p(n.source,e):null;if(i&&l(i.src)){let e=new U(i);e.getVideoId().then(t=>{let n=RegExp(`[?&]vimeo_t_${t}=([^&#]*)`).exec(window.location.href);if(n&&n[1]){let t=decodeURI(n[1]);e.setCurrentTime(t)}}).catch(t)}})}function I(){window.VimeoDRMEmbedsUpdated||(window.VimeoDRMEmbedsUpdated=!0,window.addEventListener(`message`,e=>{if(!c(e.origin))return;let t=T(e.data);if(!t||t.event!==`drminitfailed`)return;let n=e.source?p(e.source):null;if(!n)return;let r=n.getAttribute(`allow`)||``;if(!r.includes(`encrypted-media`)){n.setAttribute(`allow`,`${r}; encrypted-media`);let e=new URL(n.getAttribute(`src`));e.searchParams.set(`forcereload`,`drm`),n.setAttribute(`src`,e.toString());return}}))}function L(){let e=function(){let e,t=[[`requestFullscreen`,`exitFullscreen`,`fullscreenElement`,`fullscreenEnabled`,`fullscreenchange`,`fullscreenerror`],[`webkitRequestFullscreen`,`webkitExitFullscreen`,`webkitFullscreenElement`,`webkitFullscreenEnabled`,`webkitfullscreenchange`,`webkitfullscreenerror`],[`webkitRequestFullScreen`,`webkitCancelFullScreen`,`webkitCurrentFullScreenElement`,`webkitCancelFullScreen`,`webkitfullscreenchange`,`webkitfullscreenerror`],[`mozRequestFullScreen`,`mozCancelFullScreen`,`mozFullScreenElement`,`mozFullScreenEnabled`,`mozfullscreenchange`,`mozfullscreenerror`],[`msRequestFullscreen`,`msExitFullscreen`,`msFullscreenElement`,`msFullscreenEnabled`,`MSFullscreenChange`,`MSFullscreenError`]],n=0,r=t.length,i={};for(;n<r;n++)if(e=t[n],e&&e[1]in document){for(n=0;n<e.length;n++)i[t[0][n]]=e[n];return i}return!1}(),t={fullscreenchange:e.fullscreenchange,fullscreenerror:e.fullscreenerror},n={request(t){return new Promise((r,i)=>{let a=function(){n.off(`fullscreenchange`,a),r()};n.on(`fullscreenchange`,a),t||=document.documentElement;let o=t[e.requestFullscreen]();o instanceof Promise&&o.then(a).catch(i)})},exit(){return new Promise((t,r)=>{if(!n.isFullscreen){t();return}let i=function(){n.off(`fullscreenchange`,i),t()};n.on(`fullscreenchange`,i);let a=document[e.exitFullscreen]();a instanceof Promise&&a.then(i).catch(r)})},on(e,n){let r=t[e];r&&document.addEventListener(r,n)},off(e,n){let r=t[e];r&&document.removeEventListener(r,n)}};return Object.defineProperties(n,{isFullscreen:{get(){return!!document[e.fullscreenElement]}},element:{enumerable:!0,get(){return document[e.fullscreenElement]}},isEnabled:{enumerable:!0,get(){return!!document[e.fullscreenEnabled]}}}),n}let R={role:`viewer`,autoPlayMuted:!0,allowedDrift:.3,maxAllowedDrift:1,minCheckInterval:.1,maxRateAdjustment:.2,maxTimeToCatchUp:1};class z extends EventTarget{logger;constructor(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},r=arguments.length>3?arguments[3]:void 0;super(),this.logger=r,this.init(t,e,{...R,...n})}disconnect(){this.dispatchEvent(new Event(`disconnect`))}async init(e,t,n){if(await this.waitForTOReadyState(e,`open`),n.role===`viewer`){await this.updatePlayer(e,t,n);let r=f(e,`change`,()=>this.updatePlayer(e,t,n)),i=this.maintainPlaybackPosition(e,t,n);this.addEventListener(`disconnect`,()=>{i.cancel(),r.cancel()})}else{await this.updateTimingObject(e,t);let n=f(t,[`seeked`,`play`,`pause`,`ratechange`],()=>this.updateTimingObject(e,t),`on`,`off`);this.addEventListener(`disconnect`,()=>n.cancel())}}async updateTimingObject(e,t){let[n,r,i]=await Promise.all([t.getCurrentTime(),t.getPaused(),t.getPlaybackRate()]);e.update({position:n,velocity:r?0:i})}async updatePlayer(e,t,n){let{position:r,velocity:i}=e.query();typeof r==`number`&&t.setCurrentTime(r),typeof i==`number`&&(i===0?await t.getPaused()===!1&&t.pause():i>0&&(await t.getPaused()===!0&&(await t.play().catch(async e=>{e.name===`NotAllowedError`&&n.autoPlayMuted&&(await t.setMuted(!0),await t.play().catch(e=>console.error(`Couldn't play the video from TimingSrcConnector. Error:`,e)))}),this.updatePlayer(e,t,n)),await t.getPlaybackRate()!==i&&t.setPlaybackRate(i)))}maintainPlaybackPosition(e,t,n){let{allowedDrift:r,maxAllowedDrift:i,minCheckInterval:a,maxRateAdjustment:o,maxTimeToCatchUp:s}=n,c=Math.min(s,Math.max(a,i))*1e3,l=async()=>{if(e.query().velocity===0||await t.getPaused()===!0)return;let n=e.query().position-await t.getCurrentTime(),a=Math.abs(n);if(this.log(`Drift: ${n}`),a>i)await this.adjustSpeed(t,0),t.setCurrentTime(e.query().position),this.log(`Resync by currentTime`);else if(a>r){let e=a/s,r=o,i=e<r?(r-e)/2:r;await this.adjustSpeed(t,i*Math.sign(n)),this.log(`Resync by playbackRate`)}},u=setInterval(()=>l(),c);return{cancel:()=>clearInterval(u)}}log(e){this.logger?.(`TimingSrcConnector: ${e}`)}speedAdjustment=0;adjustSpeed=async(e,t)=>{if(this.speedAdjustment===t)return;let n=await e.getPlaybackRate()-this.speedAdjustment+t;this.log(`New playbackRate: ${n}`),await e.setPlaybackRate(n),this.speedAdjustment=t};waitForTOReadyState(e,t){return new Promise(n=>{let r=()=>{e.readyState===t?n():e.addEventListener(`readystatechange`,r,{once:!0})};r()})}}let B=new WeakMap,V=new WeakMap,H={};class U{constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(window.jQuery&&e instanceof jQuery&&(e.length>1&&window.console&&console.warn&&console.warn(`A jQuery object with multiple elements was passed, using the first element.`),e=e[0]),typeof document<`u`&&typeof e==`string`&&(e=document.getElementById(e)),!o(e))throw TypeError(`You must pass either a valid element or a valid id.`);if(e.nodeName!==`IFRAME`){let t=e.querySelector(`iframe`);t&&(e=t)}if(e.nodeName===`IFRAME`&&!c(e.getAttribute(`src`)||``))throw Error(`The player element passed isn’t a Vimeo embed.`);if(B.has(e))return B.get(e);this._window=e.ownerDocument.defaultView,this.element=e,this.origin=`*`;let n=new v((n,r)=>{if(this._onMessage=e=>{if(!c(e.origin)||this.element.contentWindow!==e.source)return;this.origin===`*`&&(this.origin=e.origin);let t=T(e.data);if(t&&t.event===`error`&&t.data&&t.data.method===`ready`){let e=Error(t.data.message);e.name=t.data.name,r(e);return}let i=t&&t.event===`ready`,a=t&&t.method===`ping`;if(i||a){this.element.setAttribute(`data-ready`,`true`),n();return}D(this,t)},this._window.addEventListener(`message`,this._onMessage),this.element.nodeName!==`IFRAME`){let n=k(e,t);j(d(n),n,e).then(t=>{let n=A(t,e);return this.element=n,this._originalElement=e,w(e,n),B.set(this.element,this),t}).catch(r)}});if(V.set(this,n),B.set(this.element,this),this.element.nodeName===`IFRAME`&&E(this,`ping`),H.isEnabled){let e=()=>H.exit();this.fullscreenchangeHandler=()=>{H.isFullscreen?b(this,`event:exitFullscreen`,e):S(this,`event:exitFullscreen`,e),this.ready().then(()=>{E(this,`fullscreenchange`,H.isFullscreen)})},H.on(`fullscreenchange`,this.fullscreenchangeHandler)}return this}static isVimeoUrl(e){return c(e)}callMethod(e){var t=[...arguments].slice(1);if(e==null)throw TypeError(`You must pass a method name.`);return new v((n,r)=>this.ready().then(()=>{b(this,e,{resolve:n,reject:r}),t.length===0?t={}:t.length===1&&(t=t[0]),E(this,e,t)}).catch(r))}get(e){return new v((t,n)=>(e=a(e,`get`),this.ready().then(()=>{b(this,e,{resolve:t,reject:n}),E(this,e)}).catch(n)))}set(e,t){return new v((n,r)=>{if(e=a(e,`set`),t==null)throw TypeError(`There must be a value to set.`);return this.ready().then(()=>{b(this,e,{resolve:n,reject:r}),E(this,e,t)}).catch(r)})}on(e,t){if(!e)throw TypeError(`You must pass an event name.`);if(!t)throw TypeError(`You must pass a callback function.`);if(typeof t!=`function`)throw TypeError(`The callback must be a function.`);x(this,`event:${e}`).length===0&&this.callMethod(`addEventListener`,e).catch(()=>{}),b(this,`event:${e}`,t)}off(e,t){if(!e)throw TypeError(`You must pass an event name.`);if(t&&typeof t!=`function`)throw TypeError(`The callback must be a function.`);S(this,`event:${e}`,t)&&this.callMethod(`removeEventListener`,e).catch(e=>{})}loadVideo(e){return this.callMethod(`loadVideo`,e)}ready(){let e=V.get(this)||new v((e,t)=>{t(Error(`Unknown player. Probably unloaded.`))});return v.resolve(e)}addCuePoint(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return this.callMethod(`addCuePoint`,{time:e,data:t})}removeCuePoint(e){return this.callMethod(`removeCuePoint`,e)}enableTextTrack(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!e)throw TypeError(`You must pass a language.`);return this.callMethod(`enableTextTrack`,{language:e,kind:t,showing:n})}disableTextTrack(){return this.callMethod(`disableTextTrack`)}selectAudioTrack(e,t){if(!e)throw TypeError(`You must pass a language.`);return this.callMethod(`selectAudioTrack`,{language:e,kind:t})}selectDefaultAudioTrack(){return this.callMethod(`selectDefaultAudioTrack`)}pause(){return this.callMethod(`pause`)}play(){return this.callMethod(`play`)}requestFullscreen(){return H.isEnabled?H.request(this.element):this.callMethod(`requestFullscreen`)}exitFullscreen(){return H.isEnabled?H.exit():this.callMethod(`exitFullscreen`)}getFullscreen(){return H.isEnabled?v.resolve(H.isFullscreen):this.get(`fullscreen`)}requestPictureInPicture(){return this.callMethod(`requestPictureInPicture`)}exitPictureInPicture(){return this.callMethod(`exitPictureInPicture`)}getPictureInPicture(){return this.get(`pictureInPicture`)}remotePlaybackPrompt(){return this.callMethod(`remotePlaybackPrompt`)}unload(){return this.callMethod(`unload`)}destroy(){return new v(e=>{if(V.delete(this),B.delete(this.element),this._originalElement&&(B.delete(this._originalElement),this._originalElement.removeAttribute(`data-vimeo-initialized`)),this.element&&this.element.nodeName===`IFRAME`&&this.element.parentNode&&(this.element.parentNode.parentNode&&this._originalElement&&this._originalElement!==this.element.parentNode?this.element.parentNode.parentNode.removeChild(this.element.parentNode):this.element.parentNode.removeChild(this.element)),this.element&&this.element.nodeName===`DIV`&&this.element.parentNode){this.element.removeAttribute(`data-vimeo-initialized`);let e=this.element.querySelector(`iframe`);e&&e.parentNode&&(e.parentNode.parentNode&&this._originalElement&&this._originalElement!==e.parentNode?e.parentNode.parentNode.removeChild(e.parentNode):e.parentNode.removeChild(e))}this._window.removeEventListener(`message`,this._onMessage),H.isEnabled&&H.off(`fullscreenchange`,this.fullscreenchangeHandler),e()})}getAutopause(){return this.get(`autopause`)}setAutopause(e){return this.set(`autopause`,e)}getBuffered(){return this.get(`buffered`)}getCameraProps(){return this.get(`cameraProps`)}setCameraProps(e){return this.set(`cameraProps`,e)}getChapters(){return this.get(`chapters`)}getCurrentChapter(){return this.get(`currentChapter`)}getColor(){return this.get(`color`)}getColors(){return v.all([this.get(`colorOne`),this.get(`colorTwo`),this.get(`colorThree`),this.get(`colorFour`)])}setColor(e){return this.set(`color`,e)}setColors(e){if(!Array.isArray(e))return new v((e,t)=>t(TypeError(`Argument must be an array.`)));let t=new v(e=>e(null)),n=[e[0]?this.set(`colorOne`,e[0]):t,e[1]?this.set(`colorTwo`,e[1]):t,e[2]?this.set(`colorThree`,e[2]):t,e[3]?this.set(`colorFour`,e[3]):t];return v.all(n)}getCuePoints(){return this.get(`cuePoints`)}getCurrentTime(){return this.get(`currentTime`)}setCurrentTime(e){return this.set(`currentTime`,e)}getDuration(){return this.get(`duration`)}getEnded(){return this.get(`ended`)}getLoop(){return this.get(`loop`)}setLoop(e){return this.set(`loop`,e)}setMuted(e){return this.set(`muted`,e)}getMuted(){return this.get(`muted`)}getPaused(){return this.get(`paused`)}getPlaybackRate(){return this.get(`playbackRate`)}setPlaybackRate(e){return this.set(`playbackRate`,e)}getPlayed(){return this.get(`played`)}getQualities(){return this.get(`qualities`)}getQuality(){return this.get(`quality`)}setQuality(e){return this.set(`quality`,e)}getRemotePlaybackAvailability(){return this.get(`remotePlaybackAvailability`)}getRemotePlaybackState(){return this.get(`remotePlaybackState`)}getSeekable(){return this.get(`seekable`)}getSeeking(){return this.get(`seeking`)}getTextTracks(){return this.get(`textTracks`)}getAudioTracks(){return this.get(`audioTracks`)}getEnabledAudioTrack(){return this.get(`enabledAudioTrack`)}getDefaultAudioTrack(){return this.get(`defaultAudioTrack`)}getVideoEmbedCode(){return this.get(`videoEmbedCode`)}getVideoId(){return this.get(`videoId`)}getVideoTitle(){return this.get(`videoTitle`)}getVideoWidth(){return this.get(`videoWidth`)}getVideoHeight(){return this.get(`videoHeight`)}getVideoUrl(){return this.get(`videoUrl`)}getVolume(){return this.get(`volume`)}setVolume(e){return this.set(`volume`,e)}async setTimingSrc(e,t){if(!e)throw TypeError(`A Timing Object must be provided.`);await this.ready();let n=new z(this,e,t);return E(this,`notifyTimingObjectConnect`),n.addEventListener(`disconnect`,()=>E(this,`notifyTimingObjectDisconnect`)),n}}return i||(H=L(),M(),N(),P(),F(),I()),U}))}))(),1);function Le(e){return e.match(/(?:vimeo\.com\/(?:video\/|channels\/[^/]+\/|groups\/[^/]+\/videos\/)?|player\.vimeo\.com\/video\/)(\d+)/)?.[1]??null}function Re(e,t){let n=q(),{techId:r,wrapper:i}=Te(e,se),a=Le(t.src),o=null,s=0,c=0,l=1,u=!1,d=!0,f=1,p=!1,m=!1,h=null,g=new Set;function _(e,t=0){let n=setTimeout(()=>{g.delete(n),e()},t);g.add(n)}function v(){if(!o){m=!0;return}o.play().catch(()=>{})}function y(){t.muted&&o?.setMuted(!0).catch(()=>{}),m&&v()}a&&(o=new Ie.default(r,{id:Number(a),byline:!1,portrait:!1,title:!1,transparent:!0,controls:!!t.nativeUi,autopause:!1,...t.autoplay!==void 0&&{autoplay:t.autoplay},...t.muted!==void 0&&{muted:t.muted}}),t.autoplay&&(m=!0),o.ready().then(y).catch(e=>{h={code:4,message:e?.message||`This video is unavailable or cannot be embedded here.`},n.trigger(`error`)}),o.on(`play`,()=>{d=!1,n.trigger(`play`),n.trigger(`playing`)}),o.on(`pause`,()=>{d=!0,n.trigger(`pause`)}),o.on(`ended`,()=>{d=!0,n.trigger(`ended`)}),o.on(`timeupdate`,e=>{s=e.seconds,c=e.duration,n.trigger(`timeupdate`),e.duration&&!p&&(p=!0,n.trigger(`durationchange`))}),o.on(`loaded`,()=>{p=!1,n.trigger(`loadedmetadata`),n.trigger(`durationchange`)}),o.on(`seeking`,e=>{s=e.seconds,n.trigger(`seeking`)}),o.on(`seeked`,e=>{s=e.seconds,n.trigger(`seeked`),n.trigger(`timeupdate`)}),o.on(`bufferstart`,()=>n.trigger(`waiting`)),o.on(`bufferend`,()=>n.trigger(`canplay`)),o.on(`volumechange`,e=>{l=e.volume,n.trigger(`volumechange`)}),o.on(`error`,()=>n.trigger(`error`)));function b(){if(!B()){let t=Oe(e);t&&H(t);return}o?.requestFullscreen().catch(()=>{})}function x(){U()}return{el:i,play:v,pause:()=>o?.pause().catch(()=>{}),paused:()=>d,currentTime:()=>s,setCurrentTime:e=>{o?.setCurrentTime(e).catch(()=>{}),n.trigger(`timeupdate`),n.trigger(`seeking`)},duration:()=>c,volume:()=>l,setVolume:e=>{l=e,o?.setVolume(e).catch(()=>{})},muted:()=>u,setMuted:e=>{u=e,o?.setMuted(e).then(()=>_(()=>n.trigger(`volumechange`),50)).catch(()=>{})},playbackRate:()=>f,setPlaybackRate:e=>{f=e,o?.setPlaybackRate(e).catch(()=>{}),n.trigger(`ratechange`)},bufferedEnd:()=>s,error:()=>h,setSrc:()=>{},featuresPlaybackRate:()=>!1,supportsFullScreen:V,enterFullscreen:b,exitFullscreen:x,on:n.on,off:n.off,dispose:()=>{g.forEach(clearTimeout),g.clear(),o?.destroy().catch(()=>{}),o=null,De(e,i,se),n.dispose()}}}function ze(e){let t=e.match(/[?&]video=([a-zA-Z0-9]+)/);return t?t[1]:e.match(/(?:dailymotion\.com\/(?:embed\/)?video\/|dai\.ly\/)([a-zA-Z0-9]+)/)?.[1]??null}function Be(e,t){let n=q(),{techId:r,wrapper:i}=Te(e,ce),a=Oe(e),o=ze(t.src),s=typeof t.customVars?.playerId==`string`?t.customVars.playerId:void 0,c=null,l=0,u=0,d=1,f=!1,p=!0,m=!1,h=!1,g=null;async function _(){if(!o){g={code:4,message:`Could not parse video ID from source URL`},n.trigger(`error`);return}try{let e=await Ce(s?`https://geo.dailymotion.com/libs/player/${s}.js`:`https://geo.dailymotion.com/libs/player.js`,s||`dailymotion-sdk`).then(()=>window.dailymotion);if(!e)return;let i=await e.createPlayer(r,{...s&&{player:s},video:o,params:{autoplay:!!t.autoplay,mute:!!t.muted}});c=i;let a=e.events;m&&i.play(),i.on(a.PLAYER_CRITICALPATHREADY,e=>{let t=e.videoThumbnails;if(!t)return;let r=Object.keys(t).map(Number).sort((e,t)=>t-e)[0],i=r===void 0?void 0:t[r];i&&n.trigger(`posterchange`,i)}),i.on(a.VIDEO_PLAY,()=>{p=!1,n.trigger(`play`),n.trigger(`playing`),!t.autoplay&&!h&&(h=!0,i.pause())}),i.on(a.VIDEO_PLAYING,()=>{p=!1,n.trigger(`play`),n.trigger(`playing`)}),i.on(a.VIDEO_PAUSE,()=>{p=!0,n.trigger(`pause`)}),a.VIDEO_BUFFERING&&i.on(a.VIDEO_BUFFERING,()=>n.trigger(`waiting`)),i.on(a.VIDEO_END,()=>{p=!0,n.trigger(`ended`)}),i.on(a.VIDEO_TIMECHANGE,e=>{l=e.videoTime??l,u=e.videoDuration??u,n.trigger(`timeupdate`)}),i.on(a.VIDEO_DURATIONCHANGE,e=>{u=e.videoDuration??u,n.trigger(`durationchange`)}),i.on(a.VIDEO_SEEKSTART,()=>n.trigger(`seeking`)),i.on(a.VIDEO_SEEKEND,e=>{l=e.videoTime??l,n.trigger(`seeked`)}),i.on(a.PLAYER_VOLUMECHANGE,e=>{d=e.playerVolume??d,f=e.playerIsMuted??f,n.trigger(`volumechange`)}),i.on(a.PLAYER_ERROR,()=>n.trigger(`error`)),a.AD_START&&i.on(a.AD_START,()=>{p=!1,n.trigger(`play`),n.trigger(`adstart`)}),a.AD_END&&i.on(a.AD_END,()=>n.trigger(`adend`))}catch(e){g={code:4,message:e instanceof Error?e.message:`This video could not be played.`},n.trigger(`error`)}}_();function v(){c?c.play():m=!0}function y(){if(B()){c?.setFullscreen(!0);return}a&&H(a)}function b(){if(B()){c?.setFullscreen(!1);return}U()}return{el:i,play:v,pause:()=>c?.pause(),paused:()=>p,currentTime:()=>l,setCurrentTime:e=>{l=e,c?.seek(e),n.trigger(`seeking`)},duration:()=>u,volume:()=>d,setVolume:e=>{d=e,c?.setVolume(e)},muted:()=>f,setMuted:e=>{f=e,c?.setMute(e)},playbackRate:()=>1,setPlaybackRate:()=>{},bufferedEnd:()=>l,error:()=>g,setSrc:()=>{},featuresPlaybackRate:()=>!1,supportsFullScreen:V,enterFullscreen:y,exitFullscreen:b,on:n.on,off:n.off,dispose:()=>{c?.destroy?.(),c=null,De(e,i,ce),n.dispose()}}}const Ve=[{test:e=>/youtu\.be|youtube\.com/.test(e),key:`youtube`,embed:!0},{test:e=>/vimeo\.com|player\.vimeo\.com/.test(e),key:`vimeo`,embed:!0},{test:e=>/dailymotion\.com|dai\.ly/.test(e),key:`dailymotion`,embed:!0},{test:e=>/cdn\.jwplayer\.com/.test(e)||e.startsWith(`jwplayer://`),key:`jwplayer`,embed:!1},{test:e=>e.startsWith(`brightcove://`),key:`brightcove`,embed:!1}];function He(e){return Ve.find(t=>t.test(e))?.key??`html5`}function Ue(e){if(/\.m3u8(\?|#|$)/.test(e))return`application/x-mpegURL`;if(/\.mp4(\?|#|$)/.test(e))return`video/mp4`}function We(e){return Ve.find(t=>t.test(e))?.embed??!1}const Ge={youtube:Fe,vimeo:Re,dailymotion:Be};function Ke(e,t,n){let r=Ge[He(e)];return r?r(t,n):null}async function qe(e){let t=He(e);return t===`jwplayer`?ge(e):t===`brightcove`?xe(e):{src:e,type:Ue(e)}}const Je=[`play`,`pause`,`ended`,`error`,`timeupdate`,`durationchange`,`progress`,`volumechange`,`ratechange`,`seeking`,`seeked`,`waiting`,`playing`,`canplay`];function Ye(e,t){let n=q(),r=null;function i(t,n){if(r?.destroy(),r=null,n===`application/x-mpegURL`&&A.isSupported()){r=new A({liveDurationInfinity:!0}),r.loadSource(t),r.attachMedia(e);return}e.src=t}let a=e=>()=>n.trigger(e),o=Je.map(e=>[e,a(e)]);for(let[t,n]of o)e.addEventListener(t,n);let s=[[`webkitbeginfullscreen`,a(`nativefullscreenenter`)],[`webkitendfullscreen`,a(`nativefullscreenexit`)]];for(let[t,n]of s)e.addEventListener(t,n);e.poster=t.poster??``,e.muted=t.muted??t.autoplay??!1,e.playbackRate=t.playbackRate??1,e.playsInline=!0,i(t.src,t.type),t.autoplay&&e.play();function c(){let t=e;if(typeof t.webkitEnterFullscreen==`function`){t.webkitEnterFullscreen();return}let n=e.closest(`.player__shell`);n instanceof HTMLElement&&H(n)}function l(){let t=e;if(typeof t.webkitExitFullscreen==`function`){t.webkitExitFullscreen();return}U()}return{el:e,play:()=>e.play(),pause:()=>e.pause(),paused:()=>e.paused,currentTime:()=>e.currentTime,setCurrentTime:t=>{e.currentTime=t},duration:()=>e.duration,volume:()=>e.volume,setVolume:t=>{e.volume=t},muted:()=>e.muted,setMuted:t=>{e.muted=t},playbackRate:()=>e.playbackRate,setPlaybackRate:t=>{e.playbackRate=t},bufferedEnd:()=>{let{buffered:t,duration:n}=e;if(!t.length)return 0;let r=t.end(t.length-1);return n&&r>n?n:r},error:()=>{let t=e.error;return t?{code:t.code,message:t.message||`This video could not be played.`}:null},setSrc:i,featuresPlaybackRate:()=>!0,supportsFullScreen:V,enterFullscreen:c,exitFullscreen:l,on:n.on,off:n.off,dispose:()=>{r?.destroy();for(let[t,n]of o)e.removeEventListener(t,n);for(let[t,n]of s)e.removeEventListener(t,n);n.dispose()}}}function Xe(){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)})}function Ze(e,t,n,r){let i=document.createElement(`div`);i.className=`ima-ad-container`,e.appendChild(i);let a=null,o=null,s=null,c=!1,l=!1,u=!1,d=!1,f=!1,p=!1,m=1,h=new ResizeObserver(([e])=>{let t=window.google?.ima;if(!s||!t)return;let{width:n,height:r}=e.contentRect;s.resize(n,r,t.ViewMode.NORMAL)});h.observe(t);function g(){o?.contentComplete()}function _(t){d=t,e.classList.toggle(le,t),t||(f=!1,e.classList.remove(K))}function v(){if(c||!l||!u||!a||!o)return;c=!0;let e=window.google?.ima;if(!e)return;a.initialize();let t=new e.AdsRequest;t.adTagUrl=n,o.requestAds(t)}Xe().then(()=>{if(p)return;let n=window.google?.ima;n&&(a=new n.AdDisplayContainer(i,t),o=new n.AdsLoader(a),l=!0,o.addEventListener(n.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,i=>{if(p)return;let a=new n.AdsRenderingSettings;a.restoreCustomPlaybackStateOnAdBreakComplete=!0,s=i.getAdsManager(t,a),t.addEventListener(`ended`,g),s.addEventListener(n.AdEvent.Type.CONTENT_PAUSE_REQUESTED,()=>{t.removeEventListener(`ended`,g),t.pause(),_(!0),r.onAdStart();let e=s?.getVolume()??1;e>0&&(m=e),r.onAdMuteChange(e===0)}),s.addEventListener(n.AdEvent.Type.CONTENT_RESUME_REQUESTED,()=>{t.addEventListener(`ended`,g),_(!1),r.onAdEnd(),t.ended||t.play()}),s.addEventListener(n.AdEvent.Type.PAUSED,()=>{f=!0,e.classList.add(K),r.onAdPauseChange(!0)}),s.addEventListener(n.AdEvent.Type.RESUMED,()=>{f=!1,e.classList.remove(K),r.onAdPauseChange(!1)}),s.addEventListener(n.AdEvent.Type.AD_PROGRESS,()=>{r.onAdProgress(s?.getRemainingTime()??0)}),s.addEventListener(n.AdErrorEvent.Type.AD_ERROR,e=>{_(!1),r.onError(e.getError().getMessage()),t.play()});try{s.init(t.clientWidth,t.clientHeight,n.ViewMode.NORMAL),s.start()}catch(e){r.onError(e instanceof Error?e.message:`Ad playback failed to start.`)}}),o.addEventListener(n.AdErrorEvent.Type.AD_ERROR,e=>{r.onError(e.getError().getMessage())}),v())}).catch(e=>r.onError(e.message));function y(){u=!0,v()}function b(){if(!s)return;let e=s.getVolume();e>0?(m=e,s.setVolume(0)):s.setVolume(m||1),r.onAdMuteChange(s.getVolume()===0)}return{isAdPlaying:()=>d,isAdPaused:()=>f,requestAdsOnFirstPlay:y,pauseAd:()=>s?.pause(),resumeAd:()=>s?.resume(),toggleAdMute:b,dispose:()=>{p=!0,h.disconnect(),t.removeEventListener(`ended`,g),s?.destroy(),o?.destroy(),i.remove(),e.classList.remove(le,K)}}}const Qe=new Set;function $e(e){return Qe.add(e),()=>Qe.delete(e)}function et(e){Qe.forEach(t=>{if(t!==e)try{t()}catch{}})}function tt(e){let t=C(!1),n=C(!1);function r(){let e=document;t.value=!!(document.fullscreenElement||e.webkitFullscreenElement),n.value=!1}function i(){let n=e();if(n){if(t.value){n.exitFullscreen();return}n.enterFullscreen()}}function a(){n.value=!0}function o(e){e.on(ie,()=>{n.value=!0}),e.on(ae,()=>{n.value=!1}),e.on(`nativefullscreenenter`,()=>{t.value=!0,n.value=!1}),e.on(`nativefullscreenexit`,()=>{t.value=!1,n.value=!1})}return y(()=>{document.addEventListener(`fullscreenchange`,r),document.addEventListener(`webkitfullscreenchange`,r)}),v(()=>{document.removeEventListener(`fullscreenchange`,r),document.removeEventListener(`webkitfullscreenchange`,r)}),{isFullscreen:t,isFullscreenPending:n,toggleFullscreen:i,markFullscreenPending:a,attachPlayerEvents:o}}function nt(){let e=C(!1),t=null;function n(){clearTimeout(t??void 0),e.value=!1}function r(r){r.on(`waiting`,()=>{clearTimeout(t??void 0),t=setTimeout(()=>{e.value=!0},500)}),r.on(`playing`,n),r.on(`canplay`,n)}return v(()=>clearTimeout(t??void 0)),{isBuffering:e,attachPlayerEvents:r,reset:n}}function rt(e,t,n){let r=new Set;function i(){if(!t.value)return;let i=e.value/t.value;for(let[e,t]of fe)!r.has(e)&&i>=e&&(r.add(e),n(t))}function a(){r.clear()}return{checkQuartiles:i,reset:a}}function it(){try{return JSON.parse(localStorage.getItem(`player:positions`)??`[]`)}catch{return[]}}function at(e){localStorage.setItem(`player:positions`,JSON.stringify(e))}function ot(e,t){if(t<5)return;let n=it().filter(t=>t.url!==e);n.unshift({url:e,time:t}),at(n.slice(0,5))}function st(e){return it().find(t=>t.url===e)?.time??null}function ct(e){at(it().filter(t=>t.url!==e))}function lt(e,t,n){let r=!1;function i(t){if(r)return;let n=st(e);n&&t.setCurrentTime(n),r=!0}function a(t){!t||n.value||ot(e,t.currentTime()??0)}function o(){ct(e)}function s(){document.visibilityState===`hidden`&&a(t())}return y(()=>document.addEventListener(`visibilitychange`,s)),v(()=>{a(t()),document.removeEventListener(`visibilitychange`,s)}),{restoreOnce:i,save:a,clear:o}}function ut(e,t,n,r){let i=null;y(()=>{let a=e.value?.closest(`.player__shell`);a&&(i=new IntersectionObserver(([e])=>{let i=t();!e.isIntersecting&&i&&!i.paused()&&!n.value&&!r.value&&i.pause()},{threshold:.1}),i.observe(a))}),v(()=>i?.disconnect())}function dt(e,t,n,r,i,a){function o(){let n=e();if(!(!n||!t.value)){if(!a.value){n.play();return}n.pause()}}function s(t){e()?.setCurrentTime(n.value*(t/100))}function c(){let t=e();t?.setMuted(!t.muted())}function l(t){let n=e();n&&(n.setVolume(t),n.setMuted(t===0))}function u(){r.value=!r.value}function d(t){let n=e();n&&(n.setPlaybackRate(t),i.value=t)}return{togglePlay:o,seek:s,toggleMute:c,setVolume:l,toggleLoop:u,setPlaybackRate:d}}function ft(e,t){let{isPlaying:n,hasEnded:r,isReady:i,isAdPlaying:a,isLive:o,current:s,total:c,buffered:l,vol:u,isMuted:d,isLooping:f,playbackRate:p,supportsPlaybackRate:m,hasStarted:h,isError:g,errorMessage:_}=e,{fire:v,pauseThisPlayer:y,positionMemory:b,quartiles:x,buffering:S,fullscreen:C}=t;function w(e){i.value=!0,m.value=e.featuresPlaybackRate();let t=()=>{let t=e.duration();if(t===1/0){o.value=!0;return}o.value=!1,t&&t>0&&isFinite(t)&&(c.value=t)};e.on(`adstart`,()=>{et(y),a.value=!0,v(`adstart`)}),e.on(`adend`,()=>{a.value=!1,v(`adend`)}),e.on(`play`,()=>{et(y),h.value=!0,n.value=!0,r.value=!1,o.value||b.restoreOnce(e),v(`play`)}),e.on(`pause`,()=>{n.value=!1,o.value||b.save(e),v(`pause`)}),e.on(`ended`,()=>{if(n.value=!1,x.reset(),S.reset(),f.value){e.setCurrentTime(0),e.play();return}c.value&&(s.value=c.value),r.value=!0,b.clear(),v(`ended`)}),e.on(`seeked`,()=>{v(`seeked`)}),e.on(`error`,()=>{let t=e.error();_.value=t?.message||`This video could not be played.`,g.value=!0,i.value=!0,v(`error`,{error:t})}),e.on(`timeupdate`,()=>{r.value||(s.value=e.currentTime()??0,c.value||t(),m.value||=e.featuresPlaybackRate(),o.value||x.checkQuartiles())}),e.on(`durationchange`,t),e.on(`progress`,()=>{let t=e.duration();l.value=t?e.bufferedEnd()/t*100:0}),e.on(`volumechange`,()=>{let t=e.muted();u.value=e.volume()??1,d.value=t??!1,h.value&&v(`volumechange`,{isMuted:t})}),e.on(`ratechange`,()=>{let t=e.playbackRate()??1;p.value=t,h.value&&v(`ratechange`,{playbackRate:t})}),S.attachPlayerEvents(e),C.attachPlayerEvents(e)}return{attachPlayerEvents:w}}function pt(e,t,r){let i=null,a=null,o=null,s=null,c=C(!1),l=C(!1),u=C(!1),d=C(!1),f=C(!1),p=C(!1),m=C(0),h=C(!1),g=C(0),_=C(0),b=C(0),x=C(1),S=C(t.muted??t.autoplay??!1),w=C(!1),T=C(t.playbackRate??1),E=C(!1),O=C(!1),k=C(!1),A=C(``),j=C(!1),M=n(()=>_.value?g.value/_.value*100:0),N=n(()=>Math.max(b.value,M.value)),P=()=>i,F=tt(P),I=nt(),L=lt(t.videoUrl,P,l);function R(e,n={}){r(`state-change`,{type:e,currentTime:g.value,duration:_.value,src:t.videoUrl,...n,payload:t.payload})}let z=rt(g,_,R);function B(){!i||!s||(k.value=!1,A.value=``,i.setSrc(s.src,s.type))}function V(){a?.toggleAdMute()}function H(){if(a?.isAdPlaying()){a.pauseAd();return}i?.pause()}function U(){if(a?.isAdPlaying()){a.isAdPaused()?a.resumeAd():a.pauseAd();return}W.togglePlay()}let W=dt(P,u,_,w,T,c),{attachPlayerEvents:G}=ft({isPlaying:c,hasEnded:l,isReady:u,isAdPlaying:d,isLive:h,current:g,total:_,buffered:b,vol:x,isMuted:S,isLooping:w,playbackRate:T,supportsPlaybackRate:E,hasStarted:O,isError:k,errorMessage:A},{fire:R,pauseThisPlayer:H,positionMemory:L,quartiles:z,buffering:I,fullscreen:F});return D(()=>t.muted,e=>{!i||e===void 0||i.setMuted(e)}),D(()=>t.playbackRate,e=>{!i||e===void 0||i.setPlaybackRate(e)}),ut(e,P,F.isFullscreen,F.isFullscreenPending),D(O,t=>{!t||!e.value||!i||i.el===e.value||Ee(e.value,i.el)}),y(async()=>{if(We(t.videoUrl)){if(!e.value)return;let n=Ke(t.videoUrl,e.value,{src:t.videoUrl,poster:t.poster,autoplay:t.autoplay,muted:t.muted??t.autoplay,nativeUi:t.nativeUi});if(!n){k.value=!0,u.value=!0,A.value=`This platform is not yet supported.`;return}j.value=!!t.nativeUi,i=n,s={src:t.videoUrl},o=$e(H),G(i);return}let n=await qe(t.videoUrl).catch(()=>({src:t.videoUrl}));if(!e.value)return;s={src:n.src,type:n.type},i=Ye(e.value,{src:n.src,type:n.type,poster:n.poster||t.poster||``,autoplay:t.autoplay,muted:t.muted??t.autoplay,playbackRate:T.value});let r=t.adTagUrl||n.adTagUrl||``;r&&e.value.parentElement&&(a=Ze(e.value.parentElement,e.value,r,{onAdStart:()=>{d.value=!0,f.value=!1,R(`adstart`)},onAdEnd:()=>{d.value=!1,f.value=!1,m.value=0,R(`adend`)},onAdPauseChange:e=>{f.value=e,e||et(H)},onAdMuteChange:e=>{p.value=e},onAdProgress:e=>{m.value=e},onError:e=>{d.value=!1,f.value=!1,m.value=0,console.error(`Ad playback error for ${r}:`,e)}}),i.on(`play`,()=>a?.requestAdsOnFirstPlay())),o=$e(H),G(i)}),v(()=>{o?.(),a?.dispose(),a=null,i?.dispose(),i=null}),{isPlaying:c,hasEnded:l,isReady:u,isAdPlaying:d,isAdPaused:f,isAdMuted:p,adRemainingTime:m,isLive:h,isBuffering:I.isBuffering,current:g,total:_,vol:x,isMuted:S,isLooping:w,playbackRate:T,hasStarted:O,isError:k,errorMessage:A,progress:M,bufferedDisplay:N,isFullscreen:F.isFullscreen,isFullscreenPending:F.isFullscreenPending,fmt:ee,fire:R,retry:B,togglePlay:U,seek:W.seek,toggleMute:W.toggleMute,setVolume:W.setVolume,toggleFullscreen:F.toggleFullscreen,markFullscreenPending:F.markFullscreenPending,toggleLoop:W.toggleLoop,toggleAdMute:V,setPlaybackRate:W.setPlaybackRate,supportsPlaybackRate:E,nativeUi:j}}function mt(e){let t=C(!0),n=C(!1),r=null,i=0;function a(e=400){i=Date.now()+e}function o(e=3500){clearTimeout(r??void 0),r=setTimeout(()=>{t.value=!1,n.value=!1},e)}function s(){clearTimeout(r??void 0)}function c(){n.value=!0,t.value=!0,o()}function l(){n.value=!1,e.value&&o()}function u(){e.value&&o()}function d(){t.value=!0,e.value&&o()}function f(){t.value=!0,o()}function p(){Date.now()<i||e.value&&o(600)}return D(e,e=>{if(!e){clearTimeout(r??void 0),t.value=!0;return}o()}),v(()=>clearTimeout(r??void 0)),{showHUD:t,isOpen:n,scheduleHide:o,pauseHide:s,onVideoTap:d,onMouseMove:f,onMouseLeave:p,openControls:c,closeControls:l,keepOpen:u,suppressMouseLeave:a}}const Y=Symbol(`player`),X=Symbol(`hud`),ht=Symbol(`action`),gt=Symbol(`compact`);function Z(e){let t=f(e);if(t===void 0)throw Error(`[video-player] missing "${String(e.description)}" context — this component must be rendered inside <VideoPlayer>`);return t}function _t(e,t){return{hudVisible:n(()=>!e.isReady||e.isError?!1:t.showHUD),popupVisible:n(()=>!e.isReady||e.isError?!1:e.isFullscreen?t.showHUD:t.isOpen)}}function vt(e,t){return n(()=>!(!e?.value||t.isFullscreen))}function yt(e,t){let r=n(()=>e?.value??null),i=n(()=>!!r.value&&typeof r.value==`object`),a=n(()=>i.value?r.value:null),o=n(()=>r.value===`mute`?t.isMuted?`Unmute`:`Mute`:r.value===`loop`?t.isLooping?`Disable loop`:`Loop`:``);function s(){r.value===`mute`?t.toggleMute():r.value===`loop`&&t.toggleLoop()}return{currentAction:r,isCustom:i,customAction:a,builtinLabel:o,onBuiltinClick:s}}var Q=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n};const bt={},xt={viewBox:`0 0 24 24`,fill:`currentColor`};function St(e,t){return b(),a(`svg`,xt,[...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 Ct=Q(bt,[[`render`,St]]);const wt={},Tt={viewBox:`0 0 24 24`,fill:`currentColor`};function Et(e,t){return b(),a(`svg`,Tt,[...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 Dt=Q(wt,[[`render`,Et]]);const Ot={},kt={viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`};function At(e,t){return b(),a(`svg`,kt,[...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 jt=Q(Ot,[[`render`,At]]);const Mt={},Nt={viewBox:`0 0 24 24`,fill:`currentColor`};function Pt(e,t){return b(),a(`svg`,Nt,[...t[0]||=[o(`path`,{d:`M4 12l1.41 1.41L11 7.83V20h2V7.83l5.59 5.58L20 12l-8-8-8 8z`},null,-1)]])}var Ft=Q(Mt,[[`render`,Pt]]);const It={},Lt={viewBox:`0 0 24 24`,fill:`currentColor`};function Rt(e,t){return b(),a(`svg`,Lt,[...t[0]||=[o(`path`,{d:`M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z`},null,-1)]])}var zt=Q(It,[[`render`,Rt]]);const Bt={},Vt={viewBox:`0 0 24 24`,fill:`currentColor`};function Ht(e,t){return b(),a(`svg`,Vt,[...t[0]||=[o(`path`,{d:`M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z`},null,-1)]])}var Ut=Q(Bt,[[`render`,Ht]]);const Wt={},Gt={viewBox:`0 0 24 24`,fill:`currentColor`};function Kt(e,t){return b(),a(`svg`,Gt,[...t[0]||=[o(`path`,{d:`M7 7h10v3l4-4-4-4v3H5v6h2V7zm10 10H7v-3l-4 4 4 4v-3h12v-6h-2v4z`},null,-1)]])}var qt=Q(Wt,[[`render`,Kt]]);const Jt={},Yt={viewBox:`0 0 24 24`,fill:`currentColor`};function Xt(e,t){return b(),a(`svg`,Yt,[...t[0]||=[o(`path`,{d:`M6 19h4V5H6v14zm8-14v14h4V5h-4z`},null,-1)]])}var Zt=Q(Jt,[[`render`,Xt]]);const Qt={},$t={viewBox:`0 0 24 24`,fill:`currentColor`};function en(e,t){return b(),a(`svg`,$t,[...t[0]||=[o(`path`,{d:`M8 5v14l11-7z`},null,-1)]])}var tn=Q(Qt,[[`render`,en]]);const nn={},rn={viewBox:`0 0 24 24`,fill:`currentColor`};function an(e,t){return b(),a(`svg`,rn,[...t[0]||=[o(`path`,{d:`M12 5V1L7 6l5 5V7c3.31 0 6 2.69 6 6s-2.69 6-6 6-6-2.69-6-6H4c0 4.42 3.58 8 8 8s8-3.58 8-8-3.58-8-8-8z`},null,-1)]])}var on=Q(nn,[[`render`,an]]);const sn={},cn={viewBox:`0 0 24 24`,fill:`currentColor`};function ln(e,t){return b(),a(`svg`,cn,[...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 un=Q(sn,[[`render`,ln]]);const dn={},fn={viewBox:`0 0 24 24`,fill:`currentColor`};function pn(e,t){return b(),a(`svg`,fn,[...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 mn=Q(dn,[[`render`,pn]]);const hn=[`aria-label`];var $=Q(u({__name:`PlayPauseButton`,props:{isPlaying:{type:Boolean,required:!0},hasEnded:{type:Boolean,required:!1,default:!1},size:{type:String,required:!1,default:`sm`}},emits:[`toggle-play`],setup(e){let t=e,i=n(()=>t.isPlaying?`Pause`:t.hasEnded?`Replay`:`Play`);return(t,n)=>(b(),a(`button`,{class:h([`ppbtn`,`ppbtn--${e.size}`]),"aria-label":i.value,onClick:n[0]||=k(e=>t.$emit(`toggle-play`),[`stop`])},[e.isPlaying?(b(),r(E(Zt),{key:0})):e.hasEnded?(b(),r(E(on),{key:1})):(b(),r(E(tn),{key:2}))],10,hn))}}),[[`__scopeId`,`data-v-85902525`]]),gn=u({__name:`VolumeIcon`,setup(e){let t=Z(Y),i=n(()=>!t.isMuted&&t.vol>0);return(e,t)=>i.value?(b(),r(E(mn),{key:0})):(b(),r(E(un),{key:1}))}}),_n=Q(u({__name:`Spinner`,props:{size:{type:Number,required:!1,default:14},borderWidth:{type:Number,required:!1,default:2}},setup(e){return(t,n)=>(b(),a(`div`,{class:`spinner`,style:_({width:`${e.size}px`,height:`${e.size}px`,borderWidth:`${e.borderWidth}px`})},null,4))}}),[[`__scopeId`,`data-v-259be2b2`]]);const vn={class:`hud`},yn=[`aria-label`],bn=[`aria-label`],xn=[`aria-label`,`innerHTML`],Sn={key:3,class:`hud__spacer`},Cn={class:`hud__play-wrap`};var wn=Q(u({__name:`HudButtons`,setup(t){let n=Z(Y),s=Z(X),{currentAction:c,isCustom:u,customAction:d,builtinLabel:p,onBuiltinClick:m}=yt(f(ht),n);return(t,f)=>(b(),a(`div`,vn,[!E(s).isOpen&&!E(n).isFullscreen?(b(),a(e,{key:0},[E(c)===`mute`?(b(),a(`button`,{key:0,class:h([`hud__btn`,{"hud__btn--active":E(n).isMuted}]),"aria-label":E(p),onClick:f[0]||=k((...e)=>E(m)&&E(m)(...e),[`stop`])},[l(gn)],10,yn)):E(c)===`loop`?(b(),a(`button`,{key:1,class:h([`hud__btn`,{"hud__btn--active":E(n).isLooping}]),"aria-label":E(p),onClick:f[1]||=k((...e)=>E(m)&&E(m)(...e),[`stop`])},[l(E(qt))],10,bn)):E(u)&&E(d)?(b(),a(`button`,{key:2,class:`hud__btn`,"aria-label":E(d).label,onClick:f[2]||=k(e=>E(d).onClick(),[`stop`]),innerHTML:E(d).icon},null,8,xn)):(b(),a(`div`,Sn))],64)):i(`v-if`,!0),o(`div`,Cn,[l($,{"is-playing":E(n).isPlaying,"has-ended":E(n).hasEnded,size:`lg`,onTogglePlay:E(n).togglePlay},null,8,[`is-playing`,`has-ended`,`onTogglePlay`]),E(n).isBuffering?(b(),r(_n,{key:0,class:`hud__buf-spinner`})):i(`v-if`,!0)]),!E(s).isOpen&&!E(n).isFullscreen?(b(),a(`button`,{key:1,class:`hud__btn`,"aria-label":`Show controls`,onClick:f[3]||=k((...e)=>E(s).openControls&&E(s).openControls(...e),[`stop`])},[l(E(jt))])):i(`v-if`,!0)]))}}),[[`__scopeId`,`data-v-a6d118e7`]]);function Tn(e){let t=C(null),r=n(()=>t.value??e.progress),i=null;function a(){i&&clearTimeout(i),i=null,t.value=null}function o(e){i&&clearTimeout(i),i=null,t.value=Number(e.target.value)}function s(n){let r=Number(n.target.value);t.value=r,e.seek(r),i&&clearTimeout(i),i=setTimeout(a,3e3)}return D(()=>e.current,()=>{if(t.value===null||!e.total)return;let n=t.value/100*e.total;Math.abs(e.current-n)<1&&a()}),v(a),{displaySeek:r,onSeekInput:o,onSeekChange:s}}function En(e){function t(){let t=de.indexOf(e.playbackRate);e.setPlaybackRate(de[(t+1)%de.length])}function n(e){return`${e}×`}return{cycleRate:t,fmtRate:n}}function Dn(e,t,n){if(!document.startViewTransition||!e.value){n();return}e.value.style.viewTransitionName=t,document.startViewTransition(async()=>{n(),await m()}).finished.finally(()=>{e.value&&(e.value.style.viewTransitionName=``)})}const On={class:`controls__vol-header`},kn=[`aria-label`],An={class:`controls__vol-body`},jn=[`value`],Mn={class:`controls__vol-pct`};var Nn=Q(u({__name:`VolumePanel`,emits:[`back`],setup(t){let r=Z(Y),i=Z(X),s=n(()=>r.isMuted?0:Math.round(r.vol*100));function c(e){r.setVolume(Number(e.target.value)/100)}return(t,n)=>(b(),a(e,null,[o(`div`,On,[o(`button`,{class:`controls__btn`,"aria-label":`Back`,onClick:n[0]||=e=>t.$emit(`back`)},[l(E(Ct))]),n[6]||=o(`span`,{class:`controls__vol-label`},`Volume`,-1),o(`button`,{class:`controls__btn`,"aria-label":E(r).isMuted?`Unmute`:`Mute`,onClick:n[1]||=e=>E(r).toggleMute()},[l(gn)],8,kn)]),o(`div`,An,[o(`input`,{type:`range`,min:`0`,max:`100`,step:`1`,value:s.value,class:`controls__vol-slider`,style:_({"--v":s.value+`%`}),"aria-label":`Volume`,onInput:c,onMousedown:n[2]||=e=>E(i).pauseHide(),onMouseup:n[3]||=e=>E(i).scheduleHide(),onTouchstartPassive:n[4]||=e=>E(i).pauseHide(),onTouchend:n[5]||=e=>E(i).scheduleHide()},null,44,jn),o(`span`,Mn,w(s.value)+`%`,1)])],64))}}),[[`__scopeId`,`data-v-10b0ae67`]]);const Pn=[`value`],Fn={class:`controls__row`},In={class:`controls__play-wrap`},Ln={key:0,class:`controls__live`},Rn={key:1,class:`controls__time`},zn=[`aria-label`,`innerHTML`],Bn={class:`controls__fs-wrap`},Vn=[`aria-label`];var Hn=Q(u({__name:`ControlsPopup`,setup(t){let n=Z(Y),s=Z(X),u=vt(f(gt),n),{isCustom:d,customAction:p}=yt(f(ht),n),m=C(!1),g=C(null);function x(e){g.value&&!g.value.contains(e.target)&&s.closeControls()}y(()=>{n.fire(`controlsopen`,{element:g.value}),document.addEventListener(`click`,x)}),v(()=>{m.value=!1,n.fire(`controlsclose`,{element:g.value}),document.removeEventListener(`click`,x)});function S(e){s.suppressMouseLeave(),Dn(g,`controls-popup`,e)}function T(){if(B()){n.toggleMute();return}S(()=>{m.value=!0})}let{displaySeek:D,onSeekInput:O,onSeekChange:A}=Tn(n),{cycleRate:j,fmtRate:M}=En(n);function N(){n.isFullscreen||n.markFullscreenPending(),n.toggleFullscreen()}return(t,f)=>(b(),a(`div`,{ref_key:`popupEl`,ref:g,class:h([`controls`,{"controls--fs":E(n).isFullscreen,"controls--compact":E(u)}]),onMousemove:f[12]||=k((...e)=>E(s).keepOpen&&E(s).keepOpen(...e),[`stop`])},[m.value?(b(),r(Nn,{key:0,onBack:f[0]||=e=>S(()=>m.value=!1)})):(b(),a(e,{key:1},[E(n).isLive?i(`v-if`,!0):(b(),a(`input`,{key:0,type:`range`,min:`0`,max:`100`,value:E(D),class:`controls__seek`,style:_({"--p":E(D)+`%`,"--b":E(n).bufferedDisplay+`%`}),onInput:f[1]||=(...e)=>E(O)&&E(O)(...e),onChange:f[2]||=(...e)=>E(A)&&E(A)(...e),onMousedown:f[3]||=e=>E(s).pauseHide(),onMouseup:f[4]||=e=>E(s).scheduleHide(),onTouchstartPassive:f[5]||=e=>E(s).pauseHide(),onTouchend:f[6]||=e=>E(s).scheduleHide()},null,44,Pn)),o(`div`,Fn,[o(`div`,In,[E(n).isBuffering?(b(),r(_n,{key:0})):(b(),r($,{key:1,"is-playing":E(n).isPlaying,"has-ended":E(n).hasEnded,size:`sm`,onTogglePlay:f[7]||=e=>E(n).togglePlay()},null,8,[`is-playing`,`has-ended`]))]),E(n).isLive?(b(),a(`span`,Ln,[...f[13]||=[o(`span`,{class:`controls__live-dot`},null,-1),c(`Live`,-1)]])):(b(),a(`span`,Rn,w(E(n).fmt(E(n).current))+` / `+w(E(n).fmt(E(n).total)),1)),E(n).supportsPlaybackRate?(b(),a(`button`,{key:2,class:h([`controls__btn controls__btn--rate`,{"controls__btn--active":E(n).playbackRate!==1}]),"aria-label":`Playback rate`,onClick:f[8]||=(...e)=>E(j)&&E(j)(...e)},w(E(M)(E(n).playbackRate)),3)):i(`v-if`,!0),o(`button`,{class:h([`controls__btn controls__btn--loop`,{"controls__btn--active":E(n).isLooping}]),"aria-label":`Toggle loop`,onClick:f[9]||=e=>E(n).toggleLoop()},[l(E(qt))],2),o(`button`,{class:`controls__btn`,"aria-label":`Volume`,onClick:T},[l(gn)]),E(d)&&E(p)?(b(),a(`button`,{key:3,class:`controls__btn`,"aria-label":E(p).label,onClick:f[10]||=e=>E(p).onClick(),innerHTML:E(p).icon},null,8,zn)):i(`v-if`,!0),o(`div`,Bn,[E(n).isFullscreenPending?(b(),r(_n,{key:0})):(b(),a(`button`,{key:1,class:`controls__btn`,"aria-label":E(n).isFullscreen?`Exit fullscreen`:`Fullscreen`,onClick:N},[E(n).isFullscreen?(b(),r(E(Ut),{key:0})):(b(),r(E(zt),{key:1}))],8,Vn))]),E(n).isFullscreen?i(`v-if`,!0):(b(),a(`button`,{key:4,class:`controls__btn controls__btn--close`,"aria-label":`Close`,onClick:f[11]||=e=>E(s).closeControls()},[l(E(Dt))]))])],64))],34))}}),[[`__scopeId`,`data-v-5712aad4`]]);const Un={class:`ad-overlay`},Wn={class:`ad-overlay__bar`},Gn={class:`ad-overlay__badge`},Kn={key:0,class:`ad-overlay__countdown`},qn=[`aria-label`],Jn={key:0,class:`ad-overlay__resume`};var Yn=Q(u({__name:`AdOverlay`,setup(e){let t=Z(Y),s=n(()=>t.adRemainingTime>0?t.fmt(t.adRemainingTime):``);return(e,n)=>(b(),a(`div`,Un,[o(`div`,Wn,[o(`div`,Gn,[n[2]||=o(`span`,null,`Ad`,-1),s.value?(b(),a(`span`,Kn,w(s.value),1)):i(`v-if`,!0)]),o(`button`,{class:`ad-overlay__mute`,"aria-label":E(t).isAdMuted?`Unmute ad`:`Mute ad`,onClick:n[0]||=e=>E(t).toggleAdMute()},[E(t).isAdMuted?(b(),r(E(un),{key:0})):(b(),r(E(mn),{key:1}))],8,qn)]),E(t).isAdPaused?(b(),a(`div`,Jn,[l($,{"is-playing":!1,size:`lg`,onTogglePlay:n[1]||=e=>E(t).togglePlay()})])):i(`v-if`,!0)]))}}),[[`__scopeId`,`data-v-23efcc8b`]]);const Xn={key:0,class:`overlay__spinner`},Zn={key:0,class:`overlay__error`};var Qn=Q(u({__name:`PlayerOverlay`,props:{disableTapCapture:{type:Boolean,required:!1,default:!1}},setup(n){let s=Z(Y),c=Z(X),{hudVisible:u,popupVisible:d}=_t(s,c);function f(){if(s.isAdPlaying&&s.isAdPaused){s.togglePlay();return}c.onVideoTap()}return(c,p)=>(b(),a(e,null,[!n.disableTapCapture&&E(s).hasStarted&&!(E(s).isAdPlaying&&!E(s).isAdPaused)?(b(),a(`div`,{key:0,class:`overlay__tap-capture`,onClick:f,onTouchend:k(f,[`prevent`,`stop`])},null,32)):i(`v-if`,!0),E(s).isAdPlaying?(b(),r(Yn,{key:1})):i(`v-if`,!0),l(t,{name:`fade`},{default:O(()=>[!E(s).isReady&&!E(s).isError?(b(),a(`div`,Xn,[l(_n,{size:40,"border-width":3})])):i(`v-if`,!0)]),_:1}),l(t,{name:`fade`},{default:O(()=>[E(s).isError?(b(),a(`div`,Zn,[o(`p`,null,w(E(s).errorMessage||`This video could not be played.`),1),o(`button`,{class:`overlay__retry`,onClick:p[0]||=k((...e)=>E(s).retry&&E(s).retry(...e),[`stop`])},`Retry`)])):i(`v-if`,!0)]),_:1}),o(`div`,{class:h([`overlay__hud`,{"overlay__hud--visible":E(u)}])},[l(wn)],2),l(t,{name:`popup`},{default:O(()=>[E(d)?(b(),a(`div`,{key:0,class:h([`overlay__popup`,{"overlay__popup--fs":E(s).isFullscreen}])},[l(Hn)],2)):i(`v-if`,!0)]),_:1})],64))}}),[[`__scopeId`,`data-v-f3307b98`]]);const $n={class:`player`},er={"data-mvp-player":``},tr=[`poster`],nr={key:1,class:`player__native-play`};var rr=Q(u({__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:ue},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,default:void 0},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:!1},payload:{type:Object,required:!1,default:()=>({})},action:{type:[String,Object,null],required:!1,default:null},disableTapCapture:{type:Boolean,required:!1,default:!1}},emits:[`state-change`],setup(e,{expose:t,emit:s}){let c=e,u=s,d=C(null),f=S(pt(d,c,u)),p=S(mt(T(f,`isPlaying`)));x(Y,f),x(X,p),x(ht,T(c,`action`));let m=n(()=>W(c.aspectRatio)),g=n(()=>m.value.isPortrait),v=n(()=>m.value.cssRatio),y=n(()=>!c.poster&&!f.isReady);return t(f),(e,t)=>(b(),a(`div`,$n,[o(`div`,{class:h([`player__shell`,{"player__shell--portrait":g.value}]),style:_({aspectRatio:v.value}),onMousemove:t[0]||=e=>p.onMouseMove(),onContextmenuCapture:t[1]||=k(()=>{},[`prevent`]),onMouseleave:t[2]||=e=>p.onMouseLeave()},[o(`div`,er,[o(`video`,{ref_key:`videoEl`,ref:d,class:h([`mvp-video`,{"mvp-video--hidden":y.value}]),poster:c.poster,playsinline:``},null,10,tr),f.nativeUi?i(`v-if`,!0):(b(),r(Qn,{key:0,"disable-tap-capture":c.disableTapCapture},null,8,[`disable-tap-capture`])),f.nativeUi&&!f.hasStarted?(b(),a(`div`,nr,[l($,{"is-playing":!1,size:`lg`,onTogglePlay:f.togglePlay},null,8,[`onTogglePlay`])])):i(`v-if`,!0)])],38)]))}}),[[`__scopeId`,`data-v-4ab3cf75`]]);const ir=C(0),ar=n(()=>ir.value>0);function or(){ir.value++}function sr(){ir.value--}function cr(e,t){window.dispatchEvent(new CustomEvent(e,{detail:t}))}function lr(e,t){let n=e=>t(e.detail);y(()=>window.addEventListener(e,n)),v(()=>window.removeEventListener(e,n))}const ur=[`src`],dr={class:`stage__idle-body`},fr={class:`stage__idle-btn`},pr={class:`stage__idle-title`},mr={key:1,class:`stage__idle-empty`};var hr=Q(u({__name:`VideoStage`,props:{pinPosition:{type:String,required:!1,default:`bottom-right`}},emits:[`state-change`],setup(t,{emit:s}){let c=s,u=C(null),d=C(null),f=C(!1),m=C(!1),g=C(null),S=C(null),T=C(!1);x(gt,T);let O=n(()=>T.value&&!!d.value&&f.value),A=n(()=>W(d.value?.aspectRatio||`16:9`).cssRatio),j=C(null),M=C(null);D(T,e=>{j.value=e&&S.value?{height:S.value.offsetHeight,width:S.value.offsetWidth}:null});let N=n(()=>{if(!j.value)return{};let{height:e,width:t}=j.value,n=M.value&&t?M.value/t:1;return{height:`${Math.round(e*n)}px`}}),P=null,F=null;function I(){P?.disconnect(),F?.disconnect(),g.value&&(P=new IntersectionObserver(([e])=>{T.value=!e.isIntersecting},{threshold:1}),P.observe(g.value),F=new ResizeObserver(([e])=>{M.value=e.contentRect.width}),F.observe(g.value))}D(g,I);function L(){d.value&&(d.value={...d.value,autoplay:!0},f.value=!0)}function R(){g.value?.scrollIntoView({behavior:`smooth`,block:`center`})}function z(){d.value=null,f.value=!1,m.value=!1,T.value=!1,j.value=null,B()}function B(){cr(re,{currentVideoUrl:d.value?.videoUrl??null,isPlaying:m.value})}function V(e){if(d.value?.videoUrl===e.videoUrl&&f.value){u.value?.togglePlay();return}d.value=e,f.value=!1,m.value=!1,B(),f.value=!0}function H(e){if(!(!d.value||e.videoUrl!==d.value.videoUrl)){if(!f.value){d.value={...d.value,autoplay:!0},f.value=!0;return}u.value?.togglePlay()}}function U(e){e.type===`play`&&(m.value=!0),(e.type===`pause`||e.type===`ended`)&&(m.value=!1),B(),c(`state-change`,e)}return lr(ne,V),lr(`video-toggle`,H),y(or),v(()=>{sr(),P?.disconnect(),F?.disconnect()}),(n,s)=>(b(),a(`div`,{ref_key:`wrapperEl`,ref:g,class:`stage-wrapper`,style:_(N.value)},[o(`div`,{ref_key:`stageEl`,ref:S,class:h([`stage`,{"stage--minified":O.value,[`stage--pin-${t.pinPosition}`]:O.value}])},[O.value?(b(),a(`button`,{key:0,class:`stage__scroll-to`,"aria-label":`Scroll to player`,onClick:k(R,[`stop`])},[l(E(Ft))])):i(`v-if`,!0),O.value?(b(),a(`button`,{key:1,class:`stage__dismiss`,"aria-label":`Close`,onClick:k(z,[`stop`])},[l(E(Dt))])):i(`v-if`,!0),d.value&&f.value?(b(),r(rr,p({ref_key:`playerRef`,ref:u,key:d.value.videoUrl},d.value,{onStateChange:U}),null,16)):(b(),a(`div`,{key:3,class:`stage__idle`,style:_({aspectRatio:A.value}),onClick:L},[d.value?.poster?(b(),a(`img`,{key:0,src:d.value.poster,class:`stage__idle-poster`},null,8,ur)):i(`v-if`,!0),s[0]||=o(`div`,{class:`stage__idle-scrim`},null,-1),o(`div`,dr,[d.value?(b(),a(e,{key:0},[o(`div`,fr,[l(E(tn))]),o(`p`,pr,w(d.value.title),1)],64)):(b(),a(`p`,mr,`Select a video to play`))])],4))],2)],4))}}),[[`__scopeId`,`data-v-fb8c86cf`]]);const gr={class:`placeholder`},_r=[`src`,`alt`],vr={class:`placeholder__btn-wrap`},yr={key:2,class:`placeholder__footer`},br={class:`placeholder__title`};var xr=Q(u({__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:ue},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,default:void 0},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},disableTapCapture:{type:Boolean,required:!1}},setup(e){let t=e,r=n(()=>W(t.aspectRatio)),s=n(()=>r.value.isPortrait),c=n(()=>r.value.cssRatio),u=C(!1),d=C(!1);lr(re,e=>{u.value=e.currentVideoUrl===t.videoUrl,d.value=u.value&&e.isPlaying});function f(e){cr(ne,{...t,...e!==void 0&&{autoplay:e}})}function p(){f(!0)}return y(()=>{t.autoStage&&f()}),(t,n)=>(b(),a(`div`,gr,[o(`div`,{class:h([`placeholder__shell`,{"placeholder__shell--portrait":s.value,"placeholder__shell--active":u.value}]),style:_({aspectRatio:c.value}),onClick:p},[e.poster?(b(),a(`img`,{key:0,class:`placeholder__poster`,src:e.poster,alt:e.title},null,8,_r)):i(`v-if`,!0),n[0]||=o(`div`,{class:`placeholder__scrim`},null,-1),e.platform?(b(),a(`span`,{key:1,class:h([`placeholder__badge`,`badge--${e.platform}`])},w(e.platform),3)):i(`v-if`,!0),o(`div`,vr,[l($,{"is-playing":u.value&&d.value,size:`lg`,onTogglePlay:p},null,8,[`is-playing`])]),e.title?(b(),a(`div`,yr,[o(`p`,br,w(e.title),1)])):i(`v-if`,!0)],6)]))}}),[[`__scopeId`,`data-v-dbcb4f82`]]),Sr=u({__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,default:void 0},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},disableTapCapture:{type:Boolean,required:!1}},emits:[`state-change`],setup(t,{emit:n}){let i=t,o=n,s=C(!1);return(t,n)=>E(ar)?(b(),r(xr,g(p({key:0},i)),null,16)):(b(),a(e,{key:1},[i.lazy&&!s.value&&!i.autoplay?(b(),r(xr,p({key:0},i,{onClickCapture:n[0]||=e=>s.value=!0}),null,16)):(b(),r(rr,p({key:1},i,{autoplay:s.value||i.autoplay,onStateChange:n[1]||=e=>o(`state-change`,e)}),null,16,[`autoplay`]))],64))}});const Cr=d(rr,{shadowRoot:!1}),wr=d(hr,{shadowRoot:!1}),Tr=d(xr,{shadowRoot:!1}),Er=d(Sr,{shadowRoot:!1});customElements.define(`video-player`,Cr),customElements.define(`video-stage`,wr),customElements.define(`video-placeholder`,Tr),customElements.define(`video-item`,Er);export{Er as VideoItemElement,Tr as VideoPlaceholderElement,Cr as VideoPlayerElement,wr as VideoStageElement};
|
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { ComputedRef, InjectionKey, Plugin, Ref, UnwrapNestedRefs } from "vue";
|
|
2
|
-
|
|
3
2
|
//#region src/types.d.ts
|
|
4
3
|
type Platform = 'youtube' | 'vimeo' | 'dailymotion' | 'jwplayer' | 'brightcove' | 'html5';
|
|
5
4
|
type BuiltinAction = 'mute' | 'loop';
|
|
@@ -9,7 +8,7 @@ interface CustomAction {
|
|
|
9
8
|
onClick: () => void;
|
|
10
9
|
}
|
|
11
10
|
type PlayerAction = BuiltinAction | CustomAction;
|
|
12
|
-
type StateChangeType = 'play' | 'pause' | 'ended' | 'seeked' | 'error' | 'adstart' | 'adend' | 'volumechange' | 'ratechange' | 'firstQuartile' | 'midpoint' | 'thirdQuartile' | '
|
|
11
|
+
type StateChangeType = 'play' | 'pause' | 'ended' | 'seeked' | 'error' | 'adstart' | 'adend' | 'volumechange' | 'ratechange' | 'firstQuartile' | 'midpoint' | 'thirdQuartile' | 'controlsopen' | 'controlsclose';
|
|
13
12
|
interface StateChangeEvent {
|
|
14
13
|
type: StateChangeType;
|
|
15
14
|
currentTime: number;
|
|
@@ -21,6 +20,7 @@ interface StateChangeEvent {
|
|
|
21
20
|
} | null;
|
|
22
21
|
isMuted?: boolean;
|
|
23
22
|
playbackRate?: number;
|
|
23
|
+
element?: HTMLElement | null;
|
|
24
24
|
payload?: Record<string, unknown>;
|
|
25
25
|
}
|
|
26
26
|
interface PlayerProps {
|
|
@@ -40,7 +40,6 @@ interface PlayerProps {
|
|
|
40
40
|
lazy?: boolean;
|
|
41
41
|
payload?: Record<string, unknown>;
|
|
42
42
|
action?: PlayerAction | null;
|
|
43
|
-
focusMode?: boolean;
|
|
44
43
|
disableTapCapture?: boolean;
|
|
45
44
|
}
|
|
46
45
|
type VideoSelectDetail = PlayerProps;
|
|
@@ -61,6 +60,10 @@ declare const __VLS_export$3: import("vue").DefineComponent<PlayerProps, {
|
|
|
61
60
|
hasEnded: boolean;
|
|
62
61
|
isReady: boolean;
|
|
63
62
|
isAdPlaying: boolean;
|
|
63
|
+
isAdPaused: boolean;
|
|
64
|
+
isAdMuted: boolean;
|
|
65
|
+
adRemainingTime: number;
|
|
66
|
+
isLive: boolean;
|
|
64
67
|
isBuffering: boolean;
|
|
65
68
|
current: number;
|
|
66
69
|
total: number;
|
|
@@ -83,7 +86,9 @@ declare const __VLS_export$3: import("vue").DefineComponent<PlayerProps, {
|
|
|
83
86
|
toggleMute: () => void;
|
|
84
87
|
setVolume: (val: number) => void;
|
|
85
88
|
toggleFullscreen: () => void;
|
|
89
|
+
markFullscreenPending: () => void;
|
|
86
90
|
toggleLoop: () => void;
|
|
91
|
+
toggleAdMute: () => void;
|
|
87
92
|
setPlaybackRate: (rate: number) => void;
|
|
88
93
|
supportsPlaybackRate: boolean;
|
|
89
94
|
nativeUi: boolean;
|
|
@@ -100,11 +105,11 @@ declare const __VLS_export$3: import("vue").DefineComponent<PlayerProps, {
|
|
|
100
105
|
techOptions: Record<string, unknown>;
|
|
101
106
|
adTagUrl: string;
|
|
102
107
|
autoplay: boolean;
|
|
108
|
+
muted: boolean;
|
|
103
109
|
autoStage: boolean;
|
|
104
110
|
lazy: boolean;
|
|
105
111
|
payload: Record<string, unknown>;
|
|
106
112
|
action: PlayerAction | null;
|
|
107
|
-
focusMode: boolean;
|
|
108
113
|
disableTapCapture: boolean;
|
|
109
114
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
110
115
|
declare const _default$2: typeof __VLS_export$3;
|
|
@@ -132,6 +137,7 @@ declare const __VLS_export$1: import("vue").DefineComponent<PlayerProps, {}, {},
|
|
|
132
137
|
techOptions: Record<string, unknown>;
|
|
133
138
|
adTagUrl: string;
|
|
134
139
|
autoplay: boolean;
|
|
140
|
+
muted: boolean;
|
|
135
141
|
autoStage: boolean;
|
|
136
142
|
payload: Record<string, unknown>;
|
|
137
143
|
action: PlayerAction | null;
|
|
@@ -144,13 +150,14 @@ declare const __VLS_export: import("vue").DefineComponent<PlayerProps, {}, {}, {
|
|
|
144
150
|
}, string, import("vue").PublicProps, Readonly<PlayerProps> & Readonly<{
|
|
145
151
|
"onState-change"?: ((event: StateChangeEvent) => any) | undefined;
|
|
146
152
|
}>, {
|
|
153
|
+
muted: boolean;
|
|
147
154
|
lazy: boolean;
|
|
148
155
|
action: PlayerAction | null;
|
|
149
156
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
150
157
|
declare const _default: typeof __VLS_export;
|
|
151
158
|
//#endregion
|
|
152
159
|
//#region src/adapters/index.d.ts
|
|
153
|
-
declare function getPlatform(url:
|
|
160
|
+
declare function getPlatform(url: string): string;
|
|
154
161
|
//#endregion
|
|
155
162
|
//#region src/composables/player/usePlayer.d.ts
|
|
156
163
|
interface UsePlayerReturn {
|
|
@@ -158,6 +165,10 @@ interface UsePlayerReturn {
|
|
|
158
165
|
hasEnded: Ref<boolean>;
|
|
159
166
|
isReady: Ref<boolean>;
|
|
160
167
|
isAdPlaying: Ref<boolean>;
|
|
168
|
+
isAdPaused: Ref<boolean>;
|
|
169
|
+
isAdMuted: Ref<boolean>;
|
|
170
|
+
adRemainingTime: Ref<number>;
|
|
171
|
+
isLive: Ref<boolean>;
|
|
161
172
|
isBuffering: Ref<boolean>;
|
|
162
173
|
current: Ref<number>;
|
|
163
174
|
total: Ref<number>;
|
|
@@ -180,7 +191,9 @@ interface UsePlayerReturn {
|
|
|
180
191
|
toggleMute: () => void;
|
|
181
192
|
setVolume: (val: number) => void;
|
|
182
193
|
toggleFullscreen: () => void;
|
|
194
|
+
markFullscreenPending: () => void;
|
|
183
195
|
toggleLoop: () => void;
|
|
196
|
+
toggleAdMute: () => void;
|
|
184
197
|
setPlaybackRate: (rate: number) => void;
|
|
185
198
|
supportsPlaybackRate: Ref<boolean>;
|
|
186
199
|
nativeUi: Ref<boolean>;
|