@munsonlabs/video-player 0.0.1
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 +270 -0
- package/dist/chunks/VideoItem-C2dc1Nw7.mjs +1 -0
- package/dist/chunks/brightcove-CQ7KZDbD.mjs +1 -0
- package/dist/chunks/dailymotion-BgVShGbi.mjs +1 -0
- package/dist/chunks/index-DCRJ3iTc.d.mts +204 -0
- package/dist/chunks/jwplayer-C3SeHLno.mjs +1 -0
- package/dist/chunks/loadScript-Du6JsTc2.mjs +1 -0
- package/dist/chunks/vimeo-BHc3ewpt.mjs +1 -0
- package/dist/chunks/youtube-CNXFp2IX.mjs +1 -0
- package/dist/element.d.mts +13 -0
- package/dist/element.mjs +1 -0
- package/dist/index.d.mts +2 -0
- package/dist/index.mjs +1 -0
- package/dist/style.css +1 -0
- package/package.json +55 -0
package/README.md
ADDED
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
# @munsonlabs/video-player
|
|
2
|
+
|
|
3
|
+
A Vue 3 video player supporting YouTube, Vimeo, Dailymotion, Brightcove, JW Player, and plain HTML5. Includes a sticky stage player, lazy loading, custom actions, IMA ad support, and web component exports.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @munsonlabs/video-player video.js
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Vue Usage
|
|
12
|
+
|
|
13
|
+
### Basic player
|
|
14
|
+
|
|
15
|
+
```vue
|
|
16
|
+
<script setup>
|
|
17
|
+
import { VideoItem } from '@munsonlabs/video-player'
|
|
18
|
+
import '@munsonlabs/video-player/style'
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
<template>
|
|
22
|
+
<VideoItem
|
|
23
|
+
title="Big Buck Bunny"
|
|
24
|
+
video-url="https://cdn.jwplayer.com/videos/O5chtspP-4VHSaSK0.mp4"
|
|
25
|
+
platform="html5"
|
|
26
|
+
poster="https://storage.googleapis.com/gtv-videos-bucket/sample/images/BigBuckBunny.jpg"
|
|
27
|
+
/>
|
|
28
|
+
</template>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Stage player
|
|
32
|
+
|
|
33
|
+
`VideoStage` is a sticky full-width player that receives videos from `VideoItem` components anywhere on the page via window events. When the stage scrolls out of view it minifies to a pip in the bottom-right corner.
|
|
34
|
+
|
|
35
|
+
```vue
|
|
36
|
+
<script setup>
|
|
37
|
+
import { VideoStage, VideoItem } from '@munsonlabs/video-player'
|
|
38
|
+
import '@munsonlabs/video-player/style'
|
|
39
|
+
</script>
|
|
40
|
+
|
|
41
|
+
<template>
|
|
42
|
+
<VideoStage @state-change="onStateChange" />
|
|
43
|
+
|
|
44
|
+
<VideoItem v-for="video in videos" :key="video.videoUrl" v-bind="video" />
|
|
45
|
+
</template>
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## VideoItem / VideoPlayer Props
|
|
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
|
+
| `imaOptions` | `object` | `{}` | Extra options passed to the IMA plugin (e.g. `{ customParameters: { section: 'news' } }`) |
|
|
67
|
+
| `techOptions` | `object` | `{}` | Extra options passed directly to Video.js |
|
|
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
|
+
|
|
71
|
+
### Platform URLs
|
|
72
|
+
|
|
73
|
+
| Platform | URL format |
|
|
74
|
+
| ------------- | -------------------------------------------------- |
|
|
75
|
+
| `youtube` | `https://www.youtube.com/watch?v=VIDEO_ID` |
|
|
76
|
+
| `vimeo` | `https://vimeo.com/VIDEO_ID` |
|
|
77
|
+
| `dailymotion` | `https://www.dailymotion.com/video/VIDEO_ID` |
|
|
78
|
+
| `brightcove` | `brightcove://ACCOUNT_ID/PLAYER_ID/embed/VIDEO_ID` |
|
|
79
|
+
| `jwplayer` | `https://cdn.jwplayer.com/videos/...` |
|
|
80
|
+
| `html5` | Any direct MP4 / HLS URL |
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Events
|
|
85
|
+
|
|
86
|
+
### `state-change`
|
|
87
|
+
|
|
88
|
+
Emitted by `VideoItem`, `VideoPlayer`, and `VideoStage`.
|
|
89
|
+
|
|
90
|
+
```ts
|
|
91
|
+
interface StateChangeEvent {
|
|
92
|
+
type: 'play' | 'pause' | 'ended' | 'seeked' | 'error' | 'adstart' | 'adend' | 'volumechange' | 'ratechange'
|
|
93
|
+
currentTime: number
|
|
94
|
+
duration: number
|
|
95
|
+
src: string
|
|
96
|
+
error?: { code: number; message: string } | null
|
|
97
|
+
isMuted?: boolean // volumechange only
|
|
98
|
+
playbackRate?: number // ratechange only
|
|
99
|
+
payload?: Record<string, unknown>
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
```vue
|
|
104
|
+
<VideoItem video-url="..." platform="html5" @state-change="onStateChange" />
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Actions
|
|
110
|
+
|
|
111
|
+
The `action` prop adds a button to the player HUD. Pass a built-in string or a custom action object.
|
|
112
|
+
|
|
113
|
+
### Built-in actions
|
|
114
|
+
|
|
115
|
+
```vue
|
|
116
|
+
<VideoItem action="mute" ... />
|
|
117
|
+
<VideoItem action="loop" ... />
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Custom action
|
|
121
|
+
|
|
122
|
+
```ts
|
|
123
|
+
interface CustomAction {
|
|
124
|
+
icon: string // SVG string
|
|
125
|
+
label: string
|
|
126
|
+
onClick: () => void
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
```vue
|
|
131
|
+
<script setup>
|
|
132
|
+
const saveAction = {
|
|
133
|
+
icon: `<svg .../>`,
|
|
134
|
+
label: 'Save',
|
|
135
|
+
onClick: () => console.log('saved'),
|
|
136
|
+
}
|
|
137
|
+
</script>
|
|
138
|
+
|
|
139
|
+
<template>
|
|
140
|
+
<VideoItem :action="saveAction" ... />
|
|
141
|
+
</template>
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Ads (IMA / VAST / VMAP)
|
|
147
|
+
|
|
148
|
+
Pass an `adTagUrl` to enable pre-roll, mid-roll, or VMAP ad schedules via the Google IMA SDK. The SDK is loaded automatically on demand.
|
|
149
|
+
|
|
150
|
+
```vue
|
|
151
|
+
<VideoItem video-url="https://..." platform="html5" ad-tag-url="https://pubads.g.doubleclick.net/..." />
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Custom IMA parameters
|
|
155
|
+
|
|
156
|
+
Use `imaOptions` to pass any option supported by [videojs-ima](https://github.com/googleads/videojs-ima), including `customParameters` for `cust_params`:
|
|
157
|
+
|
|
158
|
+
```vue
|
|
159
|
+
<VideoItem
|
|
160
|
+
video-url="https://..."
|
|
161
|
+
ad-tag-url="https://pubads.g.doubleclick.net/..."
|
|
162
|
+
:ima-options="{ customParameters: { section: 'news', topic: 'sport' } }"
|
|
163
|
+
/>
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Ads are not supported on YouTube, Vimeo, or Dailymotion.
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## Window Events
|
|
171
|
+
|
|
172
|
+
`VideoItem` and `VideoStage` communicate via window custom events. You can dispatch these yourself to control the stage from outside Vue.
|
|
173
|
+
|
|
174
|
+
| Event | Detail | Description |
|
|
175
|
+
| -------------- | --------------------------------------------------------- | ---------------------------------------------- |
|
|
176
|
+
| `video-select` | `VideoSelectDetail` | Load a video into the stage |
|
|
177
|
+
| `video-toggle` | `{ videoUrl: string }` | Play/pause a specific video in the stage |
|
|
178
|
+
| `video-state` | `{ currentVideoUrl: string \| null, isPlaying: boolean }` | Dispatched by the stage when its state changes |
|
|
179
|
+
|
|
180
|
+
```js
|
|
181
|
+
// Load a video into the stage
|
|
182
|
+
window.dispatchEvent(
|
|
183
|
+
new CustomEvent('video-select', {
|
|
184
|
+
detail: {
|
|
185
|
+
videoUrl: 'https://...',
|
|
186
|
+
platform: 'html5',
|
|
187
|
+
title: 'My Video',
|
|
188
|
+
poster: 'https://...',
|
|
189
|
+
autoplay: true,
|
|
190
|
+
},
|
|
191
|
+
}),
|
|
192
|
+
)
|
|
193
|
+
|
|
194
|
+
// Listen for stage state changes
|
|
195
|
+
window.addEventListener('video-state', (e) => {
|
|
196
|
+
console.log(e.detail.currentVideoUrl, e.detail.isPlaying)
|
|
197
|
+
})
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Web Component Usage
|
|
203
|
+
|
|
204
|
+
Import the element bundle to register all components as native custom elements. Vue is an external dependency — use an import map to provide it:
|
|
205
|
+
|
|
206
|
+
```html
|
|
207
|
+
<script type="importmap">
|
|
208
|
+
{
|
|
209
|
+
"imports": {
|
|
210
|
+
"vue": "https://unpkg.com/vue@3/dist/vue.esm-browser.js"
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
</script>
|
|
214
|
+
<script type="module" src="@munsonlabs/video-player/element"></script>
|
|
215
|
+
|
|
216
|
+
<video-item
|
|
217
|
+
video-url="https://cdn.jwplayer.com/videos/O5chtspP-4VHSaSK0.mp4"
|
|
218
|
+
platform="html5"
|
|
219
|
+
title="Big Buck Bunny"
|
|
220
|
+
poster="https://storage.googleapis.com/gtv-videos-bucket/sample/images/BigBuckBunny.jpg"
|
|
221
|
+
></video-item>
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### Available elements
|
|
225
|
+
|
|
226
|
+
| Element | Vue equivalent |
|
|
227
|
+
| --------------------- | -------------------- |
|
|
228
|
+
| `<video-item>` | `<VideoItem>` |
|
|
229
|
+
| `<video-stage>` | `<VideoStage>` |
|
|
230
|
+
| `<video-player>` | `<VideoPlayer>` |
|
|
231
|
+
| `<video-placeholder>` | `<VideoPlaceholder>` |
|
|
232
|
+
|
|
233
|
+
### Passing objects as web component attributes
|
|
234
|
+
|
|
235
|
+
Boolean and string props map directly to HTML attributes. Object props (`imaOptions`, `techOptions`, `payload`) can be passed as inline JSON strings — Vue's custom element runtime parses them automatically:
|
|
236
|
+
|
|
237
|
+
```html
|
|
238
|
+
<video-item
|
|
239
|
+
video-url="https://..."
|
|
240
|
+
platform="html5"
|
|
241
|
+
ad-tag-url="https://..."
|
|
242
|
+
ima-options='{"customParameters":{"section":"news","topic":"sport"}}'
|
|
243
|
+
payload='{"articleId":"123"}'
|
|
244
|
+
></video-item>
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
For `action` (which contains a function), set it via JavaScript:
|
|
248
|
+
|
|
249
|
+
```js
|
|
250
|
+
const player = document.querySelector('video-item')
|
|
251
|
+
player.action = { icon: '<svg.../>', label: 'Save', onClick: () => {} }
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### Listening to events
|
|
255
|
+
|
|
256
|
+
```js
|
|
257
|
+
const player = document.querySelector('video-item')
|
|
258
|
+
player.addEventListener('state-change', (e) => {
|
|
259
|
+
console.log(e.detail)
|
|
260
|
+
})
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## Peer Dependencies
|
|
266
|
+
|
|
267
|
+
| Package | Version |
|
|
268
|
+
| ---------- | ---------------------- |
|
|
269
|
+
| `video.js` | `>=8` |
|
|
270
|
+
| `vue` | `>=3` (Vue usage only) |
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Fragment as e,Transition as t,computed as n,createBlock as r,createCommentVNode as i,createElementBlock as a,createElementVNode as o,createStaticVNode as s,createVNode as c,defineComponent as l,inject as u,mergeProps as d,nextTick as f,normalizeClass as p,normalizeProps as m,normalizeStyle as h,onBeforeUnmount as g,onMounted as _,openBlock as v,provide as y,reactive as b,ref as x,toDisplayString as S,toRef as C,unref as w,watch as T,withCtx as E,withModifiers as D}from"vue";import O from"video.js";const k={},A=[{test:e=>/youtu\.be|youtube\.com/.test(e),key:`youtube`,tech:`Youtube`,type:`video/youtube`,load:()=>import(`./youtube-CNXFp2IX.mjs`)},{test:e=>/vimeo\.com|player\.vimeo\.com/.test(e),key:`vimeo`,tech:`Vimeo`,type:`video/vimeo`,load:()=>import(`./vimeo-BHc3ewpt.mjs`)},{test:e=>/dailymotion\.com|dai\.ly/.test(e),key:`dailymotion`,tech:`Dailymotion`,type:`video/dailymotion`,load:()=>import(`./dailymotion-BgVShGbi.mjs`)},{test:e=>/cdn\.jwplayer\.com/.test(e)||e.startsWith(`jwplayer://`),key:`jwplayer`,tech:null,type:`video/jwplayer`,load:()=>import(`./jwplayer-C3SeHLno.mjs`)},{test:e=>e.startsWith(`brightcove://`),key:`brightcove`,tech:null,type:`video/brightcove`,load:()=>import(`./brightcove-CQ7KZDbD.mjs`)}];function j(e){return A.find(t=>t.test(e))?.key??`html5`}async function M(e){let t=A.find(t=>t.test(e));if(!t)return{tech:null,type:null,adTagUrl:null};k[t.key]||(k[t.key]=t.load());let n=null,{prefetchConfig:r}=await k[t.key];return r&&(n=(await r(e).catch(()=>null))?.adTagUrl??null),{tech:t.tech,type:t.type,adTagUrl:n}}const N=new Set([`Youtube`,`Vimeo`,`Dailymotion`]);function P(e){return!N.has(e)}function F(){return window.google?.ima?Promise.resolve():new Promise((e,t)=>{let n=document.createElement(`script`);n.src=`https://imasdk.googleapis.com/js/sdkloader/ima3.js`,n.onload=e,n.onerror=()=>t(Error(`Failed to load Google IMA SDK`)),document.head.appendChild(n)})}async function ee(e,t){return!t||!P(e)?!1:(await F(),await import(`videojs-contrib-ads`),await import(`videojs-ima`),!0)}function te(e,t,n={}){e.ima({adTagUrl:t,showControlsForJSAds:!1,...n})}function ne(){return/iPad|iPhone|iPod/.test(navigator.userAgent)||/Mac/.test(navigator.userAgent)&&navigator.maxTouchPoints>1}function re(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled)}function ie(e){(e.requestFullscreen||e.webkitRequestFullscreen)?.call(e)}function I(){(document.exitFullscreen||document.webkitExitFullscreen)?.call(document)}function L(e,t){O.registerTech(e,t)}function R(e){let[t,n]=e.split(`:`).map(Number);return{isPortrait:n>t,cssRatio:`${t}/${n}`}}function ae(e){return!e||isNaN(e)?`0:00`:`${Math.floor(e/60)}:${String(Math.floor(e%60)).padStart(2,`0`)}`}function oe(e){return e.filter(e=>e.src&&(e.type===`application/x-mpegURL`||e.type===`video/mp4`)).sort((e,t)=>e.type===`application/x-mpegURL`?-1:1)}const z=new Set;function se(e){return z.add(e),()=>z.delete(e)}function ce(e){z.forEach(t=>t!==e&&t())}const B=`video-select`,V=`video-toggle`,H=`video-state`,le=`fullscreen-pending`,ue=`fullscreen-pending-done`;function U(){try{return JSON.parse(localStorage.getItem(`player:positions`)??`[]`)}catch{return[]}}function W(e){localStorage.setItem(`player:positions`,JSON.stringify(e))}function G(e,t){if(t<5)return;let n=U().filter(t=>t.url!==e);n.unshift({url:e,time:t}),W(n.slice(0,5))}function de(e){return U().find(t=>t.url===e)?.time??null}function fe(e){W(U().filter(t=>t.url!==e))}function K(e,t,r){let i=null,a=!1,o=null,s=null,c=x(!1),l=x(!1),u=x(!1),d=x(!1),f=x(0),p=x(0),m=x(0),h=x(1),v=x(t.muted??t.autoplay??!1),y=x(!1),b=x(t.playbackRate??1),S=x(!1),C=x(!1),w=x(!1),E=x(``),D=x(!1),k=x(!1),A=x(!1),j=n(()=>p.value?f.value/p.value*100:0),N=n(()=>Math.max(m.value,j.value)),F=()=>i.tech({IWillNotUseThisInPlugins:!0});function ne(){let e=F();if(typeof e?.enterFullscreen==`function`){e.enterFullscreen();return}let t=e?.el();if(typeof t?.webkitEnterFullscreen==`function`){t.webkitEnterFullscreen();return}i.requestFullscreen()}function re(){let e=F();typeof e?.exitFullscreen==`function`?e.exitFullscreen():i.exitFullscreen()}function ie(){i&&(k.value?re():ne())}function I(){let e=document;k.value=!!(document.fullscreenElement||e.webkitFullscreenElement)}function L(e,n={}){r(`state-change`,{type:e,currentTime:f.value,duration:p.value,src:t.videoUrl,...n,payload:t.payload})}function R(){!i||!l.value||(i.paused()?i.play():i.pause())}function oe(e){i?.currentTime(p.value*(e/100))}function z(){i?.muted(!i.muted())}function B(e){i&&(i.volume(e),i.muted(e===0))}function V(){y.value=!y.value}function H(e){i&&(i.playbackRate(e),b.value=e)}function U(){i.ready(()=>{l.value=!0,S.value=!!F()?.featuresPlaybackRate});let e=()=>{let e=i.duration();e>0&&isFinite(e)&&(p.value=e)};i.on([`adstart`,`ads-pod-started`],()=>{ce(W),u.value=!0,L(`adstart`)}),i.on([`adend`,`ads-pod-ended`],()=>{u.value=!1,L(`adend`)}),i.on(`play`,()=>{if(ce(W),C.value=!0,c.value=!0,!a){let e=de(t.videoUrl);e&&i.currentTime(e),a=!0}L(`play`)}),i.on(`pause`,()=>{c.value=!1,G(t.videoUrl,i.currentTime()),L(`pause`)}),i.on(`ended`,()=>{c.value=!1,y.value?(i.currentTime(0),i.play()):(fe(t.videoUrl),L(`ended`))}),i.on(`seeked`,()=>{L(`seeked`)}),i.on(`error`,()=>{let e=i.error();E.value=e?.message||`This video could not be played.`,w.value=!0,l.value=!0,L(`error`,{error:e})}),i.on(`waiting`,()=>{d.value=!0}),i.on(`playing`,()=>{d.value=!1}),i.on(`canplay`,()=>{d.value=!1}),i.on(`timeupdate`,()=>{f.value=i.currentTime(),p.value||e()}),i.on(`durationchange`,e),i.on(`progress`,()=>{let e=i.duration();m.value=e?i.bufferedEnd()/e*100:0}),i.on(`volumechange`,()=>{let e=i.muted();h.value=i.volume(),v.value=e,C.value&&L(`volumechange`,{isMuted:e})}),i.on(`ratechange`,()=>{let e=i.playbackRate();b.value=e,C.value&&L(`ratechange`,{playbackRate:e})}),i.on(`fullscreenchange`,()=>{k.value=i.isFullscreen()}),i.on(le,()=>{A.value=!0}),i.on(ue,()=>{A.value=!1})}function W(){i?.pause()}T(()=>t.muted,e=>{!i||e===void 0||i.muted(e)}),T(()=>t.playbackRate,e=>{!i||e===void 0||i.playbackRate(e)}),_(async()=>{document.addEventListener(`fullscreenchange`,I),document.addEventListener(`webkitfullscreenchange`,I),document.addEventListener(`visibilitychange`,K);let{tech:n,type:r,adTagUrl:a}=await M(t.videoUrl),c=n?[n,`Html5`]:[`Html5`],l=t.adTagUrl||a||``,u=await ee(n??`Html5`,l);if(!e.value)return;let d={src:t.videoUrl,...r&&{type:r}};D.value=!!(t.nativeUi&&!P(n??``)),i=O(e.value,{techOrder:c,controls:!1,fluid:!0,aspectRatio:t.aspectRatio??`16:9`,poster:t.poster||``,playsinline:!0,autoplay:t.autoplay,muted:t.muted??t.autoplay,playbackRate:b.value,adTagUrl:l,youtube:{nativeUi:D.value},vimeo:{nativeUi:D.value},dailymotion:{nativeUi:D.value},...!u&&{sources:[d]},...t.techOptions}),u&&(te(i,l,t.imaOptions??{}),i.src(d)),o=se(W),U(),s=new IntersectionObserver(([e])=>{!e.isIntersecting&&i&&!i.paused()&&!k.value&&i.pause()},{threshold:.1}),e.value&&s.observe(e.value)});function K(){document.visibilityState===`hidden`&&i&&G(t.videoUrl,i.currentTime())}return g(()=>{i&&G(t.videoUrl,i.currentTime()),o?.(),s?.disconnect(),document.removeEventListener(`visibilitychange`,K),document.removeEventListener(`fullscreenchange`,I),document.removeEventListener(`webkitfullscreenchange`,I),i?.dispose(),i=null}),{isPlaying:c,isReady:l,isAdPlaying:u,isBuffering:d,current:f,total:p,vol:h,isMuted:v,isLooping:y,playbackRate:b,hasStarted:C,isError:w,errorMessage:E,progress:j,bufferedDisplay:N,isFullscreen:k,isFullscreenPending:A,fmt:ae,togglePlay:R,seek:oe,toggleMute:z,setVolume:B,toggleFullscreen:ie,toggleLoop:V,setPlaybackRate:H,supportsPlaybackRate:S,nativeUi:D}}function pe(e){let t=x(!0),n=x(!1),r=null;function i(e=3500){clearTimeout(r??void 0),r=setTimeout(()=>{t.value=!1,n.value=!1},e)}function a(){clearTimeout(r??void 0)}function o(){n.value=!0,t.value=!0,i()}function s(){n.value=!1,e.value&&i()}function c(){e.value&&i()}function l(){t.value=!0,e.value&&i()}function u(){t.value=!0,i()}function d(){e.value&&i(600)}return T(e,e=>{e?i():(clearTimeout(r??void 0),t.value=!0)}),g(()=>clearTimeout(r??void 0)),{showHUD:t,isOpen:n,scheduleHide:i,pauseHide:a,onVideoTap:l,onMouseMove:u,onMouseLeave:d,openControls:o,closeControls:s,keepOpen:c}}const q=Symbol(`player`),J=Symbol(`hud`),Y=Symbol(`action`);var X=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n};const me={},he={viewBox:`0 0 24 24`,fill:`currentColor`};function ge(e,t){return v(),a(`svg`,he,[...t[0]||=[o(`path`,{d:`M8 5v14l11-7z`},null,-1)]])}var _e=X(me,[[`render`,ge]]);const ve={},ye={viewBox:`0 0 24 24`,fill:`currentColor`};function be(e,t){return v(),a(`svg`,ye,[...t[0]||=[o(`path`,{d:`M6 19h4V5H6v14zm8-14v14h4V5h-4z`},null,-1)]])}var xe=X(ve,[[`render`,be]]);const Se=[`aria-label`];var Z=X(l({__name:`PlayPauseButton`,props:{isPlaying:{type:Boolean,required:!0},size:{type:String,default:`sm`}},emits:[`toggle-play`],setup(e){return(t,n)=>(v(),a(`button`,{class:p([`ppbtn`,`ppbtn--${e.size}`]),"aria-label":e.isPlaying?`Pause`:`Play`,onClick:n[0]||=D(e=>t.$emit(`toggle-play`),[`stop`])},[e.isPlaying?(v(),r(xe,{key:0})):(v(),r(_e,{key:1}))],10,Se))}}),[[`__scopeId`,`data-v-85902525`]]);const Ce={},we={viewBox:`0 0 24 24`,fill:`currentColor`};function Te(e,t){return v(),a(`svg`,we,[...t[0]||=[o(`path`,{d:`M3 9v6h4l5 5V4L7 9H3zm13.5 3A4.5 4.5 0 0 0 14 7.97v8.05c1.48-.73 2.5-2.25 2.5-4.02z`},null,-1)]])}var Q=X(Ce,[[`render`,Te]]);const Ee={},De={viewBox:`0 0 24 24`,fill:`currentColor`};function Oe(e,t){return v(),a(`svg`,De,[...t[0]||=[o(`path`,{d:`M16.5 12A4.5 4.5 0 0 0 14 7.97v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51A8.796 8.796 0 0 0 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06A8.99 8.99 0 0 0 17.73 18L19 19.27 20.27 18 5.27 3 4.27 3zM12 4L9.91 6.09 12 8.18V4z`},null,-1)]])}var $=X(Ee,[[`render`,Oe]]);const ke={},Ae={viewBox:`0 0 24 24`,fill:`currentColor`};function je(e,t){return v(),a(`svg`,Ae,[...t[0]||=[o(`path`,{d:`M7 7h10v3l4-4-4-4v3H5v6h2V7zm10 10H7v-3l-4 4 4 4v-3h12v-6h-2v4z`},null,-1)]])}var Me=X(ke,[[`render`,je]]);const Ne={},Pe={viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`};function Fe(e,t){return v(),a(`svg`,Pe,[...t[0]||=[s(`<line x1="4" y1="6" x2="20" y2="6"></line><line x1="4" y1="12" x2="20" y2="12"></line><line x1="4" y1="18" x2="20" y2="18"></line><circle cx="9" cy="6" r="2.5" fill="currentColor" stroke="none"></circle><circle cx="15" cy="12" r="2.5" fill="currentColor" stroke="none"></circle><circle cx="9" cy="18" r="2.5" fill="currentColor" stroke="none"></circle>`,6)]])}var Ie=X(Ne,[[`render`,Fe]]);const Le={class:`hud`},Re=[`aria-label`],ze=[`aria-label`],Be=[`aria-label`,`innerHTML`];var Ve=X(l({__name:`HudButtons`,setup(t){let s=u(q),l=u(J),d=u(Y),f=n(()=>d?.value??null),m=n(()=>!!f.value&&typeof f.value==`object`),h=n(()=>m.value?f.value:null),g=n(()=>f.value===`mute`?s.isMuted?`Unmute`:`Mute`:f.value===`loop`?s.isLooping?`Disable loop`:`Loop`:``);function _(){f.value===`mute`?s.toggleMute():f.value===`loop`&&s.toggleLoop()}return(t,n)=>(v(),a(`div`,Le,[i(` Built-in: mute `),f.value===`mute`?(v(),a(`button`,{key:0,class:p([`hud__btn`,{"hud__btn--active":w(s).isMuted}]),"aria-label":g.value,onClick:D(_,[`stop`])},[!w(s).isMuted&&w(s).vol>0?(v(),r(Q,{key:0})):(v(),r($,{key:1}))],10,Re)):f.value===`loop`?(v(),a(e,{key:1},[i(` Built-in: loop `),o(`button`,{class:p([`hud__btn`,{"hud__btn--active":w(s).isLooping}]),"aria-label":g.value,onClick:D(_,[`stop`])},[c(Me)],10,ze)],2112)):m.value&&h.value?(v(),a(e,{key:2},[i(` Custom action `),o(`button`,{class:`hud__btn`,"aria-label":h.value.label,onClick:n[0]||=D(e=>h.value.onClick(),[`stop`]),innerHTML:h.value.icon},null,8,Be)],2112)):(v(),a(e,{key:3},[i(` No action — spacer keeps layout balanced `),n[2]||=o(`div`,{class:`hud__spacer`},null,-1)],2112)),c(Z,{"is-playing":w(s).isPlaying,size:`lg`,onTogglePlay:w(s).togglePlay},null,8,[`is-playing`,`onTogglePlay`]),o(`button`,{class:`hud__btn`,"aria-label":`Show controls`,onClick:n[1]||=D((...e)=>w(l).openControls&&w(l).openControls(...e),[`stop`])},[c(Ie)])]))}}),[[`__scopeId`,`data-v-a6d118e7`]]);const He={},Ue={viewBox:`0 0 24 24`,fill:`currentColor`};function We(e,t){return v(),a(`svg`,Ue,[...t[0]||=[o(`path`,{d:`M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z`},null,-1)]])}var Ge=X(He,[[`render`,We]]);const Ke={},qe={viewBox:`0 0 24 24`,fill:`currentColor`};function Je(e,t){return v(),a(`svg`,qe,[...t[0]||=[o(`path`,{d:`M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z`},null,-1)]])}var Ye=X(Ke,[[`render`,Je]]);const Xe={},Ze={viewBox:`0 0 24 24`,fill:`currentColor`};function Qe(e,t){return v(),a(`svg`,Ze,[...t[0]||=[o(`path`,{d:`M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z`},null,-1)]])}var $e=X(Xe,[[`render`,Qe]]);const et={},tt={viewBox:`0 0 24 24`,fill:`currentColor`};function nt(e,t){return v(),a(`svg`,tt,[...t[0]||=[o(`path`,{d:`M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z`},null,-1)]])}var rt=X(et,[[`render`,nt]]);const it={class:`controls__vol-header`},at=[`aria-label`],ot={class:`controls__vol-body`},st=[`value`],ct={class:`controls__vol-pct`},lt=[`value`],ut={class:`controls__row`},dt={class:`controls__play-wrap`},ft={key:0,class:`controls__buf-spinner`},pt={class:`controls__time`},mt={key:2,class:`controls__fs-wrap`},ht={key:0,class:`controls__fs-spinner`},gt=[`aria-label`];var _t=X(l({__name:`ControlsPopup`,setup(t){let s=u(q),l=u(J),d=u(`compact`),m=x(!1),_=x(null);g(()=>{m.value=!1});function y(e){if(!document.startViewTransition||!_.value){e();return}_.value.style.viewTransitionName=`controls-popup`,document.startViewTransition(async()=>{e(),await f()}).finished.finally(()=>{_.value&&(_.value.style.viewTransitionName=``)})}let b=n(()=>s.isMuted?0:Math.round(s.vol*100)),C=null;function T(){C=setTimeout(()=>{C=null,y(()=>{m.value=!0})},350)}function E(){C&&(clearTimeout(C),C=null,s.toggleMute())}function O(){clearTimeout(C),C=null}function k(e){s.seek(Number(e.target.value))}function A(e){s.setVolume(Number(e.target.value)/100)}let j=[.5,.75,1,1.25,1.5,2];function M(){let e=j[(j.indexOf(s.playbackRate)+1)%j.length];s.setPlaybackRate(e)}function N(e){return e===1?`1×`:`${e}×`}return(t,n)=>(v(),a(`div`,{ref_key:`popupEl`,ref:_,class:p([`controls`,{"controls--fs":w(s).isFullscreen}]),onMousemove:n[14]||=D((...e)=>w(l).keepOpen&&w(l).keepOpen(...e),[`stop`])},[m.value?(v(),a(e,{key:0},[o(`div`,it,[o(`button`,{class:`controls__btn`,"aria-label":`Back`,onClick:n[0]||=e=>y(()=>m.value=!1)},[c(Ye)]),n[15]||=o(`span`,{class:`controls__vol-label`},`Volume`,-1),o(`button`,{class:`controls__btn`,"aria-label":w(s).isMuted?`Unmute`:`Mute`,onClick:n[1]||=e=>w(s).toggleMute()},[!w(s).isMuted&&w(s).vol>0?(v(),r(Q,{key:0})):(v(),r($,{key:1}))],8,at)]),o(`div`,ot,[o(`input`,{type:`range`,min:`0`,max:`100`,step:`1`,value:b.value,class:`controls__vol-slider`,style:h({"--v":b.value+`%`}),"aria-label":`Volume`,onInput:A,onMousedown:n[2]||=e=>w(l).pauseHide(),onMouseup:n[3]||=e=>w(l).scheduleHide(),onTouchstartPassive:n[4]||=e=>w(l).pauseHide(),onTouchend:n[5]||=e=>w(l).scheduleHide()},null,44,st),o(`span`,ct,S(b.value)+`%`,1)])],64)):(v(),a(e,{key:1},[w(d)?i(`v-if`,!0):(v(),a(`input`,{key:0,type:`range`,min:`0`,max:`100`,value:w(s).progress,class:`controls__seek`,style:h({"--p":w(s).progress+`%`,"--b":w(s).bufferedDisplay+`%`}),onInput:k,onMousedown:n[6]||=e=>w(l).pauseHide(),onMouseup:n[7]||=e=>w(l).scheduleHide(),onTouchstartPassive:n[8]||=e=>w(l).pauseHide(),onTouchend:n[9]||=e=>w(l).scheduleHide()},null,44,lt)),o(`div`,ut,[o(`div`,dt,[w(s).isBuffering?(v(),a(`div`,ft)):(v(),r(Z,{key:1,"is-playing":w(s).isPlaying,size:`sm`,onTogglePlay:n[10]||=e=>w(s).togglePlay()},null,8,[`is-playing`]))]),o(`span`,pt,S(w(s).fmt(w(s).current))+` / `+S(w(s).fmt(w(s).total)),1),!w(d)&&w(s).supportsPlaybackRate?(v(),a(`button`,{key:0,class:p([`controls__btn controls__btn--rate`,{"controls__btn--active":w(s).playbackRate!==1}]),"aria-label":`Playback rate`,onClick:M},S(N(w(s).playbackRate)),3)):i(`v-if`,!0),w(d)?i(`v-if`,!0):(v(),a(`button`,{key:1,class:p([`controls__btn`,{"controls__btn--active":w(s).isLooping}]),"aria-label":`Toggle loop`,onClick:n[11]||=e=>w(s).toggleLoop()},[c(Me)],2)),o(`button`,{class:`controls__btn`,"aria-label":`Volume`,onMousedown:T,onMouseup:E,onMouseleave:O,onTouchstartPassive:T,onTouchend:D(E,[`prevent`]),onTouchcancel:O},[!w(s).isMuted&&w(s).vol>0?(v(),r(Q,{key:0})):(v(),r($,{key:1}))],32),w(d)?i(`v-if`,!0):(v(),a(`div`,mt,[w(s).isFullscreenPending?(v(),a(`div`,ht)):(v(),a(`button`,{key:1,class:`controls__btn`,"aria-label":w(s).isFullscreen?`Exit fullscreen`:`Fullscreen`,onClick:n[12]||=e=>w(s).toggleFullscreen()},[w(s).isFullscreen?(v(),r(rt,{key:0})):(v(),r($e,{key:1}))],8,gt))])),o(`button`,{class:`controls__btn controls__btn--close`,"aria-label":`Close`,onClick:n[13]||=e=>w(l).closeControls()},[c(Ge)])])],64))],34))}}),[[`__scopeId`,`data-v-5712aad4`]]);const vt={key:0,class:`overlay__spinner`},yt={key:0,class:`overlay__error`};var bt=X(l({__name:`PlayerOverlay`,setup(n){let r=u(q),s=u(J);return(n,l)=>(v(),a(e,null,[i(` Inactive until content has started so platform ad UIs (skip buttons etc.) remain reachable `),o(`div`,{class:`overlay__tap-capture`,style:h({pointerEvents:!w(r).hasStarted||w(r).isAdPlaying?`none`:void 0}),onClick:l[0]||=(...e)=>w(s).onVideoTap&&w(s).onVideoTap(...e),onTouchend:l[1]||=D((...e)=>w(s).onVideoTap&&w(s).onVideoTap(...e),[`prevent`,`stop`])},null,36),c(t,{name:`fade`},{default:E(()=>[!w(r).isReady&&!w(r).isError?(v(),a(`div`,vt,[...l[3]||=[o(`div`,{class:`overlay__spinner-ring`},null,-1)]])):i(`v-if`,!0)]),_:1}),c(t,{name:`fade`},{default:E(()=>[w(r).isError?(v(),a(`div`,yt,[o(`p`,null,S(w(r).errorMessage||`This video could not be played.`),1)])):i(`v-if`,!0)]),_:1}),i(` Hidden in fullscreen while the controls popup is open `),o(`div`,{class:p([`overlay__hud`,{"overlay__hud--visible":w(s).showHUD&&w(r).isReady&&!w(r).isError&&!(w(s).isOpen&&w(r).isFullscreen)}])},[c(Ve)],2),c(t,{name:`popup`},{default:E(()=>[w(s).isOpen&&w(r).isReady&&!w(r).isError?(v(),a(`div`,{key:0,class:p([`overlay__popup`,{"overlay__popup--fs":w(r).isFullscreen}]),onClick:l[2]||=D(()=>{},[`stop`])},[c(_t)],2)):i(`v-if`,!0)]),_:1})],64))}}),[[`__scopeId`,`data-v-f3307b98`]]);const xt={class:`player`},St={"data-vjs-player":``},Ct={key:1,class:`player__native-play`};var wt=X(l({__name:`VideoPlayer`,props:{videoUrl:{type:String,required:!0},title:{type:String,required:!1,default:``},poster:{type:String,required:!1,default:``},aspectRatio:{type:String,required:!1,default:`16:9`},platform:{type:String,required:!1,default:``},techOptions:{type:Object,required:!1,default:()=>({})},adTagUrl:{type:String,required:!1,default:``},imaOptions:{type:Object,required:!1},autoplay:{type:Boolean,required:!1,default:!1},muted:{type:Boolean,required:!1},playbackRate:{type:Number,required:!1},nativeUi:{type:Boolean,required:!1,default:!1},autoStage:{type:Boolean,required:!1,default:!1},lazy:{type:Boolean,required:!1,default:!0},payload:{type:Object,required:!1,default:()=>({})},action:{type:[String,Object,null],required:!1,default:null}},emits:[`state-change`],setup(e,{expose:t,emit:n}){let s=e,l=n,u=x(null),d=b(K(u,s,l)),f=b(pe(C(d,`isPlaying`)));y(q,d),y(J,f),y(Y,C(s,`action`));let{isPortrait:m,cssRatio:g}=R(s.aspectRatio);return t(d),(e,t)=>(v(),a(`div`,xt,[o(`div`,{class:p([`player__shell`,{"player__shell--portrait":w(m)}]),style:h({aspectRatio:w(g)}),onMousemove:t[0]||=e=>f.onMouseMove(),onContextmenuCapture:t[1]||=D(()=>{},[`prevent`]),onMouseleave:t[2]||=e=>f.onMouseLeave()},[o(`div`,St,[o(`video`,{ref_key:`videoEl`,ref:u,class:`video-js`,playsinline:``},null,512),d.nativeUi?i(`v-if`,!0):(v(),r(bt,{key:0})),d.nativeUi&&!d.hasStarted?(v(),a(`div`,Ct,[c(Z,{"is-playing":!1,size:`lg`,onTogglePlay:d.togglePlay},null,8,[`onTogglePlay`])])):i(`v-if`,!0)])],38)]))}}),[[`__scopeId`,`data-v-4ab3cf75`]]);const Tt=x(0),Et=n(()=>Tt.value>0);function Dt(){Tt.value++}function Ot(){Tt.value--}const kt=[`src`],At={class:`stage__idle-body`},jt={class:`stage__idle-btn`},Mt={class:`stage__idle-title`},Nt={key:1,class:`stage__idle-empty`};var Pt=X(l({__name:`VideoStage`,emits:[`state-change`],setup(t,{emit:n}){let s=n,l=x(null),u=x(null),f=x(!1),m=x(!1),b=x(null),C=x(null),w=x(!1),E=x(null);y(`compact`,w);let O=null;T(w,e=>{E.value=e&&C.value?C.value.offsetHeight:null});function k(){O?.disconnect(),b.value&&(O=new IntersectionObserver(([e])=>{w.value=!e.isIntersecting},{threshold:1}),O.observe(b.value))}T(b,k);function A(){u.value&&(u.value={...u.value,autoplay:!0},f.value=!0)}function j(){u.value=null,f.value=!1,m.value=!1,w.value=!1,E.value=null,M()}function M(){window.dispatchEvent(new CustomEvent(H,{detail:{currentVideoUrl:u.value?.videoUrl??null,isPlaying:m.value}}))}function N(e){let t=e.detail;if(u.value?.videoUrl===t.videoUrl&&f.value){l.value?.togglePlay();return}u.value=t,f.value=!1,m.value=!1,M(),f.value=!0}function P(e){let t=e.detail;!u.value||t.videoUrl!==u.value.videoUrl||(f.value?l.value?.togglePlay():(u.value={...u.value,autoplay:!0},f.value=!0))}function F(e){e.type===`play`&&(m.value=!0),(e.type===`pause`||e.type===`ended`)&&(m.value=!1),M(),s(`state-change`,e)}return _(()=>{Dt(),window.addEventListener(B,N),window.addEventListener(V,P)}),g(()=>{Ot(),window.removeEventListener(B,N),window.removeEventListener(V,P),O?.disconnect()}),(t,n)=>(v(),a(`div`,{ref_key:`wrapperEl`,ref:b,class:`stage-wrapper`,style:h(E.value?{height:E.value+`px`}:{})},[o(`div`,{ref_key:`stageEl`,ref:C,class:p([`stage`,{"stage--minified":w.value&&u.value&&f.value}])},[w.value&&u.value&&f.value?(v(),a(`button`,{key:0,class:`stage__dismiss`,"aria-label":`Close`,onClick:D(j,[`stop`])},[c(Ge)])):i(`v-if`,!0),u.value&&f.value?(v(),r(wt,d({ref_key:`playerRef`,ref:l,key:u.value.videoUrl},u.value,{onStateChange:F}),null,16)):(v(),a(`div`,{key:2,class:`stage__idle`,style:h({aspectRatio:u.value?.aspectRatio||`16:9`}),onClick:A},[u.value?.poster?(v(),a(`img`,{key:0,src:u.value.poster,class:`stage__idle-poster`},null,8,kt)):i(`v-if`,!0),n[0]||=o(`div`,{class:`stage__idle-scrim`},null,-1),o(`div`,At,[u.value?(v(),a(e,{key:0},[o(`div`,jt,[c(_e)]),o(`p`,Mt,S(u.value.title),1)],64)):(v(),a(`p`,Nt,`Select a video to play`))])],4))],2)],4))}}),[[`__scopeId`,`data-v-fb8c86cf`]]);const Ft={class:`placeholder`},It=[`src`,`alt`],Lt={class:`placeholder__btn-wrap`},Rt={key:2,class:`placeholder__footer`},zt={class:`placeholder__title`};var Bt=X(l({__name:`VideoPlaceholder`,props:{videoUrl:{type:String,required:!0},title:{type:String,required:!1,default:``},poster:{type:String,required:!1,default:``},aspectRatio:{type:String,required:!1,default:`16:9`},platform:{type:String,required:!1,default:``},techOptions:{type:Object,required:!1,default:()=>({})},adTagUrl:{type:String,required:!1,default:``},imaOptions:{type:Object,required:!1},autoplay:{type:Boolean,required:!1,default:!1},muted:{type:Boolean,required:!1},playbackRate:{type:Number,required:!1},nativeUi:{type:Boolean,required:!1,default:!1},autoStage:{type:Boolean,required:!1,default:!1},lazy:{type:Boolean,required:!1},payload:{type:Object,required:!1,default:()=>({})},action:{type:[String,Object,null],required:!1,default:null}},setup(e){let t=e,{isPortrait:n,cssRatio:r}=R(t.aspectRatio),s=x(!1),l=x(!1);function u(e){let n=e.detail;s.value=n.currentVideoUrl===t.videoUrl,l.value=s.value&&n.isPlaying}function d(e){window.dispatchEvent(new CustomEvent(B,{detail:{...t,...e!==void 0&&{autoplay:e}}}))}function f(){d(!0)}return _(()=>{window.addEventListener(H,u),t.autoStage&&d()}),g(()=>window.removeEventListener(H,u)),(t,u)=>(v(),a(`div`,Ft,[o(`div`,{class:p([`placeholder__shell`,{"placeholder__shell--portrait":w(n),"placeholder__shell--active":s.value}]),style:h({aspectRatio:w(r)}),onClick:f},[e.poster?(v(),a(`img`,{key:0,class:`placeholder__poster`,src:e.poster,alt:e.title},null,8,It)):i(`v-if`,!0),u[0]||=o(`div`,{class:`placeholder__scrim`},null,-1),e.platform?(v(),a(`span`,{key:1,class:p([`placeholder__badge`,`badge--${e.platform}`])},S(e.platform),3)):i(`v-if`,!0),o(`div`,Lt,[c(Z,{"is-playing":s.value&&l.value,size:`lg`,onTogglePlay:f},null,8,[`is-playing`])]),e.title?(v(),a(`div`,Rt,[o(`p`,zt,S(e.title),1)])):i(`v-if`,!0)],6)]))}}),[[`__scopeId`,`data-v-dbcb4f82`]]),Vt=l({__name:`VideoItem`,props:{videoUrl:{type:String,required:!0},title:{type:String,required:!1},poster:{type:String,required:!1},aspectRatio:{type:String,required:!1},platform:{type:String,required:!1},techOptions:{type:Object,required:!1},adTagUrl:{type:String,required:!1},imaOptions:{type:Object,required:!1},autoplay:{type:Boolean,required:!1},muted:{type:Boolean,required:!1},playbackRate:{type:Number,required:!1},nativeUi:{type:Boolean,required:!1},autoStage:{type:Boolean,required:!1},lazy:{type:Boolean,required:!1,default:!0},payload:{type:Object,required:!1},action:{type:[String,Object,null],required:!1,default:null}},emits:[`state-change`],setup(t,{emit:n}){let i=t,o=n,s=x(!1);return(t,n)=>w(Et)?(v(),r(Bt,m(d({key:0},t.$props)),null,16)):(v(),a(e,{key:1},[i.lazy&&!s.value&&!i.autoplay?(v(),r(Bt,d({key:0},t.$props,{onClickCapture:n[0]||=e=>s.value=!0}),null,16)):(v(),r(wt,d({key:1},i,{autoplay:s.value||i.autoplay,onStateChange:n[1]||=e=>o(`state-change`,e)}),null,16,[`autoplay`]))],64))}});export{Y as a,le as c,ne as d,oe as f,j as g,re as h,wt as i,ue as l,ie as m,Bt as n,J as o,L as p,Pt as r,q as s,Vt as t,I as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{f as e}from"./VideoItem-C2dc1Nw7.mjs";import t from"video.js";const n={};function r(e){let t=e.match(/^brightcove:\/\/([^/]+)\/([^/]+)\/([^/]+)\/([^/]+)$/);return t?{accountId:t[1],playerId:t[2],embed:t[3],videoId:t[4]}:null}function i(e){return(e?.plugins??[]).find(e=>e.name===`ima3`)?.options?.serverUrl??null}async function a(e,t,r,a){let o=`${e}/${t}_${r}`;if(n[o])return n[o];let s=await fetch(`https://players.brightcove.net/${e}/${t}_${r}/config.json`);if(!s.ok)throw Error(`Brightcove: could not load player config (${s.status})`);let c=await s.json(),l=a??c?.video_cloud?.policy_key;if(!l)throw Error(`Brightcove: policy_key not found in player config`);let u={policyKey:l,adTagUrl:i(c)};return n[o]=u,u}async function o(e,t){let n=r(e);if(!n)return null;let{accountId:i,playerId:o,embed:s}=n;return a(i,o,s,t)}async function s(t,n,r){let i=await fetch(`https://edge.api.brightcove.com/playback/v1/accounts/${t}/videos/${n}`,{headers:{Accept:`application/json;pk=${r}`}});if(!i.ok)throw Error(`Brightcove Playback API error: ${i.status}`);let a=await i.json(),o=e(a.sources||[]);if(!o.length)throw Error(`Brightcove: no playable sources found`);return{sources:o.map(e=>({src:e.src,type:e.type})),poster:a.poster??a.thumbnail??null}}t.use(`video/brightcove`,e=>({setSource(n,i){let o=r(n.src);if(!o){i(Error(`Brightcove: invalid src — expected "brightcove://accountId/playerId/embed/videoId"`),n);return}let{accountId:c,playerId:l,embed:u,videoId:d}=o,f=e.options_?.brightcove?.policyKey;(async()=>{try{let{policyKey:n}=await a(c,l,u,f);t.log(`Brightcove: resolved policy key, fetching sources…`);let{sources:r,poster:o}=await s(c,d,n);t.log(`Brightcove: sources resolved`,r),o&&!e.poster()&&e.poster(o),i(null,r[0])}catch(e){t.log.error(`Brightcove error:`,e.message),i(e,n)}})()}}));export{o as prefetchConfig};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as e,d as t,h as n,l as r,p as i,u as a}from"./VideoItem-C2dc1Nw7.mjs";import{t as o}from"./loadScript-Du6JsTc2.mjs";import s from"video.js";const c=s.getTech(`Tech`);var l=class i extends c{constructor(e,t){super(e,t),this._currentTime=0,this._duration=0,this._volume=1,this._muted=!1,this._paused=!0,this._seeking=!1,this._dm=null,this.setSrc(this.options_.source),this.setTimeout(()=>{this.el_&&(this.el_.parentNode.classList.add(`vjs-dailymotion`),this.initPlayer())})}createEl(){let e=document.createElement(`div`);return e.setAttribute(`id`,this.options_.techId),e.setAttribute(`class`,`vjs-tech`),e.setAttribute(`style`,`position:absolute;top:0;left:0;right:0;bottom:0;overflow:hidden`),e}async initPlayer(){let e=this.options_,t=e.source?.dailymotion?.playerId??e.playerId;if(!t){s.log.error(`Dailymotion Tech: dailymotion.playerId option is required`);return}if(!this.videoId){s.log.error(`Dailymotion Tech: could not parse video ID from source URL`);return}this._playerId=t;let n=this.el_?.parentNode;for(;n&&!n.classList?.contains(`player-shell`);)n=n.parentNode;this._shell=n;try{let n=await o(`https://geo.dailymotion.com/libs/player/${t}.js`,t).then(()=>window.dailymotion);if(!this.el_)return;this._dm_sdk=n;let r=await n.createPlayer(this.options_.techId,{video:this.videoId,params:{autoplay:!!e.autoplay,mute:!!e.muted}});if(!this.el_)return;this._dm=r;let{events:i}=this._dm_sdk;this.triggerReady(),this.playOnReady&&this.play(),r.on(i.PLAYER_CRITICALPATHREADY,e=>{let t=e.videoThumbnails;if(t){let e=t[Object.keys(t).map(Number).sort((e,t)=>t-e)[0]];e&&this.trigger({type:`posterchange`,src:e})}}),r.on(i.VIDEO_PLAY,()=>{this._paused=!1,this.trigger(`play`),this.trigger(`playing`)}),r.on(i.VIDEO_PLAYING,()=>{this._paused=!1,this.trigger(`play`),this.trigger(`playing`)}),r.on(i.VIDEO_PAUSE,()=>{this._paused=!0,this.trigger(`pause`)}),r.on(i.VIDEO_END,()=>{this._paused=!0,this.trigger(`ended`)}),r.on(i.VIDEO_TIMECHANGE,e=>{this._currentTime=e.videoTime??this._currentTime,this._duration=e.videoDuration??this._duration,this.trigger(`timeupdate`)}),r.on(i.VIDEO_DURATIONCHANGE,e=>{this._duration=e.videoDuration??this._duration,this.trigger(`durationchange`)}),r.on(i.VIDEO_SEEKSTART,()=>{this._seeking=!0,this.trigger(`seeking`)}),r.on(i.VIDEO_SEEKEND,e=>{this._seeking=!1,this._currentTime=e.videoTime??this._currentTime,this.trigger(`seeked`)}),r.on(i.PLAYER_VOLUMECHANGE,e=>{this._volume=e.playerVolume??this._volume,this._muted=e.playerIsMuted??this._muted,this.trigger(`volumechange`)}),r.on(i.PLAYER_ERROR,()=>this.trigger(`error`)),i.AD_START&&r.on(i.AD_START,()=>this.trigger(`adstart`)),i.AD_END&&r.on(i.AD_END,()=>this.trigger(`adend`))}catch(e){s.log.error(`Dailymotion:`,e.message)}}play(){this._dm?this._dm.play():this.playOnReady=!0}pause(){this._dm?.pause()}paused(){return this._paused}seeking(){return this._seeking}currentTime(){return this._currentTime}setCurrentTime(e){this._currentTime=e,this._dm?.seek(e),this._seeking=!0,this.trigger(`seeking`)}duration(){return this._duration}volume(){return this._volume}setVolume(e){this._volume=e,this._dm?.setVolume(e)}muted(){return this._muted}setMuted(e){this._muted=e,this._dm?.setMute(e)}playbackRate(){return 1}setPlaybackRate(){}buffered(){return s.createTimeRange(0,this._currentTime)}seekable(){return s.createTimeRange(0,this._duration)}currentSrc(){return this.source?.src??``}ended(){return!1}preload(){}load(){}reset(){}networkState(){return+!!this._dm}readyState(){return this._dm?4:0}supportsFullScreen(){return n()}enterFullscreen(){if(t()){this._spawnIosFullscreen();return}(this._shell?.requestFullscreen||this._shell?.webkitRequestFullscreen)?.call(this._shell)}exitFullscreen(){a()}_spawnIosFullscreen(){let t=this._currentTime;this._dm?.pause(),this.player_.trigger(e);let n=document.createElement(`div`);n.style.cssText=`position:fixed;inset:0;z-index:99999;opacity:0;pointer-events:none`,document.body.appendChild(n);let i=document.createElement(`iframe`);i.src=`https://geo.dailymotion.com/player/${this._playerId}.html?video=${this.videoId}&autoplay=1&startTime=${Math.floor(t)}`,i.setAttribute(`allow`,`autoplay; fullscreen`),i.setAttribute(`allowfullscreen`,`true`),i.style.cssText=`width:100%;height:100%;border:0`,n.appendChild(i);let a=!1,o=()=>{a||(a=!0,document.removeEventListener(`fullscreenchange`,s),document.removeEventListener(`webkitfullscreenchange`,s),this.player_.trigger(r),n.remove(),this._dm?.seek(t),this._dm?.play())},s=()=>{!document.fullscreenElement&&!document.webkitFullscreenElement&&o()};document.addEventListener(`fullscreenchange`,s),document.addEventListener(`webkitfullscreenchange`,s),i.onload=()=>this.player_.trigger(`fullscreen-pending-done`)}setSrc(e){e?.src&&(this.source=e,this.videoId=i.parseVideoId(e.src),this.options_.autoplay&&(this.playOnReady=!0))}dispose(){this._dm?.destroy?.(),this._dm=null,this.el_?.parentNode?.classList.remove(`vjs-dailymotion`),c.prototype.dispose.call(this)}};l.isSupported=()=>!0,l.canPlayType=e=>e===`video/dailymotion`?`probably`:``,l.canPlaySource=({type:e,src:t})=>e===`video/dailymotion`?`probably`:/dailymotion\.com|dai\.ly/.test(t)?`maybe`:``,l.parseVideoId=e=>{let t=e.match(/[?&]video=([a-zA-Z0-9]+)/);if(t)return t[1];let n=e.match(/(?:dailymotion\.com\/(?:embed\/)?video\/|dai\.ly\/)([a-zA-Z0-9]+)/);return n?n[1]:null},i(`Dailymotion`,l);export{l as default};
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { ComputedRef, InjectionKey, Plugin, Ref, UnwrapNestedRefs } from "vue";
|
|
2
|
+
|
|
3
|
+
//#region src/types.d.ts
|
|
4
|
+
type Platform = 'youtube' | 'vimeo' | 'dailymotion' | 'jwplayer' | 'brightcove' | 'html5';
|
|
5
|
+
type BuiltinAction = 'mute' | 'loop';
|
|
6
|
+
interface CustomAction {
|
|
7
|
+
icon: string;
|
|
8
|
+
label: string;
|
|
9
|
+
onClick: () => void;
|
|
10
|
+
}
|
|
11
|
+
type PlayerAction = BuiltinAction | CustomAction;
|
|
12
|
+
type StateChangeType = 'play' | 'pause' | 'ended' | 'seeked' | 'error' | 'adstart' | 'adend' | 'volumechange' | 'ratechange';
|
|
13
|
+
interface StateChangeEvent {
|
|
14
|
+
type: StateChangeType;
|
|
15
|
+
currentTime: number;
|
|
16
|
+
duration: number;
|
|
17
|
+
src: string;
|
|
18
|
+
error?: {
|
|
19
|
+
code: number;
|
|
20
|
+
message: string;
|
|
21
|
+
} | null;
|
|
22
|
+
isMuted?: boolean;
|
|
23
|
+
playbackRate?: number;
|
|
24
|
+
payload?: Record<string, unknown>;
|
|
25
|
+
}
|
|
26
|
+
interface PlayerProps {
|
|
27
|
+
videoUrl: string;
|
|
28
|
+
title?: string;
|
|
29
|
+
poster?: string;
|
|
30
|
+
aspectRatio?: string;
|
|
31
|
+
platform?: string;
|
|
32
|
+
techOptions?: Record<string, unknown>;
|
|
33
|
+
adTagUrl?: string;
|
|
34
|
+
imaOptions?: Record<string, unknown>;
|
|
35
|
+
autoplay?: boolean;
|
|
36
|
+
muted?: boolean;
|
|
37
|
+
playbackRate?: number;
|
|
38
|
+
nativeUi?: boolean;
|
|
39
|
+
autoStage?: boolean;
|
|
40
|
+
lazy?: boolean;
|
|
41
|
+
payload?: Record<string, unknown>;
|
|
42
|
+
action?: PlayerAction | null;
|
|
43
|
+
}
|
|
44
|
+
type VideoSelectDetail = PlayerProps;
|
|
45
|
+
interface VideoStateDetail {
|
|
46
|
+
currentVideoUrl: string | null;
|
|
47
|
+
isPlaying: boolean;
|
|
48
|
+
}
|
|
49
|
+
interface VideoToggleDetail {
|
|
50
|
+
videoUrl: string;
|
|
51
|
+
}
|
|
52
|
+
interface VideoEntry extends PlayerProps {
|
|
53
|
+
platform: Platform;
|
|
54
|
+
}
|
|
55
|
+
//#endregion
|
|
56
|
+
//#region src/components/VideoPlayer.vue.d.ts
|
|
57
|
+
type __VLS_Props$1 = PlayerProps & {
|
|
58
|
+
action?: PlayerAction | null;
|
|
59
|
+
};
|
|
60
|
+
declare const __VLS_export$3: import("vue").DefineComponent<__VLS_Props$1, {
|
|
61
|
+
isPlaying: boolean;
|
|
62
|
+
isReady: boolean;
|
|
63
|
+
isAdPlaying: boolean;
|
|
64
|
+
isBuffering: boolean;
|
|
65
|
+
current: number;
|
|
66
|
+
total: number;
|
|
67
|
+
vol: number;
|
|
68
|
+
isMuted: boolean;
|
|
69
|
+
isLooping: boolean;
|
|
70
|
+
playbackRate: number;
|
|
71
|
+
hasStarted: boolean;
|
|
72
|
+
isError: boolean;
|
|
73
|
+
errorMessage: string;
|
|
74
|
+
progress: number;
|
|
75
|
+
bufferedDisplay: number;
|
|
76
|
+
isFullscreen: boolean;
|
|
77
|
+
isFullscreenPending: boolean;
|
|
78
|
+
fmt: (s: number) => string;
|
|
79
|
+
togglePlay: () => void;
|
|
80
|
+
seek: (val: number) => void;
|
|
81
|
+
toggleMute: () => void;
|
|
82
|
+
setVolume: (val: number) => void;
|
|
83
|
+
toggleFullscreen: () => void;
|
|
84
|
+
toggleLoop: () => void;
|
|
85
|
+
setPlaybackRate: (rate: number) => void;
|
|
86
|
+
supportsPlaybackRate: boolean;
|
|
87
|
+
nativeUi: boolean;
|
|
88
|
+
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
89
|
+
"state-change": (event: StateChangeEvent) => any;
|
|
90
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props$1> & Readonly<{
|
|
91
|
+
"onState-change"?: ((event: StateChangeEvent) => any) | undefined;
|
|
92
|
+
}>, {
|
|
93
|
+
title: string;
|
|
94
|
+
poster: string;
|
|
95
|
+
aspectRatio: string;
|
|
96
|
+
platform: string;
|
|
97
|
+
techOptions: Record<string, unknown>;
|
|
98
|
+
adTagUrl: string;
|
|
99
|
+
autoplay: boolean;
|
|
100
|
+
nativeUi: boolean;
|
|
101
|
+
autoStage: boolean;
|
|
102
|
+
lazy: boolean;
|
|
103
|
+
payload: Record<string, unknown>;
|
|
104
|
+
action: PlayerAction | null;
|
|
105
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
106
|
+
declare const _default$3: typeof __VLS_export$3;
|
|
107
|
+
//#endregion
|
|
108
|
+
//#region src/components/VideoStage.vue.d.ts
|
|
109
|
+
declare const __VLS_export$2: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
110
|
+
"state-change": (event: StateChangeEvent) => any;
|
|
111
|
+
}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{
|
|
112
|
+
"onState-change"?: ((event: StateChangeEvent) => any) | undefined;
|
|
113
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
114
|
+
declare const _default$2: typeof __VLS_export$2;
|
|
115
|
+
//#endregion
|
|
116
|
+
//#region src/components/VideoPlaceholder.vue.d.ts
|
|
117
|
+
declare const __VLS_export$1: import("vue").DefineComponent<PlayerProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<PlayerProps> & Readonly<{}>, {
|
|
118
|
+
title: string;
|
|
119
|
+
poster: string;
|
|
120
|
+
aspectRatio: string;
|
|
121
|
+
platform: string;
|
|
122
|
+
techOptions: Record<string, unknown>;
|
|
123
|
+
adTagUrl: string;
|
|
124
|
+
autoplay: boolean;
|
|
125
|
+
nativeUi: boolean;
|
|
126
|
+
autoStage: boolean;
|
|
127
|
+
payload: Record<string, unknown>;
|
|
128
|
+
action: PlayerAction | null;
|
|
129
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
130
|
+
declare const _default$1: typeof __VLS_export$1;
|
|
131
|
+
//#endregion
|
|
132
|
+
//#region src/components/VideoItem.vue.d.ts
|
|
133
|
+
type __VLS_Props = VideoSelectDetail & {
|
|
134
|
+
action?: PlayerAction | null;
|
|
135
|
+
};
|
|
136
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
137
|
+
"state-change": (event: StateChangeEvent) => any;
|
|
138
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
139
|
+
"onState-change"?: ((event: StateChangeEvent) => any) | undefined;
|
|
140
|
+
}>, {
|
|
141
|
+
lazy: boolean;
|
|
142
|
+
action: PlayerAction | null;
|
|
143
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
144
|
+
declare const _default: typeof __VLS_export;
|
|
145
|
+
//#endregion
|
|
146
|
+
//#region src/adapters/index.d.ts
|
|
147
|
+
declare function getPlatform(url: any): string;
|
|
148
|
+
//#endregion
|
|
149
|
+
//#region src/composables/usePlayer.d.ts
|
|
150
|
+
interface UsePlayerReturn {
|
|
151
|
+
isPlaying: Ref<boolean>;
|
|
152
|
+
isReady: Ref<boolean>;
|
|
153
|
+
isAdPlaying: Ref<boolean>;
|
|
154
|
+
isBuffering: Ref<boolean>;
|
|
155
|
+
current: Ref<number>;
|
|
156
|
+
total: Ref<number>;
|
|
157
|
+
vol: Ref<number>;
|
|
158
|
+
isMuted: Ref<boolean>;
|
|
159
|
+
isLooping: Ref<boolean>;
|
|
160
|
+
playbackRate: Ref<number>;
|
|
161
|
+
hasStarted: Ref<boolean>;
|
|
162
|
+
isError: Ref<boolean>;
|
|
163
|
+
errorMessage: Ref<string>;
|
|
164
|
+
progress: ComputedRef<number>;
|
|
165
|
+
bufferedDisplay: ComputedRef<number>;
|
|
166
|
+
isFullscreen: Ref<boolean>;
|
|
167
|
+
isFullscreenPending: Ref<boolean>;
|
|
168
|
+
fmt: (s: number) => string;
|
|
169
|
+
togglePlay: () => void;
|
|
170
|
+
seek: (val: number) => void;
|
|
171
|
+
toggleMute: () => void;
|
|
172
|
+
setVolume: (val: number) => void;
|
|
173
|
+
toggleFullscreen: () => void;
|
|
174
|
+
toggleLoop: () => void;
|
|
175
|
+
setPlaybackRate: (rate: number) => void;
|
|
176
|
+
supportsPlaybackRate: Ref<boolean>;
|
|
177
|
+
nativeUi: Ref<boolean>;
|
|
178
|
+
}
|
|
179
|
+
//#endregion
|
|
180
|
+
//#region src/composables/useHud.d.ts
|
|
181
|
+
interface UseHudReturn {
|
|
182
|
+
showHUD: Ref<boolean>;
|
|
183
|
+
isOpen: Ref<boolean>;
|
|
184
|
+
scheduleHide: (delay?: number) => void;
|
|
185
|
+
pauseHide: () => void;
|
|
186
|
+
onVideoTap: () => void;
|
|
187
|
+
onMouseMove: () => void;
|
|
188
|
+
onMouseLeave: () => void;
|
|
189
|
+
openControls: () => void;
|
|
190
|
+
closeControls: () => void;
|
|
191
|
+
keepOpen: () => void;
|
|
192
|
+
}
|
|
193
|
+
//#endregion
|
|
194
|
+
//#region src/composables/playerContext.d.ts
|
|
195
|
+
type PlayerContext = UnwrapNestedRefs<UsePlayerReturn>;
|
|
196
|
+
type HudContext = UnwrapNestedRefs<UseHudReturn>;
|
|
197
|
+
declare const PlayerKey: InjectionKey<PlayerContext>;
|
|
198
|
+
declare const HudKey: InjectionKey<HudContext>;
|
|
199
|
+
declare const ActionKey: InjectionKey<Ref<PlayerAction | null | undefined>>;
|
|
200
|
+
//#endregion
|
|
201
|
+
//#region src/index.d.ts
|
|
202
|
+
declare const VideoPlayerPlugin: Plugin;
|
|
203
|
+
//#endregion
|
|
204
|
+
export { VideoToggleDetail as S, StateChangeEvent as _, PlayerContext as a, VideoSelectDetail as b, _default as c, _default$3 as d, BuiltinAction as f, PlayerProps as g, PlayerAction as h, HudKey as i, _default$1 as l, Platform as m, ActionKey as n, PlayerKey as o, CustomAction as p, HudContext as r, getPlatform as s, VideoPlayerPlugin as t, _default$2 as u, StateChangeType as v, VideoStateDetail as x, VideoEntry as y };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{f as e}from"./VideoItem-C2dc1Nw7.mjs";import t from"video.js";const n={};function r(e){return e.match(/cdn\.jwplayer\.com\/videos\/([^-]+)/)?.[1]??e.match(/cdn\.jwplayer\.com\/manifests\/([^.]+)/)?.[1]??e.match(/^jwplayer:\/\/([^/]+)$/)?.[1]??null}function i(e){let t=e?.advertising?.schedule;return Array.isArray(t)&&t.length?t[0].tag??null:e?.advertising?.tag??null}async function a(t){if(n[t])return n[t];let r=await fetch(`https://cdn.jwplayer.com/v2/media/${t}`);if(!r.ok)throw Error(`JW Platform API error: ${r.status}`);let a=(await r.json()).playlist?.[0];if(!a)throw Error(`JW Platform: empty playlist`);let o=e((a.sources??[]).map(e=>({src:e.file,type:e.type})));if(!o.length)throw Error(`JW Platform: no playable sources found`);let s={src:o[0].src,type:o[0].type,poster:a.image??null,adTagUrl:i(a)};return n[t]=s,s}async function o(e){let t=r(e);if(!t)throw Error(`JW Platform: unrecognised source URL: ${e}`);let n=await a(t);if(e.startsWith(`jwplayer://`))return n;let i=/\.mp4(\?|$)/.test(e)?`video/mp4`:`application/x-mpegURL`;return{...n,src:e,type:i}}async function s(e){let t=r(e);return t?a(t).catch(()=>null):null}t.use(`video/jwplayer`,e=>({setSource(n,r){(async()=>{try{let{src:i,type:a,poster:s}=await o(n.src);t.log(`JW Platform: resolved source`,i),s&&!e.poster()&&e.poster(s),r(null,{src:i,type:a})}catch(e){t.log.error(`JW Platform error:`,e.message),r(e,n)}})()}}));export{s as prefetchConfig};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e={};function t(t,n=t){return e[n]||(e[n]=new Promise((e,n)=>{let r=document.createElement(`script`);r.src=t,r.onload=()=>e(),r.onerror=()=>n(Error(`Failed to load script: ${t}`)),document.head.appendChild(r)})),e[n]}export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{h as e,m as t,p as n,u as r}from"./VideoItem-C2dc1Nw7.mjs";import i from"video.js";import a from"@vimeo/player";const o=i.getTech(`Tech`);var s=class n extends o{constructor(e,t){super(e,t),this._currentTime=0,this._duration=0,this._volume=1,this._muted=!1,this._paused=!0,this._seeking=!1,this.setSrc(this.options_.source,!0),this.setTimeout(()=>{this.el_&&(this.el_.parentNode.classList.add(`vjs-vimeo`),this.initVimeoPlayer())})}createEl(){let e=document.createElement(`div`);e.setAttribute(`id`,this.options_.techId),e.setAttribute(`style`,`width:100%;height:100%;top:0;left:0;position:absolute`),e.setAttribute(`class`,`vjs-tech`);let t=document.createElement(`div`);return t.appendChild(e),t}initVimeoPlayer(){if(!this.url||!this.url.videoId)return;let e={id:this.url.videoId,byline:!1,portrait:!1,title:!1,transparent:!0,controls:!!this.options_.nativeUi,autopause:!1,width:`100%`,height:`100%`};this.options_.autoplay!==void 0&&(e.autoplay=this.options_.autoplay),this.options_.loop!==void 0&&(e.loop=this.options_.loop),this.options_.muted!==void 0&&(e.muted=this.options_.muted),this.vimeoPlayer=new a(this.options_.techId,e),this.vimeoPlayer.ready().then(()=>this.onPlayerReady()).catch(e=>{this.player_.error({code:4,message:e?.message||`This video is unavailable or cannot be embedded here.`})}),this.vimeoPlayer.on(`play`,()=>{this._paused=!1,this.trigger(`play`),this.trigger(`playing`)}),this.vimeoPlayer.on(`pause`,()=>{this._paused=!0,this.trigger(`pause`)}),this.vimeoPlayer.on(`ended`,()=>{this._paused=!0,this.trigger(`ended`)}),this.vimeoPlayer.on(`timeupdate`,({seconds:e,duration:t})=>{this._currentTime=e,this._duration=t,this.trigger(`timeupdate`),t&&!this._durationSet&&(this._durationSet=!0,this.trigger(`durationchange`))}),this.vimeoPlayer.on(`loaded`,()=>{this._durationSet=!1,this.trigger(`loadedmetadata`),this.trigger(`durationchange`)}),this.vimeoPlayer.on(`seeking`,({seconds:e})=>{this._currentTime=e,this._seeking=!0,this.trigger(`seeking`)}),this.vimeoPlayer.on(`seeked`,({seconds:e})=>{this._currentTime=e,this._seeking=!1,this.trigger(`seeked`),this.trigger(`timeupdate`)}),this.vimeoPlayer.on(`bufferstart`,()=>this.trigger(`waiting`)),this.vimeoPlayer.on(`bufferend`,()=>this.trigger(`canplay`)),this.vimeoPlayer.on(`volumechange`,({volume:e})=>{this._volume=e,this.trigger(`volumechange`)}),this.vimeoPlayer.on(`error`,e=>this.trigger(`error`,e)),this.vimeoPlayer.on(`fullscreenchange`,({fullscreen:e})=>{this.trigger(`fullscreenchange`,{isFullscreen:e})})}enterFullscreen(){t(this.player_.el().parentElement)}exitFullscreen(){r()}onPlayerReady(){this.triggerReady(),this.options_.muted&&this.vimeoPlayer.setMuted(!0),this.playOnReady&&this.play()}setSrc(e){!e||!e.src||(this.source=e,this.url=n.parseUrl(e.src),this.options_.autoplay&&(this.playOnReady=!0))}play(){if(!this.vimeoPlayer){this.playOnReady=!0;return}this.vimeoPlayer.play().catch(()=>{})}pause(){this.vimeoPlayer?.pause().catch(()=>{})}paused(){return this._paused}seeking(){return this._seeking}currentTime(){return this._currentTime}setCurrentTime(e){this.vimeoPlayer?.setCurrentTime(e).catch(()=>{}),this.trigger(`timeupdate`),this.trigger(`seeking`)}duration(){return this._duration}volume(){return this._volume}setVolume(e){this._volume=e,this.vimeoPlayer?.setVolume(e).catch(()=>{})}muted(){return this._muted}setMuted(e){this._muted=e,this.vimeoPlayer?.setMuted(e).then(()=>{this.setTimeout(()=>this.trigger(`volumechange`),50)}).catch(()=>{})}buffered(){return i.createTimeRange(0,this._currentTime)}seekable(){return i.createTimeRange(0,this._duration)}playbackRate(){return this._playbackRate||1}setPlaybackRate(e){this._playbackRate=e,this.vimeoPlayer?.setPlaybackRate(e).catch(()=>{}),this.trigger(`ratechange`)}preload(){}load(){}reset(){}currentSrc(){return this.source?.src||``}ended(){return!1}networkState(){return+!!this.vimeoPlayer}readyState(){return this.vimeoPlayer?4:0}supportsFullScreen(){return e()}dispose(){this.vimeoPlayer?.destroy().catch(()=>{}),this.vimeoPlayer=null,this.el_?.parentNode?.classList.remove(`vjs-vimeo`),o.prototype.dispose.call(this)}};s.isSupported=()=>!0,s.canPlayType=e=>e===`video/vimeo`?`probably`:``,s.canPlaySource=({type:e,src:t})=>e===`video/vimeo`?`probably`:/vimeo\.com|player\.vimeo\.com/.test(t)?`maybe`:``,s.parseUrl=e=>{let t={videoId:null},n=e.match(/(?:vimeo\.com\/(?:video\/|channels\/[^/]+\/|groups\/[^/]+\/videos\/)?|player\.vimeo\.com\/video\/)(\d+)/);return n&&(t.videoId=n[1]),t},n(`Vimeo`,s);export{s as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as e,d as t,h as n,l as r,m as i,p as a,u as o}from"./VideoItem-C2dc1Nw7.mjs";import{t as s}from"./loadScript-Du6JsTc2.mjs";import c from"video.js";const l=c.getTech(`Tech`),u=c.browser.IS_IOS||c.browser.IS_NATIVE_ANDROID;var d=class a extends l{constructor(e,t){super(e,t),this.setPoster(e.poster),this.setSrc(this.options_.source),this.setTimeout(()=>{this.el_&&(this.el_.parentNode.classList.add(`vjs-youtube`),u&&this.el_.parentNode.classList.add(`vjs-youtube-mobile`),a.isApiReady?this.initYTPlayer():a.apiReadyQueue.push(this))})}createEl(){let e=document.createElement(`div`);e.setAttribute(`id`,this.options_.techId),e.setAttribute(`style`,`width:100%;height:100%;top:0;left:0;position:absolute`),e.setAttribute(`class`,`vjs-tech`);let t=document.createElement(`div`);if(t.appendChild(e),!u&&!this.options_.nativeUi&&!this.options_.ytControls){let e=document.createElement(`div`);e.setAttribute(`class`,`vjs-iframe-blocker`),e.setAttribute(`style`,`position:absolute;top:0;left:0;width:100%;height:100%`),e.onclick=()=>this.pause(),t.appendChild(e)}return t}initYTPlayer(){let e=this.options_,t={controls:+!!e.nativeUi,modestbranding:1,rel:0,showinfo:0,mute:+!!e.muted,loop:+!!e.loop,origin:window.location.origin,allowfullscreen:1,fullscreen:1,fs:1,...e.iv_load_policy!==void 0&&{iv_load_policy:e.iv_load_policy},...e.cc_load_policy!==void 0&&{cc_load_policy:e.cc_load_policy},...e.color!==void 0&&{color:e.color},...e.hl!==void 0&&{hl:e.hl},...e.playsinline!==void 0&&{playsinline:e.playsinline},...e.rel!==void 0&&{rel:e.rel},...e.start!==void 0&&{start:e.start},...e.end!==void 0&&{end:e.end},...e.ytControls!==void 0&&{controls:e.ytControls},...e.customVars};e.youtube&&Object.assign(t,e.youtube),this.activeVideoId=this.url?.videoId??null,this.ytPlayer=new window.YT.Player(this.options_.techId,{videoId:this.activeVideoId,playerVars:t,...e.enablePrivacyEnhancedMode&&{host:`https://www.youtube-nocookie.com`},events:{onReady:this.onPlayerReady.bind(this),onStateChange:this.onPlayerStateChange.bind(this),onPlaybackRateChange:this.onPlayerPlaybackRateChange.bind(this),onVolumeChange:this.onPlayerVolumeChange.bind(this),onError:this.onPlayerError.bind(this)}}),window.yt=this.ytPlayer}onPlayerReady(){this.ytPlayer.getAvailablePlaybackRates().length>1&&(this.featuresPlaybackRate=!0),this.playerReady_=!0,this.triggerReady(),this.playOnReady?this.play():this.cueOnReady&&(this.cueVideoById_(this.url.videoId),this.activeVideoId=this.url.videoId)}_isAdPlaying(){try{let e=this.ytPlayer?.getPlayerResponse()?.adPlacements;return Array.isArray(e)&&e.length>0}catch{return!1}}onPlayerStateChange(e){let t=e.data;if(t===this.lastState||this.errorNumber)return;this.lastState=t;let n=this._isAdPlaying();switch(n!==this._adWasPlaying&&(this._adWasPlaying=n,this.trigger(n?`adstart`:`adend`)),t){case-1:this.trigger(`loadstart`),this.trigger(`loadedmetadata`),this.trigger(`durationchange`),this.trigger(`ratechange`);break;case YT.PlayerState.ENDED:this.trigger(`ended`);break;case YT.PlayerState.PLAYING:this.trigger(`timeupdate`),this.trigger(`durationchange`),this.trigger(`playing`),this.trigger(`play`),this.isSeeking&&this.onSeeked();break;case YT.PlayerState.PAUSED:this.trigger(`canplay`),this.isSeeking||this.trigger(`pause`);break;case YT.PlayerState.BUFFERING:this.player_.trigger(`waiting`);break;case YT.PlayerState.CUED:this.trigger(`canplay`);break}this.startInterval&&=(clearInterval(this.startInterval),null),t===YT.PlayerState.PLAYING&&(this.startInterval=setInterval(()=>this.trigger(`timeupdate`),250))}onPlayerPlaybackRateChange(){this.trigger(`ratechange`)}onPlayerVolumeChange(){this.trigger(`volumechange`)}onPlayerError(e){this.errorNumber=e.data,this.trigger(`error`),this.setTimeout(()=>{this.errorNumber=null},0)}play(){this.url?.videoId&&(this.wasPausedBeforeSeek=!1,this.isReady_?this.activeVideoId===this.url.videoId?this.ytPlayer.playVideo():(this.loadVideoById_(this.url.videoId),this.activeVideoId=this.url.videoId):(this.trigger(`waiting`),this.playOnReady=!0))}pause(){this.ytPlayer?.pauseVideo()}paused(){return this.ytPlayer?this.lastState!==YT.PlayerState.PLAYING&&this.lastState!==YT.PlayerState.BUFFERING:!0}loadVideoById_(e){this.ytPlayer.loadVideoById({videoId:e})}cueVideoById_(e){this.ytPlayer.cueVideoById({videoId:e})}currentTime(){return this.ytPlayer?.getCurrentTime()??0}setCurrentTime(e){this.lastState===YT.PlayerState.PAUSED&&(this.timeBeforeSeek=this.currentTime()),this.isSeeking||(this.wasPausedBeforeSeek=this.paused()),this.ytPlayer.seekTo(e,!0),this.trigger(`timeupdate`),this.trigger(`seeking`),this.isSeeking=!0,this.lastState===YT.PlayerState.PAUSED&&this.timeBeforeSeek!==e&&(clearInterval(this.checkSeekedInPauseInterval),this.checkSeekedInPauseInterval=setInterval(()=>{this.lastState!==YT.PlayerState.PAUSED||!this.isSeeking?clearInterval(this.checkSeekedInPauseInterval):this.currentTime()!==this.timeBeforeSeek&&(this.trigger(`timeupdate`),this.onSeeked())},250))}onSeeked(){clearInterval(this.checkSeekedInPauseInterval),this.isSeeking=!1,this.wasPausedBeforeSeek&&this.pause(),this.trigger(`seeked`)}seeking(){return this.isSeeking}seekable(){return c.createTimeRange(0,this.ytPlayer?.getDuration()??0)}duration(){return this.ytPlayer?.getDuration()??0}ended(){return this.ytPlayer?this.lastState===YT.PlayerState.ENDED:!1}volume(){return this.ytPlayer?this.ytPlayer.getVolume()/100:1}setVolume(e){this.ytPlayer?.setVolume(e*100)}muted(){return this.ytPlayer?.isMuted()??!1}setMuted(e){this.ytPlayer&&(e?this.ytPlayer.mute():this.ytPlayer.unMute(),this.setTimeout(()=>this.trigger(`volumechange`),50))}buffered(){return this.ytPlayer?.getVideoLoadedFraction?c.createTimeRange(0,this.ytPlayer.getVideoLoadedFraction()*this.ytPlayer.getDuration()):c.createTimeRange()}playbackRate(){return this.ytPlayer?.getPlaybackRate()??1}setPlaybackRate(e){this.ytPlayer?.setPlaybackRate(e)}currentSrc(){return this.source?.src??``}preload(){}load(){}reset(){}networkState(){if(!this.ytPlayer)return 0;switch(this.ytPlayer.getPlayerState()){case-1:return 0;case 3:return 2;default:return 1}}readyState(){if(!this.ytPlayer)return 0;switch(this.ytPlayer.getPlayerState()){case-1:return 0;case 5:return 1;case 3:return 2;default:return 4}}supportsFullScreen(){return n()}setSrc(e){e?.src&&(this.source=e,this.url=a.parseUrl(e.src),!this.options_.poster&&this.url.videoId&&(this.poster_=`https://img.youtube.com/vi/${this.url.videoId}/0.jpg`,this.setTimeout(()=>{this.trigger(`posterchange`),this.checkHighResPoster()},0)),this.options_.autoplay&&!u?this.isReady_?this.play():this.playOnReady=!0:this.activeVideoId!==this.url.videoId&&(this.isReady_?(this.cueVideoById_(this.url.videoId),this.activeVideoId=this.url.videoId):this.cueOnReady=!0))}poster(){return u?null:this.poster_}setPoster(e){this.poster_=e}autoplay(){return this.options_.autoplay}setAutoplay(e){this.options_.autoplay=e}loop(){return this.options_.loop}setLoop(e){this.options_.loop=e}checkHighResPoster(){let e=`https://img.youtube.com/vi/${this.url.videoId}/maxresdefault.jpg`,t=new Image;t.onload=()=>{(t.naturalHeight||t.height)<=90||(this.poster_=e,this.trigger(`posterchange`))},t.src=e}enterFullscreen(){if(t()&&this.ytPlayer){this._spawnIosFullscreen();return}i(this.player_.el().parentElement)}exitFullscreen(){o()}_spawnIosFullscreen(){let t=this.ytPlayer,n=t.getCurrentTime(),{video_id:i}=t.getVideoData();t.pauseVideo(),this.player_.trigger(e);let a=document.createElement(`div`);a.style.cssText=`position:fixed;inset:0;z-index:99999;opacity:0;pointer-events:none`,document.body.appendChild(a);let o=document.createElement(`div`);o.id=`yt-fs-${Date.now()}`,a.appendChild(o);let s=null,c=!1,l=()=>{if(c)return;c=!0,this.player_.trigger(r);let e=s?s.getCurrentTime():n;try{s?.destroy()}catch{}a.remove(),t.seekTo(e,!0),this.trigger(`timeupdate`)};s=new window.YT.Player(o.id,{videoId:i,playerVars:{playsinline:0,autoplay:1,controls:1,modestbranding:1,rel:0,start:Math.floor(n)},events:{onReady:e=>{this.player_.trigger(r),e.target.seekTo(n,!0),e.target.playVideo()},onStateChange:e=>{(e.data===window.YT.PlayerState.PAUSED||e.data===window.YT.PlayerState.ENDED)&&l()}}})}dispose(){clearInterval(this.startInterval),this.ytPlayer?(this.ytPlayer.stopVideo?.(),this.ytPlayer.destroy?.()):a.apiReadyQueue=a.apiReadyQueue.filter(e=>e!==this),this.ytPlayer=null,this.el_?.parentNode?.classList.remove(`vjs-youtube`,`vjs-youtube-mobile`),l.prototype.dispose.call(this)}};d.isApiReady=!1,d.apiReadyQueue=[],d.isSupported=()=>!0,d.canPlayType=e=>e===`video/youtube`?`probably`:``,d.canPlaySource=({type:e,src:t})=>e===`video/youtube`?`probably`:/youtu\.be|youtube\.com/.test(t)?`maybe`:``,d.parseUrl=e=>{let t={videoId:null,listId:null},n=e.match(/^.*(youtu\.be\/|v\/|u\/\w\/|embed\/|watch\?v=|shorts\/|&v=)([^#&?]*).*/);n?.[2]?.length===11&&(t.videoId=n[2]);let r=e.match(/[?&]list=([^#&?]+)/);return r?.[1]&&(t.listId=r[1]),t},typeof document<`u`&&s(`https://www.youtube.com/iframe_api`).then(()=>{window.YT.ready(()=>{d.isApiReady=!0,d.apiReadyQueue.forEach(e=>e.initYTPlayer()),d.apiReadyQueue=[]})}),a(`Youtube`,d);export{d as default};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { g as PlayerProps, h as PlayerAction } from "./chunks/index-DCRJ3iTc.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/element/index.d.ts
|
|
4
|
+
declare const VideoPlayerElement: import("vue").VueElementConstructor<PlayerProps & {
|
|
5
|
+
action?: PlayerAction | null;
|
|
6
|
+
}>;
|
|
7
|
+
declare const VideoStageElement: import("vue").VueElementConstructor<{}>;
|
|
8
|
+
declare const VideoPlaceholderElement: import("vue").VueElementConstructor<PlayerProps>;
|
|
9
|
+
declare const VideoItemElement: import("vue").VueElementConstructor<PlayerProps & {
|
|
10
|
+
action?: PlayerAction | null;
|
|
11
|
+
}>;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { VideoItemElement, VideoPlaceholderElement, VideoPlayerElement, VideoStageElement };
|
package/dist/element.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e,n as t,r as n,t as r}from"./chunks/VideoItem-C2dc1Nw7.mjs";import{defineCustomElement as i}from"vue";import a from"video.js/dist/video-js.css?inline";const o=i(e,{shadowRoot:!1,styles:[a]}),s=i(n,{shadowRoot:!1}),c=i(t,{shadowRoot:!1}),l=i(r,{shadowRoot:!1});customElements.define(`video-player`,o),customElements.define(`video-stage`,s),customElements.define(`video-placeholder`,c),customElements.define(`video-item`,l);export{l as VideoItemElement,c as VideoPlaceholderElement,o as VideoPlayerElement,s as VideoStageElement};
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { S as VideoToggleDetail, _ as StateChangeEvent, a as PlayerContext, b as VideoSelectDetail, c as _default, d as _default$2, f as BuiltinAction, g as PlayerProps, h as PlayerAction, i as HudKey, l as _default$1, m as Platform, n as ActionKey, o as PlayerKey, p as CustomAction, r as HudContext, s as getPlatform, t as VideoPlayerPlugin, u as _default$3, v as StateChangeType, x as VideoStateDetail, y as VideoEntry } from "./chunks/index-DCRJ3iTc.mjs";
|
|
2
|
+
export { ActionKey, BuiltinAction, CustomAction, HudContext, HudKey, Platform, PlayerAction, PlayerContext, PlayerKey, PlayerProps, StateChangeEvent, StateChangeType, VideoEntry, _default as VideoItem, _default$1 as VideoPlaceholder, _default$2 as VideoPlayer, VideoPlayerPlugin, VideoPlayerPlugin as default, VideoSelectDetail, _default$3 as VideoStage, VideoStateDetail, VideoToggleDetail, getPlatform };
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e,g as t,i as n,n as r,o as i,r as a,s as o,t as s}from"./chunks/VideoItem-C2dc1Nw7.mjs";const c={install(e){e.component(`VideoPlayer`,n),e.component(`VideoStage`,a),e.component(`VideoPlaceholder`,r),e.component(`VideoItem`,s)}};export{e as ActionKey,i as HudKey,o as PlayerKey,s as VideoItem,r as VideoPlaceholder,n as VideoPlayer,c as VideoPlayerPlugin,c as default,a as VideoStage,t as getPlatform};
|
package/dist/style.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.ppbtn[data-v-85902525]{-webkit-backdrop-filter:blur(12px);color:#fff;cursor:pointer;background:#ffffff1a;border:1px solid #ffffff2e;border-radius:50%;justify-content:center;align-items:center;transition:background .2s,transform .15s;display:flex}.ppbtn[data-v-85902525]:hover{background:#fff3;transform:scale(1.08)}.ppbtn--lg[data-v-85902525]{width:64px;height:64px}.ppbtn--lg svg[data-v-85902525]{width:28px;height:28px}.ppbtn--sm[data-v-85902525]{color:#ffffffbf;background:0 0;border:none;border-radius:8px;width:30px;height:30px}.ppbtn--sm svg[data-v-85902525]{width:16px;height:16px}.ppbtn--sm[data-v-85902525]:hover{color:#fff;background:#ffffff1a;transform:none}.hud[data-v-a6d118e7]{align-items:center;gap:20px;display:flex}.hud__spacer[data-v-a6d118e7]{flex-shrink:0;width:44px;height:44px}.hud__btn[data-v-a6d118e7]{-webkit-backdrop-filter:blur(12px);color:#fff;cursor:pointer;background:#ffffff1a;border:1px solid #ffffff2e;border-radius:50%;justify-content:center;align-items:center;width:44px;height:44px;transition:background .2s,transform .15s;display:flex}.hud__btn svg[data-v-a6d118e7]{width:18px;height:18px}.hud__btn[data-v-a6d118e7]:hover{background:#fff3;transform:scale(1.08)}.hud__btn--active[data-v-a6d118e7]{color:#93c5fd;background:#3b82f64d;border-color:#3b82f680}.hud__btn--active[data-v-a6d118e7]:hover{background:#3b82f673}::view-transition-old(controls-popup),::view-transition-new(controls-popup){animation-duration:.22s;animation-timing-function:ease-in-out}@keyframes spin-5712aad4{to{transform:rotate(360deg)}}.controls[data-v-5712aad4]{-webkit-backdrop-filter:blur(20px);background:#0a0a0ed1;border:1px solid #ffffff1a;border-radius:18px;flex-direction:column;gap:10px;width:min(340px,100% - 32px);padding:14px 16px 12px;display:flex;box-shadow:0 8px 32px #00000080}.controls--fs[data-v-5712aad4]{width:calc(100% - 32px)}.controls__seek[data-v-5712aad4]{-webkit-appearance:none;appearance:none;cursor:pointer;box-sizing:border-box;background:padding-box content-box;background-image:linear-gradient(to right, #3b82f6 0%, #3b82f6 var(--p), #ffffff4d var(--p), #ffffff4d var(--b), #ffffff1a var(--b), #ffffff1a 100%);border-radius:999px;outline:none;width:100%;height:20px;padding:8px 0}.controls__seek[data-v-5712aad4]::-webkit-slider-runnable-track{background:0 0;border-radius:999px;height:4px}.controls__seek[data-v-5712aad4]::-webkit-slider-thumb{-webkit-appearance:none;cursor:pointer;background:#3b82f6;border-radius:50%;width:14px;height:14px;margin-top:-5px;transition:transform .15s;box-shadow:0 0 0 3px #3b82f64d}.controls__seek[data-v-5712aad4]:hover::-webkit-slider-thumb{transform:scale(1.25)}.controls__seek[data-v-5712aad4]::-moz-range-track{background:#ffffff1a;border-radius:999px;height:4px}.controls__seek[data-v-5712aad4]::-moz-range-progress{background:#3b82f6;border-radius:999px;height:4px}.controls__seek[data-v-5712aad4]::-moz-range-thumb{cursor:pointer;background:#3b82f6;border:none;border-radius:50%;width:14px;height:14px;box-shadow:0 0 0 3px #3b82f64d}.controls__vol-slider[data-v-5712aad4]{-webkit-appearance:none;appearance:none;cursor:pointer;background:linear-gradient(to right, #fff 0%, #fff var(--v), #ffffff26 var(--v), #ffffff26 100%);border-radius:999px;outline:none;flex:1;height:5px;transition:height .15s}.controls__vol-slider[data-v-5712aad4]:hover{height:7px}.controls__vol-slider[data-v-5712aad4]::-webkit-slider-runnable-track{background:0 0;border-radius:999px;height:5px}.controls__vol-slider[data-v-5712aad4]::-webkit-slider-thumb{-webkit-appearance:none;cursor:pointer;background:#fff;border-radius:50%;width:16px;height:16px;margin-top:-5.5px;transition:transform .15s;box-shadow:0 0 0 3px #fff3}.controls__vol-slider[data-v-5712aad4]:hover::-webkit-slider-thumb{transform:scale(1.2)}.controls__vol-slider[data-v-5712aad4]::-moz-range-track{background:#ffffff26;border-radius:999px;height:5px}.controls__vol-slider[data-v-5712aad4]::-moz-range-progress{background:#fff;border-radius:999px;height:5px}.controls__vol-slider[data-v-5712aad4]::-moz-range-thumb{cursor:pointer;background:#fff;border:none;border-radius:50%;width:16px;height:16px;box-shadow:0 0 0 3px #fff3}.controls__vol-header[data-v-5712aad4]{align-items:center;gap:4px;display:flex}.controls__vol-label[data-v-5712aad4]{color:#ffffffe6;flex:1;padding:0 4px;font-size:.8rem;font-weight:600}.controls__vol-body[data-v-5712aad4]{align-items:center;gap:12px;padding:6px 0 4px;display:flex}.controls__vol-pct[data-v-5712aad4]{font-variant-numeric:tabular-nums;color:#fff9;text-align:right;min-width:32px;font-size:.75rem;font-weight:600}.controls__row[data-v-5712aad4]{align-items:center;gap:4px;display:flex}.controls__time[data-v-5712aad4]{font-variant-numeric:tabular-nums;color:#fff9;letter-spacing:.02em;flex:1;padding:0 4px;font-size:.7rem;font-weight:500}.controls__play-wrap[data-v-5712aad4]{flex-shrink:0;justify-content:center;align-items:center;width:30px;height:30px;display:flex}.controls__buf-spinner[data-v-5712aad4]{border:2px solid #ffffff26;border-top-color:#fffc;border-radius:50%;width:14px;height:14px;animation:.75s linear infinite spin-5712aad4}.controls__btn[data-v-5712aad4]{color:#ffffffbf;cursor:pointer;background:0 0;border:none;border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;width:30px;height:30px;transition:background .15s,color .15s;display:flex}.controls__btn svg[data-v-5712aad4]{width:16px;height:16px}.controls__btn[data-v-5712aad4]:hover{color:#fff;background:#ffffff1a}.controls__btn--rate[data-v-5712aad4]{font-variant-numeric:tabular-nums;letter-spacing:.02em;width:auto;min-width:30px;padding:0 4px;font-size:.65rem;font-weight:700}.controls__btn--active[data-v-5712aad4]{color:#3b82f6}.controls__btn--active[data-v-5712aad4]:hover{color:#60a5fa}.controls__btn--close[data-v-5712aad4]{color:#fff6}.controls__btn--close[data-v-5712aad4]:hover{color:#fffc}.controls__fs-wrap[data-v-5712aad4]{flex-shrink:0;justify-content:center;align-items:center;width:30px;height:30px;display:flex}.controls__fs-spinner[data-v-5712aad4]{border:2px solid #ffffff26;border-top-color:#fffc;border-radius:50%;width:14px;height:14px;animation:.75s linear infinite spin-5712aad4}@keyframes spin-f3307b98{to{transform:rotate(360deg)}}.overlay__tap-capture[data-v-f3307b98]{z-index:2;position:absolute;inset:0}.overlay__spinner[data-v-f3307b98]{z-index:5;pointer-events:none;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.overlay__spinner-ring[data-v-f3307b98]{border:3px solid #ffffff1f;border-top-color:#fffc;border-radius:50%;width:40px;height:40px;animation:.75s linear infinite spin-f3307b98}.fade-enter-active[data-v-f3307b98],.fade-leave-active[data-v-f3307b98]{transition:opacity .25s}.fade-enter-from[data-v-f3307b98],.fade-leave-to[data-v-f3307b98]{opacity:0}.overlay__error[data-v-f3307b98]{z-index:6;pointer-events:none;justify-content:center;align-items:center;padding:1.5rem;display:flex;position:absolute;inset:0}.overlay__error p[data-v-f3307b98]{color:#ffffffb3;text-align:center;max-width:260px;font-size:.875rem;line-height:1.5}.overlay__hud[data-v-f3307b98]{z-index:4;opacity:0;pointer-events:none;justify-content:center;align-items:center;transition:opacity .3s;display:flex;position:absolute;inset:0}.overlay__hud--visible[data-v-f3307b98]{opacity:1;pointer-events:all}.overlay__popup[data-v-f3307b98]{z-index:5;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.overlay__popup--fs[data-v-f3307b98]{align-items:flex-end}.popup-enter-active[data-v-f3307b98],.popup-leave-active[data-v-f3307b98]{transition:opacity .2s,transform .2s}.popup-enter-from[data-v-f3307b98],.popup-leave-to[data-v-f3307b98]{opacity:0;transform:scale(.95)}.vjs-svg-icon{fill:currentColor;background-position:50%;background-repeat:no-repeat;width:1.8em;height:1.8em;display:inline-block}.vjs-svg-icon:before{content:none!important}.vjs-svg-icon:hover,.vjs-control:focus .vjs-svg-icon{filter:drop-shadow(0 0 .25em #fff)}.vjs-modal-dialog .vjs-modal-dialog-content,.video-js .vjs-modal-dialog,.vjs-button>.vjs-icon-placeholder:before,.video-js .vjs-big-play-button .vjs-icon-placeholder:before{width:100%;height:100%;position:absolute;top:0;left:0}.vjs-button>.vjs-icon-placeholder:before,.video-js .vjs-big-play-button .vjs-icon-placeholder:before{text-align:center}@font-face{font-family:VideoJS;src:url(data:application/font-woff;charset=utf-8;base64,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)format("woff");font-weight:400;font-style:normal}.vjs-icon-play,.video-js .vjs-play-control .vjs-icon-placeholder,.video-js .vjs-big-play-button .vjs-icon-placeholder:before{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-play:before,.video-js .vjs-play-control .vjs-icon-placeholder:before,.video-js .vjs-big-play-button .vjs-icon-placeholder:before{content:""}.vjs-icon-play-circle{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-play-circle:before{content:""}.vjs-icon-pause,.video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-pause:before,.video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder:before{content:""}.vjs-icon-volume-mute,.video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-volume-mute:before,.video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder:before{content:""}.vjs-icon-volume-low,.video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-volume-low:before,.video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder:before{content:""}.vjs-icon-volume-mid,.video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-volume-mid:before,.video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder:before{content:""}.vjs-icon-volume-high,.video-js .vjs-mute-control .vjs-icon-placeholder{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-volume-high:before,.video-js .vjs-mute-control .vjs-icon-placeholder:before{content:""}.vjs-icon-fullscreen-enter,.video-js .vjs-fullscreen-control .vjs-icon-placeholder{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-fullscreen-enter:before,.video-js .vjs-fullscreen-control .vjs-icon-placeholder:before{content:""}.vjs-icon-fullscreen-exit,.video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-fullscreen-exit:before,.video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder:before{content:""}.vjs-icon-spinner{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-spinner:before{content:""}.vjs-icon-subtitles,.video-js .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js .vjs-subtitles-button .vjs-icon-placeholder{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-subtitles:before,.video-js .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js .vjs-subtitles-button .vjs-icon-placeholder:before{content:""}.vjs-icon-captions,.video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js .vjs-captions-button .vjs-icon-placeholder{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-captions:before,.video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js .vjs-captions-button .vjs-icon-placeholder:before{content:""}.vjs-icon-hd{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-hd:before{content:""}.vjs-icon-chapters,.video-js .vjs-chapters-button .vjs-icon-placeholder{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-chapters:before,.video-js .vjs-chapters-button .vjs-icon-placeholder:before{content:""}.vjs-icon-downloading{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-downloading:before{content:""}.vjs-icon-file-download{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-file-download:before{content:""}.vjs-icon-file-download-done{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-file-download-done:before{content:""}.vjs-icon-file-download-off{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-file-download-off:before{content:""}.vjs-icon-share{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-share:before{content:""}.vjs-icon-cog{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-cog:before{content:""}.vjs-icon-square{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-square:before{content:""}.vjs-icon-circle,.vjs-seek-to-live-control .vjs-icon-placeholder,.video-js .vjs-volume-level,.video-js .vjs-play-progress{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-circle:before,.vjs-seek-to-live-control .vjs-icon-placeholder:before,.video-js .vjs-volume-level:before,.video-js .vjs-play-progress:before{content:""}.vjs-icon-circle-outline{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-circle-outline:before{content:""}.vjs-icon-circle-inner-circle{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-circle-inner-circle:before{content:""}.vjs-icon-cancel,.video-js .vjs-control.vjs-close-button .vjs-icon-placeholder{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-cancel:before,.video-js .vjs-control.vjs-close-button .vjs-icon-placeholder:before{content:""}.vjs-icon-repeat{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-repeat:before{content:""}.vjs-icon-replay,.video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-replay:before,.video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder:before{content:""}.vjs-icon-replay-5,.video-js .vjs-skip-backward-5 .vjs-icon-placeholder{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-replay-5:before,.video-js .vjs-skip-backward-5 .vjs-icon-placeholder:before{content:""}.vjs-icon-replay-10,.video-js .vjs-skip-backward-10 .vjs-icon-placeholder{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-replay-10:before,.video-js .vjs-skip-backward-10 .vjs-icon-placeholder:before{content:""}.vjs-icon-replay-30,.video-js .vjs-skip-backward-30 .vjs-icon-placeholder{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-replay-30:before,.video-js .vjs-skip-backward-30 .vjs-icon-placeholder:before{content:""}.vjs-icon-forward-5,.video-js .vjs-skip-forward-5 .vjs-icon-placeholder{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-forward-5:before,.video-js .vjs-skip-forward-5 .vjs-icon-placeholder:before{content:""}.vjs-icon-forward-10,.video-js .vjs-skip-forward-10 .vjs-icon-placeholder{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-forward-10:before,.video-js .vjs-skip-forward-10 .vjs-icon-placeholder:before{content:""}.vjs-icon-forward-30,.video-js .vjs-skip-forward-30 .vjs-icon-placeholder{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-forward-30:before,.video-js .vjs-skip-forward-30 .vjs-icon-placeholder:before{content:""}.vjs-icon-audio,.video-js .vjs-audio-button .vjs-icon-placeholder{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-audio:before,.video-js .vjs-audio-button .vjs-icon-placeholder:before{content:""}.vjs-icon-next-item{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-next-item:before{content:""}.vjs-icon-previous-item{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-previous-item:before{content:""}.vjs-icon-shuffle{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-shuffle:before{content:""}.vjs-icon-cast{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-cast:before{content:""}.vjs-icon-picture-in-picture-enter,.video-js .vjs-picture-in-picture-control .vjs-icon-placeholder{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-picture-in-picture-enter:before,.video-js .vjs-picture-in-picture-control .vjs-icon-placeholder:before{content:""}.vjs-icon-picture-in-picture-exit,.video-js.vjs-picture-in-picture .vjs-picture-in-picture-control .vjs-icon-placeholder{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-picture-in-picture-exit:before,.video-js.vjs-picture-in-picture .vjs-picture-in-picture-control .vjs-icon-placeholder:before{content:""}.vjs-icon-facebook{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-facebook:before{content:""}.vjs-icon-linkedin{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-linkedin:before{content:""}.vjs-icon-twitter{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-twitter:before{content:""}.vjs-icon-tumblr{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-tumblr:before{content:""}.vjs-icon-pinterest{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-pinterest:before{content:""}.vjs-icon-audio-description,.video-js .vjs-descriptions-button .vjs-icon-placeholder{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-audio-description:before,.video-js .vjs-descriptions-button .vjs-icon-placeholder:before{content:""}.video-js{vertical-align:top;box-sizing:border-box;color:#fff;word-break:initial;background-color:#000;padding:0;font-family:Arial,Helvetica,sans-serif;font-size:10px;font-style:normal;font-weight:400;line-height:1;display:inline-block;position:relative}.video-js:-moz-full-screen{position:absolute}.video-js:-webkit-full-screen{width:100%!important;height:100%!important}.video-js[tabindex="-1"]{outline:none}.video-js *,.video-js :before,.video-js :after{box-sizing:inherit}.video-js ul{font-family:inherit;font-size:inherit;line-height:inherit;margin:0;list-style-position:outside}.video-js.vjs-fluid,.video-js.vjs-16-9,.video-js.vjs-4-3,.video-js.vjs-9-16,.video-js.vjs-1-1{width:100%;max-width:100%}.video-js.vjs-fluid:not(.vjs-audio-only-mode),.video-js.vjs-16-9:not(.vjs-audio-only-mode),.video-js.vjs-4-3:not(.vjs-audio-only-mode),.video-js.vjs-9-16:not(.vjs-audio-only-mode),.video-js.vjs-1-1:not(.vjs-audio-only-mode){height:0}.video-js.vjs-16-9:not(.vjs-audio-only-mode){padding-top:56.25%}.video-js.vjs-4-3:not(.vjs-audio-only-mode){padding-top:75%}.video-js.vjs-9-16:not(.vjs-audio-only-mode){padding-top:177.778%}.video-js.vjs-1-1:not(.vjs-audio-only-mode){padding-top:100%}.video-js.vjs-fill:not(.vjs-audio-only-mode){width:100%;height:100%}.video-js .vjs-tech{width:100%;height:100%;position:absolute;top:0;left:0}.video-js.vjs-audio-only-mode .vjs-tech{display:none}body.vjs-full-window,body.vjs-pip-window{height:100%;margin:0;padding:0}.vjs-full-window .video-js.vjs-fullscreen,body.vjs-pip-window .video-js{z-index:1000;position:fixed;inset:0;overflow:hidden}.video-js.vjs-fullscreen:not(.vjs-ios-native-fs),body.vjs-pip-window .video-js{display:block;width:100%!important;height:100%!important;padding-top:0!important}.video-js.vjs-fullscreen.vjs-user-inactive{cursor:none}.vjs-pip-container .vjs-pip-text{text-align:center;background-color:#000000b3;width:100%;padding:.5em;font-size:2em;position:absolute;bottom:10%}.vjs-layout-tiny.vjs-pip-container .vjs-pip-text,.vjs-layout-x-small.vjs-pip-container .vjs-pip-text,.vjs-layout-small.vjs-pip-container .vjs-pip-text{font-size:1.4em;bottom:0}.vjs-hidden{display:none!important}.vjs-disabled{opacity:.5;cursor:default}.video-js .vjs-offscreen{width:1px;height:1px;position:absolute;top:0;left:-9999px}.vjs-lock-showing{opacity:1!important;visibility:visible!important;display:block!important}.vjs-no-js{color:#fff;text-align:center;background-color:#000;width:300px;height:150px;margin:0 auto;padding:20px;font-family:Arial,Helvetica,sans-serif;font-size:18px}.vjs-no-js a,.vjs-no-js a:visited{color:#66a8cc}.video-js .vjs-big-play-button{cursor:pointer;opacity:1;background-color:#2b333fb3;border:.06666em solid #fff;border-radius:.3em;width:3em;height:1.63332em;margin-top:-.81666em;margin-left:-1.5em;padding:0;font-size:3em;line-height:1.5em;transition:all .4s;display:block;position:absolute;top:50%;left:50%}.vjs-big-play-button .vjs-svg-icon{width:1em;height:1em;line-height:1;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.video-js:hover .vjs-big-play-button,.video-js .vjs-big-play-button:focus{background-color:#73859f80;border-color:#fff;transition:all}.vjs-controls-disabled .vjs-big-play-button,.vjs-has-started .vjs-big-play-button,.vjs-using-native-controls .vjs-big-play-button,.vjs-error .vjs-big-play-button{display:none}.vjs-has-started.vjs-paused.vjs-show-big-play-button-on-pause:not(.vjs-seeking,.vjs-scrubbing,.vjs-error) .vjs-big-play-button{display:block}.video-js button{color:inherit;font-size:inherit;line-height:inherit;text-transform:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:0 0;border:none;text-decoration:none;transition:none;display:inline-block}.video-js.vjs-spatial-navigation-enabled .vjs-button:focus{box-shadow:none;outline:.0625em solid #fff}.vjs-control .vjs-button{width:100%;height:100%}.video-js .vjs-control.vjs-close-button{cursor:pointer;z-index:2;height:3em;position:absolute;top:.5em;right:0}.video-js .vjs-modal-dialog{background:linear-gradient(#000c,#fff0);overflow:auto}.video-js .vjs-modal-dialog>*{box-sizing:border-box}.vjs-modal-dialog .vjs-modal-dialog-content{z-index:1;padding:20px 24px;font-size:1.2em;line-height:1.5}.vjs-menu-button{cursor:pointer}.vjs-menu-button.vjs-disabled{cursor:default}.vjs-workinghover .vjs-menu-button.vjs-disabled:hover .vjs-menu{display:none}.vjs-menu .vjs-menu-content{margin:0;padding:0;font-family:Arial,Helvetica,sans-serif;display:block;overflow:auto}.vjs-menu .vjs-menu-content>*{box-sizing:border-box}.vjs-scrubbing .vjs-control.vjs-menu-button:hover .vjs-menu{display:none}.vjs-menu li{text-align:center;text-transform:lowercase;justify-content:center;margin:0;padding:.2em 0;font-size:1.2em;line-height:1.4em;list-style:none;display:flex}.vjs-menu li.vjs-menu-item:focus,.vjs-menu li.vjs-menu-item:hover,.js-focus-visible .vjs-menu li.vjs-menu-item:hover{background-color:#73859f80}.vjs-menu li.vjs-selected,.vjs-menu li.vjs-selected:focus,.vjs-menu li.vjs-selected:hover,.js-focus-visible .vjs-menu li.vjs-selected:hover{color:#2b333f;background-color:#fff}.vjs-menu li.vjs-selected .vjs-svg-icon,.vjs-menu li.vjs-selected:focus .vjs-svg-icon,.vjs-menu li.vjs-selected:hover .vjs-svg-icon,.js-focus-visible .vjs-menu li.vjs-selected:hover .vjs-svg-icon{fill:#000}.video-js .vjs-menu :not(.vjs-selected):focus:not(:focus-visible),.js-focus-visible .vjs-menu :not(.vjs-selected):focus:not(.focus-visible){background:0 0}.vjs-menu li.vjs-menu-title{text-align:center;text-transform:uppercase;cursor:default;margin:0 0 .3em;padding:0;font-size:1em;font-weight:700;line-height:2em}.vjs-menu-button-popup .vjs-menu{border-top-color:#2b333fb3;width:10em;height:0;margin-bottom:1.5em;display:none;position:absolute;bottom:0;left:-3em}.vjs-pip-window .vjs-menu-button-popup .vjs-menu{left:unset;right:1em}.vjs-menu-button-popup .vjs-menu .vjs-menu-content{background-color:#2b333fb3;width:100%;max-height:15em;position:absolute;bottom:1.5em}.vjs-layout-tiny .vjs-menu-button-popup .vjs-menu .vjs-menu-content,.vjs-layout-x-small .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:5em}.vjs-layout-small .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:10em}.vjs-layout-medium .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:14em}.vjs-layout-large .vjs-menu-button-popup .vjs-menu .vjs-menu-content,.vjs-layout-x-large .vjs-menu-button-popup .vjs-menu .vjs-menu-content,.vjs-layout-huge .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:25em}.vjs-workinghover .vjs-menu-button-popup.vjs-hover .vjs-menu,.vjs-menu-button-popup .vjs-menu.vjs-lock-showing{display:block}.video-js .vjs-menu-button-inline{transition:all .4s;overflow:hidden}.video-js .vjs-menu-button-inline:before{width:2.22222em}.video-js .vjs-menu-button-inline:hover,.video-js .vjs-menu-button-inline:focus,.video-js .vjs-menu-button-inline.vjs-slider-active{width:12em}.vjs-menu-button-inline .vjs-menu{opacity:0;width:auto;height:100%;margin:0;padding:0;transition:all .4s;position:absolute;top:0;left:4em}.vjs-menu-button-inline:hover .vjs-menu,.vjs-menu-button-inline:focus .vjs-menu,.vjs-menu-button-inline.vjs-slider-active .vjs-menu{opacity:1;display:block}.vjs-menu-button-inline .vjs-menu-content{width:auto;height:100%;margin:0;overflow:hidden}.video-js .vjs-control-bar{background-color:#2b333fb3;width:100%;height:3em;display:none;position:absolute;bottom:0;left:0;right:0}.video-js.vjs-spatial-navigation-enabled .vjs-control-bar{gap:1px}.video-js:not(.vjs-controls-disabled,.vjs-using-native-controls,.vjs-error) .vjs-control-bar.vjs-lock-showing{display:flex!important}.vjs-has-started .vjs-control-bar,.vjs-audio-only-mode .vjs-control-bar{visibility:visible;opacity:1;transition:visibility .1s,opacity .1s;display:flex}.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{visibility:visible;opacity:0;pointer-events:none;transition:visibility 1s,opacity 1s}.vjs-controls-disabled .vjs-control-bar,.vjs-using-native-controls .vjs-control-bar,.vjs-error .vjs-control-bar{display:none!important}.vjs-audio.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar,.vjs-audio-only-mode.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{opacity:1;visibility:visible;pointer-events:auto}.video-js .vjs-control{text-align:center;flex:none;width:4em;height:100%;margin:0;padding:0;position:relative}.video-js .vjs-control.vjs-visible-text{width:auto;padding-left:1em;padding-right:1em}.vjs-button>.vjs-icon-placeholder:before{font-size:1.8em;line-height:1.67}.vjs-button>.vjs-icon-placeholder{display:block}.vjs-button>.vjs-svg-icon{display:inline-block}.video-js .vjs-control:focus:before,.video-js .vjs-control:hover:before,.video-js .vjs-control:focus{text-shadow:0 0 1em #fff}.video-js :not(.vjs-visible-text)>.vjs-control-text{clip:rect(0 0 0 0);border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.video-js .vjs-custom-control-spacer{display:none}.video-js .vjs-progress-control{cursor:pointer;touch-action:none;flex:auto;align-items:center;min-width:4em;display:flex}.video-js .vjs-progress-control.disabled{cursor:default}.vjs-live .vjs-progress-control{display:none}.vjs-liveui .vjs-progress-control{align-items:center;display:flex}.video-js .vjs-progress-holder{flex:auto;height:.3em;transition:all .2s}.video-js .vjs-progress-control .vjs-progress-holder{margin:0 10px}.video-js .vjs-progress-control:hover .vjs-progress-holder,.video-js.vjs-scrubbing.vjs-touch-enabled .vjs-progress-control .vjs-progress-holder{font-size:1.66667em}.video-js .vjs-progress-control:hover .vjs-progress-holder.disabled{font-size:1em}.video-js .vjs-progress-holder .vjs-play-progress,.video-js .vjs-progress-holder .vjs-load-progress,.video-js .vjs-progress-holder .vjs-load-progress div{width:0;height:100%;margin:0;padding:0;display:block;position:absolute}.video-js .vjs-play-progress{background-color:#fff}.video-js .vjs-play-progress:before{z-index:1;font-size:.9em;line-height:.35em;position:absolute;right:-.5em}.vjs-svg-icons-enabled .vjs-play-progress:before{content:none!important}.vjs-play-progress .vjs-svg-icon{pointer-events:none;z-index:1;width:.9em;height:.9em;line-height:.15em;position:absolute;top:-.35em;right:-.4em}.video-js .vjs-load-progress{background:#73859f80}.video-js .vjs-load-progress div{background:#73859fbf}.video-js .vjs-time-tooltip{color:#000;float:right;pointer-events:none;visibility:hidden;z-index:1;background-color:#fffc;border-radius:.3em;padding:6px 8px 8px;font-family:Arial,Helvetica,sans-serif;font-size:1em;position:absolute;top:-3.4em}.video-js .vjs-progress-holder:focus .vjs-time-tooltip{display:none}.video-js .vjs-progress-control:hover .vjs-time-tooltip,.video-js .vjs-progress-control:hover .vjs-progress-holder:focus .vjs-time-tooltip,.video-js.vjs-scrubbing.vjs-touch-enabled .vjs-progress-control .vjs-time-tooltip{visibility:visible;font-size:.6em;display:block}.video-js .vjs-progress-control.disabled:hover .vjs-time-tooltip{font-size:1em}.video-js .vjs-progress-control .vjs-mouse-display{z-index:1;background-color:#000;width:1px;height:100%;display:none;position:absolute}.video-js .vjs-progress-control:hover .vjs-mouse-display,.video-js.vjs-scrubbing.vjs-touch-enabled .vjs-progress-control .vjs-mouse-display{display:block}.video-js.vjs-user-inactive .vjs-progress-control .vjs-mouse-display,.video-js.vjs-touch-enabled:not(.vjs-scrubbing) .vjs-progress-control .vjs-mouse-display{visibility:hidden;opacity:0;transition:visibility 1s,opacity 1s}.vjs-mouse-display .vjs-time-tooltip{color:#fff;background-color:#000c}.video-js .vjs-slider{cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:#73859f80;margin:0 .45em;padding:0;position:relative}.video-js .vjs-slider.disabled{cursor:default}.video-js .vjs-slider:focus{text-shadow:0 0 1em #fff;box-shadow:0 0 1em #fff}.video-js.vjs-spatial-navigation-enabled .vjs-slider:focus{outline:.0625em solid #fff}.video-js .vjs-mute-control{cursor:pointer;flex:none}.video-js .vjs-volume-control{cursor:pointer;margin-right:1em;display:flex}.video-js .vjs-volume-control.vjs-volume-horizontal{width:5em}.video-js .vjs-volume-panel .vjs-volume-control{visibility:visible;opacity:0;width:1px;height:1px;margin-left:-1px}.video-js .vjs-volume-panel{transition:width 1s}.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control,.video-js .vjs-volume-panel:active .vjs-volume-control,.video-js .vjs-volume-panel:focus .vjs-volume-control,.video-js .vjs-volume-panel .vjs-volume-control:active,.video-js .vjs-volume-panel.vjs-hover .vjs-mute-control~.vjs-volume-control,.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active{visibility:visible;opacity:1;transition:visibility .1s,opacity .1s,height .1s,width .1s,left,top;position:relative}.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-horizontal,.video-js .vjs-volume-panel.vjs-hover .vjs-mute-control~.vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-horizontal{width:5em;height:3em;margin-right:0}.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-vertical,.video-js .vjs-volume-panel.vjs-hover .vjs-mute-control~.vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-vertical{transition:left;left:-3.5em}.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover,.video-js .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active{width:10em;transition:width .1s}.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-mute-toggle-only{width:4em}.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-vertical{width:3em;height:8em;transition:visibility 1s,opacity 1s,height 1s 1s,width 1s 1s,left 1s 1s,top 1s 1s;left:-3000em}.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal{transition:visibility 1s,opacity 1s,height 1s 1s,width 1s,left 1s 1s,top 1s 1s}.video-js .vjs-volume-panel{display:flex}.video-js .vjs-volume-bar{margin:1.35em .45em}.vjs-volume-bar.vjs-slider-horizontal{width:5em;height:.3em}.vjs-volume-bar.vjs-slider-vertical{width:.3em;height:5em;margin:1.35em auto}.video-js .vjs-volume-level{background-color:#fff;position:absolute;bottom:0;left:0}.video-js .vjs-volume-level:before{z-index:1;font-size:.9em;position:absolute}.vjs-slider-vertical .vjs-volume-level{width:.3em}.vjs-slider-vertical .vjs-volume-level:before{z-index:1;top:-.5em;left:-.3em}.vjs-svg-icons-enabled .vjs-volume-level:before{content:none}.vjs-volume-level .vjs-svg-icon{pointer-events:none;z-index:1;width:.9em;height:.9em;position:absolute}.vjs-slider-horizontal .vjs-volume-level{height:.3em}.vjs-slider-horizontal .vjs-volume-level:before{line-height:.35em;right:-.5em}.vjs-slider-horizontal .vjs-volume-level .vjs-svg-icon{right:-.3em;transform:translateY(-50%)}.vjs-slider-vertical .vjs-volume-level .vjs-svg-icon{top:-.55em;transform:translate(-50%)}.video-js .vjs-volume-panel.vjs-volume-panel-vertical{width:4em}.vjs-volume-bar.vjs-slider-vertical .vjs-volume-level{height:100%}.vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level{width:100%}.video-js .vjs-volume-vertical{background-color:#2b333fb3;width:3em;height:8em;bottom:8em}.video-js .vjs-volume-horizontal .vjs-menu{left:-2em}.video-js .vjs-volume-tooltip{color:#000;float:right;pointer-events:none;visibility:hidden;z-index:1;background-color:#fffc;border-radius:.3em;padding:6px 8px 8px;font-family:Arial,Helvetica,sans-serif;font-size:1em;position:absolute;top:-3.4em}.video-js .vjs-volume-control:hover .vjs-volume-tooltip,.video-js .vjs-volume-control:hover .vjs-progress-holder:focus .vjs-volume-tooltip{visibility:visible;font-size:1em;display:block}.video-js .vjs-volume-vertical:hover .vjs-volume-tooltip,.video-js .vjs-volume-vertical:hover .vjs-progress-holder:focus .vjs-volume-tooltip{top:-12px;left:1em}.video-js .vjs-volume-control.disabled:hover .vjs-volume-tooltip{font-size:1em}.video-js .vjs-volume-control .vjs-mouse-display{z-index:1;background-color:#000;width:100%;height:1px;display:none;position:absolute}.video-js .vjs-volume-horizontal .vjs-mouse-display{width:1px;height:100%}.video-js .vjs-volume-control:hover .vjs-mouse-display{display:block}.video-js.vjs-user-inactive .vjs-volume-control .vjs-mouse-display{visibility:hidden;opacity:0;transition:visibility 1s,opacity 1s}.vjs-mouse-display .vjs-volume-tooltip{color:#fff;background-color:#000c}.vjs-poster{vertical-align:middle;cursor:pointer;height:100%;margin:0;padding:0;display:inline-block;position:absolute;inset:0}.vjs-has-started .vjs-poster,.vjs-using-native-controls .vjs-poster{display:none}.vjs-audio.vjs-has-started .vjs-poster,.vjs-has-started.vjs-audio-poster-mode .vjs-poster,.vjs-pip-container.vjs-has-started .vjs-poster{display:block}.vjs-poster img{object-fit:contain;width:100%;height:100%}.video-js .vjs-live-control{flex:auto;align-items:flex-start;font-size:1em;line-height:3em;display:flex}.video-js:not(.vjs-live) .vjs-live-control,.video-js.vjs-liveui .vjs-live-control{display:none}.video-js .vjs-seek-to-live-control{cursor:pointer;flex:none;align-items:center;width:auto;min-width:4em;height:100%;padding-left:.5em;padding-right:.5em;font-size:1em;line-height:3em;display:inline-flex}.video-js.vjs-live:not(.vjs-liveui) .vjs-seek-to-live-control,.video-js:not(.vjs-live) .vjs-seek-to-live-control{display:none}.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge{cursor:auto}.vjs-seek-to-live-control .vjs-icon-placeholder{color:#888;margin-right:.5em}.vjs-svg-icons-enabled .vjs-seek-to-live-control{line-height:0}.vjs-seek-to-live-control .vjs-svg-icon{pointer-events:none;fill:#888;width:1em;height:1em}.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge .vjs-icon-placeholder{color:red}.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge .vjs-svg-icon{fill:red}.video-js .vjs-time-control{flex:none;width:auto;min-width:2em;padding-left:1em;padding-right:1em;font-size:1em;line-height:3em}.vjs-live .vjs-time-control,.vjs-live .vjs-time-divider,.video-js .vjs-current-time,.video-js .vjs-duration{display:none}.vjs-time-divider{line-height:3em;display:none}.vjs-normalise-time-controls:not(.vjs-live) .vjs-time-control{display:flex}.video-js .vjs-play-control{cursor:pointer}.video-js .vjs-play-control .vjs-icon-placeholder{flex:none}.vjs-text-track-display{pointer-events:none;position:absolute;inset:0 0 3em}.vjs-error .vjs-text-track-display{display:none}.video-js.vjs-controls-disabled .vjs-text-track-display,.video-js.vjs-user-inactive.vjs-playing .vjs-text-track-display{bottom:1em}.video-js .vjs-text-track{text-align:center;margin-bottom:.1em;font-size:1.4em}.vjs-subtitles{color:#fff}.vjs-captions{color:#fc6}.vjs-tt-cue{display:block}video::-webkit-media-text-track-display{transform:translateY(-3em)}.video-js.vjs-controls-disabled video::-webkit-media-text-track-display,.video-js.vjs-user-inactive.vjs-playing video::-webkit-media-text-track-display{transform:translateY(-1.5em)}.video-js.vjs-force-center-align-cues .vjs-text-track-cue{text-align:center!important;width:80%!important}@supports not (inset:10px){.video-js .vjs-text-track-display>div{inset:0}}.video-js .vjs-picture-in-picture-control{cursor:pointer;flex:none}.video-js.vjs-audio-only-mode .vjs-picture-in-picture-control,.vjs-pip-window .vjs-picture-in-picture-control{display:none}.video-js .vjs-fullscreen-control{cursor:pointer;flex:none}.video-js.vjs-audio-only-mode .vjs-fullscreen-control,.vjs-pip-window .vjs-fullscreen-control{display:none}.vjs-playback-rate>.vjs-menu-button,.vjs-playback-rate .vjs-playback-rate-value{width:100%;height:100%;position:absolute;top:0;left:0}.vjs-playback-rate .vjs-playback-rate-value{pointer-events:none;text-align:center;font-size:1.5em;line-height:2}.vjs-playback-rate .vjs-menu{width:4em;left:0}.vjs-error .vjs-error-display .vjs-modal-dialog-content{text-align:center;font-size:1.4em}.vjs-loading-spinner{opacity:.85;text-align:left;box-sizing:border-box;visibility:hidden;background-clip:padding-box;border:.6em solid #2b333fb3;border-radius:50%;width:5em;height:5em;display:none;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.vjs-seeking .vjs-loading-spinner,.vjs-waiting .vjs-loading-spinner{justify-content:center;align-items:center;animation:0s linear .3s forwards vjs-spinner-show;display:flex}.vjs-error .vjs-loading-spinner{display:none}.vjs-loading-spinner:before,.vjs-loading-spinner:after{content:"";box-sizing:inherit;width:inherit;height:inherit;border-radius:inherit;opacity:1;border:inherit;border-color:#fff #0000 #0000;position:absolute}.vjs-seeking .vjs-loading-spinner:before,.vjs-seeking .vjs-loading-spinner:after,.vjs-waiting .vjs-loading-spinner:before,.vjs-waiting .vjs-loading-spinner:after{animation:1.1s cubic-bezier(.6,.2,0,.8) infinite vjs-spinner-spin,1.1s linear infinite vjs-spinner-fade}.vjs-seeking .vjs-loading-spinner:before,.vjs-waiting .vjs-loading-spinner:before{border-top-color:#fff}.vjs-seeking .vjs-loading-spinner:after,.vjs-waiting .vjs-loading-spinner:after{border-top-color:#fff;animation-delay:.44s}@keyframes vjs-spinner-show{to{visibility:visible}}@keyframes vjs-spinner-spin{to{transform:rotate(360deg)}}@keyframes vjs-spinner-fade{0%{border-top-color:#73859f}20%{border-top-color:#73859f}35%{border-top-color:#fff}60%{border-top-color:#73859f}to{border-top-color:#73859f}}.video-js.vjs-audio-only-mode .vjs-captions-button{display:none}.vjs-chapters-button .vjs-menu ul{width:24em}.video-js.vjs-audio-only-mode .vjs-descriptions-button{display:none}.vjs-subs-caps-button+.vjs-menu .vjs-captions-menu-item .vjs-svg-icon{width:1.5em;height:1.5em}.video-js .vjs-subs-caps-button+.vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder{vertical-align:middle;margin-bottom:-.1em;display:inline-block}.video-js .vjs-subs-caps-button+.vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before{content:"";font-family:VideoJS;font-size:1.5em;line-height:inherit}.video-js.vjs-audio-only-mode .vjs-subs-caps-button{display:none}.video-js .vjs-audio-button+.vjs-menu .vjs-descriptions-menu-item .vjs-menu-item-text .vjs-icon-placeholder,.video-js .vjs-audio-button+.vjs-menu .vjs-main-desc-menu-item .vjs-menu-item-text .vjs-icon-placeholder{vertical-align:middle;margin-bottom:-.1em;display:inline-block}.video-js .vjs-audio-button+.vjs-menu .vjs-descriptions-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before,.video-js .vjs-audio-button+.vjs-menu .vjs-main-desc-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before{content:" ";font-family:VideoJS;font-size:1.5em;line-height:inherit}.video-js.vjs-layout-small .vjs-current-time,.video-js.vjs-layout-small .vjs-time-divider,.video-js.vjs-layout-small .vjs-duration,.video-js.vjs-layout-small .vjs-remaining-time,.video-js.vjs-layout-small .vjs-playback-rate,.video-js.vjs-layout-small .vjs-volume-control,.video-js.vjs-layout-x-small .vjs-current-time,.video-js.vjs-layout-x-small .vjs-time-divider,.video-js.vjs-layout-x-small .vjs-duration,.video-js.vjs-layout-x-small .vjs-remaining-time,.video-js.vjs-layout-x-small .vjs-playback-rate,.video-js.vjs-layout-x-small .vjs-volume-control,.video-js.vjs-layout-tiny .vjs-current-time,.video-js.vjs-layout-tiny .vjs-time-divider,.video-js.vjs-layout-tiny .vjs-duration,.video-js.vjs-layout-tiny .vjs-remaining-time,.video-js.vjs-layout-tiny .vjs-playback-rate,.video-js.vjs-layout-tiny .vjs-volume-control{display:none}.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover,.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover,.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover,.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover,.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:hover,.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover{width:auto;width:initial}.video-js.vjs-layout-x-small .vjs-progress-control,.video-js.vjs-layout-tiny .vjs-progress-control{display:none}.video-js.vjs-layout-x-small .vjs-custom-control-spacer{flex:auto;display:block}.vjs-modal-dialog.vjs-text-track-settings{color:#fff;background-color:#2b333fbf;height:70%}.vjs-spatial-navigation-enabled .vjs-modal-dialog.vjs-text-track-settings{height:80%}.vjs-error .vjs-text-track-settings{display:none}.vjs-text-track-settings .vjs-modal-dialog-content{display:table}.vjs-text-track-settings .vjs-track-settings-colors,.vjs-text-track-settings .vjs-track-settings-font,.vjs-text-track-settings .vjs-track-settings-controls{display:table-cell}.vjs-text-track-settings .vjs-track-settings-controls{text-align:right;vertical-align:bottom}@supports (display:grid){.vjs-text-track-settings .vjs-modal-dialog-content{grid-template-rows:1fr;grid-template-columns:1fr 1fr;padding:20px 24px 0;display:grid}.vjs-track-settings-controls .vjs-default-button{margin-bottom:20px}.vjs-text-track-settings .vjs-track-settings-controls{grid-column:1/-1}.vjs-layout-small .vjs-text-track-settings .vjs-modal-dialog-content,.vjs-layout-x-small .vjs-text-track-settings .vjs-modal-dialog-content,.vjs-layout-tiny .vjs-text-track-settings .vjs-modal-dialog-content{grid-template-columns:1fr}}.vjs-text-track-settings select{font-size:inherit}.vjs-track-setting>select{margin-bottom:.5em;margin-right:1em}.vjs-text-track-settings fieldset{border:none;margin:10px}.vjs-text-track-settings fieldset span{padding:0 .6em .8em;display:inline-block}.vjs-text-track-settings fieldset span>select{max-width:7.3em}.vjs-text-track-settings legend{color:#fff;font-size:1.2em;font-weight:700}.vjs-text-track-settings .vjs-label{margin:0 .5em .5em 0}.vjs-track-settings-controls button:focus,.vjs-track-settings-controls button:active{background-image:linear-gradient(#73859f 0%,#fff 12%);outline-width:medium;outline-style:solid}.vjs-track-settings-controls button:hover{color:#2b333fbf}.vjs-track-settings-controls button{color:#2b333f;cursor:pointer;background-color:#fff;background-image:linear-gradient(-180deg,#fff 88%,#73859f 100%);border-radius:2px}.vjs-track-settings-controls .vjs-default-button{margin-right:1em}.vjs-title-bar{pointer-events:none;background:linear-gradient(#000000e6 0%,#000000b3 60%,#0000 100%);width:100%;padding:.666em 1.333em 4em;font-size:1.2em;line-height:1.5;transition:opacity .1s;position:absolute;top:0}.vjs-error .vjs-title-bar{display:none}.vjs-title-bar-title,.vjs-title-bar-description{text-overflow:ellipsis;white-space:nowrap;margin:0;overflow:hidden}.vjs-title-bar-title{margin-bottom:.333em;font-weight:700}.vjs-playing.vjs-user-inactive .vjs-title-bar{opacity:0;transition:opacity 1s}.video-js .vjs-skip-forward-5,.video-js .vjs-skip-forward-10,.video-js .vjs-skip-forward-30,.video-js .vjs-skip-backward-5,.video-js .vjs-skip-backward-10,.video-js .vjs-skip-backward-30{cursor:pointer}.video-js .vjs-transient-button{cursor:pointer;opacity:1;background-color:#32323280;justify-content:center;align-items:center;height:3em;transition:opacity 1s;display:flex;position:absolute}.video-js:not(.vjs-has-started) .vjs-transient-button{display:none}.video-js.not-hover .vjs-transient-button:not(.force-display),.video-js.vjs-user-inactive .vjs-transient-button:not(.force-display){opacity:0}.video-js .vjs-transient-button span{padding:0 .5em}.video-js .vjs-transient-button.vjs-left{left:1em}.video-js .vjs-transient-button.vjs-right{right:1em}.video-js .vjs-transient-button.vjs-top{top:1em}.video-js .vjs-transient-button.vjs-near-top{top:4em}.video-js .vjs-transient-button.vjs-bottom{bottom:4em}.video-js .vjs-transient-button:hover{background-color:#323232e6}@media print{.video-js>:not(.vjs-tech):not(.vjs-poster){visibility:hidden}}.vjs-resize-manager{z-index:-1000;border:none;width:100%;height:100%;position:absolute;top:0;left:0}.js-focus-visible .video-js :focus:not(.focus-visible),.video-js :focus:not(:focus-visible){outline:none}.player[data-v-4ab3cf75]{user-select:none;-webkit-tap-highlight-color:transparent;width:100%;max-width:800px;margin:0 auto}[data-vjs-player][data-v-4ab3cf75]{position:absolute;inset:0}.player__shell[data-v-4ab3cf75]{cursor:pointer;background:#000;border-radius:12px;position:relative;overflow:hidden}.player__shell--portrait[data-v-4ab3cf75]{width:auto;max-height:75vh;margin:0 auto}.player__native-play[data-v-4ab3cf75]{z-index:3;pointer-events:none;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.player__native-play[data-v-4ab3cf75]>*{pointer-events:auto}.player__shell[data-v-4ab3cf75]:fullscreen{border-radius:0;width:100vw;height:100vh}.player__shell:fullscreen .video-js[data-v-4ab3cf75],.player__shell:fullscreen [data-vjs-player][data-v-4ab3cf75]{width:100%!important;height:100%!important}.video-js{background:#000;border-radius:12px;overflow:hidden}.video-js .vjs-big-play-button,.video-js .vjs-control-bar,.video-js .vjs-error-display{display:none!important}.video-js .vjs-poster{background-size:cover;transition:opacity .3s}.video-js .vjs-poster img{object-fit:cover}.video-js.vjs-has-started .vjs-poster{opacity:0;pointer-events:none}.vjs-dailymotion .vjs-tech>*,.vjs-dailymotion .dailymotion-player-root,.vjs-dailymotion iframe{width:100%!important;height:100%!important;position:absolute!important;inset:0!important}.vjs-vimeo .vjs-tech>div{width:100%!important;height:100%!important;padding:0!important;position:absolute!important;top:0!important;left:0!important}.vjs-vimeo iframe{width:100%!important;height:100%!important;position:absolute!important;top:0!important;left:0!important}.video-js .ima-ad-container{pointer-events:none;z-index:20!important;width:100%!important;height:100%!important;position:absolute!important;top:0!important;left:0!important}.vjs-ad-playing .ima-ad-container{pointer-events:auto}.vjs-ad-playing .overlay__tap-capture,.vjs-ad-playing .overlay__hud,.vjs-ad-playing .overlay__spinner{display:none!important}.stage-wrapper[data-v-fb8c86cf]{width:100%;max-width:800px;margin:0 auto}.stage[data-v-fb8c86cf]{width:100%}.stage__dismiss[data-v-fb8c86cf]{z-index:10;backdrop-filter:blur(6px);color:#fff;cursor:pointer;background:#0009;border:none;border-radius:50%;justify-content:center;align-items:center;width:26px;height:26px;transition:background .15s;display:flex;position:absolute;top:.4rem;right:.4rem}.stage__dismiss[data-v-fb8c86cf]:hover{background:#000000d9}.stage__dismiss svg[data-v-fb8c86cf]{width:14px;height:14px}.stage--minified[data-v-fb8c86cf]{z-index:100;border-radius:12px;width:300px;max-width:300px;margin:0;position:fixed;bottom:1.25rem;right:1.25rem;overflow:hidden;box-shadow:0 8px 32px #0009}.stage__idle[data-v-fb8c86cf]{cursor:pointer;background:#111;border-radius:12px;justify-content:center;align-items:center;width:100%;display:flex;position:relative;overflow:hidden}.stage__idle-poster[data-v-fb8c86cf]{object-fit:cover;width:100%;height:100%;position:absolute;inset:0}.stage__idle-scrim[data-v-fb8c86cf]{background:#00000073;transition:background .15s;position:absolute;inset:0}.stage__idle:hover .stage__idle-scrim[data-v-fb8c86cf]{background:#0000004d}.stage__idle-body[data-v-fb8c86cf]{text-align:center;flex-direction:column;align-items:center;gap:.75rem;padding:1rem;display:flex;position:relative}.stage__idle-btn[data-v-fb8c86cf]{backdrop-filter:blur(4px);color:#fff;background:#0009;border-radius:50%;justify-content:center;align-items:center;width:64px;height:64px;transition:transform .15s,background .15s;display:flex}.stage__idle:hover .stage__idle-btn[data-v-fb8c86cf]{background:#000c;transform:scale(1.1)}.stage__idle-btn svg[data-v-fb8c86cf]{width:32px;height:32px}.stage__idle-title[data-v-fb8c86cf]{color:#f1f5f9;text-shadow:0 1px 4px #000c;font-size:1rem;font-weight:600}.stage__idle-empty[data-v-fb8c86cf]{color:#64748b;font-size:.95rem}.placeholder[data-v-dbcb4f82]{width:100%}.placeholder__shell[data-v-dbcb4f82]{cursor:pointer;background:#111;border-radius:8px;position:relative;overflow:hidden}.placeholder__shell--portrait[data-v-dbcb4f82]{width:auto;max-height:75vh;margin:0 auto}.placeholder__shell--active[data-v-dbcb4f82]{outline-offset:2px;outline:2px solid #60a5fa}.placeholder__poster[data-v-dbcb4f82]{object-fit:cover;width:100%;height:100%;position:absolute;inset:0}.placeholder__scrim[data-v-dbcb4f82]{background:#00000059;transition:background .15s;position:absolute;inset:0}.placeholder__shell:hover .placeholder__scrim[data-v-dbcb4f82]{background:#00000026}.placeholder__btn-wrap[data-v-dbcb4f82]{pointer-events:none;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.placeholder__btn-wrap[data-v-dbcb4f82]>*{pointer-events:auto}.placeholder__footer[data-v-dbcb4f82]{pointer-events:none;background:linear-gradient(#0000 0%,#000c 100%);padding:1.5rem .75rem .6rem;position:absolute;bottom:0;left:0;right:0}.placeholder__title[data-v-dbcb4f82]{color:#f1f5f9;white-space:nowrap;text-overflow:ellipsis;text-shadow:0 1px 3px #0009;font-size:.8rem;font-weight:600;overflow:hidden}.placeholder__badge[data-v-dbcb4f82]{z-index:1;text-transform:uppercase;letter-spacing:.06em;color:#fff;border-radius:4px;padding:2px 6px;font-size:.6rem;font-weight:700;position:absolute;top:6px;left:6px}
|
package/package.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@munsonlabs/video-player",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"files": [
|
|
6
|
+
"dist"
|
|
7
|
+
],
|
|
8
|
+
"type": "module",
|
|
9
|
+
"module": "./dist/index.mjs",
|
|
10
|
+
"types": "./dist/index.d.mts",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"source": "./src/index.ts",
|
|
14
|
+
"import": "./dist/index.mjs",
|
|
15
|
+
"types": "./dist/index.d.mts"
|
|
16
|
+
},
|
|
17
|
+
"./element": {
|
|
18
|
+
"source": "./src/element/index.ts",
|
|
19
|
+
"import": "./dist/element.mjs",
|
|
20
|
+
"types": "./dist/element.d.mts"
|
|
21
|
+
},
|
|
22
|
+
"./style": {
|
|
23
|
+
"types": "./src/style.d.ts",
|
|
24
|
+
"import": "./dist/style.css"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"publishConfig": {
|
|
28
|
+
"access": "public"
|
|
29
|
+
},
|
|
30
|
+
"scripts": {
|
|
31
|
+
"build": "AUTO_ENTRIES=1 vp pack",
|
|
32
|
+
"dev": "AUTO_ENTRIES=1 vp pack --watch",
|
|
33
|
+
"clean": "rm -rf dist",
|
|
34
|
+
"lint": "vp lint",
|
|
35
|
+
"fmt": "vp fmt",
|
|
36
|
+
"typecheck": "vp check --types",
|
|
37
|
+
"check": "vp check",
|
|
38
|
+
"test": "vp test",
|
|
39
|
+
"test:watch": "vp test --watch"
|
|
40
|
+
},
|
|
41
|
+
"dependencies": {
|
|
42
|
+
"@vimeo/player": "^2.30.4",
|
|
43
|
+
"videojs-contrib-ads": "^7.5.2",
|
|
44
|
+
"videojs-ima": "^2.6.0"
|
|
45
|
+
},
|
|
46
|
+
"devDependencies": {
|
|
47
|
+
"@pugpigbolt/shipkit": "*",
|
|
48
|
+
"video.js": "^8.23.7",
|
|
49
|
+
"vue": "^3.5.34"
|
|
50
|
+
},
|
|
51
|
+
"peerDependencies": {
|
|
52
|
+
"video.js": ">=8",
|
|
53
|
+
"vue": ">=3"
|
|
54
|
+
}
|
|
55
|
+
}
|