@munsonlabs/video-player 0.0.12 → 0.1.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 +93 -38
- package/dist/element.d.mts +17 -0
- package/dist/element.mjs +1 -1
- package/dist/index.d.mts +24 -7
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -46,14 +46,14 @@ import '@munsonlabs/video-player/style'
|
|
|
46
46
|
|
|
47
47
|
### Playlists
|
|
48
48
|
|
|
49
|
-
Pass `playlist` (a `VideoEntry[]`, the same shape as a `VideoItem`'s props) to let the stage track the currently-playing video's position within it. This works alongside the existing `video-select`/`video-toggle` window events, not instead of them
|
|
49
|
+
Pass `playlist` (a `VideoEntry[]`, the same shape as a `VideoItem`'s props) to let the stage track the currently-playing video's position within it. This works alongside the existing `video-select`/`video-toggle` window events, not instead of them: position is derived by matching the current video's URL against the playlist on every read, so an external selection (e.g. clicking a `VideoItem` elsewhere on the page) naturally updates "where we are in the playlist" too, with nothing extra to keep in sync.
|
|
50
50
|
|
|
51
51
|
```vue
|
|
52
52
|
<VideoStage :playlist="videos" @state-change="onStateChange" />
|
|
53
53
|
```
|
|
54
54
|
|
|
55
|
-
- Auto-advance (playing the next playlist entry automatically once the current one fires `ended`, with no wraparound
|
|
56
|
-
- Whenever `playlist` is set, the controls popup automatically shows a skip-to-next button (only while there's a next entry) and the "Auto" toggle described above
|
|
55
|
+
- Auto-advance (playing the next playlist entry automatically once the current one fires `ended`, with no wraparound, so playback simply stops after the last entry) is fully owned by `VideoStage`: it's remembered in `localStorage` and toggled only via the controls popup's built-in "Auto" button (and, if enabled, the `action="autoplay"` HUD button, see [Actions](#actions)). There's no prop for it: every consumer gets the same persisted, in-player toggle with zero wiring.
|
|
56
|
+
- Whenever `playlist` is set, the controls popup automatically shows a skip-to-next button (only while there's a next entry) and the "Auto" toggle described above, with no extra markup needed.
|
|
57
57
|
- A template ref on `VideoStage` exposes `playNext()`, `playPrevious()`, `hasNext`, and `hasPrevious` too, for building your own next/previous buttons outside the player's own controls:
|
|
58
58
|
|
|
59
59
|
```vue
|
|
@@ -73,27 +73,30 @@ const stage = ref(null)
|
|
|
73
73
|
|
|
74
74
|
## VideoItem / VideoPlayer Props
|
|
75
75
|
|
|
76
|
-
| Prop
|
|
77
|
-
|
|
|
78
|
-
| `videoUrl`
|
|
79
|
-
| `title`
|
|
80
|
-
| `poster`
|
|
81
|
-
| `aspectRatio`
|
|
82
|
-
| `autoplay`
|
|
83
|
-
| `muted`
|
|
84
|
-
| `lazy`
|
|
85
|
-
| `nativeUi`
|
|
86
|
-
| `autoStage`
|
|
87
|
-
| `playbackRate`
|
|
88
|
-
| `adTagUrl`
|
|
89
|
-
| `
|
|
90
|
-
| `
|
|
91
|
-
|
|
92
|
-
|
|
76
|
+
| Prop | Type | Default | Description |
|
|
77
|
+
| ------------------- | -------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
|
|
78
|
+
| `videoUrl` | `string` | - | **Required.** The video URL or platform-specific URI (the platform is auto-detected from its shape, see [Platform URLs](#platform-urls)) |
|
|
79
|
+
| `title` | `string` | `''` | Video title |
|
|
80
|
+
| `poster` | `string` | `''` | Poster image URL |
|
|
81
|
+
| `aspectRatio` | `string` | `'16:9'` | e.g. `'16:9'`, `'9:16'`, `'4:3'` |
|
|
82
|
+
| `autoplay` | `boolean` | `false` | Autoplay on mount (mutes automatically) |
|
|
83
|
+
| `muted` | `boolean` | `false` | Start muted |
|
|
84
|
+
| `lazy` | `boolean` | `true`\* | Show placeholder until clicked |
|
|
85
|
+
| `nativeUi` | `boolean` | `false` | Use the platform's native controls (YouTube, Vimeo, Dailymotion only) |
|
|
86
|
+
| `autoStage` | `boolean` | `false` | Immediately send this video to the stage on mount |
|
|
87
|
+
| `playbackRate` | `number` | `1` | Initial playback rate |
|
|
88
|
+
| `adTagUrl` | `string` | `''` | VAST or VMAP ad tag URL |
|
|
89
|
+
| `adTagParams` | `object` | - | Fills `{macro}` tokens on whichever ad tag URL ends up in use, see [Ads](#ads-ima--vast--vmap) |
|
|
90
|
+
| `headerBidding` | `object` | - | Runs a Prebid.js auction before the ad plays, see [Header bidding](#header-bidding-prebidjs) |
|
|
91
|
+
| `payload` | `object` | `{}` | Arbitrary data attached to every `state-change` event |
|
|
92
|
+
| `action` | `PlayerAction` | `null` | Button shown in the player HUD, see [Actions](#actions) |
|
|
93
|
+
| `disableTapCapture` | `boolean` | `false` | Disables the full-video tap-to-reveal-controls overlay (tap/click still reaches embed platform UI underneath, e.g. YouTube's own) |
|
|
94
|
+
|
|
95
|
+
\* `lazy` only has an effect on `VideoItem` (default `true`), which is what actually implements the placeholder-until-clicked behaviour. `VideoPlayer` accepts the prop for type compatibility but defaults to `false` and never reads it: using `<VideoPlayer>` directly always mounts the real player immediately, regardless of `lazy`.
|
|
93
96
|
|
|
94
97
|
### Platform URLs
|
|
95
98
|
|
|
96
|
-
The platform is detected automatically from the shape of `videoUrl
|
|
99
|
+
The platform is detected automatically from the shape of `videoUrl`; there's no separate prop to set it.
|
|
97
100
|
|
|
98
101
|
| Platform | URL format |
|
|
99
102
|
| ------------- | -------------------------------------------------------------------------------------------------------- |
|
|
@@ -104,7 +107,7 @@ The platform is detected automatically from the shape of `videoUrl` — there's
|
|
|
104
107
|
| `jwplayer` | `https://cdn.jwplayer.com/videos/...` · `https://cdn.jwplayer.com/manifests/...` · `jwplayer://MEDIA_ID` |
|
|
105
108
|
| `html5` | Any direct MP4 / HLS URL |
|
|
106
109
|
|
|
107
|
-
\* `PLAYER_ID_EMBED` is one path segment: `{PLAYER_ID}_{EMBED_NAME}` (e.g. `abc123_default` for the account's default player)
|
|
110
|
+
\* `PLAYER_ID_EMBED` is one path segment: `{PLAYER_ID}_{EMBED_NAME}` (e.g. `abc123_default` for the account's default player), which is exactly the URL Brightcove Studio's "Publish" panel gives you for an embed.
|
|
108
111
|
|
|
109
112
|
---
|
|
110
113
|
|
|
@@ -142,11 +145,11 @@ interface StateChangeEvent {
|
|
|
142
145
|
}
|
|
143
146
|
```
|
|
144
147
|
|
|
145
|
-
`firstQuartile` / `midpoint` / `thirdQuartile` fire once each as playback crosses 25%, 50%, and 75% of the video's duration
|
|
148
|
+
`firstQuartile` / `midpoint` / `thirdQuartile` fire once each as playback crosses 25%, 50%, and 75% of the video's duration. This is useful for analytics integrations that expect IAB-style progress milestones. They reset and can fire again on loop restart.
|
|
146
149
|
|
|
147
|
-
`controlsopen` / `controlsclose` fire when the expanded controls popup mounts/unmounts (e.g. via the "show controls" button), with `element` set to the popup's root DOM node
|
|
150
|
+
`controlsopen` / `controlsclose` fire when the expanded controls popup mounts/unmounts (e.g. via the "show controls" button), with `element` set to the popup's root DOM node: handy for positioning your own UI relative to it, or measuring it. On `controlsclose`, `element` is a snapshot of the closing node; it's detached from the DOM immediately after.
|
|
148
151
|
|
|
149
|
-
On `error`, the player shows a "Retry" button that re-attempts loading the current source. You can also trigger this yourself via a template ref on `VideoPlayer`, which exposes a `retry()` method along with `togglePlay()`, `seek()`, `toggleMute()`, `setVolume()`, `toggleFullscreen()`, `toggleLoop()`, and `setPlaybackRate()`. Note this is on `VideoPlayer` specifically
|
|
152
|
+
On `error`, the player shows a "Retry" button that re-attempts loading the current source. You can also trigger this yourself via a template ref on `VideoPlayer`, which exposes a `retry()` method along with `togglePlay()`, `seek()`, `toggleMute()`, `setVolume()`, `toggleFullscreen()`, `toggleLoop()`, and `setPlaybackRate()`. Note this is on `VideoPlayer` specifically: `VideoItem` doesn't forward a ref to it, since it may be showing a lazy placeholder instead:
|
|
150
153
|
|
|
151
154
|
```vue
|
|
152
155
|
<script setup>
|
|
@@ -178,7 +181,7 @@ The `action` prop adds a button to the player HUD. Pass a built-in string or a c
|
|
|
178
181
|
<VideoItem action="autoplay" ... />
|
|
179
182
|
```
|
|
180
183
|
|
|
181
|
-
`action="autoplay"` toggles [auto-advance](#playlists) and only makes sense when rendered inside a `VideoStage` with a `playlist` set
|
|
184
|
+
`action="autoplay"` toggles [auto-advance](#playlists) and only makes sense when rendered inside a `VideoStage` with a `playlist` set: it reads and flips the same `autoAdvance` state as the controls popup's built-in "Auto" button, just as a HUD button instead.
|
|
182
185
|
|
|
183
186
|
### Custom action
|
|
184
187
|
|
|
@@ -208,7 +211,12 @@ const saveAction = {
|
|
|
208
211
|
|
|
209
212
|
## Ads (IMA / VAST / VMAP)
|
|
210
213
|
|
|
211
|
-
|
|
214
|
+
**Step by step:**
|
|
215
|
+
|
|
216
|
+
1. Get a VAST or VMAP ad tag URL. For testing, use [Google's public IMA sample tags](https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/tags); for production, this comes from your ad server (Google Ad Manager): ask whoever manages ad ops for the tag, or build it yourself if you already know the ad unit path.
|
|
217
|
+
2. Pass it as `adTagUrl` on `VideoItem`/`VideoPlayer`. That's it for a basic pre-roll/VMAP schedule: the Google IMA SDK is loaded automatically on demand, nothing else to configure.
|
|
218
|
+
3. Confirm it's working: watch for `adstart`/`adend` on the `state-change` event, or check the Network tab for a request to `pubads.g.doubleclick.net` (or wherever your ad server lives) when the video plays.
|
|
219
|
+
4. Only if your ad tag is a **macro template** (contains literal `{tokenName}` placeholders, as Brightcove's auto-discovered ad tags usually do, see below) do you need `adTagParams` too. Otherwise skip it entirely.
|
|
212
220
|
|
|
213
221
|
```vue
|
|
214
222
|
<VideoItem video-url="https://..." ad-tag-url="https://pubads.g.doubleclick.net/..." />
|
|
@@ -216,17 +224,64 @@ Pass an `adTagUrl` to enable pre-roll, mid-roll, or VMAP ad schedules via the Go
|
|
|
216
224
|
|
|
217
225
|
Ads are not supported on YouTube, Vimeo, or Dailymotion.
|
|
218
226
|
|
|
227
|
+
Some platforms (currently Brightcove) auto-discover their own ad tag URL: the platform's own wins if you don't pass `adTagUrl` yourself. Brightcove's ad tag URLs are typically macro templates (e.g. `...&iu={adUnit}&vid={referenceId}&rdid={rdid}&cust_params={customParameters}`), not ready-to-use URLs. `adTagParams` fills these in on **whichever** ad tag URL ends up in use, prop-supplied or auto-discovered, without needing to know or duplicate where the base URL came from:
|
|
228
|
+
|
|
229
|
+
```vue
|
|
230
|
+
<VideoItem
|
|
231
|
+
video-url="https://players.brightcove.net/..."
|
|
232
|
+
:ad-tag-params="{
|
|
233
|
+
adUnit: 'network/section',
|
|
234
|
+
referenceId: videoId,
|
|
235
|
+
rdid: deviceId,
|
|
236
|
+
idtype: 'idfa',
|
|
237
|
+
is_lat: 0,
|
|
238
|
+
customParameters: 'pageType=article&contentId=123',
|
|
239
|
+
}"
|
|
240
|
+
/>
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
Name each key exactly after the macro it fills, not the query param it happens to sit inside (`vid={referenceId}` means the key is `referenceId`, not `vid`). A key with no matching `{macro}` in the URL is a no-op: this only fills in existing macros, it doesn't add new query params, so it has no effect on a non-templated ad tag URL (JW, or one you built by hand).
|
|
244
|
+
|
|
245
|
+
### Header bidding (Prebid.js)
|
|
246
|
+
|
|
247
|
+
**Step by step:**
|
|
248
|
+
|
|
249
|
+
1. Confirm your organisation already runs Prebid.js somewhere on the page: check for `window.pbjs` in the console. If it's not there, this isn't something to set up from this package; talk to whoever manages ad ops or your header-bidding wrapper vendor, since Prebid deployments are custom builds specific to which bidders you use (see below for why this player doesn't load Prebid itself).
|
|
250
|
+
2. Get a Prebid **video ad unit** config from ad ops/your bidder: an object with `code`, `mediaTypes.video` (player size, mime types, etc.), and a `bids` array with your bidder's specific params (e.g. AppNexus's `placementId`). This is the same object your org's existing Prebid setup already uses elsewhere for video slots, if one exists.
|
|
251
|
+
3. Get the GAM ad unit path (`iu`) to target: same source as step 1 in [Ads](#ads-ima--vast--vmap) above.
|
|
252
|
+
4. Pass both as `headerBidding: { adUnit, params: { iu: '...' } }`, on the same `VideoItem`/`VideoPlayer` that already has a plain `adTagUrl`/`adTagParams` set as the fallback (step 2 of the Ads section). Never rely on `headerBidding` alone with nothing to fall back to.
|
|
253
|
+
5. Verify: after playing, run `pbjs.getBidResponsesForAdUnitCode('your-ad-unit-code')` in the console to confirm a bid came back, and check the Network tab for `hb_bidder`/`hb_pb`/etc. in the actual ad request's `cust_params` to confirm the winning bid's targeting made it into the request IMA sent.
|
|
254
|
+
|
|
255
|
+
The auction runs **in the background** and is never awaited: it can't block mounting, playback, or controls. Its result is only used if it's ready by the time the ad is actually requested (on the viewer's first play); otherwise the ad request goes out with whatever `adTagUrl`/`adTagParams` already resolved to, same as if `headerBidding` weren't set at all:
|
|
256
|
+
|
|
257
|
+
```vue
|
|
258
|
+
<VideoItem
|
|
259
|
+
video-url="https://players.brightcove.net/..."
|
|
260
|
+
:header-bidding="{
|
|
261
|
+
adUnit: {
|
|
262
|
+
code: 'video-preroll',
|
|
263
|
+
mediaTypes: { video: { context: 'instream', playerSize: [640, 480] } },
|
|
264
|
+
bids: [{ bidder: 'appnexus', params: { placementId: 123456 } }],
|
|
265
|
+
},
|
|
266
|
+
params: { iu: '/network/adunit' },
|
|
267
|
+
timeoutMs: 1000,
|
|
268
|
+
}"
|
|
269
|
+
/>
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
`adUnit` is a standard Prebid video ad unit, the same object you'd otherwise hand to `pbjs.addAdUnits()`. `params` is passed through to `buildVideoUrl()` (GAM ad tag params, e.g. `iu`). `timeoutMs` (default `1000`) bounds the Prebid auction itself. Every failure mode (no `window.pbjs`, the auction timing out, no bid won, `buildVideoUrl()` throwing) fails open to whatever `adTagUrl`/`adTagParams` would have resolved to; combined with never being awaited, a header-bidding hiccup can't block or break anything else in the player, ever.
|
|
273
|
+
|
|
219
274
|
### Ad overlay UI
|
|
220
275
|
|
|
221
|
-
While an ad is playing, a small overlay shows an "Ad" badge with a countdown to the ad's end, and a mute button that controls the ad creative's own independent audio (separate from the content video's volume/mute state
|
|
276
|
+
While an ad is playing, a small overlay shows an "Ad" badge with a countdown to the ad's end, and a mute button that controls the ad creative's own independent audio (separate from the content video's volume/mute state: muting the player has no effect on ad audio, and vice versa). If the ad is paused (e.g. by another player's cross-player pause coordination), a resume icon appears over it as well.
|
|
222
277
|
|
|
223
278
|
---
|
|
224
279
|
|
|
225
280
|
## Theming the HUD buttons
|
|
226
281
|
|
|
227
|
-
|
|
282
|
+
Three buttons read their background and icon colour from two CSS custom properties, falling back to the default frosted-glass look when unset: the action button (mute/loop/custom/save), the central play/pause button, and the "show controls" button. The expanded controls popup (opened via the "show controls" button) is unaffected and keeps its own fixed styling.
|
|
228
283
|
|
|
229
|
-
Set the variables on any ancestor of the player
|
|
284
|
+
Set the variables on any ancestor of the player (e.g. a wrapper `<div>` or `:root`) to restyle all three buttons at once:
|
|
230
285
|
|
|
231
286
|
```css
|
|
232
287
|
.my-video-wrapper {
|
|
@@ -235,7 +290,7 @@ Set the variables on any ancestor of the player — e.g. a wrapper `<div>` or `:
|
|
|
235
290
|
}
|
|
236
291
|
```
|
|
237
292
|
|
|
238
|
-
Icons use `fill="currentColor"`, so `--mvp-btn-color`
|
|
293
|
+
Icons use `fill="currentColor"`, so `--mvp-btn-color` recolours the icon along with `--mvp-btn-bg` for the background. Hover state is a `filter: brightness()` lift on top of `--mvp-btn-bg`, so it works for both the default translucent look and a solid theme colour.
|
|
239
294
|
|
|
240
295
|
### Controls popup position
|
|
241
296
|
|
|
@@ -288,7 +343,7 @@ window.addEventListener('video-state', (e) => {
|
|
|
288
343
|
|
|
289
344
|
## Web Component Usage
|
|
290
345
|
|
|
291
|
-
Import the element bundle to register all components as native custom elements. Vue is an external dependency
|
|
346
|
+
Import the element bundle to register all components as native custom elements. Vue is an external dependency: use an import map to provide it:
|
|
292
347
|
|
|
293
348
|
```html
|
|
294
349
|
<script type="importmap">
|
|
@@ -307,7 +362,7 @@ Import the element bundle to register all components as native custom elements.
|
|
|
307
362
|
></video-item>
|
|
308
363
|
```
|
|
309
364
|
|
|
310
|
-
If you'll be playing HLS (`.m3u8`) sources, also add an import map entry for `hls.js
|
|
365
|
+
If you'll be playing HLS (`.m3u8`) sources, also add an import map entry for `hls.js`. It's loaded on demand via a dynamic `import('hls.js')`, which (unlike the Vue usage, where your own bundler resolves it) has no resolution path in a plain browser without one:
|
|
311
366
|
|
|
312
367
|
```html
|
|
313
368
|
<script type="importmap">
|
|
@@ -331,7 +386,7 @@ If you'll be playing HLS (`.m3u8`) sources, also add an import map entry for `hl
|
|
|
331
386
|
|
|
332
387
|
### Passing objects as web component attributes
|
|
333
388
|
|
|
334
|
-
Boolean and string props map directly to HTML attributes. Object props (`payload`) can be passed as inline JSON strings
|
|
389
|
+
Boolean and string props map directly to HTML attributes. Object props (`payload`) can be passed as inline JSON strings: Vue's custom element runtime parses them automatically:
|
|
335
390
|
|
|
336
391
|
```html
|
|
337
392
|
<video-item video-url="https://..." ad-tag-url="https://..." payload='{"articleId":"123"}'></video-item>
|
|
@@ -357,7 +412,7 @@ player.addEventListener('state-change', (e) => {
|
|
|
357
412
|
|
|
358
413
|
## Peer Dependencies
|
|
359
414
|
|
|
360
|
-
| Package | Version
|
|
361
|
-
| -------- |
|
|
362
|
-
| `vue` | `>=3` (Vue usage only)
|
|
363
|
-
| `hls.js` | `^1.6.16
|
|
415
|
+
| Package | Version |
|
|
416
|
+
| -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
417
|
+
| `vue` | `>=3` (Vue usage only) |
|
|
418
|
+
| `hls.js` | `^1.6.16`, optional, only needed for HLS (`.m3u8`) playback via native `<video>`; see [Web Component Usage](#web-component-usage) for the import map entry if you're not using a bundler |
|
package/dist/element.d.mts
CHANGED
|
@@ -6,12 +6,29 @@ interface CustomAction {
|
|
|
6
6
|
onClick: () => void;
|
|
7
7
|
}
|
|
8
8
|
type PlayerAction = BuiltinAction | CustomAction;
|
|
9
|
+
interface HeaderBiddingAdUnit {
|
|
10
|
+
code: string;
|
|
11
|
+
mediaTypes: {
|
|
12
|
+
video: Record<string, unknown>;
|
|
13
|
+
};
|
|
14
|
+
bids: Array<{
|
|
15
|
+
bidder: string;
|
|
16
|
+
params?: Record<string, unknown>;
|
|
17
|
+
}>;
|
|
18
|
+
}
|
|
19
|
+
interface HeaderBiddingConfig {
|
|
20
|
+
adUnit: HeaderBiddingAdUnit;
|
|
21
|
+
params?: Record<string, string>;
|
|
22
|
+
timeoutMs?: number;
|
|
23
|
+
}
|
|
9
24
|
interface PlayerProps {
|
|
10
25
|
videoUrl: string;
|
|
11
26
|
title?: string;
|
|
12
27
|
poster?: string;
|
|
13
28
|
aspectRatio?: string;
|
|
14
29
|
adTagUrl?: string;
|
|
30
|
+
adTagParams?: Record<string, string>;
|
|
31
|
+
headerBidding?: HeaderBiddingConfig;
|
|
15
32
|
autoplay?: boolean;
|
|
16
33
|
muted?: boolean;
|
|
17
34
|
playbackRate?: number;
|
package/dist/element.mjs
CHANGED
|
@@ -1 +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,createTextVNode as c,createVNode as l,defineComponent as u,defineCustomElement as d,inject as f,mergeProps as p,nextTick as m,normalizeClass as h,normalizeProps as g,normalizeStyle as _,onBeforeUnmount as v,onMounted as y,openBlock as b,provide as x,reactive as S,ref as C,toDisplayString as w,toRef as T,unref as E,watch as D,withCtx as O,withModifiers as k}from"vue";function A(){return/iPad|iPhone|iPod/.test(navigator.userAgent)||/Mac/.test(navigator.userAgent)&&navigator.maxTouchPoints>1}function j(e){(e.requestFullscreen||e.webkitRequestFullscreen)?.call(e)}function M(){(document.exitFullscreen||document.webkitExitFullscreen)?.call(document)}function N(e){let[t,n]=e.split(`:`).map(Number);return{isPortrait:n>t,cssRatio:`${t}/${n}`}}function P(e){return!e||isNaN(e)?`0:00`:`${Math.floor(e/60)}:${String(Math.floor(e%60)).padStart(2,`0`)}`}function F(e,t=(...e)=>String(e[0])){let n={};return async(...r)=>{let i=t(...r);if(n[i])return n[i];let a=await e(...r);return n[i]=a,a}}function I(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 L=`video-select`,ee=`video-state`,R=`fullscreen-pending`,z=`fullscreen-pending-done`,B=`player:autoAdvance`,te=`mvp-youtube`,V=`mvp-vimeo`,H=`mvp-dailymotion`,U=`mvp-ad-playing`,W=`mvp-ad-paused`,G=`16:9`,K=[.5,.75,1,1.25,1.5,2],ne=[[.25,`firstQuartile`],[.5,`midpoint`],[.75,`thirdQuartile`]];function re(e){return e.match(/cdn\.jwplayer\.com\/videos\/([^-]+)/)?.[1]??e.match(/cdn\.jwplayer\.com\/manifests\/([^.]+)/)?.[1]??e.match(/^jwplayer:\/\/([^/]+)$/)?.[1]??null}function ie(e){let t=e?.advertising?.schedule;return Array.isArray(t)&&t.length?t[0].tag??null:e?.advertising?.tag??null}const q=F(async e=>{let t=await fetch(`https://cdn.jwplayer.com/v2/media/${e}`);if(!t.ok)throw Error(`JW Platform API error: ${t.status}`);let n=(await t.json()).playlist?.[0];if(!n)throw Error(`JW Platform: empty playlist`);let r=I((n.sources??[]).map(e=>({src:e.file,type:e.type})));if(!r.length)throw Error(`JW Platform: no playable sources found`);return{src:r[0].src,type:r[0].type,poster:n.image??null,adTagUrl:ie(n)}});async function ae(e){let t=re(e);if(!t)throw Error(`JW Platform: unrecognised source URL: ${e}`);let n=await q(t);if(e.startsWith(`jwplayer://`))return n;let r=/\.mp4(\?|#|$)/.test(e)?`video/mp4`:`application/x-mpegURL`;return{...n,src:e,type:r}}function oe(e){let t;try{t=new URL(e)}catch{return null}if(t.hostname!==`players.brightcove.net`)return null;let[,n,r]=t.pathname.split(`/`),i=t.searchParams.get(`videoId`),a=r?.indexOf(`_`)??-1;return!n||a===-1||!i?null:{accountId:n,playerId:r.slice(0,a),embed:r.slice(a+1),videoId:i}}function se(e){return(e?.plugins??[]).find(e=>e.name===`ima3`)?.options?.serverUrl??null}const ce=F(async(e,t,n,r)=>{let i=await fetch(`https://players.brightcove.net/${e}/${t}_${n}/config.json`);if(!i.ok)throw Error(`Brightcove: could not load player config (${i.status})`);let a=await i.json(),o=r??a?.video_cloud?.policy_key;if(!o)throw Error(`Brightcove: policy_key not found in player config`);return{policyKey:o,adTagUrl:se(a)}},(e,t,n)=>`${e}/${t}_${n}`);async function le(e,t,n){let r=await fetch(`https://edge.api.brightcove.com/playback/v1/accounts/${e}/videos/${t}`,{headers:{Accept:`application/json;pk=${n}`}});if(!r.ok)throw Error(`Brightcove Playback API error: ${r.status}`);let i=await r.json(),a=I(i.sources||[]);if(!a.length)throw Error(`Brightcove: no playable sources found`);return{sources:a.map(e=>({src:e.src,type:e.type})),poster:i.poster??i.thumbnail??null}}async function ue(e,t){let n=oe(e);if(!n)throw Error(`Brightcove: invalid src — expected a Brightcove embed URL, e.g. "https://players.brightcove.net/{accountId}/{playerId}_{embed}/index.html?videoId={videoId}"`);let{accountId:r,playerId:i,embed:a,videoId:o}=n,{policyKey:s,adTagUrl:c}=await ce(r,i,a,t),{sources:l,poster:u}=await le(r,o,s);return{...l[0],poster:u,adTagUrl:c}}function de(){let e=new Map;function t(t,n){for(let r of Array.isArray(t)?t:[t])e.has(r)||e.set(r,new Set),e.get(r)?.add(n)}function n(t,n){e.get(t)?.delete(n)}function r(t,...n){e.get(t)?.forEach(e=>e(...n))}function i(){e.clear()}return{on:t,off:n,trigger:r,dispose:i}}const fe={};function pe(e,t=e){return fe[t]||(fe[t]=new Promise((t,n)=>{let r=document.createElement(`script`);r.src=e,r.onload=()=>t(),r.onerror=()=>n(Error(`Failed to load script: ${e}`)),document.head.appendChild(r)})),fe[t]}let me=0;function he(e,t){e.parentElement?.classList.add(t);let n=`${t}-${++me}`,r=document.createElement(`div`);r.id=n,r.className=`mvp-tech`,r.style.cssText=`width:100%;height:100%;top:0;left:0;position:absolute`;let i=document.createElement(`div`);return i.style.cssText=`width:100%;height:100%;position:absolute;inset:0;opacity:0;pointer-events:none;transition:opacity 0.2s`,i.appendChild(r),e.parentElement?.insertBefore(i,e),{techId:n,wrapper:i,innerDiv:r}}function ge(e,t){e.style.display=`none`,t.style.opacity=`1`,t.style.pointerEvents=``}function _e(e,t,n){t.remove(),e.parentElement?.classList.remove(n),e.style.display=``}function ve(e){return e.closest(`.player__shell`)}function ye(e){e.trigger(R);let t=document.createElement(`div`);t.style.cssText=`position:fixed;inset:0;z-index:99999;opacity:0;pointer-events:none`,document.body.appendChild(t);let n=!1;function r(){n||(e.trigger(z),t.style.opacity=`1`,t.style.pointerEvents=`auto`)}function i(r){n||(n=!0,e.trigger(z),t.remove(),r?.())}return{overlay:t,reveal:r,finish:i}}function be(e,t){return t===e.PlayerState.PLAYING||t===e.PlayerState.BUFFERING}function xe(e){let t={videoId:null,listId:null},n=e.match(/^.*(youtu\.be\/|v\/|u\/\w\/|embed\/|watch\?v=|shorts\/|&v=)([^#&?]*).*/);n?.[2]?.length===11&&(t.videoId=n[2]);let r=e.match(/[?&]list=([^#&?]+)/);return r?.[1]&&(t.listId=r[1]),t}let Se=!1,Ce=!1;const J=[];function we(){Ce||(Ce=!0,pe(`https://www.youtube.com/iframe_api`).then(()=>{window.YT?.ready(()=>{Se=!0,J.forEach(e=>e()),J.length=0})}))}function Te(e,t){we();let n=de(),{techId:r,wrapper:i}=he(e,te),a=xe(t.src),o=null,s=a.videoId,c=!1,l=!1,u=!1,d=null,f=!1,p=null,m=!1,h=new Set,g=null,_={active:!1,wasPaused:!1,timeBefore:0,catchUpInterval:null};function v(e,t=0){let n=setTimeout(()=>{h.delete(n),e()},t);h.add(n)}function y(){try{let e=o?.getPlayerResponse()?.adPlacements;return Array.isArray(e)&&e.length>0}catch{return!1}}function b(e){o?.loadVideoById({videoId:e})}function x(e){o?.cueVideoById({videoId:e})}function S(){a.videoId&&(_.wasPaused=!1,c?s===a.videoId?o?.playVideo():(b(a.videoId),s=a.videoId):(n.trigger(`waiting`),l=!0))}function C(){_.catchUpInterval&&clearInterval(_.catchUpInterval),_.active=!1,_.wasPaused&&o?.pauseVideo(),n.trigger(`seeked`)}function w(){m=(o?.getAvailablePlaybackRates()??[]).length>1,c=!0,t.muted&&o?.mute(),l?S():u&&a.videoId&&(x(a.videoId),s=a.videoId)}function T(e){if(e===d||p!==null)return;d=e;let t=y();t!==f&&(f=t,n.trigger(t?`adstart`:`adend`));let r=window.YT;if(r){switch(e){case-1:n.trigger(`loadstart`),n.trigger(`loadedmetadata`),n.trigger(`durationchange`),n.trigger(`ratechange`);break;case r.PlayerState.ENDED:n.trigger(`ended`);break;case r.PlayerState.PLAYING:n.trigger(`timeupdate`),n.trigger(`durationchange`),n.trigger(`playing`),n.trigger(`play`),_.active&&C();break;case r.PlayerState.PAUSED:n.trigger(`canplay`),_.active||n.trigger(`pause`);break;case r.PlayerState.BUFFERING:n.trigger(`waiting`);break;case r.PlayerState.CUED:n.trigger(`canplay`);break}g&&=(clearInterval(g),null),e===r.PlayerState.PLAYING&&(g=setInterval(()=>n.trigger(`timeupdate`),250))}}function E(){let e={controls:+!!t.nativeUi,modestbranding:1,rel:0,showinfo:0,mute:+!!t.muted,origin:window.location.origin,allowfullscreen:1,fullscreen:1,fs:1,playsinline:1,...t.customVars};s=a.videoId,o=new window.YT.Player(r,{videoId:s??void 0,playerVars:e,events:{onReady:w,onStateChange:e=>T(e.data),onPlaybackRateChange:()=>n.trigger(`ratechange`),onVolumeChange:()=>n.trigger(`volumechange`),onError:e=>{p=e.data,n.trigger(`error`),v(()=>{p=null})}}})}Se?E():J.push(E),t.autoplay?c?S():l=!0:a.videoId&&(u=!0);function D(){if(!o)return;let e=o.getCurrentTime(),{video_id:t}=o.getVideoData();o.pauseVideo();let{overlay:r,reveal:i,finish:a}=ye(n),s=document.createElement(`div`);s.id=`yt-fs-${Math.random().toString(36).slice(2)}`,r.appendChild(s);let c=null,l=()=>{a(()=>{let t=c?.getCurrentTime()??e;try{c?.destroy()}catch{}o?.seekTo(t,!0),n.trigger(`timeupdate`)})};c=new window.YT.Player(s.id,{videoId:t,playerVars:{playsinline:0,autoplay:1,controls:1,modestbranding:1,rel:0,start:Math.floor(e)},events:{onReady:t=>{i(),t.target.seekTo(e,!0),t.target.playVideo()},onStateChange:e=>{let t=window.YT;t&&(e.data===t.PlayerState.PAUSED||e.data===t.PlayerState.ENDED)&&l()}}})}function O(){if(A()&&o){D();return}let t=ve(e);t&&j(t)}function k(){M()}return{el:i,play:S,pause:()=>o?.pauseVideo(),paused:()=>{if(!o)return!0;let e=window.YT;return!e||!be(e,d)},currentTime:()=>o?.getCurrentTime()??0,setCurrentTime:e=>{if(!o)return;let t=window.YT;t&&d===t.PlayerState.PAUSED&&(_.timeBefore=o.getCurrentTime()),_.active||(_.wasPaused=!t||!be(t,d)),o.seekTo(e,!0),n.trigger(`timeupdate`),n.trigger(`seeking`),_.active=!0,t&&d===t.PlayerState.PAUSED&&_.timeBefore!==e&&(_.catchUpInterval&&clearInterval(_.catchUpInterval),_.catchUpInterval=setInterval(()=>{d!==t.PlayerState.PAUSED||!_.active?_.catchUpInterval&&clearInterval(_.catchUpInterval):o&&o.getCurrentTime()!==_.timeBefore&&(n.trigger(`timeupdate`),C())},250))},duration:()=>o?.getDuration()??0,volume:()=>o?o.getVolume()/100:1,setVolume:e=>o?.setVolume(e*100),muted:()=>o?.isMuted()??!1,setMuted:e=>{o&&(e?o.mute():o.unMute(),v(()=>n.trigger(`volumechange`),50))},playbackRate:()=>o?.getPlaybackRate()??1,setPlaybackRate:e=>o?.setPlaybackRate(e),bufferedEnd:()=>o?.getVideoLoadedFraction?o.getVideoLoadedFraction()*o.getDuration():0,error:()=>p===null?null:{code:p,message:`This video could not be played.`},setSrc:e=>{let t=xe(e);a.videoId=t.videoId,a.listId=t.listId,a.videoId&&(c?(b(a.videoId),s=a.videoId):u=!0)},featuresPlaybackRate:()=>m,enterFullscreen:O,exitFullscreen:k,on:n.on,off:n.off,dispose:()=>{if(h.forEach(clearTimeout),h.clear(),g&&clearInterval(g),_.catchUpInterval&&clearInterval(_.catchUpInterval),o)try{o.stopVideo(),o.destroy()}catch{}else{let e=J.indexOf(E);e!==-1&&J.splice(e,1)}o=null,_e(e,i,te),n.dispose()}}}function Ee(e){return e.match(/(?:vimeo\.com\/(?:video\/|channels\/[^/]+\/|groups\/[^/]+\/videos\/)?|player\.vimeo\.com\/video\/)(\d+)/)?.[1]??null}function De(e,t){let n=de(),{techId:r,wrapper:i}=he(e,V),a=Ee(t.src),o=null,s=0,c=0,l=1,u=!1,d=!0,f=1,p=!1,m=!1,h=!1,g=null,_=new Set;function v(e,t=0){let n=setTimeout(()=>{_.delete(n),e()},t);_.add(n)}function y(){if(!o){m=!0;return}o.play().catch(()=>{})}function b(){t.muted&&o?.setMuted(!0).catch(()=>{}),m&&y()}async function x(e){if(await pe(`https://player.vimeo.com/api/player.js`,`vimeo`),h||!window.Vimeo)return;let i={id:Number(e),byline:!1,portrait:!1,title:!1,transparent:!0,controls:!!t.nativeUi,autopause:!1,...t.autoplay!==void 0&&{autoplay:t.autoplay},...t.muted!==void 0&&{muted:t.muted}};o=new window.Vimeo.Player(r,i),t.autoplay&&(m=!0),o.ready().then(b).catch(e=>{g={code:4,message:e?.message||`This video is unavailable or cannot be embedded here.`},n.trigger(`error`)}),o.on(`play`,()=>{d=!1,n.trigger(`play`),n.trigger(`playing`)}),o.on(`pause`,()=>{d=!0,n.trigger(`pause`)}),o.on(`ended`,()=>{d=!0,n.trigger(`ended`)}),o.on(`timeupdate`,e=>{let{seconds:t,duration:r}=e;s=t,c=r,n.trigger(`timeupdate`),r&&!p&&(p=!0,n.trigger(`durationchange`))}),o.on(`loaded`,()=>{p=!1,n.trigger(`loadedmetadata`),n.trigger(`durationchange`)}),o.on(`seeking`,e=>{s=e.seconds,n.trigger(`seeking`)}),o.on(`seeked`,e=>{s=e.seconds,n.trigger(`seeked`),n.trigger(`timeupdate`)}),o.on(`bufferstart`,()=>n.trigger(`waiting`)),o.on(`bufferend`,()=>n.trigger(`canplay`)),o.on(`volumechange`,e=>{l=e.volume,n.trigger(`volumechange`)}),o.on(`error`,()=>n.trigger(`error`))}a&&x(a);function S(){if(!A()){let t=ve(e);t&&j(t);return}o?.requestFullscreen().catch(()=>{})}function C(){M()}return{el:i,play:y,pause:()=>o?.pause().catch(()=>{}),paused:()=>d,currentTime:()=>s,setCurrentTime:e=>{o?.setCurrentTime(e).catch(()=>{}),n.trigger(`timeupdate`),n.trigger(`seeking`)},duration:()=>c,volume:()=>l,setVolume:e=>{l=e,o?.setVolume(e).catch(()=>{})},muted:()=>u,setMuted:e=>{u=e,o?.setMuted(e).then(()=>v(()=>n.trigger(`volumechange`),50)).catch(()=>{})},playbackRate:()=>f,setPlaybackRate:e=>{f=e,o?.setPlaybackRate(e).catch(()=>{}),n.trigger(`ratechange`)},bufferedEnd:()=>s,error:()=>g,setSrc:()=>{},featuresPlaybackRate:()=>!1,enterFullscreen:S,exitFullscreen:C,on:n.on,off:n.off,dispose:()=>{h=!0,_.forEach(clearTimeout),_.clear(),o?.destroy().catch(()=>{}),o=null,_e(e,i,V),n.dispose()}}}function Oe(e){let t=e.match(/[?&]video=([a-zA-Z0-9]+)/);return t?t[1]:e.match(/(?:dailymotion\.com\/(?:embed\/)?video\/|dai\.ly\/)([a-zA-Z0-9]+)/)?.[1]??null}function ke(e,t){let n=de(),{techId:r,wrapper:i}=he(e,H),a=ve(e),o=Oe(t.src),s=typeof t.customVars?.playerId==`string`?t.customVars.playerId:void 0,c=null,l=0,u=0,d=1,f=!1,p=!0,m=!1,h=!1,g=null;async function _(){if(!o){g={code:4,message:`Could not parse video ID from source URL`},n.trigger(`error`);return}try{let e=await pe(s?`https://geo.dailymotion.com/libs/player/${s}.js`:`https://geo.dailymotion.com/libs/player.js`,s||`dailymotion-sdk`).then(()=>window.dailymotion);if(!e)return;let i=await e.createPlayer(r,{...s&&{player:s},video:o,params:{autoplay:!!t.autoplay,mute:!!t.muted}});c=i;let a=e.events;m&&i.play(),i.on(a.PLAYER_CRITICALPATHREADY,e=>{let t=e.videoThumbnails;if(!t)return;let r=Object.keys(t).map(Number).sort((e,t)=>t-e)[0],i=r===void 0?void 0:t[r];i&&n.trigger(`posterchange`,i)}),i.on(a.VIDEO_PLAY,()=>{p=!1,n.trigger(`play`),n.trigger(`playing`),!t.autoplay&&!h&&(h=!0,i.pause())}),i.on(a.VIDEO_PLAYING,()=>{p=!1,n.trigger(`play`),n.trigger(`playing`)}),i.on(a.VIDEO_PAUSE,()=>{p=!0,n.trigger(`pause`)}),a.VIDEO_BUFFERING&&i.on(a.VIDEO_BUFFERING,()=>n.trigger(`waiting`)),i.on(a.VIDEO_END,()=>{p=!0,n.trigger(`ended`)}),i.on(a.VIDEO_TIMECHANGE,e=>{l=e.videoTime??l,u=e.videoDuration??u,n.trigger(`timeupdate`)}),i.on(a.VIDEO_DURATIONCHANGE,e=>{u=e.videoDuration??u,n.trigger(`durationchange`)}),i.on(a.VIDEO_SEEKSTART,()=>n.trigger(`seeking`)),i.on(a.VIDEO_SEEKEND,e=>{l=e.videoTime??l,n.trigger(`seeked`)}),i.on(a.PLAYER_VOLUMECHANGE,e=>{d=e.playerVolume??d,f=e.playerIsMuted??f,n.trigger(`volumechange`)}),i.on(a.PLAYER_ERROR,()=>n.trigger(`error`)),a.AD_START&&i.on(a.AD_START,()=>{p=!1,n.trigger(`play`),n.trigger(`adstart`)}),a.AD_END&&i.on(a.AD_END,()=>n.trigger(`adend`))}catch(e){g={code:4,message:e instanceof Error?e.message:`This video could not be played.`},n.trigger(`error`)}}_();function v(){c?c.play():m=!0}function y(){if(A()){c?.setFullscreen(!0);return}a&&j(a)}function b(){if(A()){c?.setFullscreen(!1);return}M()}return{el:i,play:v,pause:()=>c?.pause(),paused:()=>p,currentTime:()=>l,setCurrentTime:e=>{l=e,c?.seek(e),n.trigger(`seeking`)},duration:()=>u,volume:()=>d,setVolume:e=>{d=e,c?.setVolume(e)},muted:()=>f,setMuted:e=>{f=e,c?.setMute(e)},playbackRate:()=>1,setPlaybackRate:()=>{},bufferedEnd:()=>l,error:()=>g,setSrc:()=>{},featuresPlaybackRate:()=>!1,enterFullscreen:y,exitFullscreen:b,on:n.on,off:n.off,dispose:()=>{c?.destroy?.(),c=null,_e(e,i,H),n.dispose()}}}const Ae=[{test:e=>/youtu\.be|youtube\.com/.test(e),key:`youtube`,embed:!0},{test:e=>/vimeo\.com|player\.vimeo\.com/.test(e),key:`vimeo`,embed:!0},{test:e=>/dailymotion\.com|dai\.ly/.test(e),key:`dailymotion`,embed:!0},{test:e=>/cdn\.jwplayer\.com/.test(e)||e.startsWith(`jwplayer://`),key:`jwplayer`,embed:!1},{test:e=>/players\.brightcove\.net/.test(e),key:`brightcove`,embed:!1}];function je(e){return Ae.find(t=>t.test(e))?.key??`html5`}function Me(e){if(/\.m3u8(\?|#|$)/.test(e))return`application/x-mpegURL`;if(/\.mp4(\?|#|$)/.test(e))return`video/mp4`}function Ne(e){return Ae.find(t=>t.test(e))?.embed??!1}const Pe={youtube:Te,vimeo:De,dailymotion:ke};function Fe(e,t,n){let r=Pe[je(e)];return r?r(t,n):null}async function Ie(e){let t=je(e);return t===`jwplayer`?ae(e):t===`brightcove`?ue(e):{src:e,type:Me(e)}}const Le=`application/x-mpegURL`,Re=[`play`,`pause`,`ended`,`error`,`timeupdate`,`durationchange`,`progress`,`volumechange`,`ratechange`,`seeking`,`seeked`,`waiting`,`playing`,`canplay`];function ze(e,t){let n=de(),r=null,i=!1,a=null;async function o(t){let{default:o}=await import(`hls.js`);if(i||a!==t)return;if(typeof o?.isSupported!=`function`||!o.isSupported()){e.src=t;return}r=new o({liveDurationInfinity:!0}),r.loadSource(t),r.attachMedia(e);let s=o.Events,c=o.ErrorTypes;r.on(s.ERROR,(e,o)=>{if(!(!o.fatal||i||a!==t))switch(o.type){case c.NETWORK_ERROR:r?.startLoad();break;case c.MEDIA_ERROR:r?.recoverMediaError();break;default:r?.destroy(),r=null,n.trigger(`error`);break}})}function s(){return e.canPlayType(`application/vnd.apple.mpegurl`)!==``||e.canPlayType(Le)!==``}function c(t,n){if(r?.destroy(),r=null,a=null,n===Le&&!s()){a=t,o(t);return}e.src=t}let l=e=>()=>n.trigger(e),u=Re.map(e=>[e,l(e)]);for(let[t,n]of u)e.addEventListener(t,n);let d=[[`webkitbeginfullscreen`,l(`nativefullscreenenter`)],[`webkitendfullscreen`,l(`nativefullscreenexit`)]];for(let[t,n]of d)e.addEventListener(t,n);e.poster=t.poster??``,e.muted=t.muted??t.autoplay??!1,e.playbackRate=t.playbackRate??1,e.playsInline=!0,c(t.src,t.type),t.autoplay&&e.play();function f(){let t=e;if(typeof t.webkitEnterFullscreen==`function`){t.webkitEnterFullscreen();return}let n=e.closest(`.player__shell`);n instanceof HTMLElement&&j(n)}function p(){let t=e;if(typeof t.webkitExitFullscreen==`function`){t.webkitExitFullscreen();return}M()}return{el:e,play:()=>e.play(),pause:()=>e.pause(),paused:()=>e.paused,currentTime:()=>e.currentTime,setCurrentTime:t=>{e.currentTime=t},duration:()=>e.duration,volume:()=>e.volume,setVolume:t=>{e.volume=t},muted:()=>e.muted,setMuted:t=>{e.muted=t},playbackRate:()=>e.playbackRate,setPlaybackRate:t=>{e.playbackRate=t},bufferedEnd:()=>{let{buffered:t,duration:n}=e;if(!t.length)return 0;let r=t.end(t.length-1);return n&&r>n?n:r},error:()=>{let t=e.error;return t?{code:t.code,message:t.message||`This video could not be played.`}:null},setSrc:c,featuresPlaybackRate:()=>!0,enterFullscreen:f,exitFullscreen:p,on:n.on,off:n.off,dispose:()=>{i=!0,r?.destroy();for(let[t,n]of u)e.removeEventListener(t,n);for(let[t,n]of d)e.removeEventListener(t,n);n.dispose()}}}function Be(){return window.google?.ima?Promise.resolve():new Promise((e,t)=>{let n=document.createElement(`script`);n.src=`https://imasdk.googleapis.com/js/sdkloader/ima3.js`,n.onload=()=>e(),n.onerror=()=>t(Error(`Failed to load Google IMA SDK`)),document.head.appendChild(n)})}function Ve(e,t,n,r){let i=document.createElement(`div`);i.className=`ima-ad-container`,e.appendChild(i);let a=null,o=null,s=null,c=!1,l=!1,u=!1,d=!1,f=!1,p=!1,m=1,h=new ResizeObserver(([e])=>{let t=window.google?.ima;if(!s||!t)return;let{width:n,height:r}=e.contentRect;s.resize(n,r,t.ViewMode.NORMAL)});h.observe(t);function g(){o?.contentComplete()}function _(t){d=t,e.classList.toggle(U,t),t||(f=!1,e.classList.remove(W))}function v(){if(c||!l||!u||!a||!o)return;c=!0;let e=window.google?.ima;if(!e)return;a.initialize();let t=new e.AdsRequest;t.adTagUrl=n,o.requestAds(t)}Be().then(()=>{if(p)return;let n=window.google?.ima;n&&(a=new n.AdDisplayContainer(i,t),o=new n.AdsLoader(a),l=!0,o.addEventListener(n.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,i=>{if(p)return;let a=new n.AdsRenderingSettings;a.restoreCustomPlaybackStateOnAdBreakComplete=!0,s=i.getAdsManager(t,a),t.addEventListener(`ended`,g),s.addEventListener(n.AdEvent.Type.CONTENT_PAUSE_REQUESTED,()=>{t.removeEventListener(`ended`,g),t.pause(),_(!0),r.onAdStart();let e=s?.getVolume()??1;e>0&&(m=e),r.onAdMuteChange(e===0)}),s.addEventListener(n.AdEvent.Type.CONTENT_RESUME_REQUESTED,()=>{t.addEventListener(`ended`,g),_(!1),r.onAdEnd(),t.ended||t.play()}),s.addEventListener(n.AdEvent.Type.PAUSED,()=>{f=!0,e.classList.add(W),r.onAdPauseChange(!0)}),s.addEventListener(n.AdEvent.Type.RESUMED,()=>{f=!1,e.classList.remove(W),r.onAdPauseChange(!1)}),s.addEventListener(n.AdEvent.Type.AD_PROGRESS,()=>{r.onAdProgress(s?.getRemainingTime()??0)}),s.addEventListener(n.AdErrorEvent.Type.AD_ERROR,e=>{_(!1),r.onError(e.getError().getMessage()),t.play()});try{s.init(t.clientWidth,t.clientHeight,n.ViewMode.NORMAL),s.start()}catch(e){r.onError(e instanceof Error?e.message:`Ad playback failed to start.`)}}),o.addEventListener(n.AdErrorEvent.Type.AD_ERROR,e=>{r.onError(e.getError().getMessage())}),v())}).catch(e=>r.onError(e.message));function y(){u=!0,v()}function b(){if(!s)return;let e=s.getVolume();e>0?(m=e,s.setVolume(0)):s.setVolume(m||1),r.onAdMuteChange(s.getVolume()===0)}return{isAdPlaying:()=>d,isAdPaused:()=>f,requestAdsOnFirstPlay:y,pauseAd:()=>s?.pause(),resumeAd:()=>s?.resume(),toggleAdMute:b,dispose:()=>{p=!0,h.disconnect(),t.removeEventListener(`ended`,g),s?.destroy(),o?.destroy(),i.remove(),e.classList.remove(U,W)}}}const He=new Set;function Ue(e){return He.add(e),()=>He.delete(e)}function We(e){He.forEach(t=>{if(t!==e)try{t()}catch{}})}function Ge(e){let t=C(!1),n=C(!1);function r(){let e=document;t.value=!!(document.fullscreenElement||e.webkitFullscreenElement),n.value=!1}function i(){let n=e();if(n){if(t.value){n.exitFullscreen();return}n.enterFullscreen()}}function a(){n.value=!0}function o(e){e.on(R,()=>{n.value=!0}),e.on(z,()=>{n.value=!1}),e.on(`nativefullscreenenter`,()=>{t.value=!0,n.value=!1}),e.on(`nativefullscreenexit`,()=>{t.value=!1,n.value=!1})}return y(()=>{document.addEventListener(`fullscreenchange`,r),document.addEventListener(`webkitfullscreenchange`,r)}),v(()=>{document.removeEventListener(`fullscreenchange`,r),document.removeEventListener(`webkitfullscreenchange`,r)}),{isFullscreen:t,isFullscreenPending:n,toggleFullscreen:i,markFullscreenPending:a,attachPlayerEvents:o}}function Ke(){let e=C(!1),t=null;function n(){clearTimeout(t??void 0),e.value=!1}function r(r){r.on(`waiting`,()=>{clearTimeout(t??void 0),t=setTimeout(()=>{e.value=!0},500)}),r.on(`playing`,n),r.on(`canplay`,n)}return v(()=>clearTimeout(t??void 0)),{isBuffering:e,attachPlayerEvents:r,reset:n}}function qe(e,t,n){let r=new Set;function i(){if(!t.value)return;let i=e.value/t.value;for(let[e,t]of ne)!r.has(e)&&i>=e&&(r.add(e),n(t))}function a(){r.clear()}return{checkQuartiles:i,reset:a}}function Je(){try{return JSON.parse(localStorage.getItem(`player:positions`)??`[]`)}catch{return[]}}function Ye(e){localStorage.setItem(`player:positions`,JSON.stringify(e))}function Xe(e,t){if(t<5)return;let n=Je().filter(t=>t.url!==e);n.unshift({url:e,time:t}),Ye(n.slice(0,5))}function Ze(e){return Je().find(t=>t.url===e)?.time??null}function Qe(e){Ye(Je().filter(t=>t.url!==e))}function $e(e,t,n){let r=!1;function i(t){if(r)return;let n=Ze(e);n&&t.setCurrentTime(n),r=!0}function a(t){!t||n.value||Xe(e,t.currentTime()??0)}function o(){Qe(e)}function s(){document.visibilityState===`hidden`&&a(t())}return y(()=>document.addEventListener(`visibilitychange`,s)),v(()=>{a(t()),document.removeEventListener(`visibilitychange`,s)}),{restoreOnce:i,save:a,clear:o}}function et(e,t,n,r){let i=null;y(()=>{let a=e.value?.closest(`.player__shell`);a&&(i=new IntersectionObserver(([e])=>{let i=t();!e.isIntersecting&&i&&!i.paused()&&!n.value&&!r.value&&i.pause()},{threshold:.1}),i.observe(a))}),v(()=>i?.disconnect())}function tt(e,t,n,r,i,a){function o(){let n=e();if(!(!n||!t.value)){if(!a.value){n.play();return}n.pause()}}function s(t){e()?.setCurrentTime(n.value*(t/100))}function c(){let t=e();t?.setMuted(!t.muted())}function l(t){let n=e();n&&(n.setVolume(t),n.setMuted(t===0))}function u(){r.value=!r.value}function d(t){let n=e();n&&(n.setPlaybackRate(t),i.value=t)}return{togglePlay:o,seek:s,toggleMute:c,setVolume:l,toggleLoop:u,setPlaybackRate:d}}function nt(e,t){let{isPlaying:n,hasEnded:r,isReady:i,isAdPlaying:a,isLive:o,current:s,total:c,buffered:l,vol:u,isMuted:d,isLooping:f,playbackRate:p,supportsPlaybackRate:m,hasStarted:h,isError:g,errorMessage:_}=e,{fire:v,pauseThisPlayer:y,positionMemory:b,quartiles:x,buffering:S,fullscreen:C}=t;function w(e){i.value=!0,m.value=e.featuresPlaybackRate();let t=()=>{let t=e.duration();if(t===1/0){o.value=!0;return}o.value=!1,t&&t>0&&isFinite(t)&&(c.value=t)};e.on(`adstart`,()=>{We(y),a.value=!0,v(`adstart`)}),e.on(`adend`,()=>{a.value=!1,v(`adend`)}),e.on(`play`,()=>{We(y),h.value=!0,n.value=!0,r.value=!1,o.value||b.restoreOnce(e),v(`play`)}),e.on(`pause`,()=>{n.value=!1,o.value||b.save(e),v(`pause`)}),e.on(`ended`,()=>{if(n.value=!1,x.reset(),S.reset(),f.value){e.setCurrentTime(0),e.play();return}c.value&&(s.value=c.value),r.value=!0,b.clear(),v(`ended`)}),e.on(`seeked`,()=>{v(`seeked`)}),e.on(`error`,()=>{let t=e.error();_.value=t?.message||`This video could not be played.`,g.value=!0,i.value=!0,v(`error`,{error:t})}),e.on(`timeupdate`,()=>{r.value||(s.value=e.currentTime()??0,c.value||t(),m.value||=e.featuresPlaybackRate(),o.value||x.checkQuartiles())}),e.on(`durationchange`,t),e.on(`progress`,()=>{let t=e.duration();l.value=t?e.bufferedEnd()/t*100:0}),e.on(`volumechange`,()=>{let t=e.muted();u.value=e.volume()??1,d.value=t??!1,h.value&&v(`volumechange`,{isMuted:t})}),e.on(`ratechange`,()=>{let t=e.playbackRate()??1;p.value=t,h.value&&v(`ratechange`,{playbackRate:t})}),S.attachPlayerEvents(e),C.attachPlayerEvents(e)}return{attachPlayerEvents:w}}function rt(e,t,r){let i=null,a=null,o=null,s=null,c=C(!1),l=C(!1),u=C(!1),d=C(!1),f=C(!1),p=C(!1),m=C(0),h=C(!1),g=C(0),_=C(0),b=C(0),x=C(1),S=C(t.muted??t.autoplay??!1),w=C(!1),T=C(t.playbackRate??1),E=C(!1),O=C(!1),k=C(!1),A=C(``),j=C(!1),M=n(()=>_.value?g.value/_.value*100:0),N=n(()=>Math.max(b.value,M.value)),F=()=>i,I=Ge(F),L=Ke(),ee=$e(t.videoUrl,F,l);function R(e,n={}){r(`state-change`,{type:e,currentTime:g.value,duration:_.value,src:t.videoUrl,...n,payload:t.payload})}let z=qe(g,_,R);function B(){!i||!s||(k.value=!1,A.value=``,i.setSrc(s.src,s.type))}function te(){a?.toggleAdMute()}function V(){if(a?.isAdPlaying()){a.pauseAd();return}i?.pause()}function H(){if(a?.isAdPlaying()){a.isAdPaused()?a.resumeAd():a.pauseAd();return}U.togglePlay()}let U=tt(F,u,_,w,T,c),{attachPlayerEvents:W}=nt({isPlaying:c,hasEnded:l,isReady:u,isAdPlaying:d,isLive:h,current:g,total:_,buffered:b,vol:x,isMuted:S,isLooping:w,playbackRate:T,supportsPlaybackRate:E,hasStarted:O,isError:k,errorMessage:A},{fire:R,pauseThisPlayer:V,positionMemory:ee,quartiles:z,buffering:L,fullscreen:I});return D(()=>t.muted,e=>{!i||e===void 0||i.setMuted(e)}),D(()=>t.playbackRate,e=>{!i||e===void 0||i.setPlaybackRate(e)}),et(e,F,I.isFullscreen,I.isFullscreenPending),D(O,t=>{!t||!e.value||!i||i.el===e.value||ge(e.value,i.el)}),y(async()=>{if(Ne(t.videoUrl)){if(!e.value)return;let n=Fe(t.videoUrl,e.value,{src:t.videoUrl,poster:t.poster,autoplay:t.autoplay,muted:t.muted??t.autoplay,nativeUi:t.nativeUi});if(!n){k.value=!0,u.value=!0,A.value=`This platform is not yet supported.`;return}j.value=!!t.nativeUi,i=n,s={src:t.videoUrl},o=Ue(V),W(i);return}let n=await Ie(t.videoUrl).catch(()=>({src:t.videoUrl}));if(!e.value)return;s={src:n.src,type:n.type},i=ze(e.value,{src:n.src,type:n.type,poster:n.poster||t.poster||``,autoplay:t.autoplay,muted:t.muted??t.autoplay,playbackRate:T.value});let r=t.adTagUrl||n.adTagUrl||``;r&&e.value.parentElement&&(a=Ve(e.value.parentElement,e.value,r,{onAdStart:()=>{d.value=!0,f.value=!1,R(`adstart`)},onAdEnd:()=>{d.value=!1,f.value=!1,m.value=0,R(`adend`)},onAdPauseChange:e=>{f.value=e,e||We(V)},onAdMuteChange:e=>{p.value=e},onAdProgress:e=>{m.value=e},onError:e=>{d.value=!1,f.value=!1,m.value=0,console.error(`Ad playback error for ${r}:`,e)}}),i.on(`play`,()=>a?.requestAdsOnFirstPlay())),o=Ue(V),W(i)}),v(()=>{o?.(),a?.dispose(),a=null,i?.dispose(),i=null}),{isPlaying:c,hasEnded:l,isReady:u,isAdPlaying:d,isAdPaused:f,isAdMuted:p,adRemainingTime:m,isLive:h,isBuffering:L.isBuffering,current:g,total:_,vol:x,isMuted:S,isLooping:w,playbackRate:T,hasStarted:O,isError:k,errorMessage:A,progress:M,bufferedDisplay:N,isFullscreen:I.isFullscreen,isFullscreenPending:I.isFullscreenPending,fmt:P,fire:R,retry:B,togglePlay:H,seek:U.seek,toggleMute:U.toggleMute,setVolume:U.setVolume,toggleFullscreen:I.toggleFullscreen,markFullscreenPending:I.markFullscreenPending,toggleLoop:U.toggleLoop,toggleAdMute:te,setPlaybackRate:U.setPlaybackRate,supportsPlaybackRate:E,nativeUi:j}}function it(e){let t=C(!0),n=C(!1),r=null,i=0;function a(e=400){i=Date.now()+e}function o(e=3500){clearTimeout(r??void 0),r=setTimeout(()=>{t.value=!1,n.value=!1},e)}function s(){clearTimeout(r??void 0)}function c(){n.value=!0,t.value=!0,o()}function l(){n.value=!1,e.value&&o()}function u(){e.value&&o()}function d(){t.value=!0,e.value&&o()}function f(){t.value=!0,o()}function p(){Date.now()<i||e.value&&o(600)}return D(e,e=>{if(!e){clearTimeout(r??void 0),t.value=!0;return}o()}),v(()=>clearTimeout(r??void 0)),{showHUD:t,isOpen:n,scheduleHide:o,pauseHide:s,onVideoTap:d,onMouseMove:f,onMouseLeave:p,openControls:c,closeControls:l,keepOpen:u,suppressMouseLeave:a}}const Y=Symbol(`player`),X=Symbol(`hud`),at=Symbol(`action`),ot=Symbol(`compact`),st=Symbol(`playlist`);function Z(e){let t=f(e);if(t===void 0)throw Error(`[video-player] missing "${String(e.description)}" context — this component must be rendered inside <VideoPlayer>`);return t}function ct(e,t){return{hudVisible:n(()=>!e.isReady||e.isError?!1:t.showHUD),popupVisible:n(()=>!e.isReady||e.isError?!1:e.isFullscreen?t.showHUD:t.isOpen)}}function lt(e,t){return n(()=>!(!e?.value||t.isFullscreen))}function ut(e,t,r){let i=n(()=>e?.value??null),a=n(()=>!!i.value&&typeof i.value==`object`),o=n(()=>a.value?i.value:null),s=n(()=>i.value===`mute`?t.isMuted?`Unmute`:`Mute`:i.value===`loop`?t.isLooping?`Disable loop`:`Loop`:i.value===`autoplay`?r.autoAdvance?`Disable autoplay next`:`Autoplay next`:``),c=n(()=>i.value===`mute`?t.isMuted:i.value===`loop`?t.isLooping:i.value===`autoplay`&&r.autoAdvance);function l(){i.value===`mute`?t.toggleMute():i.value===`loop`?t.toggleLoop():i.value===`autoplay`&&r.toggleAutoAdvance()}return{currentAction:i,isCustom:a,customAction:o,builtinLabel:s,builtinActive:c,onBuiltinClick:l}}var Q=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n};const dt={},ft={viewBox:`0 0 24 24`,fill:`currentColor`};function pt(e,t){return b(),a(`svg`,ft,[...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 mt=Q(dt,[[`render`,pt]]);const ht={},gt={viewBox:`0 0 24 24`,fill:`currentColor`};function _t(e,t){return b(),a(`svg`,gt,[...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 vt=Q(ht,[[`render`,_t]]);const yt={},bt={viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`};function xt(e,t){return b(),a(`svg`,bt,[...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 St=Q(yt,[[`render`,xt]]);const Ct={},wt={viewBox:`0 0 24 24`,fill:`currentColor`};function Tt(e,t){return b(),a(`svg`,wt,[...t[0]||=[o(`path`,{d:`M4 12l1.41 1.41L11 7.83V20h2V7.83l5.59 5.58L20 12l-8-8-8 8z`},null,-1)]])}var Et=Q(Ct,[[`render`,Tt]]);const Dt={},Ot={viewBox:`0 0 24 24`,fill:`currentColor`};function kt(e,t){return b(),a(`svg`,Ot,[...t[0]||=[o(`path`,{d:`M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z`},null,-1)]])}var At=Q(Dt,[[`render`,kt]]);const jt={},Mt={viewBox:`0 0 24 24`,fill:`currentColor`};function Nt(e,t){return b(),a(`svg`,Mt,[...t[0]||=[o(`path`,{d:`M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z`},null,-1)]])}var Pt=Q(jt,[[`render`,Nt]]);const Ft={},It={viewBox:`0 0 24 24`,fill:`currentColor`};function Lt(e,t){return b(),a(`svg`,It,[...t[0]||=[o(`path`,{d:`M7 7h10v3l4-4-4-4v3H5v6h2V7zm10 10H7v-3l-4 4 4 4v-3h12v-6h-2v4z`},null,-1)]])}var Rt=Q(Ft,[[`render`,Lt]]);const zt={},Bt={viewBox:`0 0 24 24`,fill:`currentColor`};function Vt(e,t){return b(),a(`svg`,Bt,[...t[0]||=[o(`circle`,{cx:`5`,cy:`12`,r:`2`},null,-1),o(`circle`,{cx:`12`,cy:`12`,r:`2`},null,-1),o(`circle`,{cx:`19`,cy:`12`,r:`2`},null,-1)]])}var Ht=Q(zt,[[`render`,Vt]]);const Ut={},Wt={viewBox:`0 0 24 24`,fill:`currentColor`};function Gt(e,t){return b(),a(`svg`,Wt,[...t[0]||=[o(`path`,{d:`M6 19h4V5H6v14zm8-14v14h4V5h-4z`},null,-1)]])}var Kt=Q(Ut,[[`render`,Gt]]);const qt={},Jt={viewBox:`0 0 24 24`,fill:`currentColor`};function Yt(e,t){return b(),a(`svg`,Jt,[...t[0]||=[o(`path`,{d:`M8 5v14l11-7z`},null,-1)]])}var Xt=Q(qt,[[`render`,Yt]]);const Zt={},Qt={viewBox:`0 0 24 24`,fill:`currentColor`};function $t(e,t){return b(),a(`svg`,Qt,[...t[0]||=[o(`path`,{d:`M12 5V1L7 6l5 5V7c3.31 0 6 2.69 6 6s-2.69 6-6 6-6-2.69-6-6H4c0 4.42 3.58 8 8 8s8-3.58 8-8-3.58-8-8-8z`},null,-1)]])}var en=Q(Zt,[[`render`,$t]]);const tn={},nn={viewBox:`0 0 24 24`,fill:`currentColor`};function rn(e,t){return b(),a(`svg`,nn,[...t[0]||=[o(`path`,{d:`M6 18l8.5-6L6 6v12zM16 6v12h2V6h-2z`},null,-1)]])}var an=Q(tn,[[`render`,rn]]);const on={},sn={viewBox:`0 0 24 24`,fill:`currentColor`};function cn(e,t){return b(),a(`svg`,sn,[...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 ln=Q(on,[[`render`,cn]]);const un={},dn={viewBox:`0 0 24 24`,fill:`currentColor`};function fn(e,t){return b(),a(`svg`,dn,[...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 pn=Q(un,[[`render`,fn]]);const mn=[`aria-label`];var $=Q(u({__name:`PlayPauseButton`,props:{isPlaying:{type:Boolean,required:!0},hasEnded:{type:Boolean,required:!1,default:!1},size:{type:String,required:!1,default:`sm`}},emits:[`toggle-play`],setup(e){let t=e,i=n(()=>t.isPlaying?`Pause`:t.hasEnded?`Replay`:`Play`);return(t,n)=>(b(),a(`button`,{class:h([`ppbtn`,`ppbtn--${e.size}`]),"aria-label":i.value,onClick:n[0]||=k(e=>t.$emit(`toggle-play`),[`stop`])},[e.isPlaying?(b(),r(E(Kt),{key:0})):e.hasEnded?(b(),r(E(en),{key:1})):(b(),r(E(Xt),{key:2}))],10,mn))}}),[[`__scopeId`,`data-v-85902525`]]),hn=u({__name:`VolumeIcon`,setup(e){let t=Z(Y),i=n(()=>!t.isMuted&&t.vol>0);return(e,t)=>i.value?(b(),r(E(pn),{key:0})):(b(),r(E(ln),{key:1}))}}),gn=Q(u({__name:`Spinner`,props:{size:{type:Number,required:!1,default:14},borderWidth:{type:Number,required:!1,default:2}},setup(e){return(t,n)=>(b(),a(`div`,{class:`spinner`,style:_({width:`${e.size}px`,height:`${e.size}px`,borderWidth:`${e.borderWidth}px`})},null,4))}}),[[`__scopeId`,`data-v-259be2b2`]]);const _n={class:`hud`},vn=[`aria-label`],yn=[`aria-label`],bn=[`aria-label`],xn=[`aria-label`,`innerHTML`],Sn={key:4,class:`hud__spacer`},Cn={class:`hud__play-wrap`};var wn=Q(u({__name:`HudButtons`,setup(t){let n=Z(Y),s=Z(X),{currentAction:c,isCustom:u,customAction:d,builtinLabel:p,builtinActive:m,onBuiltinClick:g}=ut(f(at),n,Z(st));return(t,f)=>(b(),a(`div`,_n,[!E(s).isOpen&&!E(n).isFullscreen?(b(),a(e,{key:0},[E(c)===`mute`?(b(),a(`button`,{key:0,class:h([`hud__btn`,{"hud__btn--active":E(m)}]),"aria-label":E(p),onClick:f[0]||=k((...e)=>E(g)&&E(g)(...e),[`stop`])},[l(hn)],10,vn)):E(c)===`loop`?(b(),a(`button`,{key:1,class:h([`hud__btn`,{"hud__btn--active":E(m)}]),"aria-label":E(p),onClick:f[1]||=k((...e)=>E(g)&&E(g)(...e),[`stop`])},[l(E(Rt))],10,yn)):E(c)===`autoplay`?(b(),a(`button`,{key:2,class:h([`hud__btn`,{"hud__btn--active":E(m)}]),"aria-label":E(p),onClick:f[2]||=k((...e)=>E(g)&&E(g)(...e),[`stop`])},[l(E(an))],10,bn)):E(u)&&E(d)?(b(),a(`button`,{key:3,class:`hud__btn`,"aria-label":E(d).label,onClick:f[3]||=k(e=>E(d).onClick(),[`stop`]),innerHTML:E(d).icon},null,8,xn)):(b(),a(`div`,Sn))],64)):i(`v-if`,!0),o(`div`,Cn,[l($,{"is-playing":E(n).isPlaying,"has-ended":E(n).hasEnded,size:`lg`,onTogglePlay:E(n).togglePlay},null,8,[`is-playing`,`has-ended`,`onTogglePlay`]),E(n).isBuffering?(b(),r(gn,{key:0,class:`hud__buf-spinner`})):i(`v-if`,!0)]),!E(s).isOpen&&!E(n).isFullscreen?(b(),a(`button`,{key:1,class:`hud__btn`,"aria-label":`Show controls`,onClick:f[4]||=k((...e)=>E(s).openControls&&E(s).openControls(...e),[`stop`])},[l(E(St))])):i(`v-if`,!0)]))}}),[[`__scopeId`,`data-v-a6d118e7`]]);function Tn(e){let t=C(null),r=n(()=>t.value??e.progress),i=null;function a(){i&&clearTimeout(i),i=null,t.value=null}function o(e){i&&clearTimeout(i),i=null,t.value=Number(e.target.value)}function s(n){let r=Number(n.target.value);t.value=r,e.seek(r),i&&clearTimeout(i),i=setTimeout(a,3e3)}return D(()=>e.current,()=>{if(t.value===null||!e.total)return;let n=t.value/100*e.total;Math.abs(e.current-n)<1&&a()}),v(a),{displaySeek:r,onSeekInput:o,onSeekChange:s}}function En(e,t,n){if(!document.startViewTransition||!e.value){n();return}e.value.style.viewTransitionName=t,document.startViewTransition(async()=>{n(),await m()}).finished.finally(()=>{e.value&&(e.value.style.viewTransitionName=``)})}const Dn={class:`controls__vol-header`},On=[`aria-label`],kn={class:`controls__vol-body`},An=[`value`],jn={class:`controls__vol-pct`};var Mn=Q(u({__name:`VolumePanel`,emits:[`back`],setup(t){let r=Z(Y),i=Z(X),s=n(()=>r.isMuted?0:Math.round(r.vol*100));function c(e){r.setVolume(Number(e.target.value)/100)}return(t,n)=>(b(),a(e,null,[o(`div`,Dn,[o(`button`,{class:`controls__btn`,"aria-label":`Back`,onClick:n[0]||=e=>t.$emit(`back`)},[l(E(mt))]),n[6]||=o(`span`,{class:`controls__vol-label`},`Volume`,-1),o(`button`,{class:`controls__btn`,"aria-label":E(r).isMuted?`Unmute`:`Mute`,onClick:n[1]||=e=>E(r).toggleMute()},[l(hn)],8,On)]),o(`div`,kn,[o(`input`,{type:`range`,min:`0`,max:`100`,step:`1`,value:s.value,class:`controls__vol-slider`,style:_({"--v":s.value+`%`}),"aria-label":`Volume`,onInput:c,onMousedown:n[2]||=e=>E(i).pauseHide(),onMouseup:n[3]||=e=>E(i).scheduleHide(),onTouchstartPassive:n[4]||=e=>E(i).pauseHide(),onTouchend:n[5]||=e=>E(i).scheduleHide()},null,44,An),o(`span`,jn,w(s.value)+`%`,1)])],64))}}),[[`__scopeId`,`data-v-10b0ae67`]]);function Nn(e){function t(){let t=K.indexOf(e.playbackRate);e.setPlaybackRate(K[(t+1)%K.length])}function n(e){return`${e}×`}return{cycleRate:t,fmtRate:n}}const Pn={class:`controls__more-header`},Fn={class:`controls__more-body`},In={class:`controls__more-value`},Ln={class:`controls__more-row-label`},Rn={class:`controls__more-value`},zn={class:`controls__more-row-label`},Bn={class:`controls__more-value`},Vn=[`aria-label`],Hn={class:`controls__more-row-label`},Un=[`innerHTML`];var Wn=Q(u({__name:`MoreMenu`,props:{isCustom:{type:Boolean,required:!0},customAction:{type:[Object,null],required:!0}},emits:[`back`],setup(t){let n=Z(Y),r=Z(st),{cycleRate:s,fmtRate:u}=Nn(n);return(d,f)=>(b(),a(e,null,[o(`div`,Pn,[o(`button`,{class:`controls__btn`,"aria-label":`Back`,onClick:f[0]||=e=>d.$emit(`back`)},[l(E(mt))]),f[5]||=o(`span`,{class:`controls__more-label`},`More`,-1)]),o(`div`,Fn,[E(n).supportsPlaybackRate?(b(),a(`button`,{key:0,class:`controls__more-row`,"aria-label":`Playback speed`,onClick:f[1]||=(...e)=>E(s)&&E(s)(...e)},[f[6]||=o(`span`,null,`Playback speed`,-1),o(`span`,In,w(E(u)(E(n).playbackRate)),1)])):i(`v-if`,!0),o(`button`,{class:h([`controls__more-row`,{"controls__more-row--active":E(n).isLooping}]),"aria-label":`Toggle loop`,onClick:f[2]||=e=>E(n).toggleLoop()},[o(`span`,Ln,[l(E(Rt),{class:`controls__more-row-icon`}),f[7]||=c(`Loop`,-1)]),o(`span`,Rn,w(E(n).isLooping?`On`:`Off`),1)],2),E(r).hasPlaylist?(b(),a(`button`,{key:1,class:h([`controls__more-row`,{"controls__more-row--active":E(r).autoAdvance}]),"aria-label":`Toggle autoplay next`,onClick:f[3]||=e=>E(r).toggleAutoAdvance()},[o(`span`,zn,[l(E(an),{class:`controls__more-row-icon`}),f[8]||=c(`Autoplay next`,-1)]),o(`span`,Bn,w(E(r).autoAdvance?`On`:`Off`),1)],2)):i(`v-if`,!0),t.isCustom&&t.customAction?(b(),a(`button`,{key:2,class:`controls__more-row`,"aria-label":t.customAction.label,onClick:f[4]||=e=>t.customAction.onClick()},[o(`span`,Hn,[o(`span`,{class:`controls__more-row-icon`,innerHTML:t.customAction.icon},null,8,Un),c(w(t.customAction.label),1)])],8,Vn)):i(`v-if`,!0)])],64))}}),[[`__scopeId`,`data-v-e89a8208`]]);const Gn=[`value`],Kn={class:`controls__row`},qn={class:`controls__play-wrap`},Jn={key:0,class:`controls__live`},Yn={key:1,class:`controls__time`},Xn={class:`controls__fs-wrap`},Zn=[`aria-label`];var Qn=Q(u({__name:`ControlsPopup`,setup(t){let n=Z(Y),s=Z(X),u=Z(st),d=lt(f(ot),n),{isCustom:p,customAction:m}=ut(f(at),n,u),g=C(!1),x=C(!1),S=C(null);function T(e){return!S.value||S.value.contains(e)?!1:(s.closeControls(),!0)}function D(e){T(e.target)}function O(e){T(e.target)&&e.preventDefault()}y(()=>{n.fire(`controlsopen`,{element:S.value}),document.addEventListener(`click`,D,!0),document.addEventListener(`touchend`,O,!0)}),v(()=>{g.value=!1,x.value=!1,n.fire(`controlsclose`,{element:S.value}),document.removeEventListener(`click`,D,!0),document.removeEventListener(`touchend`,O,!0)});function j(e){s.suppressMouseLeave(),En(S,`controls-popup`,e)}function M(){if(A()){n.toggleMute();return}j(()=>{g.value=!0})}function N(){j(()=>{x.value=!0})}let{displaySeek:P,onSeekInput:F,onSeekChange:I}=Tn(n);function L(){n.isFullscreen||n.markFullscreenPending(),n.toggleFullscreen()}return(t,f)=>(b(),a(`div`,{ref_key:`popupEl`,ref:S,class:h([`controls`,{"controls--fs":E(n).isFullscreen,"controls--compact":E(d)}]),onMousemove:f[10]||=k((...e)=>E(s).keepOpen&&E(s).keepOpen(...e),[`stop`])},[g.value?(b(),r(Mn,{key:0,onBack:f[0]||=e=>j(()=>g.value=!1)})):x.value?(b(),r(Wn,{key:1,"is-custom":E(p),"custom-action":E(m),onBack:f[1]||=e=>j(()=>x.value=!1)},null,8,[`is-custom`,`custom-action`])):(b(),a(e,{key:2},[E(n).isLive?i(`v-if`,!0):(b(),a(`input`,{key:0,type:`range`,min:`0`,max:`100`,value:E(P),class:`controls__seek`,style:_({"--p":E(P)+`%`,"--b":E(n).bufferedDisplay+`%`}),onInput:f[2]||=(...e)=>E(F)&&E(F)(...e),onChange:f[3]||=(...e)=>E(I)&&E(I)(...e),onMousedown:f[4]||=e=>E(s).pauseHide(),onMouseup:f[5]||=e=>E(s).scheduleHide(),onTouchstartPassive:f[6]||=e=>E(s).pauseHide(),onTouchend:f[7]||=e=>E(s).scheduleHide()},null,44,Gn)),o(`div`,Kn,[o(`div`,qn,[E(n).isBuffering?(b(),r(gn,{key:0})):(b(),r($,{key:1,"is-playing":E(n).isPlaying,"has-ended":E(n).hasEnded,size:`sm`,onTogglePlay:f[8]||=e=>E(n).togglePlay()},null,8,[`is-playing`,`has-ended`]))]),E(n).isLive?(b(),a(`span`,Jn,[...f[11]||=[o(`span`,{class:`controls__live-dot`},null,-1),c(`Live`,-1)]])):(b(),a(`span`,Yn,w(E(n).fmt(E(n).current))+` / `+w(E(n).fmt(E(n).total)),1)),E(u).hasNext?(b(),a(`button`,{key:2,class:`controls__btn`,"aria-label":`Play next`,onClick:f[9]||=e=>E(u).playNext()},[l(E(an))])):i(`v-if`,!0),o(`button`,{class:`controls__btn`,"aria-label":`Volume`,onClick:M},[l(hn)]),o(`button`,{class:h([`controls__btn controls__btn--more`,{"controls__btn--active":E(n).isLooping||E(n).playbackRate!==1||E(u).autoAdvance}]),"aria-label":`More`,onClick:N},[l(E(Ht))],2),o(`div`,Xn,[E(n).isFullscreenPending?(b(),r(gn,{key:0})):(b(),a(`button`,{key:1,class:`controls__btn`,"aria-label":E(n).isFullscreen?`Exit fullscreen`:`Fullscreen`,onClick:L},[E(n).isFullscreen?(b(),r(E(Pt),{key:0})):(b(),r(E(At),{key:1}))],8,Zn))])])],64))],34))}}),[[`__scopeId`,`data-v-5712aad4`]]);const $n={class:`ad-overlay`},er={class:`ad-overlay__bar`},tr={class:`ad-overlay__badge`},nr={key:0,class:`ad-overlay__countdown`},rr=[`aria-label`],ir={key:0,class:`ad-overlay__resume`};var ar=Q(u({__name:`AdOverlay`,setup(e){let t=Z(Y),s=n(()=>t.adRemainingTime>0?t.fmt(t.adRemainingTime):``);return(e,n)=>(b(),a(`div`,$n,[o(`div`,er,[o(`div`,tr,[n[2]||=o(`span`,null,`Ad`,-1),s.value?(b(),a(`span`,nr,w(s.value),1)):i(`v-if`,!0)]),o(`button`,{class:`ad-overlay__mute`,"aria-label":E(t).isAdMuted?`Unmute ad`:`Mute ad`,onClick:n[0]||=e=>E(t).toggleAdMute()},[E(t).isAdMuted?(b(),r(E(ln),{key:0})):(b(),r(E(pn),{key:1}))],8,rr)]),E(t).isAdPaused?(b(),a(`div`,ir,[l($,{"is-playing":!1,size:`lg`,onTogglePlay:n[1]||=e=>E(t).togglePlay()})])):i(`v-if`,!0)]))}}),[[`__scopeId`,`data-v-23efcc8b`]]);const or={key:0,class:`overlay__spinner`},sr={key:0,class:`overlay__error`};var cr=Q(u({__name:`PlayerOverlay`,props:{disableTapCapture:{type:Boolean,required:!1,default:!1}},setup(n){let s=Z(Y),c=Z(X),{hudVisible:u,popupVisible:d}=ct(s,c);function f(){if(s.isAdPlaying&&s.isAdPaused){s.togglePlay();return}c.onVideoTap()}return(c,p)=>(b(),a(e,null,[!n.disableTapCapture&&E(s).hasStarted&&!(E(s).isAdPlaying&&!E(s).isAdPaused)?(b(),a(`div`,{key:0,class:`overlay__tap-capture`,onClick:f,onTouchend:k(f,[`prevent`,`stop`])},null,32)):i(`v-if`,!0),E(s).isAdPlaying?(b(),r(ar,{key:1})):i(`v-if`,!0),l(t,{name:`fade`},{default:O(()=>[!E(s).isReady&&!E(s).isError?(b(),a(`div`,or,[l(gn,{size:40,"border-width":3})])):i(`v-if`,!0)]),_:1}),l(t,{name:`fade`},{default:O(()=>[E(s).isError?(b(),a(`div`,sr,[o(`p`,null,w(E(s).errorMessage||`This video could not be played.`),1),o(`button`,{class:`overlay__retry`,onClick:p[0]||=k((...e)=>E(s).retry&&E(s).retry(...e),[`stop`])},`Retry`)])):i(`v-if`,!0)]),_:1}),o(`div`,{class:h([`overlay__hud`,{"overlay__hud--visible":E(u)}])},[l(wn)],2),l(t,{name:`popup`},{default:O(()=>[E(d)?(b(),a(`div`,{key:0,class:h([`overlay__popup`,{"overlay__popup--fs":E(s).isFullscreen}])},[l(Qn)],2)):i(`v-if`,!0)]),_:1})],64))}}),[[`__scopeId`,`data-v-f3307b98`]]);const lr={class:`player`},ur={"data-mvp-player":``},dr=[`poster`],fr={key:1,class:`player__native-play`};var pr=Q(u({__name:`VideoPlayer`,props:{videoUrl:{type:String,required:!0},title:{type:String,required:!1,default:``},poster:{type:String,required:!1,default:``},aspectRatio:{type:String,required:!1,default:G},adTagUrl:{type:String,required:!1,default:``},autoplay:{type:Boolean,required:!1,default:!1},muted:{type:Boolean,required:!1,default:void 0},playbackRate:{type:Number,required:!1},nativeUi:{type:Boolean,required:!1,default:!1},autoStage:{type:Boolean,required:!1,default:!1},lazy:{type:Boolean,required:!1,default:!1},payload:{type:Object,required:!1,default:()=>({})},action:{type:[String,Object,null],required:!1,default:null},disableTapCapture:{type:Boolean,required:!1,default:!1},hasPlaylist:{type:Boolean,required:!1,default:!1},hasNext:{type:Boolean,required:!1,default:!1},hasPrevious:{type:Boolean,required:!1,default:!1},autoAdvance:{type:Boolean,required:!1,default:!1}},emits:[`state-change`,`play-next`,`play-previous`,`toggle-auto-advance`],setup(e,{expose:t,emit:s}){let c=e,u=s,d=C(null),f=S(rt(d,c,u)),p=S(it(T(f,`isPlaying`)));x(Y,f),x(X,p),x(at,T(c,`action`)),x(st,S({hasPlaylist:n(()=>c.hasPlaylist),hasNext:n(()=>c.hasNext),hasPrevious:n(()=>c.hasPrevious),autoAdvance:n(()=>c.autoAdvance),playNext:()=>u(`play-next`),playPrevious:()=>u(`play-previous`),toggleAutoAdvance:()=>u(`toggle-auto-advance`)}));let m=n(()=>N(c.aspectRatio)),g=n(()=>m.value.isPortrait),v=n(()=>m.value.cssRatio),y=n(()=>!c.poster&&!f.isReady);return t(f),(e,t)=>(b(),a(`div`,lr,[o(`div`,{class:h([`player__shell`,{"player__shell--portrait":g.value}]),style:_({aspectRatio:v.value}),onMousemove:t[0]||=e=>p.onMouseMove(),onContextmenuCapture:t[1]||=k(()=>{},[`prevent`]),onMouseleave:t[2]||=e=>p.onMouseLeave()},[o(`div`,ur,[o(`video`,{ref_key:`videoEl`,ref:d,class:h([`mvp-video`,{"mvp-video--hidden":y.value}]),poster:c.poster,playsinline:``},null,10,dr),f.nativeUi?i(`v-if`,!0):(b(),r(cr,{key:0,"disable-tap-capture":c.disableTapCapture},null,8,[`disable-tap-capture`])),f.nativeUi&&!f.hasStarted?(b(),a(`div`,fr,[l($,{"is-playing":!1,size:`lg`,onTogglePlay:f.togglePlay},null,8,[`onTogglePlay`])])):i(`v-if`,!0)])],38)]))}}),[[`__scopeId`,`data-v-4ab3cf75`]]);const mr=C(0),hr=n(()=>mr.value>0);function gr(){mr.value++}function _r(){mr.value--}function vr(e,t){window.dispatchEvent(new CustomEvent(e,{detail:t}))}function yr(e,t){let n=e=>t(e.detail);y(()=>window.addEventListener(e,n)),v(()=>window.removeEventListener(e,n))}function br(e,t){let r=n(()=>!e.value||!t.value?-1:e.value.findIndex(e=>e.videoUrl===t.value?.videoUrl)),i=n(()=>r.value===-1||!e.value?null:e.value[r.value+1]??null),a=n(()=>r.value<=0||!e.value?null:e.value[r.value-1]??null);return{hasNext:n(()=>i.value!==null),hasPrevious:n(()=>a.value!==null),nextEntry:i,previousEntry:a}}function xr(){return localStorage.getItem(B)===`true`}function Sr(e){localStorage.setItem(B,String(e))}const Cr=[`src`],wr={class:`stage__idle-body`},Tr={class:`stage__idle-btn`},Er={class:`stage__idle-title`},Dr={key:1,class:`stage__idle-empty`};var Or=Q(u({__name:`VideoStage`,props:{pinPosition:{type:String,required:!1,default:`bottom-right`},playlist:{type:Array,required:!1}},emits:[`state-change`],setup(t,{expose:s,emit:c}){let u=t,d=c,f=C(xr());D(f,Sr);let m=n(()=>!!u.playlist?.length),g=C(null),S=C(null),O=C(!1),A=C(!1),j=C(null),M=C(null),P=C(!1);x(ot,P);let{hasNext:F,hasPrevious:I,nextEntry:R,previousEntry:z}=br(T(u,`playlist`),S),B=n(()=>P.value&&!!S.value&&O.value),te=n(()=>N(S.value?.aspectRatio||`16:9`).cssRatio),V=C(null),H=C(null);D(P,e=>{V.value=e&&M.value?{height:M.value.offsetHeight,width:M.value.offsetWidth}:null});let U=n(()=>{if(!V.value)return{};let{height:e,width:t}=V.value,n=H.value&&t?H.value/t:1;return{height:`${Math.round(e*n)}px`}}),W=null,G=null;function K(){W?.disconnect(),G?.disconnect(),j.value&&(W=new IntersectionObserver(([e])=>{P.value=!e.isIntersecting},{threshold:1}),W.observe(j.value),G=new ResizeObserver(([e])=>{H.value=e.contentRect.width}),G.observe(j.value))}D(j,K);function ne(){S.value&&(S.value={...S.value,autoplay:!0},O.value=!0)}function re(){j.value?.scrollIntoView({behavior:`smooth`,block:`center`})}function ie(){S.value=null,O.value=!1,A.value=!1,P.value=!1,V.value=null,q()}function q(){vr(ee,{currentVideoUrl:S.value?.videoUrl??null,isPlaying:A.value})}function ae(e){if(S.value?.videoUrl===e.videoUrl&&O.value){g.value?.togglePlay();return}S.value=e,O.value=!1,A.value=!1,q(),O.value=!0}function oe(e){if(!(!S.value||e.videoUrl!==S.value.videoUrl)){if(!O.value){S.value={...S.value,autoplay:!0},O.value=!0;return}g.value?.togglePlay()}}function se(){R.value&&ae({...R.value,autoplay:!0})}function ce(){z.value&&ae({...z.value,autoplay:!0})}function le(e){e.type===`play`&&(A.value=!0),(e.type===`pause`||e.type===`ended`)&&(A.value=!1),e.type===`ended`&&f.value&&se(),q(),d(`state-change`,e)}return yr(L,ae),yr(`video-toggle`,oe),y(gr),v(()=>{_r(),W?.disconnect(),G?.disconnect()}),s({playNext:se,playPrevious:ce,hasNext:F,hasPrevious:I}),(n,s)=>(b(),a(`div`,{ref_key:`wrapperEl`,ref:j,class:`stage-wrapper`,style:_(U.value)},[o(`div`,{ref_key:`stageEl`,ref:M,class:h([`stage`,{"stage--minified":B.value,[`stage--pin-${t.pinPosition}`]:B.value}])},[B.value?(b(),a(`button`,{key:0,class:`stage__scroll-to`,"aria-label":`Scroll to player`,onClick:k(re,[`stop`])},[l(E(Et))])):i(`v-if`,!0),B.value?(b(),a(`button`,{key:1,class:`stage__dismiss`,"aria-label":`Close`,onClick:k(ie,[`stop`])},[l(E(vt))])):i(`v-if`,!0),S.value&&O.value?(b(),r(pr,p({ref_key:`playerRef`,ref:g,key:S.value.videoUrl},S.value,{"has-playlist":m.value,"has-next":E(F),"has-previous":E(I),"auto-advance":f.value,onStateChange:le,onPlayNext:se,onPlayPrevious:ce,onToggleAutoAdvance:s[0]||=e=>f.value=!f.value}),null,16,[`has-playlist`,`has-next`,`has-previous`,`auto-advance`])):(b(),a(`div`,{key:3,class:`stage__idle`,style:_({aspectRatio:te.value}),onClick:ne},[S.value?.poster?(b(),a(`img`,{key:0,src:S.value.poster,class:`stage__idle-poster`},null,8,Cr)):i(`v-if`,!0),s[1]||=o(`div`,{class:`stage__idle-scrim`},null,-1),o(`div`,wr,[S.value?(b(),a(e,{key:0},[o(`div`,Tr,[l(E(Xt))]),o(`p`,Er,w(S.value.title),1)],64)):(b(),a(`p`,Dr,`Select a video to play`))])],4))],2)],4))}}),[[`__scopeId`,`data-v-fb8c86cf`]]);const kr={class:`placeholder`},Ar=[`src`,`alt`],jr={class:`placeholder__btn-wrap`},Mr={key:1,class:`placeholder__footer`},Nr={class:`placeholder__title`};var Pr=Q(u({__name:`VideoPlaceholder`,props:{videoUrl:{type:String,required:!0},title:{type:String,required:!1,default:``},poster:{type:String,required:!1,default:``},aspectRatio:{type:String,required:!1,default:G},adTagUrl:{type:String,required:!1,default:``},autoplay:{type:Boolean,required:!1,default:!1},muted:{type:Boolean,required:!1,default:void 0},playbackRate:{type:Number,required:!1},nativeUi:{type:Boolean,required:!1,default:!1},autoStage:{type:Boolean,required:!1,default:!1},lazy:{type:Boolean,required:!1},payload:{type:Object,required:!1,default:()=>({})},action:{type:[String,Object,null],required:!1,default:null},disableTapCapture:{type:Boolean,required:!1}},setup(e){let t=e,r=n(()=>N(t.aspectRatio)),s=n(()=>r.value.isPortrait),c=n(()=>r.value.cssRatio),u=C(!1),d=C(!1);yr(ee,e=>{u.value=e.currentVideoUrl===t.videoUrl,d.value=u.value&&e.isPlaying});function f(e){vr(L,{...t,...e!==void 0&&{autoplay:e}})}function p(){f(!0)}return y(()=>{t.autoStage&&f()}),(t,n)=>(b(),a(`div`,kr,[o(`div`,{class:h([`placeholder__shell`,{"placeholder__shell--portrait":s.value,"placeholder__shell--active":u.value}]),style:_({aspectRatio:c.value}),onClick:p},[e.poster?(b(),a(`img`,{key:0,class:`placeholder__poster`,src:e.poster,alt:e.title},null,8,Ar)):i(`v-if`,!0),n[0]||=o(`div`,{class:`placeholder__scrim`},null,-1),o(`div`,jr,[l($,{"is-playing":u.value&&d.value,size:`lg`,onTogglePlay:p},null,8,[`is-playing`])]),e.title?(b(),a(`div`,Mr,[o(`p`,Nr,w(e.title),1)])):i(`v-if`,!0)],6)]))}}),[[`__scopeId`,`data-v-dbcb4f82`]]),Fr=u({__name:`VideoItem`,props:{videoUrl:{type:String,required:!0},title:{type:String,required:!1},poster:{type:String,required:!1},aspectRatio:{type:String,required:!1},adTagUrl:{type:String,required:!1},autoplay:{type:Boolean,required:!1},muted:{type:Boolean,required:!1,default:void 0},playbackRate:{type:Number,required:!1},nativeUi:{type:Boolean,required:!1},autoStage:{type:Boolean,required:!1},lazy:{type:Boolean,required:!1,default:!0},payload:{type:Object,required:!1},action:{type:[String,Object,null],required:!1,default:null},disableTapCapture:{type:Boolean,required:!1}},emits:[`state-change`],setup(t,{emit:n}){let i=t,o=n,s=C(!1);return(t,n)=>E(hr)?(b(),r(Pr,g(p({key:0},i)),null,16)):(b(),a(e,{key:1},[i.lazy&&!s.value&&!i.autoplay?(b(),r(Pr,p({key:0},i,{onClickCapture:n[0]||=e=>s.value=!0}),null,16)):(b(),r(pr,p({key:1},i,{autoplay:s.value||i.autoplay,onStateChange:n[1]||=e=>o(`state-change`,e)}),null,16,[`autoplay`]))],64))}});const Ir=d(pr,{shadowRoot:!1}),Lr=d(Or,{shadowRoot:!1}),Rr=d(Pr,{shadowRoot:!1}),zr=d(Fr,{shadowRoot:!1});customElements.define(`video-player`,Ir),customElements.define(`video-stage`,Lr),customElements.define(`video-placeholder`,Rr),customElements.define(`video-item`,zr);export{zr as VideoItemElement,Rr as VideoPlaceholderElement,Ir as VideoPlayerElement,Lr as VideoStageElement};
|
|
1
|
+
import{Fragment as e,Transition as t,computed as n,createBlock as r,createCommentVNode as i,createElementBlock as a,createElementVNode as o,createStaticVNode as s,createTextVNode as c,createVNode as l,defineComponent as u,defineCustomElement as d,inject as f,mergeProps as p,nextTick as m,normalizeClass as h,normalizeProps as g,normalizeStyle as _,onBeforeUnmount as v,onMounted as y,openBlock as b,provide as x,reactive as S,ref as C,toDisplayString as w,toRef as T,unref as E,watch as D,withCtx as O,withModifiers as k}from"vue";function A(){return/iPad|iPhone|iPod/.test(navigator.userAgent)||/Mac/.test(navigator.userAgent)&&navigator.maxTouchPoints>1}function j(e){(e.requestFullscreen||e.webkitRequestFullscreen)?.call(e)}function M(){(document.exitFullscreen||document.webkitExitFullscreen)?.call(document)}function N(e){let[t,n]=e.split(`:`).map(Number);return{isPortrait:n>t,cssRatio:`${t}/${n}`}}function P(e,t){if(!t||!Object.keys(t).length)return e;let n=e;for(let[e,r]of Object.entries(t))r!=null&&r!==``&&(n=n.split(`{${e}}`).join(encodeURIComponent(r)));return n}function F(e){return!e||isNaN(e)?`0:00`:`${Math.floor(e/60)}:${String(Math.floor(e%60)).padStart(2,`0`)}`}function I(e,t=(...e)=>String(e[0])){let n={};return async(...r)=>{let i=t(...r);if(n[i])return n[i];let a=await e(...r);return n[i]=a,a}}function L(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 ee=`video-select`,te=`video-state`,R=`fullscreen-pending`,z=`fullscreen-pending-done`,ne=`player:autoAdvance`,B=`mvp-youtube`,V=`mvp-vimeo`,re=`mvp-dailymotion`,H=`mvp-ad-playing`,U=`mvp-ad-paused`,ie=`16:9`,W=[.5,.75,1,1.25,1.5,2],ae=[[.25,`firstQuartile`],[.5,`midpoint`],[.75,`thirdQuartile`]];function oe(e){return e.match(/cdn\.jwplayer\.com\/videos\/([^-]+)/)?.[1]??e.match(/cdn\.jwplayer\.com\/manifests\/([^.]+)/)?.[1]??e.match(/^jwplayer:\/\/([^/]+)$/)?.[1]??null}function se(e){let t=e?.advertising?.schedule;return Array.isArray(t)&&t.length?t[0].tag??null:e?.advertising?.tag??null}const G=I(async e=>{let t=await fetch(`https://cdn.jwplayer.com/v2/media/${e}`);if(!t.ok)throw Error(`JW Platform API error: ${t.status}`);let n=(await t.json()).playlist?.[0];if(!n)throw Error(`JW Platform: empty playlist`);let r=L((n.sources??[]).map(e=>({src:e.file,type:e.type})));if(!r.length)throw Error(`JW Platform: no playable sources found`);return{src:r[0].src,type:r[0].type,poster:n.image??null,adTagUrl:se(n)}});async function ce(e){let t=oe(e);if(!t)throw Error(`JW Platform: unrecognised source URL: ${e}`);let n=await G(t);if(e.startsWith(`jwplayer://`))return n;let r=/\.mp4(\?|#|$)/.test(e)?`video/mp4`:`application/x-mpegURL`;return{...n,src:e,type:r}}function K(e){let t;try{t=new URL(e)}catch{return null}if(t.hostname!==`players.brightcove.net`)return null;let[,n,r]=t.pathname.split(`/`),i=t.searchParams.get(`videoId`),a=r?.indexOf(`_`)??-1;return!n||a===-1||!i?null:{accountId:n,playerId:r.slice(0,a),embed:r.slice(a+1),videoId:i}}function le(e){for(let t of e?.plugins??[]){let e=t.options?.serverUrl??t.options?.imaOptions?.serverUrl;if(e)return e}return null}const ue=I(async(e,t,n,r)=>{let i=await fetch(`https://players.brightcove.net/${e}/${t}_${n}/config.json`);if(!i.ok)throw Error(`Brightcove: could not load player config (${i.status})`);let a=await i.json(),o=r??a?.video_cloud?.policy_key;if(!o)throw Error(`Brightcove: policy_key not found in player config`);return{policyKey:o,adTagUrl:le(a)}},(e,t,n)=>`${e}/${t}_${n}`);async function de(e,t,n){let r=await fetch(`https://edge.api.brightcove.com/playback/v1/accounts/${e}/videos/${t}`,{headers:{Accept:`application/json;pk=${n}`}});if(!r.ok)throw Error(`Brightcove Playback API error: ${r.status}`);let i=await r.json(),a=L(i.sources||[]);if(!a.length)throw Error(`Brightcove: no playable sources found`);return{sources:a.map(e=>({src:e.src,type:e.type})),poster:i.poster??i.thumbnail??null}}async function fe(e,t){let n=K(e);if(!n)throw Error(`Brightcove: invalid src — expected a Brightcove embed URL, e.g. "https://players.brightcove.net/{accountId}/{playerId}_{embed}/index.html?videoId={videoId}"`);let{accountId:r,playerId:i,embed:a,videoId:o}=n,{policyKey:s,adTagUrl:c}=await ue(r,i,a,t),{sources:l,poster:u}=await de(r,o,s);return{...l[0],poster:u,adTagUrl:c}}function q(){let e=new Map;function t(t,n){for(let r of Array.isArray(t)?t:[t])e.has(r)||e.set(r,new Set),e.get(r)?.add(n)}function n(t,n){e.get(t)?.delete(n)}function r(t,...n){e.get(t)?.forEach(e=>e(...n))}function i(){e.clear()}return{on:t,off:n,trigger:r,dispose:i}}const pe={};function me(e,t=e){return pe[t]||(pe[t]=new Promise((t,n)=>{let r=document.createElement(`script`);r.src=e,r.onload=()=>t(),r.onerror=()=>n(Error(`Failed to load script: ${e}`)),document.head.appendChild(r)})),pe[t]}let he=0;function ge(e,t){e.parentElement?.classList.add(t);let n=`${t}-${++he}`,r=document.createElement(`div`);r.id=n,r.className=`mvp-tech`,r.style.cssText=`width:100%;height:100%;top:0;left:0;position:absolute`;let i=document.createElement(`div`);return i.style.cssText=`width:100%;height:100%;position:absolute;inset:0;opacity:0;pointer-events:none;transition:opacity 0.2s`,i.appendChild(r),e.parentElement?.insertBefore(i,e),{techId:n,wrapper:i,innerDiv:r}}function _e(e,t){e.style.display=`none`,t.style.opacity=`1`,t.style.pointerEvents=``}function ve(e,t,n){t.remove(),e.parentElement?.classList.remove(n),e.style.display=``}function ye(e){return e.closest(`.player__shell`)}function be(e){e.trigger(R);let t=document.createElement(`div`);t.style.cssText=`position:fixed;inset:0;z-index:99999;opacity:0;pointer-events:none`,document.body.appendChild(t);let n=!1;function r(){n||(e.trigger(z),t.style.opacity=`1`,t.style.pointerEvents=`auto`)}function i(r){n||(n=!0,e.trigger(z),t.remove(),r?.())}return{overlay:t,reveal:r,finish:i}}function xe(e,t){return t===e.PlayerState.PLAYING||t===e.PlayerState.BUFFERING}function Se(e){let t={videoId:null,listId:null},n=e.match(/^.*(youtu\.be\/|v\/|u\/\w\/|embed\/|watch\?v=|shorts\/|&v=)([^#&?]*).*/);n?.[2]?.length===11&&(t.videoId=n[2]);let r=e.match(/[?&]list=([^#&?]+)/);return r?.[1]&&(t.listId=r[1]),t}let Ce=!1,we=!1;const J=[];function Te(){we||(we=!0,me(`https://www.youtube.com/iframe_api`).then(()=>{window.YT?.ready(()=>{Ce=!0,J.forEach(e=>e()),J.length=0})}))}function Ee(e,t){Te();let n=q(),{techId:r,wrapper:i}=ge(e,B),a=Se(t.src),o=null,s=a.videoId,c=!1,l=!1,u=!1,d=null,f=!1,p=null,m=!1,h=new Set,g=null,_={active:!1,wasPaused:!1,timeBefore:0,catchUpInterval:null};function v(e,t=0){let n=setTimeout(()=>{h.delete(n),e()},t);h.add(n)}function y(){try{let e=o?.getPlayerResponse()?.adPlacements;return Array.isArray(e)&&e.length>0}catch{return!1}}function b(e){o?.loadVideoById({videoId:e})}function x(e){o?.cueVideoById({videoId:e})}function S(){a.videoId&&(_.wasPaused=!1,c?s===a.videoId?o?.playVideo():(b(a.videoId),s=a.videoId):(n.trigger(`waiting`),l=!0))}function C(){_.catchUpInterval&&clearInterval(_.catchUpInterval),_.active=!1,_.wasPaused&&o?.pauseVideo(),n.trigger(`seeked`)}function w(){m=(o?.getAvailablePlaybackRates()??[]).length>1,c=!0,t.muted&&o?.mute(),l?S():u&&a.videoId&&(x(a.videoId),s=a.videoId)}function T(e){if(e===d||p!==null)return;d=e;let t=y();t!==f&&(f=t,n.trigger(t?`adstart`:`adend`));let r=window.YT;if(r){switch(e){case-1:n.trigger(`loadstart`),n.trigger(`loadedmetadata`),n.trigger(`durationchange`),n.trigger(`ratechange`);break;case r.PlayerState.ENDED:n.trigger(`ended`);break;case r.PlayerState.PLAYING:n.trigger(`timeupdate`),n.trigger(`durationchange`),n.trigger(`playing`),n.trigger(`play`),_.active&&C();break;case r.PlayerState.PAUSED:n.trigger(`canplay`),_.active||n.trigger(`pause`);break;case r.PlayerState.BUFFERING:n.trigger(`waiting`);break;case r.PlayerState.CUED:n.trigger(`canplay`);break}g&&=(clearInterval(g),null),e===r.PlayerState.PLAYING&&(g=setInterval(()=>n.trigger(`timeupdate`),250))}}function E(){let e={controls:+!!t.nativeUi,modestbranding:1,rel:0,showinfo:0,mute:+!!t.muted,origin:window.location.origin,allowfullscreen:1,fullscreen:1,fs:1,playsinline:1,...t.customVars};s=a.videoId,o=new window.YT.Player(r,{videoId:s??void 0,playerVars:e,events:{onReady:w,onStateChange:e=>T(e.data),onPlaybackRateChange:()=>n.trigger(`ratechange`),onVolumeChange:()=>n.trigger(`volumechange`),onError:e=>{p=e.data,n.trigger(`error`),v(()=>{p=null})}}})}Ce?E():J.push(E),t.autoplay?c?S():l=!0:a.videoId&&(u=!0);function D(){if(!o)return;let e=o.getCurrentTime(),{video_id:t}=o.getVideoData();o.pauseVideo();let{overlay:r,reveal:i,finish:a}=be(n),s=document.createElement(`div`);s.id=`yt-fs-${Math.random().toString(36).slice(2)}`,r.appendChild(s);let c=null,l=()=>{a(()=>{let t=c?.getCurrentTime()??e;try{c?.destroy()}catch{}o?.seekTo(t,!0),n.trigger(`timeupdate`)})};c=new window.YT.Player(s.id,{videoId:t,playerVars:{playsinline:0,autoplay:1,controls:1,modestbranding:1,rel:0,start:Math.floor(e)},events:{onReady:t=>{i(),t.target.seekTo(e,!0),t.target.playVideo()},onStateChange:e=>{let t=window.YT;t&&(e.data===t.PlayerState.PAUSED||e.data===t.PlayerState.ENDED)&&l()}}})}function O(){if(A()&&o){D();return}let t=ye(e);t&&j(t)}function k(){M()}return{el:i,play:S,pause:()=>o?.pauseVideo(),paused:()=>{if(!o)return!0;let e=window.YT;return!e||!xe(e,d)},currentTime:()=>o?.getCurrentTime()??0,setCurrentTime:e=>{if(!o)return;let t=window.YT;t&&d===t.PlayerState.PAUSED&&(_.timeBefore=o.getCurrentTime()),_.active||(_.wasPaused=!t||!xe(t,d)),o.seekTo(e,!0),n.trigger(`timeupdate`),n.trigger(`seeking`),_.active=!0,t&&d===t.PlayerState.PAUSED&&_.timeBefore!==e&&(_.catchUpInterval&&clearInterval(_.catchUpInterval),_.catchUpInterval=setInterval(()=>{d!==t.PlayerState.PAUSED||!_.active?_.catchUpInterval&&clearInterval(_.catchUpInterval):o&&o.getCurrentTime()!==_.timeBefore&&(n.trigger(`timeupdate`),C())},250))},duration:()=>o?.getDuration()??0,volume:()=>o?o.getVolume()/100:1,setVolume:e=>o?.setVolume(e*100),muted:()=>o?.isMuted()??!1,setMuted:e=>{o&&(e?o.mute():o.unMute(),v(()=>n.trigger(`volumechange`),50))},playbackRate:()=>o?.getPlaybackRate()??1,setPlaybackRate:e=>o?.setPlaybackRate(e),bufferedEnd:()=>o?.getVideoLoadedFraction?o.getVideoLoadedFraction()*o.getDuration():0,error:()=>p===null?null:{code:p,message:`This video could not be played.`},setSrc:e=>{let t=Se(e);a.videoId=t.videoId,a.listId=t.listId,a.videoId&&(c?(b(a.videoId),s=a.videoId):u=!0)},featuresPlaybackRate:()=>m,enterFullscreen:O,exitFullscreen:k,on:n.on,off:n.off,dispose:()=>{if(h.forEach(clearTimeout),h.clear(),g&&clearInterval(g),_.catchUpInterval&&clearInterval(_.catchUpInterval),o)try{o.stopVideo(),o.destroy()}catch{}else{let e=J.indexOf(E);e!==-1&&J.splice(e,1)}o=null,ve(e,i,B),n.dispose()}}}function De(e){return e.match(/(?:vimeo\.com\/(?:video\/|channels\/[^/]+\/|groups\/[^/]+\/videos\/)?|player\.vimeo\.com\/video\/)(\d+)/)?.[1]??null}function Oe(e,t){let n=q(),{techId:r,wrapper:i}=ge(e,V),a=De(t.src),o=null,s=0,c=0,l=1,u=!1,d=!0,f=1,p=!1,m=!1,h=!1,g=null,_=new Set;function v(e,t=0){let n=setTimeout(()=>{_.delete(n),e()},t);_.add(n)}function y(){if(!o){m=!0;return}o.play().catch(()=>{})}function b(){t.muted&&o?.setMuted(!0).catch(()=>{}),m&&y()}async function x(e){if(await me(`https://player.vimeo.com/api/player.js`,`vimeo`),h||!window.Vimeo)return;let i={id:Number(e),byline:!1,portrait:!1,title:!1,transparent:!0,controls:!!t.nativeUi,autopause:!1,...t.autoplay!==void 0&&{autoplay:t.autoplay},...t.muted!==void 0&&{muted:t.muted}};o=new window.Vimeo.Player(r,i),t.autoplay&&(m=!0),o.ready().then(b).catch(e=>{g={code:4,message:e?.message||`This video is unavailable or cannot be embedded here.`},n.trigger(`error`)}),o.on(`play`,()=>{d=!1,n.trigger(`play`),n.trigger(`playing`)}),o.on(`pause`,()=>{d=!0,n.trigger(`pause`)}),o.on(`ended`,()=>{d=!0,n.trigger(`ended`)}),o.on(`timeupdate`,e=>{let{seconds:t,duration:r}=e;s=t,c=r,n.trigger(`timeupdate`),r&&!p&&(p=!0,n.trigger(`durationchange`))}),o.on(`loaded`,()=>{p=!1,n.trigger(`loadedmetadata`),n.trigger(`durationchange`)}),o.on(`seeking`,e=>{s=e.seconds,n.trigger(`seeking`)}),o.on(`seeked`,e=>{s=e.seconds,n.trigger(`seeked`),n.trigger(`timeupdate`)}),o.on(`bufferstart`,()=>n.trigger(`waiting`)),o.on(`bufferend`,()=>n.trigger(`canplay`)),o.on(`volumechange`,e=>{l=e.volume,n.trigger(`volumechange`)}),o.on(`error`,()=>n.trigger(`error`))}a&&x(a);function S(){if(!A()){let t=ye(e);t&&j(t);return}o?.requestFullscreen().catch(()=>{})}function C(){M()}return{el:i,play:y,pause:()=>o?.pause().catch(()=>{}),paused:()=>d,currentTime:()=>s,setCurrentTime:e=>{o?.setCurrentTime(e).catch(()=>{}),n.trigger(`timeupdate`),n.trigger(`seeking`)},duration:()=>c,volume:()=>l,setVolume:e=>{l=e,o?.setVolume(e).catch(()=>{})},muted:()=>u,setMuted:e=>{u=e,o?.setMuted(e).then(()=>v(()=>n.trigger(`volumechange`),50)).catch(()=>{})},playbackRate:()=>f,setPlaybackRate:e=>{f=e,o?.setPlaybackRate(e).catch(()=>{}),n.trigger(`ratechange`)},bufferedEnd:()=>s,error:()=>g,setSrc:()=>{},featuresPlaybackRate:()=>!1,enterFullscreen:S,exitFullscreen:C,on:n.on,off:n.off,dispose:()=>{h=!0,_.forEach(clearTimeout),_.clear(),o?.destroy().catch(()=>{}),o=null,ve(e,i,V),n.dispose()}}}function ke(e){let t=e.match(/[?&]video=([a-zA-Z0-9]+)/);return t?t[1]:e.match(/(?:dailymotion\.com\/(?:embed\/)?video\/|dai\.ly\/)([a-zA-Z0-9]+)/)?.[1]??null}function Ae(e,t){let n=q(),{techId:r,wrapper:i}=ge(e,re),a=ye(e),o=ke(t.src),s=typeof t.customVars?.playerId==`string`?t.customVars.playerId:void 0,c=null,l=0,u=0,d=1,f=!1,p=!0,m=!1,h=!1,g=null;async function _(){if(!o){g={code:4,message:`Could not parse video ID from source URL`},n.trigger(`error`);return}try{let e=await me(s?`https://geo.dailymotion.com/libs/player/${s}.js`:`https://geo.dailymotion.com/libs/player.js`,s||`dailymotion-sdk`).then(()=>window.dailymotion);if(!e)return;let i=await e.createPlayer(r,{...s&&{player:s},video:o,params:{autoplay:!!t.autoplay,mute:!!t.muted}});c=i;let a=e.events;m&&i.play(),i.on(a.PLAYER_CRITICALPATHREADY,e=>{let t=e.videoThumbnails;if(!t)return;let r=Object.keys(t).map(Number).sort((e,t)=>t-e)[0],i=r===void 0?void 0:t[r];i&&n.trigger(`posterchange`,i)}),i.on(a.VIDEO_PLAY,()=>{p=!1,n.trigger(`play`),n.trigger(`playing`),!t.autoplay&&!h&&(h=!0,i.pause())}),i.on(a.VIDEO_PLAYING,()=>{p=!1,n.trigger(`play`),n.trigger(`playing`)}),i.on(a.VIDEO_PAUSE,()=>{p=!0,n.trigger(`pause`)}),a.VIDEO_BUFFERING&&i.on(a.VIDEO_BUFFERING,()=>n.trigger(`waiting`)),i.on(a.VIDEO_END,()=>{p=!0,n.trigger(`ended`)}),i.on(a.VIDEO_TIMECHANGE,e=>{l=e.videoTime??l,u=e.videoDuration??u,n.trigger(`timeupdate`)}),i.on(a.VIDEO_DURATIONCHANGE,e=>{u=e.videoDuration??u,n.trigger(`durationchange`)}),i.on(a.VIDEO_SEEKSTART,()=>n.trigger(`seeking`)),i.on(a.VIDEO_SEEKEND,e=>{l=e.videoTime??l,n.trigger(`seeked`)}),i.on(a.PLAYER_VOLUMECHANGE,e=>{d=e.playerVolume??d,f=e.playerIsMuted??f,n.trigger(`volumechange`)}),i.on(a.PLAYER_ERROR,()=>n.trigger(`error`)),a.AD_START&&i.on(a.AD_START,()=>{p=!1,n.trigger(`play`),n.trigger(`adstart`)}),a.AD_END&&i.on(a.AD_END,()=>n.trigger(`adend`))}catch(e){g={code:4,message:e instanceof Error?e.message:`This video could not be played.`},n.trigger(`error`)}}_();function v(){c?c.play():m=!0}function y(){if(A()){c?.setFullscreen(!0);return}a&&j(a)}function b(){if(A()){c?.setFullscreen(!1);return}M()}return{el:i,play:v,pause:()=>c?.pause(),paused:()=>p,currentTime:()=>l,setCurrentTime:e=>{l=e,c?.seek(e),n.trigger(`seeking`)},duration:()=>u,volume:()=>d,setVolume:e=>{d=e,c?.setVolume(e)},muted:()=>f,setMuted:e=>{f=e,c?.setMute(e)},playbackRate:()=>1,setPlaybackRate:()=>{},bufferedEnd:()=>l,error:()=>g,setSrc:()=>{},featuresPlaybackRate:()=>!1,enterFullscreen:y,exitFullscreen:b,on:n.on,off:n.off,dispose:()=>{c?.destroy?.(),c=null,ve(e,i,re),n.dispose()}}}const je=[{test:e=>/youtu\.be|youtube\.com/.test(e),key:`youtube`,embed:!0},{test:e=>/vimeo\.com|player\.vimeo\.com/.test(e),key:`vimeo`,embed:!0},{test:e=>/dailymotion\.com|dai\.ly/.test(e),key:`dailymotion`,embed:!0},{test:e=>/cdn\.jwplayer\.com/.test(e)||e.startsWith(`jwplayer://`),key:`jwplayer`,embed:!1},{test:e=>/players\.brightcove\.net/.test(e),key:`brightcove`,embed:!1}];function Me(e){return je.find(t=>t.test(e))?.key??`html5`}function Ne(e){if(/\.m3u8(\?|#|$)/.test(e))return`application/x-mpegURL`;if(/\.mp4(\?|#|$)/.test(e))return`video/mp4`}function Pe(e){return je.find(t=>t.test(e))?.embed??!1}const Fe={youtube:Ee,vimeo:Oe,dailymotion:Ae};function Ie(e,t,n){let r=Fe[Me(e)];return r?r(t,n):null}async function Le(e){let t=Me(e);return t===`jwplayer`?ce(e):t===`brightcove`?fe(e):{src:e,type:Ne(e)}}const Re=`application/x-mpegURL`,ze=[`play`,`pause`,`ended`,`error`,`timeupdate`,`durationchange`,`progress`,`volumechange`,`ratechange`,`seeking`,`seeked`,`waiting`,`playing`,`canplay`];function Be(e,t){let n=q(),r=null,i=!1,a=null;async function o(t){let{default:o}=await import(`hls.js`);if(i||a!==t)return;if(typeof o?.isSupported!=`function`||!o.isSupported()){e.src=t;return}r=new o({liveDurationInfinity:!0}),r.loadSource(t),r.attachMedia(e);let s=o.Events,c=o.ErrorTypes;r.on(s.ERROR,(e,o)=>{if(!(!o.fatal||i||a!==t))switch(o.type){case c.NETWORK_ERROR:r?.startLoad();break;case c.MEDIA_ERROR:r?.recoverMediaError();break;default:r?.destroy(),r=null,n.trigger(`error`);break}})}function s(){return/Apple/.test(navigator.vendor)&&!/CriOS|FxiOS|OPiOS|EdgiOS|Chrome|Chromium|Android/.test(navigator.userAgent)&&(e.canPlayType(`application/vnd.apple.mpegurl`)!==``||e.canPlayType(Re)!==``)}function c(t,n){if(r?.destroy(),r=null,a=null,n===Re&&!s()){a=t,o(t);return}e.src=t}let l=e=>()=>n.trigger(e),u=ze.map(e=>[e,l(e)]);for(let[t,n]of u)e.addEventListener(t,n);let d=[[`webkitbeginfullscreen`,l(`nativefullscreenenter`)],[`webkitendfullscreen`,l(`nativefullscreenexit`)]];for(let[t,n]of d)e.addEventListener(t,n);e.poster=t.poster??``,e.muted=t.muted??t.autoplay??!1,e.playbackRate=t.playbackRate??1,e.playsInline=!0,c(t.src,t.type),t.autoplay&&e.play();function f(){let t=e;if(typeof t.webkitEnterFullscreen==`function`){t.webkitEnterFullscreen();return}let n=e.closest(`.player__shell`);n instanceof HTMLElement&&j(n)}function p(){let t=e;if(typeof t.webkitExitFullscreen==`function`){t.webkitExitFullscreen();return}M()}return{el:e,play:()=>e.play(),pause:()=>e.pause(),paused:()=>e.paused,currentTime:()=>e.currentTime,setCurrentTime:t=>{e.currentTime=t},duration:()=>e.duration,volume:()=>e.volume,setVolume:t=>{e.volume=t},muted:()=>e.muted,setMuted:t=>{e.muted=t},playbackRate:()=>e.playbackRate,setPlaybackRate:t=>{e.playbackRate=t},bufferedEnd:()=>{let{buffered:t,duration:n}=e;if(!t.length)return 0;let r=t.end(t.length-1);return n&&r>n?n:r},error:()=>{let t=e.error;return t?{code:t.code,message:t.message||`This video could not be played.`}:null},setSrc:c,featuresPlaybackRate:()=>!0,enterFullscreen:f,exitFullscreen:p,on:n.on,off:n.off,dispose:()=>{i=!0,r?.destroy();for(let[t,n]of u)e.removeEventListener(t,n);for(let[t,n]of d)e.removeEventListener(t,n);n.dispose()}}}function Ve(){return window.google?.ima?Promise.resolve():new Promise((e,t)=>{let n=document.createElement(`script`);n.src=`https://imasdk.googleapis.com/js/sdkloader/ima3.js`,n.onload=()=>e(),n.onerror=()=>t(Error(`Failed to load Google IMA SDK`)),document.head.appendChild(n)})}function He(e,t,n,r){let i=document.createElement(`div`);i.className=`ima-ad-container`,e.appendChild(i);let a=n,o=null,s=null,c=null,l=!1,u=!1,d=!1,f=!1,p=!1,m=!1,h=1,g=new ResizeObserver(([e])=>{let t=window.google?.ima;if(!c||!t)return;let{width:n,height:r}=e.contentRect;c.resize(n,r,t.ViewMode.NORMAL)});g.observe(t);function _(){s?.contentComplete()}function v(t){f=t,e.classList.toggle(H,t),t||(p=!1,e.classList.remove(U))}function y(){if(l||!u||!d||!o||!s||!a)return;l=!0;let e=window.google?.ima;if(!e)return;o.initialize();let t=new e.AdsRequest;t.adTagUrl=a,s.requestAds(t)}function b(e){a=e,y()}Ve().then(()=>{if(m)return;let n=window.google?.ima;n&&(o=new n.AdDisplayContainer(i,t),s=new n.AdsLoader(o),u=!0,s.addEventListener(n.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,i=>{if(m)return;let a=new n.AdsRenderingSettings;a.restoreCustomPlaybackStateOnAdBreakComplete=!0,c=i.getAdsManager(t,a),t.addEventListener(`ended`,_),c.addEventListener(n.AdEvent.Type.CONTENT_PAUSE_REQUESTED,()=>{t.removeEventListener(`ended`,_),t.pause(),v(!0),r.onAdStart();let e=c?.getVolume()??1;e>0&&(h=e),r.onAdMuteChange(e===0)}),c.addEventListener(n.AdEvent.Type.CONTENT_RESUME_REQUESTED,()=>{t.addEventListener(`ended`,_),v(!1),r.onAdEnd(),t.ended||t.play()}),c.addEventListener(n.AdEvent.Type.PAUSED,()=>{p=!0,e.classList.add(U),r.onAdPauseChange(!0)}),c.addEventListener(n.AdEvent.Type.RESUMED,()=>{p=!1,e.classList.remove(U),r.onAdPauseChange(!1)}),c.addEventListener(n.AdEvent.Type.AD_PROGRESS,()=>{r.onAdProgress(c?.getRemainingTime()??0)}),c.addEventListener(n.AdErrorEvent.Type.AD_ERROR,e=>{v(!1),r.onError(e.getError().getMessage()),t.play()});try{c.init(t.clientWidth,t.clientHeight,n.ViewMode.NORMAL),c.start()}catch(e){r.onError(e instanceof Error?e.message:`Ad playback failed to start.`)}}),s.addEventListener(n.AdErrorEvent.Type.AD_ERROR,e=>{r.onError(e.getError().getMessage())}),y())}).catch(e=>r.onError(e.message));function x(){d=!0,y()}function S(){if(!c)return;let e=c.getVolume();e>0?(h=e,c.setVolume(0)):c.setVolume(h||1),r.onAdMuteChange(c.getVolume()===0)}return{isAdPlaying:()=>f,isAdPaused:()=>p,requestAdsOnFirstPlay:x,setAdTagUrl:b,pauseAd:()=>c?.pause(),resumeAd:()=>c?.resume(),toggleAdMute:S,dispose:()=>{m=!0,g.disconnect(),t.removeEventListener(`ended`,_),c?.destroy(),s?.destroy(),i.remove(),e.classList.remove(H,U)}}}function Ue(e,t){let n=window.pbjs;if(!n)return Promise.resolve(t);let r=e.timeoutMs??1e3;return new Promise(i=>{let a=!1;function o(e){a||(a=!0,i(e||t))}let s=setTimeout(()=>o(t),r);n.que.push(()=>{try{n.addAdUnits(e.adUnit),n.requestBids({adUnitCodes:[e.adUnit.code],timeout:r,bidsBackHandler:()=>{clearTimeout(s);try{o(n.adServers?.gam?.buildVideoUrl({adUnit:e.adUnit,params:e.params}))}catch{o(t)}}})}catch{clearTimeout(s),o(t)}})})}const We=new Set;function Ge(e){return We.add(e),()=>We.delete(e)}function Ke(e){We.forEach(t=>{if(t!==e)try{t()}catch{}})}function qe(e){let t=C(!1),n=C(!1);function r(){let e=document;t.value=!!(document.fullscreenElement||e.webkitFullscreenElement),n.value=!1}function i(){let n=e();if(n){if(t.value){n.exitFullscreen();return}n.enterFullscreen()}}function a(){n.value=!0}function o(e){e.on(R,()=>{n.value=!0}),e.on(z,()=>{n.value=!1}),e.on(`nativefullscreenenter`,()=>{t.value=!0,n.value=!1}),e.on(`nativefullscreenexit`,()=>{t.value=!1,n.value=!1})}return y(()=>{document.addEventListener(`fullscreenchange`,r),document.addEventListener(`webkitfullscreenchange`,r)}),v(()=>{document.removeEventListener(`fullscreenchange`,r),document.removeEventListener(`webkitfullscreenchange`,r)}),{isFullscreen:t,isFullscreenPending:n,toggleFullscreen:i,markFullscreenPending:a,attachPlayerEvents:o}}function Je(){let e=C(!1),t=null;function n(){clearTimeout(t??void 0),e.value=!1}function r(r){r.on(`waiting`,()=>{clearTimeout(t??void 0),t=setTimeout(()=>{e.value=!0},500)}),r.on(`playing`,n),r.on(`canplay`,n)}return v(()=>clearTimeout(t??void 0)),{isBuffering:e,attachPlayerEvents:r,reset:n}}function Ye(e,t,n){let r=new Set;function i(){if(!t.value)return;let i=e.value/t.value;for(let[e,t]of ae)!r.has(e)&&i>=e&&(r.add(e),n(t))}function a(){r.clear()}return{checkQuartiles:i,reset:a}}function Xe(){try{return JSON.parse(localStorage.getItem(`player:positions`)??`[]`)}catch{return[]}}function Ze(e){localStorage.setItem(`player:positions`,JSON.stringify(e))}function Qe(e,t){if(t<5)return;let n=Xe().filter(t=>t.url!==e);n.unshift({url:e,time:t}),Ze(n.slice(0,5))}function $e(e){return Xe().find(t=>t.url===e)?.time??null}function et(e){Ze(Xe().filter(t=>t.url!==e))}function tt(e,t,n){let r=!1;function i(t){if(r)return;let n=$e(e);n&&t.setCurrentTime(n),r=!0}function a(t){!t||n.value||Qe(e,t.currentTime()??0)}function o(){et(e)}function s(){document.visibilityState===`hidden`&&a(t())}return y(()=>document.addEventListener(`visibilitychange`,s)),v(()=>{a(t()),document.removeEventListener(`visibilitychange`,s)}),{restoreOnce:i,save:a,clear:o}}function nt(e,t,n,r){let i=null;y(()=>{let a=e.value?.closest(`.player__shell`);a&&(i=new IntersectionObserver(([e])=>{let i=t();!e.isIntersecting&&i&&!i.paused()&&!n.value&&!r.value&&i.pause()},{threshold:.1}),i.observe(a))}),v(()=>i?.disconnect())}function rt(e,t,n,r,i,a){function o(){let n=e();if(!(!n||!t.value)){if(!a.value){n.play();return}n.pause()}}function s(t){e()?.setCurrentTime(n.value*(t/100))}function c(){let t=e();t?.setMuted(!t.muted())}function l(t){let n=e();n&&(n.setVolume(t),n.setMuted(t===0))}function u(){r.value=!r.value}function d(t){let n=e();n&&(n.setPlaybackRate(t),i.value=t)}return{togglePlay:o,seek:s,toggleMute:c,setVolume:l,toggleLoop:u,setPlaybackRate:d}}function it(e,t){let{isPlaying:n,hasEnded:r,isReady:i,isAdPlaying:a,isLive:o,current:s,total:c,buffered:l,vol:u,isMuted:d,isLooping:f,playbackRate:p,supportsPlaybackRate:m,hasStarted:h,isError:g,errorMessage:_}=e,{fire:v,pauseThisPlayer:y,positionMemory:b,quartiles:x,buffering:S,fullscreen:C}=t;function w(e){i.value=!0,m.value=e.featuresPlaybackRate();let t=()=>{let t=e.duration();if(t===1/0){o.value=!0;return}o.value=!1,t&&t>0&&isFinite(t)&&(c.value=t)};e.on(`adstart`,()=>{Ke(y),a.value=!0,v(`adstart`)}),e.on(`adend`,()=>{a.value=!1,v(`adend`)}),e.on(`play`,()=>{Ke(y),h.value=!0,n.value=!0,r.value=!1,o.value||b.restoreOnce(e),v(`play`)}),e.on(`pause`,()=>{n.value=!1,o.value||b.save(e),v(`pause`)}),e.on(`ended`,()=>{if(n.value=!1,x.reset(),S.reset(),f.value){e.setCurrentTime(0),e.play();return}c.value&&(s.value=c.value),r.value=!0,b.clear(),v(`ended`)}),e.on(`seeked`,()=>{v(`seeked`)}),e.on(`error`,()=>{let t=e.error();_.value=t?.message||`This video could not be played.`,g.value=!0,i.value=!0,v(`error`,{error:t})}),e.on(`timeupdate`,()=>{r.value||(s.value=e.currentTime()??0,c.value||t(),m.value||=e.featuresPlaybackRate(),o.value||x.checkQuartiles())}),e.on(`durationchange`,t),e.on(`progress`,()=>{let t=e.duration();l.value=t?e.bufferedEnd()/t*100:0}),e.on(`volumechange`,()=>{let t=e.muted();u.value=e.volume()??1,d.value=t??!1,h.value&&v(`volumechange`,{isMuted:t})}),e.on(`ratechange`,()=>{let t=e.playbackRate()??1;p.value=t,h.value&&v(`ratechange`,{playbackRate:t})}),S.attachPlayerEvents(e),C.attachPlayerEvents(e)}return{attachPlayerEvents:w}}function at(e,t,r){let i=null,a=null,o=null,s=null,c=C(!1),l=C(!1),u=C(!1),d=C(!1),f=C(!1),p=C(!1),m=C(0),h=C(!1),g=C(0),_=C(0),b=C(0),x=C(1),S=C(t.muted??t.autoplay??!1),w=C(!1),T=C(t.playbackRate??1),E=C(!1),O=C(!1),k=C(!1),A=C(``),j=C(!1),M=n(()=>_.value?g.value/_.value*100:0),N=n(()=>Math.max(b.value,M.value)),I=()=>i,L=qe(I),ee=Je(),te=tt(t.videoUrl,I,l);function R(e,n={}){r(`state-change`,{type:e,currentTime:g.value,duration:_.value,src:t.videoUrl,...n,payload:t.payload})}let z=Ye(g,_,R);function ne(){!i||!s||(k.value=!1,A.value=``,i.setSrc(s.src,s.type))}function B(){a?.toggleAdMute()}function V(){if(a?.isAdPlaying()){a.pauseAd();return}i?.pause()}function re(){if(a?.isAdPlaying()){a.isAdPaused()?a.resumeAd():a.pauseAd();return}H.togglePlay()}let H=rt(I,u,_,w,T,c),{attachPlayerEvents:U}=it({isPlaying:c,hasEnded:l,isReady:u,isAdPlaying:d,isLive:h,current:g,total:_,buffered:b,vol:x,isMuted:S,isLooping:w,playbackRate:T,supportsPlaybackRate:E,hasStarted:O,isError:k,errorMessage:A},{fire:R,pauseThisPlayer:V,positionMemory:te,quartiles:z,buffering:ee,fullscreen:L});return D(()=>t.muted,e=>{!i||e===void 0||i.setMuted(e)}),D(()=>t.playbackRate,e=>{!i||e===void 0||i.setPlaybackRate(e)}),nt(e,I,L.isFullscreen,L.isFullscreenPending),D(O,t=>{!t||!e.value||!i||i.el===e.value||_e(e.value,i.el)}),y(async()=>{if(Pe(t.videoUrl)){if(!e.value)return;let n=Ie(t.videoUrl,e.value,{src:t.videoUrl,poster:t.poster,autoplay:t.autoplay,muted:t.muted??t.autoplay,nativeUi:t.nativeUi});if(!n){k.value=!0,u.value=!0,A.value=`This platform is not yet supported.`;return}j.value=!!t.nativeUi,i=n,s={src:t.videoUrl},o=Ge(V),U(i);return}let n=await Le(t.videoUrl).catch(()=>({src:t.videoUrl}));if(!e.value)return;s={src:n.src,type:n.type},i=Be(e.value,{src:n.src,type:n.type,poster:n.poster||t.poster||``,autoplay:t.autoplay,muted:t.muted??t.autoplay,playbackRate:T.value});let r=P(t.adTagUrl||n.adTagUrl||``,t.adTagParams);t.headerBidding&&Ue(t.headerBidding,r).catch(()=>r).then(e=>a?.setAdTagUrl(e)),(r||t.headerBidding)&&e.value.parentElement&&(a=He(e.value.parentElement,e.value,r,{onAdStart:()=>{d.value=!0,f.value=!1,R(`adstart`)},onAdEnd:()=>{d.value=!1,f.value=!1,m.value=0,R(`adend`)},onAdPauseChange:e=>{f.value=e,e||Ke(V)},onAdMuteChange:e=>{p.value=e},onAdProgress:e=>{m.value=e},onError:e=>{d.value=!1,f.value=!1,m.value=0,console.error(`Ad playback error:`,e)}}),i.on(`play`,()=>a?.requestAdsOnFirstPlay())),o=Ge(V),U(i)}),v(()=>{o?.(),a?.dispose(),a=null,i?.dispose(),i=null}),{isPlaying:c,hasEnded:l,isReady:u,isAdPlaying:d,isAdPaused:f,isAdMuted:p,adRemainingTime:m,isLive:h,isBuffering:ee.isBuffering,current:g,total:_,vol:x,isMuted:S,isLooping:w,playbackRate:T,hasStarted:O,isError:k,errorMessage:A,progress:M,bufferedDisplay:N,isFullscreen:L.isFullscreen,isFullscreenPending:L.isFullscreenPending,fmt:F,fire:R,retry:ne,togglePlay:re,seek:H.seek,toggleMute:H.toggleMute,setVolume:H.setVolume,toggleFullscreen:L.toggleFullscreen,markFullscreenPending:L.markFullscreenPending,toggleLoop:H.toggleLoop,toggleAdMute:B,setPlaybackRate:H.setPlaybackRate,supportsPlaybackRate:E,nativeUi:j}}function ot(e){let t=C(!0),n=C(!1),r=null,i=0;function a(e=400){i=Date.now()+e}function o(e=3500){clearTimeout(r??void 0),r=setTimeout(()=>{t.value=!1,n.value=!1},e)}function s(){clearTimeout(r??void 0)}function c(){n.value=!0,t.value=!0,o()}function l(){n.value=!1,e.value&&o()}function u(){e.value&&o()}function d(){t.value=!0,e.value&&o()}function f(){t.value=!0,o()}function p(){Date.now()<i||e.value&&o(600)}return D(e,e=>{if(!e){clearTimeout(r??void 0),t.value=!0;return}o()}),v(()=>clearTimeout(r??void 0)),{showHUD:t,isOpen:n,scheduleHide:o,pauseHide:s,onVideoTap:d,onMouseMove:f,onMouseLeave:p,openControls:c,closeControls:l,keepOpen:u,suppressMouseLeave:a}}const Y=Symbol(`player`),X=Symbol(`hud`),st=Symbol(`action`),ct=Symbol(`compact`),lt=Symbol(`playlist`);function Z(e){let t=f(e);if(t===void 0)throw Error(`[video-player] missing "${String(e.description)}" context — this component must be rendered inside <VideoPlayer>`);return t}function ut(e,t){return{hudVisible:n(()=>!e.isReady||e.isError?!1:t.showHUD),popupVisible:n(()=>!e.isReady||e.isError?!1:e.isFullscreen?t.showHUD:t.isOpen)}}function dt(e,t){return n(()=>!(!e?.value||t.isFullscreen))}function ft(e,t,r){let i=n(()=>e?.value??null),a=n(()=>!!i.value&&typeof i.value==`object`),o=n(()=>a.value?i.value:null),s=n(()=>i.value===`mute`?t.isMuted?`Unmute`:`Mute`:i.value===`loop`?t.isLooping?`Disable loop`:`Loop`:i.value===`autoplay`?r.autoAdvance?`Disable autoplay next`:`Autoplay next`:``),c=n(()=>i.value===`mute`?t.isMuted:i.value===`loop`?t.isLooping:i.value===`autoplay`&&r.autoAdvance);function l(){i.value===`mute`?t.toggleMute():i.value===`loop`?t.toggleLoop():i.value===`autoplay`&&r.toggleAutoAdvance()}return{currentAction:i,isCustom:a,customAction:o,builtinLabel:s,builtinActive:c,onBuiltinClick:l}}var Q=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n};const pt={},mt={viewBox:`0 0 24 24`,fill:`currentColor`};function ht(e,t){return b(),a(`svg`,mt,[...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 gt=Q(pt,[[`render`,ht]]);const _t={},vt={viewBox:`0 0 24 24`,fill:`currentColor`};function yt(e,t){return b(),a(`svg`,vt,[...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 bt=Q(_t,[[`render`,yt]]);const xt={},St={viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`};function Ct(e,t){return b(),a(`svg`,St,[...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 wt=Q(xt,[[`render`,Ct]]);const Tt={},Et={viewBox:`0 0 24 24`,fill:`currentColor`};function Dt(e,t){return b(),a(`svg`,Et,[...t[0]||=[o(`path`,{d:`M4 12l1.41 1.41L11 7.83V20h2V7.83l5.59 5.58L20 12l-8-8-8 8z`},null,-1)]])}var Ot=Q(Tt,[[`render`,Dt]]);const kt={},At={viewBox:`0 0 24 24`,fill:`currentColor`};function jt(e,t){return b(),a(`svg`,At,[...t[0]||=[o(`path`,{d:`M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z`},null,-1)]])}var Mt=Q(kt,[[`render`,jt]]);const Nt={},Pt={viewBox:`0 0 24 24`,fill:`currentColor`};function Ft(e,t){return b(),a(`svg`,Pt,[...t[0]||=[o(`path`,{d:`M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z`},null,-1)]])}var It=Q(Nt,[[`render`,Ft]]);const Lt={},Rt={viewBox:`0 0 24 24`,fill:`currentColor`};function zt(e,t){return b(),a(`svg`,Rt,[...t[0]||=[o(`path`,{d:`M7 7h10v3l4-4-4-4v3H5v6h2V7zm10 10H7v-3l-4 4 4 4v-3h12v-6h-2v4z`},null,-1)]])}var Bt=Q(Lt,[[`render`,zt]]);const Vt={},Ht={viewBox:`0 0 24 24`,fill:`currentColor`};function Ut(e,t){return b(),a(`svg`,Ht,[...t[0]||=[o(`circle`,{cx:`5`,cy:`12`,r:`2`},null,-1),o(`circle`,{cx:`12`,cy:`12`,r:`2`},null,-1),o(`circle`,{cx:`19`,cy:`12`,r:`2`},null,-1)]])}var Wt=Q(Vt,[[`render`,Ut]]);const Gt={},Kt={viewBox:`0 0 24 24`,fill:`currentColor`};function qt(e,t){return b(),a(`svg`,Kt,[...t[0]||=[o(`path`,{d:`M6 19h4V5H6v14zm8-14v14h4V5h-4z`},null,-1)]])}var Jt=Q(Gt,[[`render`,qt]]);const Yt={},Xt={viewBox:`0 0 24 24`,fill:`currentColor`};function Zt(e,t){return b(),a(`svg`,Xt,[...t[0]||=[o(`path`,{d:`M8 5v14l11-7z`},null,-1)]])}var Qt=Q(Yt,[[`render`,Zt]]);const $t={},en={viewBox:`0 0 24 24`,fill:`currentColor`};function tn(e,t){return b(),a(`svg`,en,[...t[0]||=[o(`path`,{d:`M12 5V1L7 6l5 5V7c3.31 0 6 2.69 6 6s-2.69 6-6 6-6-2.69-6-6H4c0 4.42 3.58 8 8 8s8-3.58 8-8-3.58-8-8-8z`},null,-1)]])}var nn=Q($t,[[`render`,tn]]);const rn={},an={viewBox:`0 0 24 24`,fill:`currentColor`};function on(e,t){return b(),a(`svg`,an,[...t[0]||=[o(`path`,{d:`M6 18l8.5-6L6 6v12zM16 6v12h2V6h-2z`},null,-1)]])}var sn=Q(rn,[[`render`,on]]);const cn={},ln={viewBox:`0 0 24 24`,fill:`currentColor`};function un(e,t){return b(),a(`svg`,ln,[...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 dn=Q(cn,[[`render`,un]]);const fn={},pn={viewBox:`0 0 24 24`,fill:`currentColor`};function mn(e,t){return b(),a(`svg`,pn,[...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 hn=Q(fn,[[`render`,mn]]);const gn=[`aria-label`];var $=Q(u({__name:`PlayPauseButton`,props:{isPlaying:{type:Boolean,required:!0},hasEnded:{type:Boolean,required:!1,default:!1},size:{type:String,required:!1,default:`sm`}},emits:[`toggle-play`],setup(e){let t=e,i=n(()=>t.isPlaying?`Pause`:t.hasEnded?`Replay`:`Play`);return(t,n)=>(b(),a(`button`,{class:h([`ppbtn`,`ppbtn--${e.size}`]),"aria-label":i.value,onClick:n[0]||=k(e=>t.$emit(`toggle-play`),[`stop`])},[e.isPlaying?(b(),r(E(Jt),{key:0})):e.hasEnded?(b(),r(E(nn),{key:1})):(b(),r(E(Qt),{key:2}))],10,gn))}}),[[`__scopeId`,`data-v-85902525`]]),_n=u({__name:`VolumeIcon`,setup(e){let t=Z(Y),i=n(()=>!t.isMuted&&t.vol>0);return(e,t)=>i.value?(b(),r(E(hn),{key:0})):(b(),r(E(dn),{key:1}))}}),vn=Q(u({__name:`Spinner`,props:{size:{type:Number,required:!1,default:14},borderWidth:{type:Number,required:!1,default:2}},setup(e){return(t,n)=>(b(),a(`div`,{class:`spinner`,style:_({width:`${e.size}px`,height:`${e.size}px`,borderWidth:`${e.borderWidth}px`})},null,4))}}),[[`__scopeId`,`data-v-259be2b2`]]);const yn={class:`hud`},bn=[`aria-label`],xn=[`aria-label`],Sn=[`aria-label`],Cn=[`aria-label`,`innerHTML`],wn={key:4,class:`hud__spacer`},Tn={class:`hud__play-wrap`};var En=Q(u({__name:`HudButtons`,setup(t){let n=Z(Y),s=Z(X),{currentAction:c,isCustom:u,customAction:d,builtinLabel:p,builtinActive:m,onBuiltinClick:g}=ft(f(st),n,Z(lt));return(t,f)=>(b(),a(`div`,yn,[!E(s).isOpen&&!E(n).isFullscreen?(b(),a(e,{key:0},[E(c)===`mute`?(b(),a(`button`,{key:0,class:h([`hud__btn`,{"hud__btn--active":E(m)}]),"aria-label":E(p),onClick:f[0]||=k((...e)=>E(g)&&E(g)(...e),[`stop`])},[l(_n)],10,bn)):E(c)===`loop`?(b(),a(`button`,{key:1,class:h([`hud__btn`,{"hud__btn--active":E(m)}]),"aria-label":E(p),onClick:f[1]||=k((...e)=>E(g)&&E(g)(...e),[`stop`])},[l(E(Bt))],10,xn)):E(c)===`autoplay`?(b(),a(`button`,{key:2,class:h([`hud__btn`,{"hud__btn--active":E(m)}]),"aria-label":E(p),onClick:f[2]||=k((...e)=>E(g)&&E(g)(...e),[`stop`])},[l(E(sn))],10,Sn)):E(u)&&E(d)?(b(),a(`button`,{key:3,class:`hud__btn`,"aria-label":E(d).label,onClick:f[3]||=k(e=>E(d).onClick(),[`stop`]),innerHTML:E(d).icon},null,8,Cn)):(b(),a(`div`,wn))],64)):i(`v-if`,!0),o(`div`,Tn,[l($,{"is-playing":E(n).isPlaying,"has-ended":E(n).hasEnded,size:`lg`,onTogglePlay:E(n).togglePlay},null,8,[`is-playing`,`has-ended`,`onTogglePlay`]),E(n).isBuffering?(b(),r(vn,{key:0,class:`hud__buf-spinner`})):i(`v-if`,!0)]),!E(s).isOpen&&!E(n).isFullscreen?(b(),a(`button`,{key:1,class:`hud__btn`,"aria-label":`Show controls`,onClick:f[4]||=k((...e)=>E(s).openControls&&E(s).openControls(...e),[`stop`])},[l(E(wt))])):i(`v-if`,!0)]))}}),[[`__scopeId`,`data-v-a6d118e7`]]);function Dn(e){let t=C(null),r=n(()=>t.value??e.progress),i=null;function a(){i&&clearTimeout(i),i=null,t.value=null}function o(e){i&&clearTimeout(i),i=null,t.value=Number(e.target.value)}function s(n){let r=Number(n.target.value);t.value=r,e.seek(r),i&&clearTimeout(i),i=setTimeout(a,3e3)}return D(()=>e.current,()=>{if(t.value===null||!e.total)return;let n=t.value/100*e.total;Math.abs(e.current-n)<1&&a()}),v(a),{displaySeek:r,onSeekInput:o,onSeekChange:s}}function On(e,t,n){if(!document.startViewTransition||!e.value){n();return}e.value.style.viewTransitionName=t,document.startViewTransition(async()=>{n(),await m()}).finished.finally(()=>{e.value&&(e.value.style.viewTransitionName=``)})}const kn={class:`controls__vol-header`},An=[`aria-label`],jn={class:`controls__vol-body`},Mn=[`value`],Nn={class:`controls__vol-pct`};var Pn=Q(u({__name:`VolumePanel`,emits:[`back`],setup(t){let r=Z(Y),i=Z(X),s=n(()=>r.isMuted?0:Math.round(r.vol*100));function c(e){r.setVolume(Number(e.target.value)/100)}return(t,n)=>(b(),a(e,null,[o(`div`,kn,[o(`button`,{class:`controls__btn`,"aria-label":`Back`,onClick:n[0]||=e=>t.$emit(`back`)},[l(E(gt))]),n[6]||=o(`span`,{class:`controls__vol-label`},`Volume`,-1),o(`button`,{class:`controls__btn`,"aria-label":E(r).isMuted?`Unmute`:`Mute`,onClick:n[1]||=e=>E(r).toggleMute()},[l(_n)],8,An)]),o(`div`,jn,[o(`input`,{type:`range`,min:`0`,max:`100`,step:`1`,value:s.value,class:`controls__vol-slider`,style:_({"--v":s.value+`%`}),"aria-label":`Volume`,onInput:c,onMousedown:n[2]||=e=>E(i).pauseHide(),onMouseup:n[3]||=e=>E(i).scheduleHide(),onTouchstartPassive:n[4]||=e=>E(i).pauseHide(),onTouchend:n[5]||=e=>E(i).scheduleHide()},null,44,Mn),o(`span`,Nn,w(s.value)+`%`,1)])],64))}}),[[`__scopeId`,`data-v-10b0ae67`]]);function Fn(e){function t(){let t=W.indexOf(e.playbackRate);e.setPlaybackRate(W[(t+1)%W.length])}function n(e){return`${e}×`}return{cycleRate:t,fmtRate:n}}const In={class:`controls__more-header`},Ln={class:`controls__more-body`},Rn={class:`controls__more-value`},zn={class:`controls__more-row-label`},Bn={class:`controls__more-value`},Vn={class:`controls__more-row-label`},Hn={class:`controls__more-value`},Un=[`aria-label`],Wn={class:`controls__more-row-label`},Gn=[`innerHTML`];var Kn=Q(u({__name:`MoreMenu`,props:{isCustom:{type:Boolean,required:!0},customAction:{type:[Object,null],required:!0}},emits:[`back`],setup(t){let n=Z(Y),r=Z(lt),{cycleRate:s,fmtRate:u}=Fn(n);return(d,f)=>(b(),a(e,null,[o(`div`,In,[o(`button`,{class:`controls__btn`,"aria-label":`Back`,onClick:f[0]||=e=>d.$emit(`back`)},[l(E(gt))]),f[5]||=o(`span`,{class:`controls__more-label`},`More`,-1)]),o(`div`,Ln,[E(n).supportsPlaybackRate?(b(),a(`button`,{key:0,class:`controls__more-row`,"aria-label":`Playback speed`,onClick:f[1]||=(...e)=>E(s)&&E(s)(...e)},[f[6]||=o(`span`,null,`Playback speed`,-1),o(`span`,Rn,w(E(u)(E(n).playbackRate)),1)])):i(`v-if`,!0),o(`button`,{class:h([`controls__more-row`,{"controls__more-row--active":E(n).isLooping}]),"aria-label":`Toggle loop`,onClick:f[2]||=e=>E(n).toggleLoop()},[o(`span`,zn,[l(E(Bt),{class:`controls__more-row-icon`}),f[7]||=c(`Loop`,-1)]),o(`span`,Bn,w(E(n).isLooping?`On`:`Off`),1)],2),E(r).hasPlaylist?(b(),a(`button`,{key:1,class:h([`controls__more-row`,{"controls__more-row--active":E(r).autoAdvance}]),"aria-label":`Toggle autoplay next`,onClick:f[3]||=e=>E(r).toggleAutoAdvance()},[o(`span`,Vn,[l(E(sn),{class:`controls__more-row-icon`}),f[8]||=c(`Autoplay next`,-1)]),o(`span`,Hn,w(E(r).autoAdvance?`On`:`Off`),1)],2)):i(`v-if`,!0),t.isCustom&&t.customAction?(b(),a(`button`,{key:2,class:`controls__more-row`,"aria-label":t.customAction.label,onClick:f[4]||=e=>t.customAction.onClick()},[o(`span`,Wn,[o(`span`,{class:`controls__more-row-icon`,innerHTML:t.customAction.icon},null,8,Gn),c(w(t.customAction.label),1)])],8,Un)):i(`v-if`,!0)])],64))}}),[[`__scopeId`,`data-v-e89a8208`]]);const qn=[`value`],Jn={class:`controls__row`},Yn={class:`controls__play-wrap`},Xn={key:0,class:`controls__live`},Zn={key:1,class:`controls__time`},Qn={class:`controls__fs-wrap`},$n=[`aria-label`];var er=Q(u({__name:`ControlsPopup`,setup(t){let n=Z(Y),s=Z(X),u=Z(lt),d=dt(f(ct),n),{isCustom:p,customAction:m}=ft(f(st),n,u),g=C(!1),x=C(!1),S=C(null);function T(e){return!S.value||S.value.contains(e)?!1:(s.closeControls(),!0)}function D(e){T(e.target)}function O(e){T(e.target)&&e.preventDefault()}y(()=>{n.fire(`controlsopen`,{element:S.value}),document.addEventListener(`click`,D,!0),document.addEventListener(`touchend`,O,!0)}),v(()=>{g.value=!1,x.value=!1,n.fire(`controlsclose`,{element:S.value}),document.removeEventListener(`click`,D,!0),document.removeEventListener(`touchend`,O,!0)});function j(e){s.suppressMouseLeave(),On(S,`controls-popup`,e)}function M(){if(A()){n.toggleMute();return}j(()=>{g.value=!0})}function N(){j(()=>{x.value=!0})}let{displaySeek:P,onSeekInput:F,onSeekChange:I}=Dn(n);function L(){n.isFullscreen||n.markFullscreenPending(),n.toggleFullscreen()}return(t,f)=>(b(),a(`div`,{ref_key:`popupEl`,ref:S,class:h([`controls`,{"controls--fs":E(n).isFullscreen,"controls--compact":E(d)}]),onMousemove:f[10]||=k((...e)=>E(s).keepOpen&&E(s).keepOpen(...e),[`stop`])},[g.value?(b(),r(Pn,{key:0,onBack:f[0]||=e=>j(()=>g.value=!1)})):x.value?(b(),r(Kn,{key:1,"is-custom":E(p),"custom-action":E(m),onBack:f[1]||=e=>j(()=>x.value=!1)},null,8,[`is-custom`,`custom-action`])):(b(),a(e,{key:2},[E(n).isLive?i(`v-if`,!0):(b(),a(`input`,{key:0,type:`range`,min:`0`,max:`100`,value:E(P),class:`controls__seek`,style:_({"--p":E(P)+`%`,"--b":E(n).bufferedDisplay+`%`}),onInput:f[2]||=(...e)=>E(F)&&E(F)(...e),onChange:f[3]||=(...e)=>E(I)&&E(I)(...e),onMousedown:f[4]||=e=>E(s).pauseHide(),onMouseup:f[5]||=e=>E(s).scheduleHide(),onTouchstartPassive:f[6]||=e=>E(s).pauseHide(),onTouchend:f[7]||=e=>E(s).scheduleHide()},null,44,qn)),o(`div`,Jn,[o(`div`,Yn,[E(n).isBuffering?(b(),r(vn,{key:0})):(b(),r($,{key:1,"is-playing":E(n).isPlaying,"has-ended":E(n).hasEnded,size:`sm`,onTogglePlay:f[8]||=e=>E(n).togglePlay()},null,8,[`is-playing`,`has-ended`]))]),E(n).isLive?(b(),a(`span`,Xn,[...f[11]||=[o(`span`,{class:`controls__live-dot`},null,-1),c(`Live`,-1)]])):(b(),a(`span`,Zn,w(E(n).fmt(E(n).current))+` / `+w(E(n).fmt(E(n).total)),1)),E(u).hasNext?(b(),a(`button`,{key:2,class:`controls__btn`,"aria-label":`Play next`,onClick:f[9]||=e=>E(u).playNext()},[l(E(sn))])):i(`v-if`,!0),o(`button`,{class:`controls__btn`,"aria-label":`Volume`,onClick:M},[l(_n)]),o(`button`,{class:h([`controls__btn controls__btn--more`,{"controls__btn--active":E(n).isLooping||E(n).playbackRate!==1||E(u).autoAdvance}]),"aria-label":`More`,onClick:N},[l(E(Wt))],2),o(`div`,Qn,[E(n).isFullscreenPending?(b(),r(vn,{key:0})):(b(),a(`button`,{key:1,class:`controls__btn`,"aria-label":E(n).isFullscreen?`Exit fullscreen`:`Fullscreen`,onClick:L},[E(n).isFullscreen?(b(),r(E(It),{key:0})):(b(),r(E(Mt),{key:1}))],8,$n))])])],64))],34))}}),[[`__scopeId`,`data-v-5712aad4`]]);const tr={class:`ad-overlay`},nr={class:`ad-overlay__bar`},rr={class:`ad-overlay__badge`},ir={key:0,class:`ad-overlay__countdown`},ar=[`aria-label`],or={key:0,class:`ad-overlay__resume`};var sr=Q(u({__name:`AdOverlay`,setup(e){let t=Z(Y),s=n(()=>t.adRemainingTime>0?t.fmt(t.adRemainingTime):``);return(e,n)=>(b(),a(`div`,tr,[o(`div`,nr,[o(`div`,rr,[n[2]||=o(`span`,null,`Ad`,-1),s.value?(b(),a(`span`,ir,w(s.value),1)):i(`v-if`,!0)]),o(`button`,{class:`ad-overlay__mute`,"aria-label":E(t).isAdMuted?`Unmute ad`:`Mute ad`,onClick:n[0]||=e=>E(t).toggleAdMute()},[E(t).isAdMuted?(b(),r(E(dn),{key:0})):(b(),r(E(hn),{key:1}))],8,ar)]),E(t).isAdPaused?(b(),a(`div`,or,[l($,{"is-playing":!1,size:`lg`,onTogglePlay:n[1]||=e=>E(t).togglePlay()})])):i(`v-if`,!0)]))}}),[[`__scopeId`,`data-v-23efcc8b`]]);const cr={key:0,class:`overlay__spinner`},lr={key:0,class:`overlay__error`};var ur=Q(u({__name:`PlayerOverlay`,props:{disableTapCapture:{type:Boolean,required:!1,default:!1}},setup(n){let s=Z(Y),c=Z(X),{hudVisible:u,popupVisible:d}=ut(s,c);function f(){if(s.isAdPlaying&&s.isAdPaused){s.togglePlay();return}c.onVideoTap()}return(c,p)=>(b(),a(e,null,[!n.disableTapCapture&&E(s).hasStarted&&!(E(s).isAdPlaying&&!E(s).isAdPaused)?(b(),a(`div`,{key:0,class:`overlay__tap-capture`,onClick:f,onTouchend:k(f,[`prevent`,`stop`])},null,32)):i(`v-if`,!0),E(s).isAdPlaying?(b(),r(sr,{key:1})):i(`v-if`,!0),l(t,{name:`fade`},{default:O(()=>[!E(s).isReady&&!E(s).isError?(b(),a(`div`,cr,[l(vn,{size:40,"border-width":3})])):i(`v-if`,!0)]),_:1}),l(t,{name:`fade`},{default:O(()=>[E(s).isError?(b(),a(`div`,lr,[o(`p`,null,w(E(s).errorMessage||`This video could not be played.`),1),o(`button`,{class:`overlay__retry`,onClick:p[0]||=k((...e)=>E(s).retry&&E(s).retry(...e),[`stop`])},`Retry`)])):i(`v-if`,!0)]),_:1}),o(`div`,{class:h([`overlay__hud`,{"overlay__hud--visible":E(u)}])},[l(En)],2),l(t,{name:`popup`},{default:O(()=>[E(d)?(b(),a(`div`,{key:0,class:h([`overlay__popup`,{"overlay__popup--fs":E(s).isFullscreen}])},[l(er)],2)):i(`v-if`,!0)]),_:1})],64))}}),[[`__scopeId`,`data-v-f3307b98`]]);const dr={class:`player`},fr={"data-mvp-player":``},pr=[`poster`],mr={key:1,class:`player__native-play`};var hr=Q(u({__name:`VideoPlayer`,props:{videoUrl:{type:String,required:!0},title:{type:String,required:!1,default:``},poster:{type:String,required:!1,default:``},aspectRatio:{type:String,required:!1,default:ie},adTagUrl:{type:String,required:!1,default:``},adTagParams:{type:Object,required:!1},headerBidding:{type:Object,required:!1},autoplay:{type:Boolean,required:!1,default:!1},muted:{type:Boolean,required:!1,default:void 0},playbackRate:{type:Number,required:!1},nativeUi:{type:Boolean,required:!1,default:!1},autoStage:{type:Boolean,required:!1,default:!1},lazy:{type:Boolean,required:!1,default:!1},payload:{type:Object,required:!1,default:()=>({})},action:{type:[String,Object,null],required:!1,default:null},disableTapCapture:{type:Boolean,required:!1,default:!1},hasPlaylist:{type:Boolean,required:!1,default:!1},hasNext:{type:Boolean,required:!1,default:!1},hasPrevious:{type:Boolean,required:!1,default:!1},autoAdvance:{type:Boolean,required:!1,default:!1}},emits:[`state-change`,`play-next`,`play-previous`,`toggle-auto-advance`],setup(e,{expose:t,emit:s}){let c=e,u=s,d=C(null),f=S(at(d,c,u)),p=S(ot(T(f,`isPlaying`)));x(Y,f),x(X,p),x(st,T(c,`action`)),x(lt,S({hasPlaylist:n(()=>c.hasPlaylist),hasNext:n(()=>c.hasNext),hasPrevious:n(()=>c.hasPrevious),autoAdvance:n(()=>c.autoAdvance),playNext:()=>u(`play-next`),playPrevious:()=>u(`play-previous`),toggleAutoAdvance:()=>u(`toggle-auto-advance`)}));let m=n(()=>N(c.aspectRatio)),g=n(()=>m.value.isPortrait),v=n(()=>m.value.cssRatio),y=n(()=>!c.poster&&!f.isReady);return t(f),(e,t)=>(b(),a(`div`,dr,[o(`div`,{class:h([`player__shell`,{"player__shell--portrait":g.value}]),style:_({aspectRatio:v.value}),onMousemove:t[0]||=e=>p.onMouseMove(),onContextmenuCapture:t[1]||=k(()=>{},[`prevent`]),onMouseleave:t[2]||=e=>p.onMouseLeave()},[o(`div`,fr,[o(`video`,{ref_key:`videoEl`,ref:d,class:h([`mvp-video`,{"mvp-video--hidden":y.value}]),poster:c.poster,playsinline:``},null,10,pr),f.nativeUi?i(`v-if`,!0):(b(),r(ur,{key:0,"disable-tap-capture":c.disableTapCapture},null,8,[`disable-tap-capture`])),f.nativeUi&&!f.hasStarted?(b(),a(`div`,mr,[l($,{"is-playing":!1,size:`lg`,onTogglePlay:f.togglePlay},null,8,[`onTogglePlay`])])):i(`v-if`,!0)])],38)]))}}),[[`__scopeId`,`data-v-4ab3cf75`]]);const gr=C(0),_r=n(()=>gr.value>0);function vr(){gr.value++}function yr(){gr.value--}function br(e,t){window.dispatchEvent(new CustomEvent(e,{detail:t}))}function xr(e,t){let n=e=>t(e.detail);y(()=>window.addEventListener(e,n)),v(()=>window.removeEventListener(e,n))}function Sr(e,t){let r=n(()=>!e.value||!t.value?-1:e.value.findIndex(e=>e.videoUrl===t.value?.videoUrl)),i=n(()=>r.value===-1||!e.value?null:e.value[r.value+1]??null),a=n(()=>r.value<=0||!e.value?null:e.value[r.value-1]??null);return{hasNext:n(()=>i.value!==null),hasPrevious:n(()=>a.value!==null),nextEntry:i,previousEntry:a}}function Cr(){return localStorage.getItem(ne)===`true`}function wr(e){localStorage.setItem(ne,String(e))}const Tr=[`src`],Er={class:`stage__idle-body`},Dr={class:`stage__idle-btn`},Or={class:`stage__idle-title`},kr={key:1,class:`stage__idle-empty`};var Ar=Q(u({__name:`VideoStage`,props:{pinPosition:{type:String,required:!1,default:`bottom-right`},playlist:{type:Array,required:!1}},emits:[`state-change`],setup(t,{expose:s,emit:c}){let u=t,d=c,f=C(Cr());D(f,wr);let m=n(()=>!!u.playlist?.length),g=C(null),S=C(null),O=C(!1),A=C(!1),j=C(null),M=C(null),P=C(!1);x(ct,P);let{hasNext:F,hasPrevious:I,nextEntry:L,previousEntry:R}=Sr(T(u,`playlist`),S),z=n(()=>P.value&&!!S.value&&O.value),ne=n(()=>N(S.value?.aspectRatio||`16:9`).cssRatio),B=C(null),V=C(null);D(P,e=>{B.value=e&&M.value?{height:M.value.offsetHeight,width:M.value.offsetWidth}:null});let re=n(()=>{if(!B.value)return{};let{height:e,width:t}=B.value,n=V.value&&t?V.value/t:1;return{height:`${Math.round(e*n)}px`}}),H=null,U=null;function ie(){H?.disconnect(),U?.disconnect(),j.value&&(H=new IntersectionObserver(([e])=>{P.value=!e.isIntersecting},{threshold:1}),H.observe(j.value),U=new ResizeObserver(([e])=>{V.value=e.contentRect.width}),U.observe(j.value))}D(j,ie);function W(){S.value&&(S.value={...S.value,autoplay:!0},O.value=!0)}function ae(){j.value?.scrollIntoView({behavior:`smooth`,block:`center`})}function oe(){S.value=null,O.value=!1,A.value=!1,P.value=!1,B.value=null,se()}function se(){br(te,{currentVideoUrl:S.value?.videoUrl??null,isPlaying:A.value})}function G(e){if(S.value?.videoUrl===e.videoUrl&&O.value){g.value?.togglePlay();return}S.value=e,O.value=!1,A.value=!1,se(),O.value=!0}function ce(e){if(!(!S.value||e.videoUrl!==S.value.videoUrl)){if(!O.value){S.value={...S.value,autoplay:!0},O.value=!0;return}g.value?.togglePlay()}}function K(){L.value&&G({...L.value,autoplay:!0})}function le(){R.value&&G({...R.value,autoplay:!0})}function ue(e){e.type===`play`&&(A.value=!0),(e.type===`pause`||e.type===`ended`)&&(A.value=!1),e.type===`ended`&&f.value&&K(),se(),d(`state-change`,e)}return xr(ee,G),xr(`video-toggle`,ce),y(vr),v(()=>{yr(),H?.disconnect(),U?.disconnect()}),s({playNext:K,playPrevious:le,hasNext:F,hasPrevious:I}),(n,s)=>(b(),a(`div`,{ref_key:`wrapperEl`,ref:j,class:`stage-wrapper`,style:_(re.value)},[o(`div`,{ref_key:`stageEl`,ref:M,class:h([`stage`,{"stage--minified":z.value,[`stage--pin-${t.pinPosition}`]:z.value}])},[z.value?(b(),a(`button`,{key:0,class:`stage__scroll-to`,"aria-label":`Scroll to player`,onClick:k(ae,[`stop`])},[l(E(Ot))])):i(`v-if`,!0),z.value?(b(),a(`button`,{key:1,class:`stage__dismiss`,"aria-label":`Close`,onClick:k(oe,[`stop`])},[l(E(bt))])):i(`v-if`,!0),S.value&&O.value?(b(),r(hr,p({ref_key:`playerRef`,ref:g,key:S.value.videoUrl},S.value,{"has-playlist":m.value,"has-next":E(F),"has-previous":E(I),"auto-advance":f.value,onStateChange:ue,onPlayNext:K,onPlayPrevious:le,onToggleAutoAdvance:s[0]||=e=>f.value=!f.value}),null,16,[`has-playlist`,`has-next`,`has-previous`,`auto-advance`])):(b(),a(`div`,{key:3,class:`stage__idle`,style:_({aspectRatio:ne.value}),onClick:W},[S.value?.poster?(b(),a(`img`,{key:0,src:S.value.poster,class:`stage__idle-poster`},null,8,Tr)):i(`v-if`,!0),s[1]||=o(`div`,{class:`stage__idle-scrim`},null,-1),o(`div`,Er,[S.value?(b(),a(e,{key:0},[o(`div`,Dr,[l(E(Qt))]),o(`p`,Or,w(S.value.title),1)],64)):(b(),a(`p`,kr,`Select a video to play`))])],4))],2)],4))}}),[[`__scopeId`,`data-v-fb8c86cf`]]);const jr={class:`placeholder`},Mr=[`src`,`alt`],Nr={class:`placeholder__btn-wrap`},Pr={key:1,class:`placeholder__footer`},Fr={class:`placeholder__title`};var Ir=Q(u({__name:`VideoPlaceholder`,props:{videoUrl:{type:String,required:!0},title:{type:String,required:!1,default:``},poster:{type:String,required:!1,default:``},aspectRatio:{type:String,required:!1,default:ie},adTagUrl:{type:String,required:!1,default:``},adTagParams:{type:Object,required:!1},headerBidding:{type:Object,required:!1},autoplay:{type:Boolean,required:!1,default:!1},muted:{type:Boolean,required:!1,default:void 0},playbackRate:{type:Number,required:!1},nativeUi:{type:Boolean,required:!1,default:!1},autoStage:{type:Boolean,required:!1,default:!1},lazy:{type:Boolean,required:!1},payload:{type:Object,required:!1,default:()=>({})},action:{type:[String,Object,null],required:!1,default:null},disableTapCapture:{type:Boolean,required:!1}},setup(e){let t=e,r=n(()=>N(t.aspectRatio)),s=n(()=>r.value.isPortrait),c=n(()=>r.value.cssRatio),u=C(!1),d=C(!1);xr(te,e=>{u.value=e.currentVideoUrl===t.videoUrl,d.value=u.value&&e.isPlaying});function f(e){br(ee,{...t,...e!==void 0&&{autoplay:e}})}function p(){f(!0)}return y(()=>{t.autoStage&&f()}),(t,n)=>(b(),a(`div`,jr,[o(`div`,{class:h([`placeholder__shell`,{"placeholder__shell--portrait":s.value,"placeholder__shell--active":u.value}]),style:_({aspectRatio:c.value}),onClick:p},[e.poster?(b(),a(`img`,{key:0,class:`placeholder__poster`,src:e.poster,alt:e.title},null,8,Mr)):i(`v-if`,!0),n[0]||=o(`div`,{class:`placeholder__scrim`},null,-1),o(`div`,Nr,[l($,{"is-playing":u.value&&d.value,size:`lg`,onTogglePlay:p},null,8,[`is-playing`])]),e.title?(b(),a(`div`,Pr,[o(`p`,Fr,w(e.title),1)])):i(`v-if`,!0)],6)]))}}),[[`__scopeId`,`data-v-dbcb4f82`]]),Lr=u({__name:`VideoItem`,props:{videoUrl:{type:String,required:!0},title:{type:String,required:!1},poster:{type:String,required:!1},aspectRatio:{type:String,required:!1},adTagUrl:{type:String,required:!1},adTagParams:{type:Object,required:!1},headerBidding:{type:Object,required:!1},autoplay:{type:Boolean,required:!1},muted:{type:Boolean,required:!1,default:void 0},playbackRate:{type:Number,required:!1},nativeUi:{type:Boolean,required:!1},autoStage:{type:Boolean,required:!1},lazy:{type:Boolean,required:!1,default:!0},payload:{type:Object,required:!1},action:{type:[String,Object,null],required:!1,default:null},disableTapCapture:{type:Boolean,required:!1}},emits:[`state-change`],setup(t,{emit:n}){let i=t,o=n,s=C(!1);return(t,n)=>E(_r)?(b(),r(Ir,g(p({key:0},i)),null,16)):(b(),a(e,{key:1},[i.lazy&&!s.value&&!i.autoplay?(b(),r(Ir,p({key:0},i,{onClickCapture:n[0]||=e=>s.value=!0}),null,16)):(b(),r(hr,p({key:1},i,{autoplay:s.value||i.autoplay,onStateChange:n[1]||=e=>o(`state-change`,e)}),null,16,[`autoplay`]))],64))}});const Rr=d(hr,{shadowRoot:!1}),zr=d(Ar,{shadowRoot:!1}),Br=d(Ir,{shadowRoot:!1}),Vr=d(Lr,{shadowRoot:!1});customElements.define(`video-player`,Rr),customElements.define(`video-stage`,zr),customElements.define(`video-placeholder`,Br),customElements.define(`video-item`,Vr);export{Vr as VideoItemElement,Br as VideoPlaceholderElement,Rr as VideoPlayerElement,zr as VideoStageElement};
|
package/dist/index.d.mts
CHANGED
|
@@ -22,12 +22,29 @@ interface StateChangeEvent {
|
|
|
22
22
|
element?: HTMLElement | null;
|
|
23
23
|
payload?: Record<string, unknown>;
|
|
24
24
|
}
|
|
25
|
+
interface HeaderBiddingAdUnit {
|
|
26
|
+
code: string;
|
|
27
|
+
mediaTypes: {
|
|
28
|
+
video: Record<string, unknown>;
|
|
29
|
+
};
|
|
30
|
+
bids: Array<{
|
|
31
|
+
bidder: string;
|
|
32
|
+
params?: Record<string, unknown>;
|
|
33
|
+
}>;
|
|
34
|
+
}
|
|
35
|
+
interface HeaderBiddingConfig {
|
|
36
|
+
adUnit: HeaderBiddingAdUnit;
|
|
37
|
+
params?: Record<string, string>;
|
|
38
|
+
timeoutMs?: number;
|
|
39
|
+
}
|
|
25
40
|
interface PlayerProps {
|
|
26
41
|
videoUrl: string;
|
|
27
42
|
title?: string;
|
|
28
43
|
poster?: string;
|
|
29
44
|
aspectRatio?: string;
|
|
30
45
|
adTagUrl?: string;
|
|
46
|
+
adTagParams?: Record<string, string>;
|
|
47
|
+
headerBidding?: HeaderBiddingConfig;
|
|
31
48
|
autoplay?: boolean;
|
|
32
49
|
muted?: boolean;
|
|
33
50
|
playbackRate?: number;
|
|
@@ -103,21 +120,21 @@ declare const __VLS_export$3: import("vue").DefineComponent<__VLS_Props$1, {
|
|
|
103
120
|
"onPlay-previous"?: (() => any) | undefined;
|
|
104
121
|
"onToggle-auto-advance"?: (() => any) | undefined;
|
|
105
122
|
}>, {
|
|
106
|
-
|
|
107
|
-
|
|
123
|
+
nativeUi: boolean;
|
|
124
|
+
autoplay: boolean;
|
|
108
125
|
title: string;
|
|
109
126
|
poster: string;
|
|
110
127
|
aspectRatio: string;
|
|
111
128
|
adTagUrl: string;
|
|
112
|
-
autoplay: boolean;
|
|
113
129
|
muted: boolean;
|
|
114
|
-
nativeUi: boolean;
|
|
115
130
|
autoStage: boolean;
|
|
116
131
|
lazy: boolean;
|
|
117
132
|
payload: Record<string, unknown>;
|
|
118
133
|
action: PlayerAction | null;
|
|
119
134
|
disableTapCapture: boolean;
|
|
120
135
|
hasPlaylist: boolean;
|
|
136
|
+
hasNext: boolean;
|
|
137
|
+
hasPrevious: boolean;
|
|
121
138
|
autoAdvance: boolean;
|
|
122
139
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
123
140
|
declare const _default$2: typeof __VLS_export$3;
|
|
@@ -145,13 +162,13 @@ declare const _default$3: typeof __VLS_export$2;
|
|
|
145
162
|
//#endregion
|
|
146
163
|
//#region src/components/VideoPlaceholder.vue.d.ts
|
|
147
164
|
declare const __VLS_export$1: import("vue").DefineComponent<PlayerProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<PlayerProps> & Readonly<{}>, {
|
|
165
|
+
nativeUi: boolean;
|
|
166
|
+
autoplay: boolean;
|
|
148
167
|
title: string;
|
|
149
168
|
poster: string;
|
|
150
169
|
aspectRatio: string;
|
|
151
170
|
adTagUrl: string;
|
|
152
|
-
autoplay: boolean;
|
|
153
171
|
muted: boolean;
|
|
154
|
-
nativeUi: boolean;
|
|
155
172
|
autoStage: boolean;
|
|
156
173
|
payload: Record<string, unknown>;
|
|
157
174
|
action: PlayerAction | null;
|
|
@@ -250,4 +267,4 @@ declare function injectStrict<T>(key: InjectionKey<T>): T;
|
|
|
250
267
|
//#region src/index.d.ts
|
|
251
268
|
declare const VideoPlayerPlugin: Plugin;
|
|
252
269
|
//#endregion
|
|
253
|
-
export { ActionKey, BuiltinAction, CompactKey, CustomAction, HudContext, HudKey, PlayerAction, PlayerContext, PlayerKey, PlayerProps, PlaylistContext, PlaylistKey, 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, injectStrict };
|
|
270
|
+
export { ActionKey, BuiltinAction, CompactKey, CustomAction, HeaderBiddingAdUnit, HeaderBiddingConfig, HudContext, HudKey, PlayerAction, PlayerContext, PlayerKey, PlayerProps, PlaylistContext, PlaylistKey, 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, injectStrict };
|
package/dist/index.mjs
CHANGED
|
@@ -1 +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,createTextVNode as c,createVNode as l,defineComponent as u,inject as d,mergeProps as f,nextTick as p,normalizeClass as m,normalizeProps as h,normalizeStyle as g,onBeforeUnmount as _,onMounted as v,openBlock as y,provide as b,reactive as x,ref as S,toDisplayString as C,toRef as w,unref as T,watch as E,withCtx as D,withModifiers as O}from"vue";function k(){return/iPad|iPhone|iPod/.test(navigator.userAgent)||/Mac/.test(navigator.userAgent)&&navigator.maxTouchPoints>1}function A(e){(e.requestFullscreen||e.webkitRequestFullscreen)?.call(e)}function j(){(document.exitFullscreen||document.webkitExitFullscreen)?.call(document)}function M(e){let[t,n]=e.split(`:`).map(Number);return{isPortrait:n>t,cssRatio:`${t}/${n}`}}function N(e){return!e||isNaN(e)?`0:00`:`${Math.floor(e/60)}:${String(Math.floor(e%60)).padStart(2,`0`)}`}function P(e,t=(...e)=>String(e[0])){let n={};return async(...r)=>{let i=t(...r);if(n[i])return n[i];let a=await e(...r);return n[i]=a,a}}function F(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 I=`video-select`,L=`video-state`,R=`fullscreen-pending`,z=`fullscreen-pending-done`,B=`player:autoAdvance`,V=`mvp-youtube`,ee=`mvp-vimeo`,H=`mvp-dailymotion`,U=`mvp-ad-playing`,W=`mvp-ad-paused`,G=`16:9`,K=[.5,.75,1,1.25,1.5,2],te=[[.25,`firstQuartile`],[.5,`midpoint`],[.75,`thirdQuartile`]];function ne(e){return e.match(/cdn\.jwplayer\.com\/videos\/([^-]+)/)?.[1]??e.match(/cdn\.jwplayer\.com\/manifests\/([^.]+)/)?.[1]??e.match(/^jwplayer:\/\/([^/]+)$/)?.[1]??null}function re(e){let t=e?.advertising?.schedule;return Array.isArray(t)&&t.length?t[0].tag??null:e?.advertising?.tag??null}const ie=P(async e=>{let t=await fetch(`https://cdn.jwplayer.com/v2/media/${e}`);if(!t.ok)throw Error(`JW Platform API error: ${t.status}`);let n=(await t.json()).playlist?.[0];if(!n)throw Error(`JW Platform: empty playlist`);let r=F((n.sources??[]).map(e=>({src:e.file,type:e.type})));if(!r.length)throw Error(`JW Platform: no playable sources found`);return{src:r[0].src,type:r[0].type,poster:n.image??null,adTagUrl:re(n)}});async function ae(e){let t=ne(e);if(!t)throw Error(`JW Platform: unrecognised source URL: ${e}`);let n=await ie(t);if(e.startsWith(`jwplayer://`))return n;let r=/\.mp4(\?|#|$)/.test(e)?`video/mp4`:`application/x-mpegURL`;return{...n,src:e,type:r}}function oe(e){let t;try{t=new URL(e)}catch{return null}if(t.hostname!==`players.brightcove.net`)return null;let[,n,r]=t.pathname.split(`/`),i=t.searchParams.get(`videoId`),a=r?.indexOf(`_`)??-1;return!n||a===-1||!i?null:{accountId:n,playerId:r.slice(0,a),embed:r.slice(a+1),videoId:i}}function se(e){return(e?.plugins??[]).find(e=>e.name===`ima3`)?.options?.serverUrl??null}const ce=P(async(e,t,n,r)=>{let i=await fetch(`https://players.brightcove.net/${e}/${t}_${n}/config.json`);if(!i.ok)throw Error(`Brightcove: could not load player config (${i.status})`);let a=await i.json(),o=r??a?.video_cloud?.policy_key;if(!o)throw Error(`Brightcove: policy_key not found in player config`);return{policyKey:o,adTagUrl:se(a)}},(e,t,n)=>`${e}/${t}_${n}`);async function le(e,t,n){let r=await fetch(`https://edge.api.brightcove.com/playback/v1/accounts/${e}/videos/${t}`,{headers:{Accept:`application/json;pk=${n}`}});if(!r.ok)throw Error(`Brightcove Playback API error: ${r.status}`);let i=await r.json(),a=F(i.sources||[]);if(!a.length)throw Error(`Brightcove: no playable sources found`);return{sources:a.map(e=>({src:e.src,type:e.type})),poster:i.poster??i.thumbnail??null}}async function ue(e,t){let n=oe(e);if(!n)throw Error(`Brightcove: invalid src — expected a Brightcove embed URL, e.g. "https://players.brightcove.net/{accountId}/{playerId}_{embed}/index.html?videoId={videoId}"`);let{accountId:r,playerId:i,embed:a,videoId:o}=n,{policyKey:s,adTagUrl:c}=await ce(r,i,a,t),{sources:l,poster:u}=await le(r,o,s);return{...l[0],poster:u,adTagUrl:c}}function de(){let e=new Map;function t(t,n){for(let r of Array.isArray(t)?t:[t])e.has(r)||e.set(r,new Set),e.get(r)?.add(n)}function n(t,n){e.get(t)?.delete(n)}function r(t,...n){e.get(t)?.forEach(e=>e(...n))}function i(){e.clear()}return{on:t,off:n,trigger:r,dispose:i}}const fe={};function pe(e,t=e){return fe[t]||(fe[t]=new Promise((t,n)=>{let r=document.createElement(`script`);r.src=e,r.onload=()=>t(),r.onerror=()=>n(Error(`Failed to load script: ${e}`)),document.head.appendChild(r)})),fe[t]}let me=0;function he(e,t){e.parentElement?.classList.add(t);let n=`${t}-${++me}`,r=document.createElement(`div`);r.id=n,r.className=`mvp-tech`,r.style.cssText=`width:100%;height:100%;top:0;left:0;position:absolute`;let i=document.createElement(`div`);return i.style.cssText=`width:100%;height:100%;position:absolute;inset:0;opacity:0;pointer-events:none;transition:opacity 0.2s`,i.appendChild(r),e.parentElement?.insertBefore(i,e),{techId:n,wrapper:i,innerDiv:r}}function ge(e,t){e.style.display=`none`,t.style.opacity=`1`,t.style.pointerEvents=``}function _e(e,t,n){t.remove(),e.parentElement?.classList.remove(n),e.style.display=``}function ve(e){return e.closest(`.player__shell`)}function ye(e){e.trigger(R);let t=document.createElement(`div`);t.style.cssText=`position:fixed;inset:0;z-index:99999;opacity:0;pointer-events:none`,document.body.appendChild(t);let n=!1;function r(){n||(e.trigger(z),t.style.opacity=`1`,t.style.pointerEvents=`auto`)}function i(r){n||(n=!0,e.trigger(z),t.remove(),r?.())}return{overlay:t,reveal:r,finish:i}}function be(e,t){return t===e.PlayerState.PLAYING||t===e.PlayerState.BUFFERING}function xe(e){let t={videoId:null,listId:null},n=e.match(/^.*(youtu\.be\/|v\/|u\/\w\/|embed\/|watch\?v=|shorts\/|&v=)([^#&?]*).*/);n?.[2]?.length===11&&(t.videoId=n[2]);let r=e.match(/[?&]list=([^#&?]+)/);return r?.[1]&&(t.listId=r[1]),t}let Se=!1,Ce=!1;const q=[];function we(){Ce||(Ce=!0,pe(`https://www.youtube.com/iframe_api`).then(()=>{window.YT?.ready(()=>{Se=!0,q.forEach(e=>e()),q.length=0})}))}function Te(e,t){we();let n=de(),{techId:r,wrapper:i}=he(e,V),a=xe(t.src),o=null,s=a.videoId,c=!1,l=!1,u=!1,d=null,f=!1,p=null,m=!1,h=new Set,g=null,_={active:!1,wasPaused:!1,timeBefore:0,catchUpInterval:null};function v(e,t=0){let n=setTimeout(()=>{h.delete(n),e()},t);h.add(n)}function y(){try{let e=o?.getPlayerResponse()?.adPlacements;return Array.isArray(e)&&e.length>0}catch{return!1}}function b(e){o?.loadVideoById({videoId:e})}function x(e){o?.cueVideoById({videoId:e})}function S(){a.videoId&&(_.wasPaused=!1,c?s===a.videoId?o?.playVideo():(b(a.videoId),s=a.videoId):(n.trigger(`waiting`),l=!0))}function C(){_.catchUpInterval&&clearInterval(_.catchUpInterval),_.active=!1,_.wasPaused&&o?.pauseVideo(),n.trigger(`seeked`)}function w(){m=(o?.getAvailablePlaybackRates()??[]).length>1,c=!0,t.muted&&o?.mute(),l?S():u&&a.videoId&&(x(a.videoId),s=a.videoId)}function T(e){if(e===d||p!==null)return;d=e;let t=y();t!==f&&(f=t,n.trigger(t?`adstart`:`adend`));let r=window.YT;if(r){switch(e){case-1:n.trigger(`loadstart`),n.trigger(`loadedmetadata`),n.trigger(`durationchange`),n.trigger(`ratechange`);break;case r.PlayerState.ENDED:n.trigger(`ended`);break;case r.PlayerState.PLAYING:n.trigger(`timeupdate`),n.trigger(`durationchange`),n.trigger(`playing`),n.trigger(`play`),_.active&&C();break;case r.PlayerState.PAUSED:n.trigger(`canplay`),_.active||n.trigger(`pause`);break;case r.PlayerState.BUFFERING:n.trigger(`waiting`);break;case r.PlayerState.CUED:n.trigger(`canplay`);break}g&&=(clearInterval(g),null),e===r.PlayerState.PLAYING&&(g=setInterval(()=>n.trigger(`timeupdate`),250))}}function E(){let e={controls:+!!t.nativeUi,modestbranding:1,rel:0,showinfo:0,mute:+!!t.muted,origin:window.location.origin,allowfullscreen:1,fullscreen:1,fs:1,playsinline:1,...t.customVars};s=a.videoId,o=new window.YT.Player(r,{videoId:s??void 0,playerVars:e,events:{onReady:w,onStateChange:e=>T(e.data),onPlaybackRateChange:()=>n.trigger(`ratechange`),onVolumeChange:()=>n.trigger(`volumechange`),onError:e=>{p=e.data,n.trigger(`error`),v(()=>{p=null})}}})}Se?E():q.push(E),t.autoplay?c?S():l=!0:a.videoId&&(u=!0);function D(){if(!o)return;let e=o.getCurrentTime(),{video_id:t}=o.getVideoData();o.pauseVideo();let{overlay:r,reveal:i,finish:a}=ye(n),s=document.createElement(`div`);s.id=`yt-fs-${Math.random().toString(36).slice(2)}`,r.appendChild(s);let c=null,l=()=>{a(()=>{let t=c?.getCurrentTime()??e;try{c?.destroy()}catch{}o?.seekTo(t,!0),n.trigger(`timeupdate`)})};c=new window.YT.Player(s.id,{videoId:t,playerVars:{playsinline:0,autoplay:1,controls:1,modestbranding:1,rel:0,start:Math.floor(e)},events:{onReady:t=>{i(),t.target.seekTo(e,!0),t.target.playVideo()},onStateChange:e=>{let t=window.YT;t&&(e.data===t.PlayerState.PAUSED||e.data===t.PlayerState.ENDED)&&l()}}})}function O(){if(k()&&o){D();return}let t=ve(e);t&&A(t)}function M(){j()}return{el:i,play:S,pause:()=>o?.pauseVideo(),paused:()=>{if(!o)return!0;let e=window.YT;return!e||!be(e,d)},currentTime:()=>o?.getCurrentTime()??0,setCurrentTime:e=>{if(!o)return;let t=window.YT;t&&d===t.PlayerState.PAUSED&&(_.timeBefore=o.getCurrentTime()),_.active||(_.wasPaused=!t||!be(t,d)),o.seekTo(e,!0),n.trigger(`timeupdate`),n.trigger(`seeking`),_.active=!0,t&&d===t.PlayerState.PAUSED&&_.timeBefore!==e&&(_.catchUpInterval&&clearInterval(_.catchUpInterval),_.catchUpInterval=setInterval(()=>{d!==t.PlayerState.PAUSED||!_.active?_.catchUpInterval&&clearInterval(_.catchUpInterval):o&&o.getCurrentTime()!==_.timeBefore&&(n.trigger(`timeupdate`),C())},250))},duration:()=>o?.getDuration()??0,volume:()=>o?o.getVolume()/100:1,setVolume:e=>o?.setVolume(e*100),muted:()=>o?.isMuted()??!1,setMuted:e=>{o&&(e?o.mute():o.unMute(),v(()=>n.trigger(`volumechange`),50))},playbackRate:()=>o?.getPlaybackRate()??1,setPlaybackRate:e=>o?.setPlaybackRate(e),bufferedEnd:()=>o?.getVideoLoadedFraction?o.getVideoLoadedFraction()*o.getDuration():0,error:()=>p===null?null:{code:p,message:`This video could not be played.`},setSrc:e=>{let t=xe(e);a.videoId=t.videoId,a.listId=t.listId,a.videoId&&(c?(b(a.videoId),s=a.videoId):u=!0)},featuresPlaybackRate:()=>m,enterFullscreen:O,exitFullscreen:M,on:n.on,off:n.off,dispose:()=>{if(h.forEach(clearTimeout),h.clear(),g&&clearInterval(g),_.catchUpInterval&&clearInterval(_.catchUpInterval),o)try{o.stopVideo(),o.destroy()}catch{}else{let e=q.indexOf(E);e!==-1&&q.splice(e,1)}o=null,_e(e,i,V),n.dispose()}}}function Ee(e){return e.match(/(?:vimeo\.com\/(?:video\/|channels\/[^/]+\/|groups\/[^/]+\/videos\/)?|player\.vimeo\.com\/video\/)(\d+)/)?.[1]??null}function De(e,t){let n=de(),{techId:r,wrapper:i}=he(e,ee),a=Ee(t.src),o=null,s=0,c=0,l=1,u=!1,d=!0,f=1,p=!1,m=!1,h=!1,g=null,_=new Set;function v(e,t=0){let n=setTimeout(()=>{_.delete(n),e()},t);_.add(n)}function y(){if(!o){m=!0;return}o.play().catch(()=>{})}function b(){t.muted&&o?.setMuted(!0).catch(()=>{}),m&&y()}async function x(e){if(await pe(`https://player.vimeo.com/api/player.js`,`vimeo`),h||!window.Vimeo)return;let i={id:Number(e),byline:!1,portrait:!1,title:!1,transparent:!0,controls:!!t.nativeUi,autopause:!1,...t.autoplay!==void 0&&{autoplay:t.autoplay},...t.muted!==void 0&&{muted:t.muted}};o=new window.Vimeo.Player(r,i),t.autoplay&&(m=!0),o.ready().then(b).catch(e=>{g={code:4,message:e?.message||`This video is unavailable or cannot be embedded here.`},n.trigger(`error`)}),o.on(`play`,()=>{d=!1,n.trigger(`play`),n.trigger(`playing`)}),o.on(`pause`,()=>{d=!0,n.trigger(`pause`)}),o.on(`ended`,()=>{d=!0,n.trigger(`ended`)}),o.on(`timeupdate`,e=>{let{seconds:t,duration:r}=e;s=t,c=r,n.trigger(`timeupdate`),r&&!p&&(p=!0,n.trigger(`durationchange`))}),o.on(`loaded`,()=>{p=!1,n.trigger(`loadedmetadata`),n.trigger(`durationchange`)}),o.on(`seeking`,e=>{s=e.seconds,n.trigger(`seeking`)}),o.on(`seeked`,e=>{s=e.seconds,n.trigger(`seeked`),n.trigger(`timeupdate`)}),o.on(`bufferstart`,()=>n.trigger(`waiting`)),o.on(`bufferend`,()=>n.trigger(`canplay`)),o.on(`volumechange`,e=>{l=e.volume,n.trigger(`volumechange`)}),o.on(`error`,()=>n.trigger(`error`))}a&&x(a);function S(){if(!k()){let t=ve(e);t&&A(t);return}o?.requestFullscreen().catch(()=>{})}function C(){j()}return{el:i,play:y,pause:()=>o?.pause().catch(()=>{}),paused:()=>d,currentTime:()=>s,setCurrentTime:e=>{o?.setCurrentTime(e).catch(()=>{}),n.trigger(`timeupdate`),n.trigger(`seeking`)},duration:()=>c,volume:()=>l,setVolume:e=>{l=e,o?.setVolume(e).catch(()=>{})},muted:()=>u,setMuted:e=>{u=e,o?.setMuted(e).then(()=>v(()=>n.trigger(`volumechange`),50)).catch(()=>{})},playbackRate:()=>f,setPlaybackRate:e=>{f=e,o?.setPlaybackRate(e).catch(()=>{}),n.trigger(`ratechange`)},bufferedEnd:()=>s,error:()=>g,setSrc:()=>{},featuresPlaybackRate:()=>!1,enterFullscreen:S,exitFullscreen:C,on:n.on,off:n.off,dispose:()=>{h=!0,_.forEach(clearTimeout),_.clear(),o?.destroy().catch(()=>{}),o=null,_e(e,i,ee),n.dispose()}}}function Oe(e){let t=e.match(/[?&]video=([a-zA-Z0-9]+)/);return t?t[1]:e.match(/(?:dailymotion\.com\/(?:embed\/)?video\/|dai\.ly\/)([a-zA-Z0-9]+)/)?.[1]??null}function ke(e,t){let n=de(),{techId:r,wrapper:i}=he(e,H),a=ve(e),o=Oe(t.src),s=typeof t.customVars?.playerId==`string`?t.customVars.playerId:void 0,c=null,l=0,u=0,d=1,f=!1,p=!0,m=!1,h=!1,g=null;async function _(){if(!o){g={code:4,message:`Could not parse video ID from source URL`},n.trigger(`error`);return}try{let e=await pe(s?`https://geo.dailymotion.com/libs/player/${s}.js`:`https://geo.dailymotion.com/libs/player.js`,s||`dailymotion-sdk`).then(()=>window.dailymotion);if(!e)return;let i=await e.createPlayer(r,{...s&&{player:s},video:o,params:{autoplay:!!t.autoplay,mute:!!t.muted}});c=i;let a=e.events;m&&i.play(),i.on(a.PLAYER_CRITICALPATHREADY,e=>{let t=e.videoThumbnails;if(!t)return;let r=Object.keys(t).map(Number).sort((e,t)=>t-e)[0],i=r===void 0?void 0:t[r];i&&n.trigger(`posterchange`,i)}),i.on(a.VIDEO_PLAY,()=>{p=!1,n.trigger(`play`),n.trigger(`playing`),!t.autoplay&&!h&&(h=!0,i.pause())}),i.on(a.VIDEO_PLAYING,()=>{p=!1,n.trigger(`play`),n.trigger(`playing`)}),i.on(a.VIDEO_PAUSE,()=>{p=!0,n.trigger(`pause`)}),a.VIDEO_BUFFERING&&i.on(a.VIDEO_BUFFERING,()=>n.trigger(`waiting`)),i.on(a.VIDEO_END,()=>{p=!0,n.trigger(`ended`)}),i.on(a.VIDEO_TIMECHANGE,e=>{l=e.videoTime??l,u=e.videoDuration??u,n.trigger(`timeupdate`)}),i.on(a.VIDEO_DURATIONCHANGE,e=>{u=e.videoDuration??u,n.trigger(`durationchange`)}),i.on(a.VIDEO_SEEKSTART,()=>n.trigger(`seeking`)),i.on(a.VIDEO_SEEKEND,e=>{l=e.videoTime??l,n.trigger(`seeked`)}),i.on(a.PLAYER_VOLUMECHANGE,e=>{d=e.playerVolume??d,f=e.playerIsMuted??f,n.trigger(`volumechange`)}),i.on(a.PLAYER_ERROR,()=>n.trigger(`error`)),a.AD_START&&i.on(a.AD_START,()=>{p=!1,n.trigger(`play`),n.trigger(`adstart`)}),a.AD_END&&i.on(a.AD_END,()=>n.trigger(`adend`))}catch(e){g={code:4,message:e instanceof Error?e.message:`This video could not be played.`},n.trigger(`error`)}}_();function v(){c?c.play():m=!0}function y(){if(k()){c?.setFullscreen(!0);return}a&&A(a)}function b(){if(k()){c?.setFullscreen(!1);return}j()}return{el:i,play:v,pause:()=>c?.pause(),paused:()=>p,currentTime:()=>l,setCurrentTime:e=>{l=e,c?.seek(e),n.trigger(`seeking`)},duration:()=>u,volume:()=>d,setVolume:e=>{d=e,c?.setVolume(e)},muted:()=>f,setMuted:e=>{f=e,c?.setMute(e)},playbackRate:()=>1,setPlaybackRate:()=>{},bufferedEnd:()=>l,error:()=>g,setSrc:()=>{},featuresPlaybackRate:()=>!1,enterFullscreen:y,exitFullscreen:b,on:n.on,off:n.off,dispose:()=>{c?.destroy?.(),c=null,_e(e,i,H),n.dispose()}}}const Ae=[{test:e=>/youtu\.be|youtube\.com/.test(e),key:`youtube`,embed:!0},{test:e=>/vimeo\.com|player\.vimeo\.com/.test(e),key:`vimeo`,embed:!0},{test:e=>/dailymotion\.com|dai\.ly/.test(e),key:`dailymotion`,embed:!0},{test:e=>/cdn\.jwplayer\.com/.test(e)||e.startsWith(`jwplayer://`),key:`jwplayer`,embed:!1},{test:e=>/players\.brightcove\.net/.test(e),key:`brightcove`,embed:!1}];function je(e){return Ae.find(t=>t.test(e))?.key??`html5`}function Me(e){if(/\.m3u8(\?|#|$)/.test(e))return`application/x-mpegURL`;if(/\.mp4(\?|#|$)/.test(e))return`video/mp4`}function Ne(e){return Ae.find(t=>t.test(e))?.embed??!1}const Pe={youtube:Te,vimeo:De,dailymotion:ke};function Fe(e,t,n){let r=Pe[je(e)];return r?r(t,n):null}async function Ie(e){let t=je(e);return t===`jwplayer`?ae(e):t===`brightcove`?ue(e):{src:e,type:Me(e)}}const Le=`application/x-mpegURL`,Re=[`play`,`pause`,`ended`,`error`,`timeupdate`,`durationchange`,`progress`,`volumechange`,`ratechange`,`seeking`,`seeked`,`waiting`,`playing`,`canplay`];function ze(e,t){let n=de(),r=null,i=!1,a=null;async function o(t){let{default:o}=await import(`hls.js`);if(i||a!==t)return;if(typeof o?.isSupported!=`function`||!o.isSupported()){e.src=t;return}r=new o({liveDurationInfinity:!0}),r.loadSource(t),r.attachMedia(e);let s=o.Events,c=o.ErrorTypes;r.on(s.ERROR,(e,o)=>{if(!(!o.fatal||i||a!==t))switch(o.type){case c.NETWORK_ERROR:r?.startLoad();break;case c.MEDIA_ERROR:r?.recoverMediaError();break;default:r?.destroy(),r=null,n.trigger(`error`);break}})}function s(){return e.canPlayType(`application/vnd.apple.mpegurl`)!==``||e.canPlayType(Le)!==``}function c(t,n){if(r?.destroy(),r=null,a=null,n===Le&&!s()){a=t,o(t);return}e.src=t}let l=e=>()=>n.trigger(e),u=Re.map(e=>[e,l(e)]);for(let[t,n]of u)e.addEventListener(t,n);let d=[[`webkitbeginfullscreen`,l(`nativefullscreenenter`)],[`webkitendfullscreen`,l(`nativefullscreenexit`)]];for(let[t,n]of d)e.addEventListener(t,n);e.poster=t.poster??``,e.muted=t.muted??t.autoplay??!1,e.playbackRate=t.playbackRate??1,e.playsInline=!0,c(t.src,t.type),t.autoplay&&e.play();function f(){let t=e;if(typeof t.webkitEnterFullscreen==`function`){t.webkitEnterFullscreen();return}let n=e.closest(`.player__shell`);n instanceof HTMLElement&&A(n)}function p(){let t=e;if(typeof t.webkitExitFullscreen==`function`){t.webkitExitFullscreen();return}j()}return{el:e,play:()=>e.play(),pause:()=>e.pause(),paused:()=>e.paused,currentTime:()=>e.currentTime,setCurrentTime:t=>{e.currentTime=t},duration:()=>e.duration,volume:()=>e.volume,setVolume:t=>{e.volume=t},muted:()=>e.muted,setMuted:t=>{e.muted=t},playbackRate:()=>e.playbackRate,setPlaybackRate:t=>{e.playbackRate=t},bufferedEnd:()=>{let{buffered:t,duration:n}=e;if(!t.length)return 0;let r=t.end(t.length-1);return n&&r>n?n:r},error:()=>{let t=e.error;return t?{code:t.code,message:t.message||`This video could not be played.`}:null},setSrc:c,featuresPlaybackRate:()=>!0,enterFullscreen:f,exitFullscreen:p,on:n.on,off:n.off,dispose:()=>{i=!0,r?.destroy();for(let[t,n]of u)e.removeEventListener(t,n);for(let[t,n]of d)e.removeEventListener(t,n);n.dispose()}}}function Be(){return window.google?.ima?Promise.resolve():new Promise((e,t)=>{let n=document.createElement(`script`);n.src=`https://imasdk.googleapis.com/js/sdkloader/ima3.js`,n.onload=()=>e(),n.onerror=()=>t(Error(`Failed to load Google IMA SDK`)),document.head.appendChild(n)})}function Ve(e,t,n,r){let i=document.createElement(`div`);i.className=`ima-ad-container`,e.appendChild(i);let a=null,o=null,s=null,c=!1,l=!1,u=!1,d=!1,f=!1,p=!1,m=1,h=new ResizeObserver(([e])=>{let t=window.google?.ima;if(!s||!t)return;let{width:n,height:r}=e.contentRect;s.resize(n,r,t.ViewMode.NORMAL)});h.observe(t);function g(){o?.contentComplete()}function _(t){d=t,e.classList.toggle(U,t),t||(f=!1,e.classList.remove(W))}function v(){if(c||!l||!u||!a||!o)return;c=!0;let e=window.google?.ima;if(!e)return;a.initialize();let t=new e.AdsRequest;t.adTagUrl=n,o.requestAds(t)}Be().then(()=>{if(p)return;let n=window.google?.ima;n&&(a=new n.AdDisplayContainer(i,t),o=new n.AdsLoader(a),l=!0,o.addEventListener(n.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,i=>{if(p)return;let a=new n.AdsRenderingSettings;a.restoreCustomPlaybackStateOnAdBreakComplete=!0,s=i.getAdsManager(t,a),t.addEventListener(`ended`,g),s.addEventListener(n.AdEvent.Type.CONTENT_PAUSE_REQUESTED,()=>{t.removeEventListener(`ended`,g),t.pause(),_(!0),r.onAdStart();let e=s?.getVolume()??1;e>0&&(m=e),r.onAdMuteChange(e===0)}),s.addEventListener(n.AdEvent.Type.CONTENT_RESUME_REQUESTED,()=>{t.addEventListener(`ended`,g),_(!1),r.onAdEnd(),t.ended||t.play()}),s.addEventListener(n.AdEvent.Type.PAUSED,()=>{f=!0,e.classList.add(W),r.onAdPauseChange(!0)}),s.addEventListener(n.AdEvent.Type.RESUMED,()=>{f=!1,e.classList.remove(W),r.onAdPauseChange(!1)}),s.addEventListener(n.AdEvent.Type.AD_PROGRESS,()=>{r.onAdProgress(s?.getRemainingTime()??0)}),s.addEventListener(n.AdErrorEvent.Type.AD_ERROR,e=>{_(!1),r.onError(e.getError().getMessage()),t.play()});try{s.init(t.clientWidth,t.clientHeight,n.ViewMode.NORMAL),s.start()}catch(e){r.onError(e instanceof Error?e.message:`Ad playback failed to start.`)}}),o.addEventListener(n.AdErrorEvent.Type.AD_ERROR,e=>{r.onError(e.getError().getMessage())}),v())}).catch(e=>r.onError(e.message));function y(){u=!0,v()}function b(){if(!s)return;let e=s.getVolume();e>0?(m=e,s.setVolume(0)):s.setVolume(m||1),r.onAdMuteChange(s.getVolume()===0)}return{isAdPlaying:()=>d,isAdPaused:()=>f,requestAdsOnFirstPlay:y,pauseAd:()=>s?.pause(),resumeAd:()=>s?.resume(),toggleAdMute:b,dispose:()=>{p=!0,h.disconnect(),t.removeEventListener(`ended`,g),s?.destroy(),o?.destroy(),i.remove(),e.classList.remove(U,W)}}}const He=new Set;function Ue(e){return He.add(e),()=>He.delete(e)}function We(e){He.forEach(t=>{if(t!==e)try{t()}catch{}})}function Ge(e){let t=S(!1),n=S(!1);function r(){let e=document;t.value=!!(document.fullscreenElement||e.webkitFullscreenElement),n.value=!1}function i(){let n=e();if(n){if(t.value){n.exitFullscreen();return}n.enterFullscreen()}}function a(){n.value=!0}function o(e){e.on(R,()=>{n.value=!0}),e.on(z,()=>{n.value=!1}),e.on(`nativefullscreenenter`,()=>{t.value=!0,n.value=!1}),e.on(`nativefullscreenexit`,()=>{t.value=!1,n.value=!1})}return v(()=>{document.addEventListener(`fullscreenchange`,r),document.addEventListener(`webkitfullscreenchange`,r)}),_(()=>{document.removeEventListener(`fullscreenchange`,r),document.removeEventListener(`webkitfullscreenchange`,r)}),{isFullscreen:t,isFullscreenPending:n,toggleFullscreen:i,markFullscreenPending:a,attachPlayerEvents:o}}function Ke(){let e=S(!1),t=null;function n(){clearTimeout(t??void 0),e.value=!1}function r(r){r.on(`waiting`,()=>{clearTimeout(t??void 0),t=setTimeout(()=>{e.value=!0},500)}),r.on(`playing`,n),r.on(`canplay`,n)}return _(()=>clearTimeout(t??void 0)),{isBuffering:e,attachPlayerEvents:r,reset:n}}function qe(e,t,n){let r=new Set;function i(){if(!t.value)return;let i=e.value/t.value;for(let[e,t]of te)!r.has(e)&&i>=e&&(r.add(e),n(t))}function a(){r.clear()}return{checkQuartiles:i,reset:a}}function Je(){try{return JSON.parse(localStorage.getItem(`player:positions`)??`[]`)}catch{return[]}}function Ye(e){localStorage.setItem(`player:positions`,JSON.stringify(e))}function Xe(e,t){if(t<5)return;let n=Je().filter(t=>t.url!==e);n.unshift({url:e,time:t}),Ye(n.slice(0,5))}function Ze(e){return Je().find(t=>t.url===e)?.time??null}function Qe(e){Ye(Je().filter(t=>t.url!==e))}function $e(e,t,n){let r=!1;function i(t){if(r)return;let n=Ze(e);n&&t.setCurrentTime(n),r=!0}function a(t){!t||n.value||Xe(e,t.currentTime()??0)}function o(){Qe(e)}function s(){document.visibilityState===`hidden`&&a(t())}return v(()=>document.addEventListener(`visibilitychange`,s)),_(()=>{a(t()),document.removeEventListener(`visibilitychange`,s)}),{restoreOnce:i,save:a,clear:o}}function et(e,t,n,r){let i=null;v(()=>{let a=e.value?.closest(`.player__shell`);a&&(i=new IntersectionObserver(([e])=>{let i=t();!e.isIntersecting&&i&&!i.paused()&&!n.value&&!r.value&&i.pause()},{threshold:.1}),i.observe(a))}),_(()=>i?.disconnect())}function tt(e,t,n,r,i,a){function o(){let n=e();if(!(!n||!t.value)){if(!a.value){n.play();return}n.pause()}}function s(t){e()?.setCurrentTime(n.value*(t/100))}function c(){let t=e();t?.setMuted(!t.muted())}function l(t){let n=e();n&&(n.setVolume(t),n.setMuted(t===0))}function u(){r.value=!r.value}function d(t){let n=e();n&&(n.setPlaybackRate(t),i.value=t)}return{togglePlay:o,seek:s,toggleMute:c,setVolume:l,toggleLoop:u,setPlaybackRate:d}}function nt(e,t){let{isPlaying:n,hasEnded:r,isReady:i,isAdPlaying:a,isLive:o,current:s,total:c,buffered:l,vol:u,isMuted:d,isLooping:f,playbackRate:p,supportsPlaybackRate:m,hasStarted:h,isError:g,errorMessage:_}=e,{fire:v,pauseThisPlayer:y,positionMemory:b,quartiles:x,buffering:S,fullscreen:C}=t;function w(e){i.value=!0,m.value=e.featuresPlaybackRate();let t=()=>{let t=e.duration();if(t===1/0){o.value=!0;return}o.value=!1,t&&t>0&&isFinite(t)&&(c.value=t)};e.on(`adstart`,()=>{We(y),a.value=!0,v(`adstart`)}),e.on(`adend`,()=>{a.value=!1,v(`adend`)}),e.on(`play`,()=>{We(y),h.value=!0,n.value=!0,r.value=!1,o.value||b.restoreOnce(e),v(`play`)}),e.on(`pause`,()=>{n.value=!1,o.value||b.save(e),v(`pause`)}),e.on(`ended`,()=>{if(n.value=!1,x.reset(),S.reset(),f.value){e.setCurrentTime(0),e.play();return}c.value&&(s.value=c.value),r.value=!0,b.clear(),v(`ended`)}),e.on(`seeked`,()=>{v(`seeked`)}),e.on(`error`,()=>{let t=e.error();_.value=t?.message||`This video could not be played.`,g.value=!0,i.value=!0,v(`error`,{error:t})}),e.on(`timeupdate`,()=>{r.value||(s.value=e.currentTime()??0,c.value||t(),m.value||=e.featuresPlaybackRate(),o.value||x.checkQuartiles())}),e.on(`durationchange`,t),e.on(`progress`,()=>{let t=e.duration();l.value=t?e.bufferedEnd()/t*100:0}),e.on(`volumechange`,()=>{let t=e.muted();u.value=e.volume()??1,d.value=t??!1,h.value&&v(`volumechange`,{isMuted:t})}),e.on(`ratechange`,()=>{let t=e.playbackRate()??1;p.value=t,h.value&&v(`ratechange`,{playbackRate:t})}),S.attachPlayerEvents(e),C.attachPlayerEvents(e)}return{attachPlayerEvents:w}}function rt(e,t,r){let i=null,a=null,o=null,s=null,c=S(!1),l=S(!1),u=S(!1),d=S(!1),f=S(!1),p=S(!1),m=S(0),h=S(!1),g=S(0),y=S(0),b=S(0),x=S(1),C=S(t.muted??t.autoplay??!1),w=S(!1),T=S(t.playbackRate??1),D=S(!1),O=S(!1),k=S(!1),A=S(``),j=S(!1),M=n(()=>y.value?g.value/y.value*100:0),P=n(()=>Math.max(b.value,M.value)),F=()=>i,I=Ge(F),L=Ke(),R=$e(t.videoUrl,F,l);function z(e,n={}){r(`state-change`,{type:e,currentTime:g.value,duration:y.value,src:t.videoUrl,...n,payload:t.payload})}let B=qe(g,y,z);function V(){!i||!s||(k.value=!1,A.value=``,i.setSrc(s.src,s.type))}function ee(){a?.toggleAdMute()}function H(){if(a?.isAdPlaying()){a.pauseAd();return}i?.pause()}function U(){if(a?.isAdPlaying()){a.isAdPaused()?a.resumeAd():a.pauseAd();return}W.togglePlay()}let W=tt(F,u,y,w,T,c),{attachPlayerEvents:G}=nt({isPlaying:c,hasEnded:l,isReady:u,isAdPlaying:d,isLive:h,current:g,total:y,buffered:b,vol:x,isMuted:C,isLooping:w,playbackRate:T,supportsPlaybackRate:D,hasStarted:O,isError:k,errorMessage:A},{fire:z,pauseThisPlayer:H,positionMemory:R,quartiles:B,buffering:L,fullscreen:I});return E(()=>t.muted,e=>{!i||e===void 0||i.setMuted(e)}),E(()=>t.playbackRate,e=>{!i||e===void 0||i.setPlaybackRate(e)}),et(e,F,I.isFullscreen,I.isFullscreenPending),E(O,t=>{!t||!e.value||!i||i.el===e.value||ge(e.value,i.el)}),v(async()=>{if(Ne(t.videoUrl)){if(!e.value)return;let n=Fe(t.videoUrl,e.value,{src:t.videoUrl,poster:t.poster,autoplay:t.autoplay,muted:t.muted??t.autoplay,nativeUi:t.nativeUi});if(!n){k.value=!0,u.value=!0,A.value=`This platform is not yet supported.`;return}j.value=!!t.nativeUi,i=n,s={src:t.videoUrl},o=Ue(H),G(i);return}let n=await Ie(t.videoUrl).catch(()=>({src:t.videoUrl}));if(!e.value)return;s={src:n.src,type:n.type},i=ze(e.value,{src:n.src,type:n.type,poster:n.poster||t.poster||``,autoplay:t.autoplay,muted:t.muted??t.autoplay,playbackRate:T.value});let r=t.adTagUrl||n.adTagUrl||``;r&&e.value.parentElement&&(a=Ve(e.value.parentElement,e.value,r,{onAdStart:()=>{d.value=!0,f.value=!1,z(`adstart`)},onAdEnd:()=>{d.value=!1,f.value=!1,m.value=0,z(`adend`)},onAdPauseChange:e=>{f.value=e,e||We(H)},onAdMuteChange:e=>{p.value=e},onAdProgress:e=>{m.value=e},onError:e=>{d.value=!1,f.value=!1,m.value=0,console.error(`Ad playback error for ${r}:`,e)}}),i.on(`play`,()=>a?.requestAdsOnFirstPlay())),o=Ue(H),G(i)}),_(()=>{o?.(),a?.dispose(),a=null,i?.dispose(),i=null}),{isPlaying:c,hasEnded:l,isReady:u,isAdPlaying:d,isAdPaused:f,isAdMuted:p,adRemainingTime:m,isLive:h,isBuffering:L.isBuffering,current:g,total:y,vol:x,isMuted:C,isLooping:w,playbackRate:T,hasStarted:O,isError:k,errorMessage:A,progress:M,bufferedDisplay:P,isFullscreen:I.isFullscreen,isFullscreenPending:I.isFullscreenPending,fmt:N,fire:z,retry:V,togglePlay:U,seek:W.seek,toggleMute:W.toggleMute,setVolume:W.setVolume,toggleFullscreen:I.toggleFullscreen,markFullscreenPending:I.markFullscreenPending,toggleLoop:W.toggleLoop,toggleAdMute:ee,setPlaybackRate:W.setPlaybackRate,supportsPlaybackRate:D,nativeUi:j}}function it(e){let t=S(!0),n=S(!1),r=null,i=0;function a(e=400){i=Date.now()+e}function o(e=3500){clearTimeout(r??void 0),r=setTimeout(()=>{t.value=!1,n.value=!1},e)}function s(){clearTimeout(r??void 0)}function c(){n.value=!0,t.value=!0,o()}function l(){n.value=!1,e.value&&o()}function u(){e.value&&o()}function d(){t.value=!0,e.value&&o()}function f(){t.value=!0,o()}function p(){Date.now()<i||e.value&&o(600)}return E(e,e=>{if(!e){clearTimeout(r??void 0),t.value=!0;return}o()}),_(()=>clearTimeout(r??void 0)),{showHUD:t,isOpen:n,scheduleHide:o,pauseHide:s,onVideoTap:d,onMouseMove:f,onMouseLeave:p,openControls:c,closeControls:l,keepOpen:u,suppressMouseLeave:a}}const J=Symbol(`player`),Y=Symbol(`hud`),at=Symbol(`action`),ot=Symbol(`compact`),X=Symbol(`playlist`);function Z(e){let t=d(e);if(t===void 0)throw Error(`[video-player] missing "${String(e.description)}" context — this component must be rendered inside <VideoPlayer>`);return t}function st(e,t){return{hudVisible:n(()=>!e.isReady||e.isError?!1:t.showHUD),popupVisible:n(()=>!e.isReady||e.isError?!1:e.isFullscreen?t.showHUD:t.isOpen)}}function ct(e,t){return n(()=>!(!e?.value||t.isFullscreen))}function lt(e,t,r){let i=n(()=>e?.value??null),a=n(()=>!!i.value&&typeof i.value==`object`),o=n(()=>a.value?i.value:null),s=n(()=>i.value===`mute`?t.isMuted?`Unmute`:`Mute`:i.value===`loop`?t.isLooping?`Disable loop`:`Loop`:i.value===`autoplay`?r.autoAdvance?`Disable autoplay next`:`Autoplay next`:``),c=n(()=>i.value===`mute`?t.isMuted:i.value===`loop`?t.isLooping:i.value===`autoplay`&&r.autoAdvance);function l(){i.value===`mute`?t.toggleMute():i.value===`loop`?t.toggleLoop():i.value===`autoplay`&&r.toggleAutoAdvance()}return{currentAction:i,isCustom:a,customAction:o,builtinLabel:s,builtinActive:c,onBuiltinClick:l}}var Q=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n};const ut={},dt={viewBox:`0 0 24 24`,fill:`currentColor`};function ft(e,t){return y(),a(`svg`,dt,[...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 pt=Q(ut,[[`render`,ft]]);const mt={},ht={viewBox:`0 0 24 24`,fill:`currentColor`};function gt(e,t){return y(),a(`svg`,ht,[...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 _t=Q(mt,[[`render`,gt]]);const vt={},yt={viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`};function bt(e,t){return y(),a(`svg`,yt,[...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 xt=Q(vt,[[`render`,bt]]);const St={},Ct={viewBox:`0 0 24 24`,fill:`currentColor`};function wt(e,t){return y(),a(`svg`,Ct,[...t[0]||=[o(`path`,{d:`M4 12l1.41 1.41L11 7.83V20h2V7.83l5.59 5.58L20 12l-8-8-8 8z`},null,-1)]])}var Tt=Q(St,[[`render`,wt]]);const Et={},Dt={viewBox:`0 0 24 24`,fill:`currentColor`};function Ot(e,t){return y(),a(`svg`,Dt,[...t[0]||=[o(`path`,{d:`M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z`},null,-1)]])}var kt=Q(Et,[[`render`,Ot]]);const At={},jt={viewBox:`0 0 24 24`,fill:`currentColor`};function Mt(e,t){return y(),a(`svg`,jt,[...t[0]||=[o(`path`,{d:`M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z`},null,-1)]])}var Nt=Q(At,[[`render`,Mt]]);const Pt={},Ft={viewBox:`0 0 24 24`,fill:`currentColor`};function It(e,t){return y(),a(`svg`,Ft,[...t[0]||=[o(`path`,{d:`M7 7h10v3l4-4-4-4v3H5v6h2V7zm10 10H7v-3l-4 4 4 4v-3h12v-6h-2v4z`},null,-1)]])}var Lt=Q(Pt,[[`render`,It]]);const Rt={},zt={viewBox:`0 0 24 24`,fill:`currentColor`};function Bt(e,t){return y(),a(`svg`,zt,[...t[0]||=[o(`circle`,{cx:`5`,cy:`12`,r:`2`},null,-1),o(`circle`,{cx:`12`,cy:`12`,r:`2`},null,-1),o(`circle`,{cx:`19`,cy:`12`,r:`2`},null,-1)]])}var Vt=Q(Rt,[[`render`,Bt]]);const Ht={},Ut={viewBox:`0 0 24 24`,fill:`currentColor`};function Wt(e,t){return y(),a(`svg`,Ut,[...t[0]||=[o(`path`,{d:`M6 19h4V5H6v14zm8-14v14h4V5h-4z`},null,-1)]])}var Gt=Q(Ht,[[`render`,Wt]]);const Kt={},qt={viewBox:`0 0 24 24`,fill:`currentColor`};function Jt(e,t){return y(),a(`svg`,qt,[...t[0]||=[o(`path`,{d:`M8 5v14l11-7z`},null,-1)]])}var Yt=Q(Kt,[[`render`,Jt]]);const Xt={},Zt={viewBox:`0 0 24 24`,fill:`currentColor`};function Qt(e,t){return y(),a(`svg`,Zt,[...t[0]||=[o(`path`,{d:`M12 5V1L7 6l5 5V7c3.31 0 6 2.69 6 6s-2.69 6-6 6-6-2.69-6-6H4c0 4.42 3.58 8 8 8s8-3.58 8-8-3.58-8-8-8z`},null,-1)]])}var $t=Q(Xt,[[`render`,Qt]]);const en={},tn={viewBox:`0 0 24 24`,fill:`currentColor`};function nn(e,t){return y(),a(`svg`,tn,[...t[0]||=[o(`path`,{d:`M6 18l8.5-6L6 6v12zM16 6v12h2V6h-2z`},null,-1)]])}var rn=Q(en,[[`render`,nn]]);const an={},on={viewBox:`0 0 24 24`,fill:`currentColor`};function sn(e,t){return y(),a(`svg`,on,[...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 cn=Q(an,[[`render`,sn]]);const ln={},un={viewBox:`0 0 24 24`,fill:`currentColor`};function dn(e,t){return y(),a(`svg`,un,[...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 fn=Q(ln,[[`render`,dn]]);const pn=[`aria-label`];var $=Q(u({__name:`PlayPauseButton`,props:{isPlaying:{type:Boolean,required:!0},hasEnded:{type:Boolean,required:!1,default:!1},size:{type:String,required:!1,default:`sm`}},emits:[`toggle-play`],setup(e){let t=e,i=n(()=>t.isPlaying?`Pause`:t.hasEnded?`Replay`:`Play`);return(t,n)=>(y(),a(`button`,{class:m([`ppbtn`,`ppbtn--${e.size}`]),"aria-label":i.value,onClick:n[0]||=O(e=>t.$emit(`toggle-play`),[`stop`])},[e.isPlaying?(y(),r(T(Gt),{key:0})):e.hasEnded?(y(),r(T($t),{key:1})):(y(),r(T(Yt),{key:2}))],10,pn))}}),[[`__scopeId`,`data-v-85902525`]]),mn=u({__name:`VolumeIcon`,setup(e){let t=Z(J),i=n(()=>!t.isMuted&&t.vol>0);return(e,t)=>i.value?(y(),r(T(fn),{key:0})):(y(),r(T(cn),{key:1}))}}),hn=Q(u({__name:`Spinner`,props:{size:{type:Number,required:!1,default:14},borderWidth:{type:Number,required:!1,default:2}},setup(e){return(t,n)=>(y(),a(`div`,{class:`spinner`,style:g({width:`${e.size}px`,height:`${e.size}px`,borderWidth:`${e.borderWidth}px`})},null,4))}}),[[`__scopeId`,`data-v-259be2b2`]]);const gn={class:`hud`},_n=[`aria-label`],vn=[`aria-label`],yn=[`aria-label`],bn=[`aria-label`,`innerHTML`],xn={key:4,class:`hud__spacer`},Sn={class:`hud__play-wrap`};var Cn=Q(u({__name:`HudButtons`,setup(t){let n=Z(J),s=Z(Y),{currentAction:c,isCustom:u,customAction:f,builtinLabel:p,builtinActive:h,onBuiltinClick:g}=lt(d(at),n,Z(X));return(t,d)=>(y(),a(`div`,gn,[!T(s).isOpen&&!T(n).isFullscreen?(y(),a(e,{key:0},[T(c)===`mute`?(y(),a(`button`,{key:0,class:m([`hud__btn`,{"hud__btn--active":T(h)}]),"aria-label":T(p),onClick:d[0]||=O((...e)=>T(g)&&T(g)(...e),[`stop`])},[l(mn)],10,_n)):T(c)===`loop`?(y(),a(`button`,{key:1,class:m([`hud__btn`,{"hud__btn--active":T(h)}]),"aria-label":T(p),onClick:d[1]||=O((...e)=>T(g)&&T(g)(...e),[`stop`])},[l(T(Lt))],10,vn)):T(c)===`autoplay`?(y(),a(`button`,{key:2,class:m([`hud__btn`,{"hud__btn--active":T(h)}]),"aria-label":T(p),onClick:d[2]||=O((...e)=>T(g)&&T(g)(...e),[`stop`])},[l(T(rn))],10,yn)):T(u)&&T(f)?(y(),a(`button`,{key:3,class:`hud__btn`,"aria-label":T(f).label,onClick:d[3]||=O(e=>T(f).onClick(),[`stop`]),innerHTML:T(f).icon},null,8,bn)):(y(),a(`div`,xn))],64)):i(`v-if`,!0),o(`div`,Sn,[l($,{"is-playing":T(n).isPlaying,"has-ended":T(n).hasEnded,size:`lg`,onTogglePlay:T(n).togglePlay},null,8,[`is-playing`,`has-ended`,`onTogglePlay`]),T(n).isBuffering?(y(),r(hn,{key:0,class:`hud__buf-spinner`})):i(`v-if`,!0)]),!T(s).isOpen&&!T(n).isFullscreen?(y(),a(`button`,{key:1,class:`hud__btn`,"aria-label":`Show controls`,onClick:d[4]||=O((...e)=>T(s).openControls&&T(s).openControls(...e),[`stop`])},[l(T(xt))])):i(`v-if`,!0)]))}}),[[`__scopeId`,`data-v-a6d118e7`]]);function wn(e){let t=S(null),r=n(()=>t.value??e.progress),i=null;function a(){i&&clearTimeout(i),i=null,t.value=null}function o(e){i&&clearTimeout(i),i=null,t.value=Number(e.target.value)}function s(n){let r=Number(n.target.value);t.value=r,e.seek(r),i&&clearTimeout(i),i=setTimeout(a,3e3)}return E(()=>e.current,()=>{if(t.value===null||!e.total)return;let n=t.value/100*e.total;Math.abs(e.current-n)<1&&a()}),_(a),{displaySeek:r,onSeekInput:o,onSeekChange:s}}function Tn(e,t,n){if(!document.startViewTransition||!e.value){n();return}e.value.style.viewTransitionName=t,document.startViewTransition(async()=>{n(),await p()}).finished.finally(()=>{e.value&&(e.value.style.viewTransitionName=``)})}const En={class:`controls__vol-header`},Dn=[`aria-label`],On={class:`controls__vol-body`},kn=[`value`],An={class:`controls__vol-pct`};var jn=Q(u({__name:`VolumePanel`,emits:[`back`],setup(t){let r=Z(J),i=Z(Y),s=n(()=>r.isMuted?0:Math.round(r.vol*100));function c(e){r.setVolume(Number(e.target.value)/100)}return(t,n)=>(y(),a(e,null,[o(`div`,En,[o(`button`,{class:`controls__btn`,"aria-label":`Back`,onClick:n[0]||=e=>t.$emit(`back`)},[l(T(pt))]),n[6]||=o(`span`,{class:`controls__vol-label`},`Volume`,-1),o(`button`,{class:`controls__btn`,"aria-label":T(r).isMuted?`Unmute`:`Mute`,onClick:n[1]||=e=>T(r).toggleMute()},[l(mn)],8,Dn)]),o(`div`,On,[o(`input`,{type:`range`,min:`0`,max:`100`,step:`1`,value:s.value,class:`controls__vol-slider`,style:g({"--v":s.value+`%`}),"aria-label":`Volume`,onInput:c,onMousedown:n[2]||=e=>T(i).pauseHide(),onMouseup:n[3]||=e=>T(i).scheduleHide(),onTouchstartPassive:n[4]||=e=>T(i).pauseHide(),onTouchend:n[5]||=e=>T(i).scheduleHide()},null,44,kn),o(`span`,An,C(s.value)+`%`,1)])],64))}}),[[`__scopeId`,`data-v-10b0ae67`]]);function Mn(e){function t(){let t=K.indexOf(e.playbackRate);e.setPlaybackRate(K[(t+1)%K.length])}function n(e){return`${e}×`}return{cycleRate:t,fmtRate:n}}const Nn={class:`controls__more-header`},Pn={class:`controls__more-body`},Fn={class:`controls__more-value`},In={class:`controls__more-row-label`},Ln={class:`controls__more-value`},Rn={class:`controls__more-row-label`},zn={class:`controls__more-value`},Bn=[`aria-label`],Vn={class:`controls__more-row-label`},Hn=[`innerHTML`];var Un=Q(u({__name:`MoreMenu`,props:{isCustom:{type:Boolean,required:!0},customAction:{type:[Object,null],required:!0}},emits:[`back`],setup(t){let n=Z(J),r=Z(X),{cycleRate:s,fmtRate:u}=Mn(n);return(d,f)=>(y(),a(e,null,[o(`div`,Nn,[o(`button`,{class:`controls__btn`,"aria-label":`Back`,onClick:f[0]||=e=>d.$emit(`back`)},[l(T(pt))]),f[5]||=o(`span`,{class:`controls__more-label`},`More`,-1)]),o(`div`,Pn,[T(n).supportsPlaybackRate?(y(),a(`button`,{key:0,class:`controls__more-row`,"aria-label":`Playback speed`,onClick:f[1]||=(...e)=>T(s)&&T(s)(...e)},[f[6]||=o(`span`,null,`Playback speed`,-1),o(`span`,Fn,C(T(u)(T(n).playbackRate)),1)])):i(`v-if`,!0),o(`button`,{class:m([`controls__more-row`,{"controls__more-row--active":T(n).isLooping}]),"aria-label":`Toggle loop`,onClick:f[2]||=e=>T(n).toggleLoop()},[o(`span`,In,[l(T(Lt),{class:`controls__more-row-icon`}),f[7]||=c(`Loop`,-1)]),o(`span`,Ln,C(T(n).isLooping?`On`:`Off`),1)],2),T(r).hasPlaylist?(y(),a(`button`,{key:1,class:m([`controls__more-row`,{"controls__more-row--active":T(r).autoAdvance}]),"aria-label":`Toggle autoplay next`,onClick:f[3]||=e=>T(r).toggleAutoAdvance()},[o(`span`,Rn,[l(T(rn),{class:`controls__more-row-icon`}),f[8]||=c(`Autoplay next`,-1)]),o(`span`,zn,C(T(r).autoAdvance?`On`:`Off`),1)],2)):i(`v-if`,!0),t.isCustom&&t.customAction?(y(),a(`button`,{key:2,class:`controls__more-row`,"aria-label":t.customAction.label,onClick:f[4]||=e=>t.customAction.onClick()},[o(`span`,Vn,[o(`span`,{class:`controls__more-row-icon`,innerHTML:t.customAction.icon},null,8,Hn),c(C(t.customAction.label),1)])],8,Bn)):i(`v-if`,!0)])],64))}}),[[`__scopeId`,`data-v-e89a8208`]]);const Wn=[`value`],Gn={class:`controls__row`},Kn={class:`controls__play-wrap`},qn={key:0,class:`controls__live`},Jn={key:1,class:`controls__time`},Yn={class:`controls__fs-wrap`},Xn=[`aria-label`];var Zn=Q(u({__name:`ControlsPopup`,setup(t){let n=Z(J),s=Z(Y),u=Z(X),f=ct(d(ot),n),{isCustom:p,customAction:h}=lt(d(at),n,u),b=S(!1),x=S(!1),w=S(null);function E(e){return!w.value||w.value.contains(e)?!1:(s.closeControls(),!0)}function D(e){E(e.target)}function A(e){E(e.target)&&e.preventDefault()}v(()=>{n.fire(`controlsopen`,{element:w.value}),document.addEventListener(`click`,D,!0),document.addEventListener(`touchend`,A,!0)}),_(()=>{b.value=!1,x.value=!1,n.fire(`controlsclose`,{element:w.value}),document.removeEventListener(`click`,D,!0),document.removeEventListener(`touchend`,A,!0)});function j(e){s.suppressMouseLeave(),Tn(w,`controls-popup`,e)}function M(){if(k()){n.toggleMute();return}j(()=>{b.value=!0})}function N(){j(()=>{x.value=!0})}let{displaySeek:P,onSeekInput:F,onSeekChange:I}=wn(n);function L(){n.isFullscreen||n.markFullscreenPending(),n.toggleFullscreen()}return(t,d)=>(y(),a(`div`,{ref_key:`popupEl`,ref:w,class:m([`controls`,{"controls--fs":T(n).isFullscreen,"controls--compact":T(f)}]),onMousemove:d[10]||=O((...e)=>T(s).keepOpen&&T(s).keepOpen(...e),[`stop`])},[b.value?(y(),r(jn,{key:0,onBack:d[0]||=e=>j(()=>b.value=!1)})):x.value?(y(),r(Un,{key:1,"is-custom":T(p),"custom-action":T(h),onBack:d[1]||=e=>j(()=>x.value=!1)},null,8,[`is-custom`,`custom-action`])):(y(),a(e,{key:2},[T(n).isLive?i(`v-if`,!0):(y(),a(`input`,{key:0,type:`range`,min:`0`,max:`100`,value:T(P),class:`controls__seek`,style:g({"--p":T(P)+`%`,"--b":T(n).bufferedDisplay+`%`}),onInput:d[2]||=(...e)=>T(F)&&T(F)(...e),onChange:d[3]||=(...e)=>T(I)&&T(I)(...e),onMousedown:d[4]||=e=>T(s).pauseHide(),onMouseup:d[5]||=e=>T(s).scheduleHide(),onTouchstartPassive:d[6]||=e=>T(s).pauseHide(),onTouchend:d[7]||=e=>T(s).scheduleHide()},null,44,Wn)),o(`div`,Gn,[o(`div`,Kn,[T(n).isBuffering?(y(),r(hn,{key:0})):(y(),r($,{key:1,"is-playing":T(n).isPlaying,"has-ended":T(n).hasEnded,size:`sm`,onTogglePlay:d[8]||=e=>T(n).togglePlay()},null,8,[`is-playing`,`has-ended`]))]),T(n).isLive?(y(),a(`span`,qn,[...d[11]||=[o(`span`,{class:`controls__live-dot`},null,-1),c(`Live`,-1)]])):(y(),a(`span`,Jn,C(T(n).fmt(T(n).current))+` / `+C(T(n).fmt(T(n).total)),1)),T(u).hasNext?(y(),a(`button`,{key:2,class:`controls__btn`,"aria-label":`Play next`,onClick:d[9]||=e=>T(u).playNext()},[l(T(rn))])):i(`v-if`,!0),o(`button`,{class:`controls__btn`,"aria-label":`Volume`,onClick:M},[l(mn)]),o(`button`,{class:m([`controls__btn controls__btn--more`,{"controls__btn--active":T(n).isLooping||T(n).playbackRate!==1||T(u).autoAdvance}]),"aria-label":`More`,onClick:N},[l(T(Vt))],2),o(`div`,Yn,[T(n).isFullscreenPending?(y(),r(hn,{key:0})):(y(),a(`button`,{key:1,class:`controls__btn`,"aria-label":T(n).isFullscreen?`Exit fullscreen`:`Fullscreen`,onClick:L},[T(n).isFullscreen?(y(),r(T(Nt),{key:0})):(y(),r(T(kt),{key:1}))],8,Xn))])])],64))],34))}}),[[`__scopeId`,`data-v-5712aad4`]]);const Qn={class:`ad-overlay`},$n={class:`ad-overlay__bar`},er={class:`ad-overlay__badge`},tr={key:0,class:`ad-overlay__countdown`},nr=[`aria-label`],rr={key:0,class:`ad-overlay__resume`};var ir=Q(u({__name:`AdOverlay`,setup(e){let t=Z(J),s=n(()=>t.adRemainingTime>0?t.fmt(t.adRemainingTime):``);return(e,n)=>(y(),a(`div`,Qn,[o(`div`,$n,[o(`div`,er,[n[2]||=o(`span`,null,`Ad`,-1),s.value?(y(),a(`span`,tr,C(s.value),1)):i(`v-if`,!0)]),o(`button`,{class:`ad-overlay__mute`,"aria-label":T(t).isAdMuted?`Unmute ad`:`Mute ad`,onClick:n[0]||=e=>T(t).toggleAdMute()},[T(t).isAdMuted?(y(),r(T(cn),{key:0})):(y(),r(T(fn),{key:1}))],8,nr)]),T(t).isAdPaused?(y(),a(`div`,rr,[l($,{"is-playing":!1,size:`lg`,onTogglePlay:n[1]||=e=>T(t).togglePlay()})])):i(`v-if`,!0)]))}}),[[`__scopeId`,`data-v-23efcc8b`]]);const ar={key:0,class:`overlay__spinner`},or={key:0,class:`overlay__error`};var sr=Q(u({__name:`PlayerOverlay`,props:{disableTapCapture:{type:Boolean,required:!1,default:!1}},setup(n){let s=Z(J),c=Z(Y),{hudVisible:u,popupVisible:d}=st(s,c);function f(){if(s.isAdPlaying&&s.isAdPaused){s.togglePlay();return}c.onVideoTap()}return(c,p)=>(y(),a(e,null,[!n.disableTapCapture&&T(s).hasStarted&&!(T(s).isAdPlaying&&!T(s).isAdPaused)?(y(),a(`div`,{key:0,class:`overlay__tap-capture`,onClick:f,onTouchend:O(f,[`prevent`,`stop`])},null,32)):i(`v-if`,!0),T(s).isAdPlaying?(y(),r(ir,{key:1})):i(`v-if`,!0),l(t,{name:`fade`},{default:D(()=>[!T(s).isReady&&!T(s).isError?(y(),a(`div`,ar,[l(hn,{size:40,"border-width":3})])):i(`v-if`,!0)]),_:1}),l(t,{name:`fade`},{default:D(()=>[T(s).isError?(y(),a(`div`,or,[o(`p`,null,C(T(s).errorMessage||`This video could not be played.`),1),o(`button`,{class:`overlay__retry`,onClick:p[0]||=O((...e)=>T(s).retry&&T(s).retry(...e),[`stop`])},`Retry`)])):i(`v-if`,!0)]),_:1}),o(`div`,{class:m([`overlay__hud`,{"overlay__hud--visible":T(u)}])},[l(Cn)],2),l(t,{name:`popup`},{default:D(()=>[T(d)?(y(),a(`div`,{key:0,class:m([`overlay__popup`,{"overlay__popup--fs":T(s).isFullscreen}])},[l(Zn)],2)):i(`v-if`,!0)]),_:1})],64))}}),[[`__scopeId`,`data-v-f3307b98`]]);const cr={class:`player`},lr={"data-mvp-player":``},ur=[`poster`],dr={key:1,class:`player__native-play`};var fr=Q(u({__name:`VideoPlayer`,props:{videoUrl:{type:String,required:!0},title:{type:String,required:!1,default:``},poster:{type:String,required:!1,default:``},aspectRatio:{type:String,required:!1,default:G},adTagUrl:{type:String,required:!1,default:``},autoplay:{type:Boolean,required:!1,default:!1},muted:{type:Boolean,required:!1,default:void 0},playbackRate:{type:Number,required:!1},nativeUi:{type:Boolean,required:!1,default:!1},autoStage:{type:Boolean,required:!1,default:!1},lazy:{type:Boolean,required:!1,default:!1},payload:{type:Object,required:!1,default:()=>({})},action:{type:[String,Object,null],required:!1,default:null},disableTapCapture:{type:Boolean,required:!1,default:!1},hasPlaylist:{type:Boolean,required:!1,default:!1},hasNext:{type:Boolean,required:!1,default:!1},hasPrevious:{type:Boolean,required:!1,default:!1},autoAdvance:{type:Boolean,required:!1,default:!1}},emits:[`state-change`,`play-next`,`play-previous`,`toggle-auto-advance`],setup(e,{expose:t,emit:s}){let c=e,u=s,d=S(null),f=x(rt(d,c,u)),p=x(it(w(f,`isPlaying`)));b(J,f),b(Y,p),b(at,w(c,`action`)),b(X,x({hasPlaylist:n(()=>c.hasPlaylist),hasNext:n(()=>c.hasNext),hasPrevious:n(()=>c.hasPrevious),autoAdvance:n(()=>c.autoAdvance),playNext:()=>u(`play-next`),playPrevious:()=>u(`play-previous`),toggleAutoAdvance:()=>u(`toggle-auto-advance`)}));let h=n(()=>M(c.aspectRatio)),_=n(()=>h.value.isPortrait),v=n(()=>h.value.cssRatio),C=n(()=>!c.poster&&!f.isReady);return t(f),(e,t)=>(y(),a(`div`,cr,[o(`div`,{class:m([`player__shell`,{"player__shell--portrait":_.value}]),style:g({aspectRatio:v.value}),onMousemove:t[0]||=e=>p.onMouseMove(),onContextmenuCapture:t[1]||=O(()=>{},[`prevent`]),onMouseleave:t[2]||=e=>p.onMouseLeave()},[o(`div`,lr,[o(`video`,{ref_key:`videoEl`,ref:d,class:m([`mvp-video`,{"mvp-video--hidden":C.value}]),poster:c.poster,playsinline:``},null,10,ur),f.nativeUi?i(`v-if`,!0):(y(),r(sr,{key:0,"disable-tap-capture":c.disableTapCapture},null,8,[`disable-tap-capture`])),f.nativeUi&&!f.hasStarted?(y(),a(`div`,dr,[l($,{"is-playing":!1,size:`lg`,onTogglePlay:f.togglePlay},null,8,[`onTogglePlay`])])):i(`v-if`,!0)])],38)]))}}),[[`__scopeId`,`data-v-4ab3cf75`]]);const pr=S(0),mr=n(()=>pr.value>0);function hr(){pr.value++}function gr(){pr.value--}function _r(e,t){window.dispatchEvent(new CustomEvent(e,{detail:t}))}function vr(e,t){let n=e=>t(e.detail);v(()=>window.addEventListener(e,n)),_(()=>window.removeEventListener(e,n))}function yr(e,t){let r=n(()=>!e.value||!t.value?-1:e.value.findIndex(e=>e.videoUrl===t.value?.videoUrl)),i=n(()=>r.value===-1||!e.value?null:e.value[r.value+1]??null),a=n(()=>r.value<=0||!e.value?null:e.value[r.value-1]??null);return{hasNext:n(()=>i.value!==null),hasPrevious:n(()=>a.value!==null),nextEntry:i,previousEntry:a}}function br(){return localStorage.getItem(B)===`true`}function xr(e){localStorage.setItem(B,String(e))}const Sr=[`src`],Cr={class:`stage__idle-body`},wr={class:`stage__idle-btn`},Tr={class:`stage__idle-title`},Er={key:1,class:`stage__idle-empty`};var Dr=Q(u({__name:`VideoStage`,props:{pinPosition:{type:String,required:!1,default:`bottom-right`},playlist:{type:Array,required:!1}},emits:[`state-change`],setup(t,{expose:s,emit:c}){let u=t,d=c,p=S(br());E(p,xr);let h=n(()=>!!u.playlist?.length),x=S(null),D=S(null),k=S(!1),A=S(!1),j=S(null),N=S(null),P=S(!1);b(ot,P);let{hasNext:F,hasPrevious:R,nextEntry:z,previousEntry:B}=yr(w(u,`playlist`),D),V=n(()=>P.value&&!!D.value&&k.value),ee=n(()=>M(D.value?.aspectRatio||`16:9`).cssRatio),H=S(null),U=S(null);E(P,e=>{H.value=e&&N.value?{height:N.value.offsetHeight,width:N.value.offsetWidth}:null});let W=n(()=>{if(!H.value)return{};let{height:e,width:t}=H.value,n=U.value&&t?U.value/t:1;return{height:`${Math.round(e*n)}px`}}),G=null,K=null;function te(){G?.disconnect(),K?.disconnect(),j.value&&(G=new IntersectionObserver(([e])=>{P.value=!e.isIntersecting},{threshold:1}),G.observe(j.value),K=new ResizeObserver(([e])=>{U.value=e.contentRect.width}),K.observe(j.value))}E(j,te);function ne(){D.value&&(D.value={...D.value,autoplay:!0},k.value=!0)}function re(){j.value?.scrollIntoView({behavior:`smooth`,block:`center`})}function ie(){D.value=null,k.value=!1,A.value=!1,P.value=!1,H.value=null,ae()}function ae(){_r(L,{currentVideoUrl:D.value?.videoUrl??null,isPlaying:A.value})}function oe(e){if(D.value?.videoUrl===e.videoUrl&&k.value){x.value?.togglePlay();return}D.value=e,k.value=!1,A.value=!1,ae(),k.value=!0}function se(e){if(!(!D.value||e.videoUrl!==D.value.videoUrl)){if(!k.value){D.value={...D.value,autoplay:!0},k.value=!0;return}x.value?.togglePlay()}}function ce(){z.value&&oe({...z.value,autoplay:!0})}function le(){B.value&&oe({...B.value,autoplay:!0})}function ue(e){e.type===`play`&&(A.value=!0),(e.type===`pause`||e.type===`ended`)&&(A.value=!1),e.type===`ended`&&p.value&&ce(),ae(),d(`state-change`,e)}return vr(I,oe),vr(`video-toggle`,se),v(hr),_(()=>{gr(),G?.disconnect(),K?.disconnect()}),s({playNext:ce,playPrevious:le,hasNext:F,hasPrevious:R}),(n,s)=>(y(),a(`div`,{ref_key:`wrapperEl`,ref:j,class:`stage-wrapper`,style:g(W.value)},[o(`div`,{ref_key:`stageEl`,ref:N,class:m([`stage`,{"stage--minified":V.value,[`stage--pin-${t.pinPosition}`]:V.value}])},[V.value?(y(),a(`button`,{key:0,class:`stage__scroll-to`,"aria-label":`Scroll to player`,onClick:O(re,[`stop`])},[l(T(Tt))])):i(`v-if`,!0),V.value?(y(),a(`button`,{key:1,class:`stage__dismiss`,"aria-label":`Close`,onClick:O(ie,[`stop`])},[l(T(_t))])):i(`v-if`,!0),D.value&&k.value?(y(),r(fr,f({ref_key:`playerRef`,ref:x,key:D.value.videoUrl},D.value,{"has-playlist":h.value,"has-next":T(F),"has-previous":T(R),"auto-advance":p.value,onStateChange:ue,onPlayNext:ce,onPlayPrevious:le,onToggleAutoAdvance:s[0]||=e=>p.value=!p.value}),null,16,[`has-playlist`,`has-next`,`has-previous`,`auto-advance`])):(y(),a(`div`,{key:3,class:`stage__idle`,style:g({aspectRatio:ee.value}),onClick:ne},[D.value?.poster?(y(),a(`img`,{key:0,src:D.value.poster,class:`stage__idle-poster`},null,8,Sr)):i(`v-if`,!0),s[1]||=o(`div`,{class:`stage__idle-scrim`},null,-1),o(`div`,Cr,[D.value?(y(),a(e,{key:0},[o(`div`,wr,[l(T(Yt))]),o(`p`,Tr,C(D.value.title),1)],64)):(y(),a(`p`,Er,`Select a video to play`))])],4))],2)],4))}}),[[`__scopeId`,`data-v-fb8c86cf`]]);const Or={class:`placeholder`},kr=[`src`,`alt`],Ar={class:`placeholder__btn-wrap`},jr={key:1,class:`placeholder__footer`},Mr={class:`placeholder__title`};var Nr=Q(u({__name:`VideoPlaceholder`,props:{videoUrl:{type:String,required:!0},title:{type:String,required:!1,default:``},poster:{type:String,required:!1,default:``},aspectRatio:{type:String,required:!1,default:G},adTagUrl:{type:String,required:!1,default:``},autoplay:{type:Boolean,required:!1,default:!1},muted:{type:Boolean,required:!1,default:void 0},playbackRate:{type:Number,required:!1},nativeUi:{type:Boolean,required:!1,default:!1},autoStage:{type:Boolean,required:!1,default:!1},lazy:{type:Boolean,required:!1},payload:{type:Object,required:!1,default:()=>({})},action:{type:[String,Object,null],required:!1,default:null},disableTapCapture:{type:Boolean,required:!1}},setup(e){let t=e,r=n(()=>M(t.aspectRatio)),s=n(()=>r.value.isPortrait),c=n(()=>r.value.cssRatio),u=S(!1),d=S(!1);vr(L,e=>{u.value=e.currentVideoUrl===t.videoUrl,d.value=u.value&&e.isPlaying});function f(e){_r(I,{...t,...e!==void 0&&{autoplay:e}})}function p(){f(!0)}return v(()=>{t.autoStage&&f()}),(t,n)=>(y(),a(`div`,Or,[o(`div`,{class:m([`placeholder__shell`,{"placeholder__shell--portrait":s.value,"placeholder__shell--active":u.value}]),style:g({aspectRatio:c.value}),onClick:p},[e.poster?(y(),a(`img`,{key:0,class:`placeholder__poster`,src:e.poster,alt:e.title},null,8,kr)):i(`v-if`,!0),n[0]||=o(`div`,{class:`placeholder__scrim`},null,-1),o(`div`,Ar,[l($,{"is-playing":u.value&&d.value,size:`lg`,onTogglePlay:p},null,8,[`is-playing`])]),e.title?(y(),a(`div`,jr,[o(`p`,Mr,C(e.title),1)])):i(`v-if`,!0)],6)]))}}),[[`__scopeId`,`data-v-dbcb4f82`]]),Pr=u({__name:`VideoItem`,props:{videoUrl:{type:String,required:!0},title:{type:String,required:!1},poster:{type:String,required:!1},aspectRatio:{type:String,required:!1},adTagUrl:{type:String,required:!1},autoplay:{type:Boolean,required:!1},muted:{type:Boolean,required:!1,default:void 0},playbackRate:{type:Number,required:!1},nativeUi:{type:Boolean,required:!1},autoStage:{type:Boolean,required:!1},lazy:{type:Boolean,required:!1,default:!0},payload:{type:Object,required:!1},action:{type:[String,Object,null],required:!1,default:null},disableTapCapture:{type:Boolean,required:!1}},emits:[`state-change`],setup(t,{emit:n}){let i=t,o=n,s=S(!1);return(t,n)=>T(mr)?(y(),r(Nr,h(f({key:0},i)),null,16)):(y(),a(e,{key:1},[i.lazy&&!s.value&&!i.autoplay?(y(),r(Nr,f({key:0},i,{onClickCapture:n[0]||=e=>s.value=!0}),null,16)):(y(),r(fr,f({key:1},i,{autoplay:s.value||i.autoplay,onStateChange:n[1]||=e=>o(`state-change`,e)}),null,16,[`autoplay`]))],64))}});const Fr={install(e){e.component(`VideoPlayer`,fr),e.component(`VideoStage`,Dr),e.component(`VideoPlaceholder`,Nr),e.component(`VideoItem`,Pr)}};export{at as ActionKey,ot as CompactKey,Y as HudKey,J as PlayerKey,X as PlaylistKey,Pr as VideoItem,Nr as VideoPlaceholder,fr as VideoPlayer,Fr as VideoPlayerPlugin,Fr as default,Dr as VideoStage,je as getPlatform,Z as injectStrict};
|
|
1
|
+
import{Fragment as e,Transition as t,computed as n,createBlock as r,createCommentVNode as i,createElementBlock as a,createElementVNode as o,createStaticVNode as s,createTextVNode as c,createVNode as l,defineComponent as u,inject as d,mergeProps as f,nextTick as p,normalizeClass as m,normalizeProps as h,normalizeStyle as g,onBeforeUnmount as _,onMounted as v,openBlock as y,provide as b,reactive as x,ref as S,toDisplayString as C,toRef as w,unref as T,watch as E,withCtx as D,withModifiers as O}from"vue";function k(){return/iPad|iPhone|iPod/.test(navigator.userAgent)||/Mac/.test(navigator.userAgent)&&navigator.maxTouchPoints>1}function A(e){(e.requestFullscreen||e.webkitRequestFullscreen)?.call(e)}function j(){(document.exitFullscreen||document.webkitExitFullscreen)?.call(document)}function M(e){let[t,n]=e.split(`:`).map(Number);return{isPortrait:n>t,cssRatio:`${t}/${n}`}}function N(e,t){if(!t||!Object.keys(t).length)return e;let n=e;for(let[e,r]of Object.entries(t))r!=null&&r!==``&&(n=n.split(`{${e}}`).join(encodeURIComponent(r)));return n}function P(e){return!e||isNaN(e)?`0:00`:`${Math.floor(e/60)}:${String(Math.floor(e%60)).padStart(2,`0`)}`}function F(e,t=(...e)=>String(e[0])){let n={};return async(...r)=>{let i=t(...r);if(n[i])return n[i];let a=await e(...r);return n[i]=a,a}}function I(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 L=`video-select`,R=`video-state`,z=`fullscreen-pending`,B=`fullscreen-pending-done`,V=`player:autoAdvance`,ee=`mvp-youtube`,H=`mvp-vimeo`,U=`mvp-dailymotion`,W=`mvp-ad-playing`,G=`mvp-ad-paused`,K=`16:9`,te=[.5,.75,1,1.25,1.5,2],ne=[[.25,`firstQuartile`],[.5,`midpoint`],[.75,`thirdQuartile`]];function re(e){return e.match(/cdn\.jwplayer\.com\/videos\/([^-]+)/)?.[1]??e.match(/cdn\.jwplayer\.com\/manifests\/([^.]+)/)?.[1]??e.match(/^jwplayer:\/\/([^/]+)$/)?.[1]??null}function ie(e){let t=e?.advertising?.schedule;return Array.isArray(t)&&t.length?t[0].tag??null:e?.advertising?.tag??null}const ae=F(async e=>{let t=await fetch(`https://cdn.jwplayer.com/v2/media/${e}`);if(!t.ok)throw Error(`JW Platform API error: ${t.status}`);let n=(await t.json()).playlist?.[0];if(!n)throw Error(`JW Platform: empty playlist`);let r=I((n.sources??[]).map(e=>({src:e.file,type:e.type})));if(!r.length)throw Error(`JW Platform: no playable sources found`);return{src:r[0].src,type:r[0].type,poster:n.image??null,adTagUrl:ie(n)}});async function oe(e){let t=re(e);if(!t)throw Error(`JW Platform: unrecognised source URL: ${e}`);let n=await ae(t);if(e.startsWith(`jwplayer://`))return n;let r=/\.mp4(\?|#|$)/.test(e)?`video/mp4`:`application/x-mpegURL`;return{...n,src:e,type:r}}function se(e){let t;try{t=new URL(e)}catch{return null}if(t.hostname!==`players.brightcove.net`)return null;let[,n,r]=t.pathname.split(`/`),i=t.searchParams.get(`videoId`),a=r?.indexOf(`_`)??-1;return!n||a===-1||!i?null:{accountId:n,playerId:r.slice(0,a),embed:r.slice(a+1),videoId:i}}function ce(e){for(let t of e?.plugins??[]){let e=t.options?.serverUrl??t.options?.imaOptions?.serverUrl;if(e)return e}return null}const le=F(async(e,t,n,r)=>{let i=await fetch(`https://players.brightcove.net/${e}/${t}_${n}/config.json`);if(!i.ok)throw Error(`Brightcove: could not load player config (${i.status})`);let a=await i.json(),o=r??a?.video_cloud?.policy_key;if(!o)throw Error(`Brightcove: policy_key not found in player config`);return{policyKey:o,adTagUrl:ce(a)}},(e,t,n)=>`${e}/${t}_${n}`);async function ue(e,t,n){let r=await fetch(`https://edge.api.brightcove.com/playback/v1/accounts/${e}/videos/${t}`,{headers:{Accept:`application/json;pk=${n}`}});if(!r.ok)throw Error(`Brightcove Playback API error: ${r.status}`);let i=await r.json(),a=I(i.sources||[]);if(!a.length)throw Error(`Brightcove: no playable sources found`);return{sources:a.map(e=>({src:e.src,type:e.type})),poster:i.poster??i.thumbnail??null}}async function de(e,t){let n=se(e);if(!n)throw Error(`Brightcove: invalid src — expected a Brightcove embed URL, e.g. "https://players.brightcove.net/{accountId}/{playerId}_{embed}/index.html?videoId={videoId}"`);let{accountId:r,playerId:i,embed:a,videoId:o}=n,{policyKey:s,adTagUrl:c}=await le(r,i,a,t),{sources:l,poster:u}=await ue(r,o,s);return{...l[0],poster:u,adTagUrl:c}}function fe(){let e=new Map;function t(t,n){for(let r of Array.isArray(t)?t:[t])e.has(r)||e.set(r,new Set),e.get(r)?.add(n)}function n(t,n){e.get(t)?.delete(n)}function r(t,...n){e.get(t)?.forEach(e=>e(...n))}function i(){e.clear()}return{on:t,off:n,trigger:r,dispose:i}}const pe={};function me(e,t=e){return pe[t]||(pe[t]=new Promise((t,n)=>{let r=document.createElement(`script`);r.src=e,r.onload=()=>t(),r.onerror=()=>n(Error(`Failed to load script: ${e}`)),document.head.appendChild(r)})),pe[t]}let he=0;function ge(e,t){e.parentElement?.classList.add(t);let n=`${t}-${++he}`,r=document.createElement(`div`);r.id=n,r.className=`mvp-tech`,r.style.cssText=`width:100%;height:100%;top:0;left:0;position:absolute`;let i=document.createElement(`div`);return i.style.cssText=`width:100%;height:100%;position:absolute;inset:0;opacity:0;pointer-events:none;transition:opacity 0.2s`,i.appendChild(r),e.parentElement?.insertBefore(i,e),{techId:n,wrapper:i,innerDiv:r}}function _e(e,t){e.style.display=`none`,t.style.opacity=`1`,t.style.pointerEvents=``}function ve(e,t,n){t.remove(),e.parentElement?.classList.remove(n),e.style.display=``}function ye(e){return e.closest(`.player__shell`)}function be(e){e.trigger(z);let t=document.createElement(`div`);t.style.cssText=`position:fixed;inset:0;z-index:99999;opacity:0;pointer-events:none`,document.body.appendChild(t);let n=!1;function r(){n||(e.trigger(B),t.style.opacity=`1`,t.style.pointerEvents=`auto`)}function i(r){n||(n=!0,e.trigger(B),t.remove(),r?.())}return{overlay:t,reveal:r,finish:i}}function xe(e,t){return t===e.PlayerState.PLAYING||t===e.PlayerState.BUFFERING}function Se(e){let t={videoId:null,listId:null},n=e.match(/^.*(youtu\.be\/|v\/|u\/\w\/|embed\/|watch\?v=|shorts\/|&v=)([^#&?]*).*/);n?.[2]?.length===11&&(t.videoId=n[2]);let r=e.match(/[?&]list=([^#&?]+)/);return r?.[1]&&(t.listId=r[1]),t}let Ce=!1,we=!1;const q=[];function Te(){we||(we=!0,me(`https://www.youtube.com/iframe_api`).then(()=>{window.YT?.ready(()=>{Ce=!0,q.forEach(e=>e()),q.length=0})}))}function Ee(e,t){Te();let n=fe(),{techId:r,wrapper:i}=ge(e,ee),a=Se(t.src),o=null,s=a.videoId,c=!1,l=!1,u=!1,d=null,f=!1,p=null,m=!1,h=new Set,g=null,_={active:!1,wasPaused:!1,timeBefore:0,catchUpInterval:null};function v(e,t=0){let n=setTimeout(()=>{h.delete(n),e()},t);h.add(n)}function y(){try{let e=o?.getPlayerResponse()?.adPlacements;return Array.isArray(e)&&e.length>0}catch{return!1}}function b(e){o?.loadVideoById({videoId:e})}function x(e){o?.cueVideoById({videoId:e})}function S(){a.videoId&&(_.wasPaused=!1,c?s===a.videoId?o?.playVideo():(b(a.videoId),s=a.videoId):(n.trigger(`waiting`),l=!0))}function C(){_.catchUpInterval&&clearInterval(_.catchUpInterval),_.active=!1,_.wasPaused&&o?.pauseVideo(),n.trigger(`seeked`)}function w(){m=(o?.getAvailablePlaybackRates()??[]).length>1,c=!0,t.muted&&o?.mute(),l?S():u&&a.videoId&&(x(a.videoId),s=a.videoId)}function T(e){if(e===d||p!==null)return;d=e;let t=y();t!==f&&(f=t,n.trigger(t?`adstart`:`adend`));let r=window.YT;if(r){switch(e){case-1:n.trigger(`loadstart`),n.trigger(`loadedmetadata`),n.trigger(`durationchange`),n.trigger(`ratechange`);break;case r.PlayerState.ENDED:n.trigger(`ended`);break;case r.PlayerState.PLAYING:n.trigger(`timeupdate`),n.trigger(`durationchange`),n.trigger(`playing`),n.trigger(`play`),_.active&&C();break;case r.PlayerState.PAUSED:n.trigger(`canplay`),_.active||n.trigger(`pause`);break;case r.PlayerState.BUFFERING:n.trigger(`waiting`);break;case r.PlayerState.CUED:n.trigger(`canplay`);break}g&&=(clearInterval(g),null),e===r.PlayerState.PLAYING&&(g=setInterval(()=>n.trigger(`timeupdate`),250))}}function E(){let e={controls:+!!t.nativeUi,modestbranding:1,rel:0,showinfo:0,mute:+!!t.muted,origin:window.location.origin,allowfullscreen:1,fullscreen:1,fs:1,playsinline:1,...t.customVars};s=a.videoId,o=new window.YT.Player(r,{videoId:s??void 0,playerVars:e,events:{onReady:w,onStateChange:e=>T(e.data),onPlaybackRateChange:()=>n.trigger(`ratechange`),onVolumeChange:()=>n.trigger(`volumechange`),onError:e=>{p=e.data,n.trigger(`error`),v(()=>{p=null})}}})}Ce?E():q.push(E),t.autoplay?c?S():l=!0:a.videoId&&(u=!0);function D(){if(!o)return;let e=o.getCurrentTime(),{video_id:t}=o.getVideoData();o.pauseVideo();let{overlay:r,reveal:i,finish:a}=be(n),s=document.createElement(`div`);s.id=`yt-fs-${Math.random().toString(36).slice(2)}`,r.appendChild(s);let c=null,l=()=>{a(()=>{let t=c?.getCurrentTime()??e;try{c?.destroy()}catch{}o?.seekTo(t,!0),n.trigger(`timeupdate`)})};c=new window.YT.Player(s.id,{videoId:t,playerVars:{playsinline:0,autoplay:1,controls:1,modestbranding:1,rel:0,start:Math.floor(e)},events:{onReady:t=>{i(),t.target.seekTo(e,!0),t.target.playVideo()},onStateChange:e=>{let t=window.YT;t&&(e.data===t.PlayerState.PAUSED||e.data===t.PlayerState.ENDED)&&l()}}})}function O(){if(k()&&o){D();return}let t=ye(e);t&&A(t)}function M(){j()}return{el:i,play:S,pause:()=>o?.pauseVideo(),paused:()=>{if(!o)return!0;let e=window.YT;return!e||!xe(e,d)},currentTime:()=>o?.getCurrentTime()??0,setCurrentTime:e=>{if(!o)return;let t=window.YT;t&&d===t.PlayerState.PAUSED&&(_.timeBefore=o.getCurrentTime()),_.active||(_.wasPaused=!t||!xe(t,d)),o.seekTo(e,!0),n.trigger(`timeupdate`),n.trigger(`seeking`),_.active=!0,t&&d===t.PlayerState.PAUSED&&_.timeBefore!==e&&(_.catchUpInterval&&clearInterval(_.catchUpInterval),_.catchUpInterval=setInterval(()=>{d!==t.PlayerState.PAUSED||!_.active?_.catchUpInterval&&clearInterval(_.catchUpInterval):o&&o.getCurrentTime()!==_.timeBefore&&(n.trigger(`timeupdate`),C())},250))},duration:()=>o?.getDuration()??0,volume:()=>o?o.getVolume()/100:1,setVolume:e=>o?.setVolume(e*100),muted:()=>o?.isMuted()??!1,setMuted:e=>{o&&(e?o.mute():o.unMute(),v(()=>n.trigger(`volumechange`),50))},playbackRate:()=>o?.getPlaybackRate()??1,setPlaybackRate:e=>o?.setPlaybackRate(e),bufferedEnd:()=>o?.getVideoLoadedFraction?o.getVideoLoadedFraction()*o.getDuration():0,error:()=>p===null?null:{code:p,message:`This video could not be played.`},setSrc:e=>{let t=Se(e);a.videoId=t.videoId,a.listId=t.listId,a.videoId&&(c?(b(a.videoId),s=a.videoId):u=!0)},featuresPlaybackRate:()=>m,enterFullscreen:O,exitFullscreen:M,on:n.on,off:n.off,dispose:()=>{if(h.forEach(clearTimeout),h.clear(),g&&clearInterval(g),_.catchUpInterval&&clearInterval(_.catchUpInterval),o)try{o.stopVideo(),o.destroy()}catch{}else{let e=q.indexOf(E);e!==-1&&q.splice(e,1)}o=null,ve(e,i,ee),n.dispose()}}}function De(e){return e.match(/(?:vimeo\.com\/(?:video\/|channels\/[^/]+\/|groups\/[^/]+\/videos\/)?|player\.vimeo\.com\/video\/)(\d+)/)?.[1]??null}function Oe(e,t){let n=fe(),{techId:r,wrapper:i}=ge(e,H),a=De(t.src),o=null,s=0,c=0,l=1,u=!1,d=!0,f=1,p=!1,m=!1,h=!1,g=null,_=new Set;function v(e,t=0){let n=setTimeout(()=>{_.delete(n),e()},t);_.add(n)}function y(){if(!o){m=!0;return}o.play().catch(()=>{})}function b(){t.muted&&o?.setMuted(!0).catch(()=>{}),m&&y()}async function x(e){if(await me(`https://player.vimeo.com/api/player.js`,`vimeo`),h||!window.Vimeo)return;let i={id:Number(e),byline:!1,portrait:!1,title:!1,transparent:!0,controls:!!t.nativeUi,autopause:!1,...t.autoplay!==void 0&&{autoplay:t.autoplay},...t.muted!==void 0&&{muted:t.muted}};o=new window.Vimeo.Player(r,i),t.autoplay&&(m=!0),o.ready().then(b).catch(e=>{g={code:4,message:e?.message||`This video is unavailable or cannot be embedded here.`},n.trigger(`error`)}),o.on(`play`,()=>{d=!1,n.trigger(`play`),n.trigger(`playing`)}),o.on(`pause`,()=>{d=!0,n.trigger(`pause`)}),o.on(`ended`,()=>{d=!0,n.trigger(`ended`)}),o.on(`timeupdate`,e=>{let{seconds:t,duration:r}=e;s=t,c=r,n.trigger(`timeupdate`),r&&!p&&(p=!0,n.trigger(`durationchange`))}),o.on(`loaded`,()=>{p=!1,n.trigger(`loadedmetadata`),n.trigger(`durationchange`)}),o.on(`seeking`,e=>{s=e.seconds,n.trigger(`seeking`)}),o.on(`seeked`,e=>{s=e.seconds,n.trigger(`seeked`),n.trigger(`timeupdate`)}),o.on(`bufferstart`,()=>n.trigger(`waiting`)),o.on(`bufferend`,()=>n.trigger(`canplay`)),o.on(`volumechange`,e=>{l=e.volume,n.trigger(`volumechange`)}),o.on(`error`,()=>n.trigger(`error`))}a&&x(a);function S(){if(!k()){let t=ye(e);t&&A(t);return}o?.requestFullscreen().catch(()=>{})}function C(){j()}return{el:i,play:y,pause:()=>o?.pause().catch(()=>{}),paused:()=>d,currentTime:()=>s,setCurrentTime:e=>{o?.setCurrentTime(e).catch(()=>{}),n.trigger(`timeupdate`),n.trigger(`seeking`)},duration:()=>c,volume:()=>l,setVolume:e=>{l=e,o?.setVolume(e).catch(()=>{})},muted:()=>u,setMuted:e=>{u=e,o?.setMuted(e).then(()=>v(()=>n.trigger(`volumechange`),50)).catch(()=>{})},playbackRate:()=>f,setPlaybackRate:e=>{f=e,o?.setPlaybackRate(e).catch(()=>{}),n.trigger(`ratechange`)},bufferedEnd:()=>s,error:()=>g,setSrc:()=>{},featuresPlaybackRate:()=>!1,enterFullscreen:S,exitFullscreen:C,on:n.on,off:n.off,dispose:()=>{h=!0,_.forEach(clearTimeout),_.clear(),o?.destroy().catch(()=>{}),o=null,ve(e,i,H),n.dispose()}}}function ke(e){let t=e.match(/[?&]video=([a-zA-Z0-9]+)/);return t?t[1]:e.match(/(?:dailymotion\.com\/(?:embed\/)?video\/|dai\.ly\/)([a-zA-Z0-9]+)/)?.[1]??null}function Ae(e,t){let n=fe(),{techId:r,wrapper:i}=ge(e,U),a=ye(e),o=ke(t.src),s=typeof t.customVars?.playerId==`string`?t.customVars.playerId:void 0,c=null,l=0,u=0,d=1,f=!1,p=!0,m=!1,h=!1,g=null;async function _(){if(!o){g={code:4,message:`Could not parse video ID from source URL`},n.trigger(`error`);return}try{let e=await me(s?`https://geo.dailymotion.com/libs/player/${s}.js`:`https://geo.dailymotion.com/libs/player.js`,s||`dailymotion-sdk`).then(()=>window.dailymotion);if(!e)return;let i=await e.createPlayer(r,{...s&&{player:s},video:o,params:{autoplay:!!t.autoplay,mute:!!t.muted}});c=i;let a=e.events;m&&i.play(),i.on(a.PLAYER_CRITICALPATHREADY,e=>{let t=e.videoThumbnails;if(!t)return;let r=Object.keys(t).map(Number).sort((e,t)=>t-e)[0],i=r===void 0?void 0:t[r];i&&n.trigger(`posterchange`,i)}),i.on(a.VIDEO_PLAY,()=>{p=!1,n.trigger(`play`),n.trigger(`playing`),!t.autoplay&&!h&&(h=!0,i.pause())}),i.on(a.VIDEO_PLAYING,()=>{p=!1,n.trigger(`play`),n.trigger(`playing`)}),i.on(a.VIDEO_PAUSE,()=>{p=!0,n.trigger(`pause`)}),a.VIDEO_BUFFERING&&i.on(a.VIDEO_BUFFERING,()=>n.trigger(`waiting`)),i.on(a.VIDEO_END,()=>{p=!0,n.trigger(`ended`)}),i.on(a.VIDEO_TIMECHANGE,e=>{l=e.videoTime??l,u=e.videoDuration??u,n.trigger(`timeupdate`)}),i.on(a.VIDEO_DURATIONCHANGE,e=>{u=e.videoDuration??u,n.trigger(`durationchange`)}),i.on(a.VIDEO_SEEKSTART,()=>n.trigger(`seeking`)),i.on(a.VIDEO_SEEKEND,e=>{l=e.videoTime??l,n.trigger(`seeked`)}),i.on(a.PLAYER_VOLUMECHANGE,e=>{d=e.playerVolume??d,f=e.playerIsMuted??f,n.trigger(`volumechange`)}),i.on(a.PLAYER_ERROR,()=>n.trigger(`error`)),a.AD_START&&i.on(a.AD_START,()=>{p=!1,n.trigger(`play`),n.trigger(`adstart`)}),a.AD_END&&i.on(a.AD_END,()=>n.trigger(`adend`))}catch(e){g={code:4,message:e instanceof Error?e.message:`This video could not be played.`},n.trigger(`error`)}}_();function v(){c?c.play():m=!0}function y(){if(k()){c?.setFullscreen(!0);return}a&&A(a)}function b(){if(k()){c?.setFullscreen(!1);return}j()}return{el:i,play:v,pause:()=>c?.pause(),paused:()=>p,currentTime:()=>l,setCurrentTime:e=>{l=e,c?.seek(e),n.trigger(`seeking`)},duration:()=>u,volume:()=>d,setVolume:e=>{d=e,c?.setVolume(e)},muted:()=>f,setMuted:e=>{f=e,c?.setMute(e)},playbackRate:()=>1,setPlaybackRate:()=>{},bufferedEnd:()=>l,error:()=>g,setSrc:()=>{},featuresPlaybackRate:()=>!1,enterFullscreen:y,exitFullscreen:b,on:n.on,off:n.off,dispose:()=>{c?.destroy?.(),c=null,ve(e,i,U),n.dispose()}}}const je=[{test:e=>/youtu\.be|youtube\.com/.test(e),key:`youtube`,embed:!0},{test:e=>/vimeo\.com|player\.vimeo\.com/.test(e),key:`vimeo`,embed:!0},{test:e=>/dailymotion\.com|dai\.ly/.test(e),key:`dailymotion`,embed:!0},{test:e=>/cdn\.jwplayer\.com/.test(e)||e.startsWith(`jwplayer://`),key:`jwplayer`,embed:!1},{test:e=>/players\.brightcove\.net/.test(e),key:`brightcove`,embed:!1}];function Me(e){return je.find(t=>t.test(e))?.key??`html5`}function Ne(e){if(/\.m3u8(\?|#|$)/.test(e))return`application/x-mpegURL`;if(/\.mp4(\?|#|$)/.test(e))return`video/mp4`}function Pe(e){return je.find(t=>t.test(e))?.embed??!1}const Fe={youtube:Ee,vimeo:Oe,dailymotion:Ae};function Ie(e,t,n){let r=Fe[Me(e)];return r?r(t,n):null}async function Le(e){let t=Me(e);return t===`jwplayer`?oe(e):t===`brightcove`?de(e):{src:e,type:Ne(e)}}const Re=`application/x-mpegURL`,ze=[`play`,`pause`,`ended`,`error`,`timeupdate`,`durationchange`,`progress`,`volumechange`,`ratechange`,`seeking`,`seeked`,`waiting`,`playing`,`canplay`];function Be(e,t){let n=fe(),r=null,i=!1,a=null;async function o(t){let{default:o}=await import(`hls.js`);if(i||a!==t)return;if(typeof o?.isSupported!=`function`||!o.isSupported()){e.src=t;return}r=new o({liveDurationInfinity:!0}),r.loadSource(t),r.attachMedia(e);let s=o.Events,c=o.ErrorTypes;r.on(s.ERROR,(e,o)=>{if(!(!o.fatal||i||a!==t))switch(o.type){case c.NETWORK_ERROR:r?.startLoad();break;case c.MEDIA_ERROR:r?.recoverMediaError();break;default:r?.destroy(),r=null,n.trigger(`error`);break}})}function s(){return/Apple/.test(navigator.vendor)&&!/CriOS|FxiOS|OPiOS|EdgiOS|Chrome|Chromium|Android/.test(navigator.userAgent)&&(e.canPlayType(`application/vnd.apple.mpegurl`)!==``||e.canPlayType(Re)!==``)}function c(t,n){if(r?.destroy(),r=null,a=null,n===Re&&!s()){a=t,o(t);return}e.src=t}let l=e=>()=>n.trigger(e),u=ze.map(e=>[e,l(e)]);for(let[t,n]of u)e.addEventListener(t,n);let d=[[`webkitbeginfullscreen`,l(`nativefullscreenenter`)],[`webkitendfullscreen`,l(`nativefullscreenexit`)]];for(let[t,n]of d)e.addEventListener(t,n);e.poster=t.poster??``,e.muted=t.muted??t.autoplay??!1,e.playbackRate=t.playbackRate??1,e.playsInline=!0,c(t.src,t.type),t.autoplay&&e.play();function f(){let t=e;if(typeof t.webkitEnterFullscreen==`function`){t.webkitEnterFullscreen();return}let n=e.closest(`.player__shell`);n instanceof HTMLElement&&A(n)}function p(){let t=e;if(typeof t.webkitExitFullscreen==`function`){t.webkitExitFullscreen();return}j()}return{el:e,play:()=>e.play(),pause:()=>e.pause(),paused:()=>e.paused,currentTime:()=>e.currentTime,setCurrentTime:t=>{e.currentTime=t},duration:()=>e.duration,volume:()=>e.volume,setVolume:t=>{e.volume=t},muted:()=>e.muted,setMuted:t=>{e.muted=t},playbackRate:()=>e.playbackRate,setPlaybackRate:t=>{e.playbackRate=t},bufferedEnd:()=>{let{buffered:t,duration:n}=e;if(!t.length)return 0;let r=t.end(t.length-1);return n&&r>n?n:r},error:()=>{let t=e.error;return t?{code:t.code,message:t.message||`This video could not be played.`}:null},setSrc:c,featuresPlaybackRate:()=>!0,enterFullscreen:f,exitFullscreen:p,on:n.on,off:n.off,dispose:()=>{i=!0,r?.destroy();for(let[t,n]of u)e.removeEventListener(t,n);for(let[t,n]of d)e.removeEventListener(t,n);n.dispose()}}}function Ve(){return window.google?.ima?Promise.resolve():new Promise((e,t)=>{let n=document.createElement(`script`);n.src=`https://imasdk.googleapis.com/js/sdkloader/ima3.js`,n.onload=()=>e(),n.onerror=()=>t(Error(`Failed to load Google IMA SDK`)),document.head.appendChild(n)})}function He(e,t,n,r){let i=document.createElement(`div`);i.className=`ima-ad-container`,e.appendChild(i);let a=n,o=null,s=null,c=null,l=!1,u=!1,d=!1,f=!1,p=!1,m=!1,h=1,g=new ResizeObserver(([e])=>{let t=window.google?.ima;if(!c||!t)return;let{width:n,height:r}=e.contentRect;c.resize(n,r,t.ViewMode.NORMAL)});g.observe(t);function _(){s?.contentComplete()}function v(t){f=t,e.classList.toggle(W,t),t||(p=!1,e.classList.remove(G))}function y(){if(l||!u||!d||!o||!s||!a)return;l=!0;let e=window.google?.ima;if(!e)return;o.initialize();let t=new e.AdsRequest;t.adTagUrl=a,s.requestAds(t)}function b(e){a=e,y()}Ve().then(()=>{if(m)return;let n=window.google?.ima;n&&(o=new n.AdDisplayContainer(i,t),s=new n.AdsLoader(o),u=!0,s.addEventListener(n.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,i=>{if(m)return;let a=new n.AdsRenderingSettings;a.restoreCustomPlaybackStateOnAdBreakComplete=!0,c=i.getAdsManager(t,a),t.addEventListener(`ended`,_),c.addEventListener(n.AdEvent.Type.CONTENT_PAUSE_REQUESTED,()=>{t.removeEventListener(`ended`,_),t.pause(),v(!0),r.onAdStart();let e=c?.getVolume()??1;e>0&&(h=e),r.onAdMuteChange(e===0)}),c.addEventListener(n.AdEvent.Type.CONTENT_RESUME_REQUESTED,()=>{t.addEventListener(`ended`,_),v(!1),r.onAdEnd(),t.ended||t.play()}),c.addEventListener(n.AdEvent.Type.PAUSED,()=>{p=!0,e.classList.add(G),r.onAdPauseChange(!0)}),c.addEventListener(n.AdEvent.Type.RESUMED,()=>{p=!1,e.classList.remove(G),r.onAdPauseChange(!1)}),c.addEventListener(n.AdEvent.Type.AD_PROGRESS,()=>{r.onAdProgress(c?.getRemainingTime()??0)}),c.addEventListener(n.AdErrorEvent.Type.AD_ERROR,e=>{v(!1),r.onError(e.getError().getMessage()),t.play()});try{c.init(t.clientWidth,t.clientHeight,n.ViewMode.NORMAL),c.start()}catch(e){r.onError(e instanceof Error?e.message:`Ad playback failed to start.`)}}),s.addEventListener(n.AdErrorEvent.Type.AD_ERROR,e=>{r.onError(e.getError().getMessage())}),y())}).catch(e=>r.onError(e.message));function x(){d=!0,y()}function S(){if(!c)return;let e=c.getVolume();e>0?(h=e,c.setVolume(0)):c.setVolume(h||1),r.onAdMuteChange(c.getVolume()===0)}return{isAdPlaying:()=>f,isAdPaused:()=>p,requestAdsOnFirstPlay:x,setAdTagUrl:b,pauseAd:()=>c?.pause(),resumeAd:()=>c?.resume(),toggleAdMute:S,dispose:()=>{m=!0,g.disconnect(),t.removeEventListener(`ended`,_),c?.destroy(),s?.destroy(),i.remove(),e.classList.remove(W,G)}}}function Ue(e,t){let n=window.pbjs;if(!n)return Promise.resolve(t);let r=e.timeoutMs??1e3;return new Promise(i=>{let a=!1;function o(e){a||(a=!0,i(e||t))}let s=setTimeout(()=>o(t),r);n.que.push(()=>{try{n.addAdUnits(e.adUnit),n.requestBids({adUnitCodes:[e.adUnit.code],timeout:r,bidsBackHandler:()=>{clearTimeout(s);try{o(n.adServers?.gam?.buildVideoUrl({adUnit:e.adUnit,params:e.params}))}catch{o(t)}}})}catch{clearTimeout(s),o(t)}})})}const We=new Set;function Ge(e){return We.add(e),()=>We.delete(e)}function Ke(e){We.forEach(t=>{if(t!==e)try{t()}catch{}})}function qe(e){let t=S(!1),n=S(!1);function r(){let e=document;t.value=!!(document.fullscreenElement||e.webkitFullscreenElement),n.value=!1}function i(){let n=e();if(n){if(t.value){n.exitFullscreen();return}n.enterFullscreen()}}function a(){n.value=!0}function o(e){e.on(z,()=>{n.value=!0}),e.on(B,()=>{n.value=!1}),e.on(`nativefullscreenenter`,()=>{t.value=!0,n.value=!1}),e.on(`nativefullscreenexit`,()=>{t.value=!1,n.value=!1})}return v(()=>{document.addEventListener(`fullscreenchange`,r),document.addEventListener(`webkitfullscreenchange`,r)}),_(()=>{document.removeEventListener(`fullscreenchange`,r),document.removeEventListener(`webkitfullscreenchange`,r)}),{isFullscreen:t,isFullscreenPending:n,toggleFullscreen:i,markFullscreenPending:a,attachPlayerEvents:o}}function Je(){let e=S(!1),t=null;function n(){clearTimeout(t??void 0),e.value=!1}function r(r){r.on(`waiting`,()=>{clearTimeout(t??void 0),t=setTimeout(()=>{e.value=!0},500)}),r.on(`playing`,n),r.on(`canplay`,n)}return _(()=>clearTimeout(t??void 0)),{isBuffering:e,attachPlayerEvents:r,reset:n}}function Ye(e,t,n){let r=new Set;function i(){if(!t.value)return;let i=e.value/t.value;for(let[e,t]of ne)!r.has(e)&&i>=e&&(r.add(e),n(t))}function a(){r.clear()}return{checkQuartiles:i,reset:a}}function Xe(){try{return JSON.parse(localStorage.getItem(`player:positions`)??`[]`)}catch{return[]}}function Ze(e){localStorage.setItem(`player:positions`,JSON.stringify(e))}function Qe(e,t){if(t<5)return;let n=Xe().filter(t=>t.url!==e);n.unshift({url:e,time:t}),Ze(n.slice(0,5))}function $e(e){return Xe().find(t=>t.url===e)?.time??null}function et(e){Ze(Xe().filter(t=>t.url!==e))}function tt(e,t,n){let r=!1;function i(t){if(r)return;let n=$e(e);n&&t.setCurrentTime(n),r=!0}function a(t){!t||n.value||Qe(e,t.currentTime()??0)}function o(){et(e)}function s(){document.visibilityState===`hidden`&&a(t())}return v(()=>document.addEventListener(`visibilitychange`,s)),_(()=>{a(t()),document.removeEventListener(`visibilitychange`,s)}),{restoreOnce:i,save:a,clear:o}}function nt(e,t,n,r){let i=null;v(()=>{let a=e.value?.closest(`.player__shell`);a&&(i=new IntersectionObserver(([e])=>{let i=t();!e.isIntersecting&&i&&!i.paused()&&!n.value&&!r.value&&i.pause()},{threshold:.1}),i.observe(a))}),_(()=>i?.disconnect())}function rt(e,t,n,r,i,a){function o(){let n=e();if(!(!n||!t.value)){if(!a.value){n.play();return}n.pause()}}function s(t){e()?.setCurrentTime(n.value*(t/100))}function c(){let t=e();t?.setMuted(!t.muted())}function l(t){let n=e();n&&(n.setVolume(t),n.setMuted(t===0))}function u(){r.value=!r.value}function d(t){let n=e();n&&(n.setPlaybackRate(t),i.value=t)}return{togglePlay:o,seek:s,toggleMute:c,setVolume:l,toggleLoop:u,setPlaybackRate:d}}function it(e,t){let{isPlaying:n,hasEnded:r,isReady:i,isAdPlaying:a,isLive:o,current:s,total:c,buffered:l,vol:u,isMuted:d,isLooping:f,playbackRate:p,supportsPlaybackRate:m,hasStarted:h,isError:g,errorMessage:_}=e,{fire:v,pauseThisPlayer:y,positionMemory:b,quartiles:x,buffering:S,fullscreen:C}=t;function w(e){i.value=!0,m.value=e.featuresPlaybackRate();let t=()=>{let t=e.duration();if(t===1/0){o.value=!0;return}o.value=!1,t&&t>0&&isFinite(t)&&(c.value=t)};e.on(`adstart`,()=>{Ke(y),a.value=!0,v(`adstart`)}),e.on(`adend`,()=>{a.value=!1,v(`adend`)}),e.on(`play`,()=>{Ke(y),h.value=!0,n.value=!0,r.value=!1,o.value||b.restoreOnce(e),v(`play`)}),e.on(`pause`,()=>{n.value=!1,o.value||b.save(e),v(`pause`)}),e.on(`ended`,()=>{if(n.value=!1,x.reset(),S.reset(),f.value){e.setCurrentTime(0),e.play();return}c.value&&(s.value=c.value),r.value=!0,b.clear(),v(`ended`)}),e.on(`seeked`,()=>{v(`seeked`)}),e.on(`error`,()=>{let t=e.error();_.value=t?.message||`This video could not be played.`,g.value=!0,i.value=!0,v(`error`,{error:t})}),e.on(`timeupdate`,()=>{r.value||(s.value=e.currentTime()??0,c.value||t(),m.value||=e.featuresPlaybackRate(),o.value||x.checkQuartiles())}),e.on(`durationchange`,t),e.on(`progress`,()=>{let t=e.duration();l.value=t?e.bufferedEnd()/t*100:0}),e.on(`volumechange`,()=>{let t=e.muted();u.value=e.volume()??1,d.value=t??!1,h.value&&v(`volumechange`,{isMuted:t})}),e.on(`ratechange`,()=>{let t=e.playbackRate()??1;p.value=t,h.value&&v(`ratechange`,{playbackRate:t})}),S.attachPlayerEvents(e),C.attachPlayerEvents(e)}return{attachPlayerEvents:w}}function at(e,t,r){let i=null,a=null,o=null,s=null,c=S(!1),l=S(!1),u=S(!1),d=S(!1),f=S(!1),p=S(!1),m=S(0),h=S(!1),g=S(0),y=S(0),b=S(0),x=S(1),C=S(t.muted??t.autoplay??!1),w=S(!1),T=S(t.playbackRate??1),D=S(!1),O=S(!1),k=S(!1),A=S(``),j=S(!1),M=n(()=>y.value?g.value/y.value*100:0),F=n(()=>Math.max(b.value,M.value)),I=()=>i,L=qe(I),R=Je(),z=tt(t.videoUrl,I,l);function B(e,n={}){r(`state-change`,{type:e,currentTime:g.value,duration:y.value,src:t.videoUrl,...n,payload:t.payload})}let V=Ye(g,y,B);function ee(){!i||!s||(k.value=!1,A.value=``,i.setSrc(s.src,s.type))}function H(){a?.toggleAdMute()}function U(){if(a?.isAdPlaying()){a.pauseAd();return}i?.pause()}function W(){if(a?.isAdPlaying()){a.isAdPaused()?a.resumeAd():a.pauseAd();return}G.togglePlay()}let G=rt(I,u,y,w,T,c),{attachPlayerEvents:K}=it({isPlaying:c,hasEnded:l,isReady:u,isAdPlaying:d,isLive:h,current:g,total:y,buffered:b,vol:x,isMuted:C,isLooping:w,playbackRate:T,supportsPlaybackRate:D,hasStarted:O,isError:k,errorMessage:A},{fire:B,pauseThisPlayer:U,positionMemory:z,quartiles:V,buffering:R,fullscreen:L});return E(()=>t.muted,e=>{!i||e===void 0||i.setMuted(e)}),E(()=>t.playbackRate,e=>{!i||e===void 0||i.setPlaybackRate(e)}),nt(e,I,L.isFullscreen,L.isFullscreenPending),E(O,t=>{!t||!e.value||!i||i.el===e.value||_e(e.value,i.el)}),v(async()=>{if(Pe(t.videoUrl)){if(!e.value)return;let n=Ie(t.videoUrl,e.value,{src:t.videoUrl,poster:t.poster,autoplay:t.autoplay,muted:t.muted??t.autoplay,nativeUi:t.nativeUi});if(!n){k.value=!0,u.value=!0,A.value=`This platform is not yet supported.`;return}j.value=!!t.nativeUi,i=n,s={src:t.videoUrl},o=Ge(U),K(i);return}let n=await Le(t.videoUrl).catch(()=>({src:t.videoUrl}));if(!e.value)return;s={src:n.src,type:n.type},i=Be(e.value,{src:n.src,type:n.type,poster:n.poster||t.poster||``,autoplay:t.autoplay,muted:t.muted??t.autoplay,playbackRate:T.value});let r=N(t.adTagUrl||n.adTagUrl||``,t.adTagParams);t.headerBidding&&Ue(t.headerBidding,r).catch(()=>r).then(e=>a?.setAdTagUrl(e)),(r||t.headerBidding)&&e.value.parentElement&&(a=He(e.value.parentElement,e.value,r,{onAdStart:()=>{d.value=!0,f.value=!1,B(`adstart`)},onAdEnd:()=>{d.value=!1,f.value=!1,m.value=0,B(`adend`)},onAdPauseChange:e=>{f.value=e,e||Ke(U)},onAdMuteChange:e=>{p.value=e},onAdProgress:e=>{m.value=e},onError:e=>{d.value=!1,f.value=!1,m.value=0,console.error(`Ad playback error:`,e)}}),i.on(`play`,()=>a?.requestAdsOnFirstPlay())),o=Ge(U),K(i)}),_(()=>{o?.(),a?.dispose(),a=null,i?.dispose(),i=null}),{isPlaying:c,hasEnded:l,isReady:u,isAdPlaying:d,isAdPaused:f,isAdMuted:p,adRemainingTime:m,isLive:h,isBuffering:R.isBuffering,current:g,total:y,vol:x,isMuted:C,isLooping:w,playbackRate:T,hasStarted:O,isError:k,errorMessage:A,progress:M,bufferedDisplay:F,isFullscreen:L.isFullscreen,isFullscreenPending:L.isFullscreenPending,fmt:P,fire:B,retry:ee,togglePlay:W,seek:G.seek,toggleMute:G.toggleMute,setVolume:G.setVolume,toggleFullscreen:L.toggleFullscreen,markFullscreenPending:L.markFullscreenPending,toggleLoop:G.toggleLoop,toggleAdMute:H,setPlaybackRate:G.setPlaybackRate,supportsPlaybackRate:D,nativeUi:j}}function ot(e){let t=S(!0),n=S(!1),r=null,i=0;function a(e=400){i=Date.now()+e}function o(e=3500){clearTimeout(r??void 0),r=setTimeout(()=>{t.value=!1,n.value=!1},e)}function s(){clearTimeout(r??void 0)}function c(){n.value=!0,t.value=!0,o()}function l(){n.value=!1,e.value&&o()}function u(){e.value&&o()}function d(){t.value=!0,e.value&&o()}function f(){t.value=!0,o()}function p(){Date.now()<i||e.value&&o(600)}return E(e,e=>{if(!e){clearTimeout(r??void 0),t.value=!0;return}o()}),_(()=>clearTimeout(r??void 0)),{showHUD:t,isOpen:n,scheduleHide:o,pauseHide:s,onVideoTap:d,onMouseMove:f,onMouseLeave:p,openControls:c,closeControls:l,keepOpen:u,suppressMouseLeave:a}}const J=Symbol(`player`),Y=Symbol(`hud`),st=Symbol(`action`),ct=Symbol(`compact`),X=Symbol(`playlist`);function Z(e){let t=d(e);if(t===void 0)throw Error(`[video-player] missing "${String(e.description)}" context — this component must be rendered inside <VideoPlayer>`);return t}function lt(e,t){return{hudVisible:n(()=>!e.isReady||e.isError?!1:t.showHUD),popupVisible:n(()=>!e.isReady||e.isError?!1:e.isFullscreen?t.showHUD:t.isOpen)}}function ut(e,t){return n(()=>!(!e?.value||t.isFullscreen))}function dt(e,t,r){let i=n(()=>e?.value??null),a=n(()=>!!i.value&&typeof i.value==`object`),o=n(()=>a.value?i.value:null),s=n(()=>i.value===`mute`?t.isMuted?`Unmute`:`Mute`:i.value===`loop`?t.isLooping?`Disable loop`:`Loop`:i.value===`autoplay`?r.autoAdvance?`Disable autoplay next`:`Autoplay next`:``),c=n(()=>i.value===`mute`?t.isMuted:i.value===`loop`?t.isLooping:i.value===`autoplay`&&r.autoAdvance);function l(){i.value===`mute`?t.toggleMute():i.value===`loop`?t.toggleLoop():i.value===`autoplay`&&r.toggleAutoAdvance()}return{currentAction:i,isCustom:a,customAction:o,builtinLabel:s,builtinActive:c,onBuiltinClick:l}}var Q=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n};const ft={},pt={viewBox:`0 0 24 24`,fill:`currentColor`};function mt(e,t){return y(),a(`svg`,pt,[...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 ht=Q(ft,[[`render`,mt]]);const gt={},_t={viewBox:`0 0 24 24`,fill:`currentColor`};function vt(e,t){return y(),a(`svg`,_t,[...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 yt=Q(gt,[[`render`,vt]]);const bt={},xt={viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`};function St(e,t){return y(),a(`svg`,xt,[...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 Ct=Q(bt,[[`render`,St]]);const wt={},Tt={viewBox:`0 0 24 24`,fill:`currentColor`};function Et(e,t){return y(),a(`svg`,Tt,[...t[0]||=[o(`path`,{d:`M4 12l1.41 1.41L11 7.83V20h2V7.83l5.59 5.58L20 12l-8-8-8 8z`},null,-1)]])}var Dt=Q(wt,[[`render`,Et]]);const Ot={},kt={viewBox:`0 0 24 24`,fill:`currentColor`};function At(e,t){return y(),a(`svg`,kt,[...t[0]||=[o(`path`,{d:`M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z`},null,-1)]])}var jt=Q(Ot,[[`render`,At]]);const Mt={},Nt={viewBox:`0 0 24 24`,fill:`currentColor`};function Pt(e,t){return y(),a(`svg`,Nt,[...t[0]||=[o(`path`,{d:`M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z`},null,-1)]])}var Ft=Q(Mt,[[`render`,Pt]]);const It={},Lt={viewBox:`0 0 24 24`,fill:`currentColor`};function Rt(e,t){return y(),a(`svg`,Lt,[...t[0]||=[o(`path`,{d:`M7 7h10v3l4-4-4-4v3H5v6h2V7zm10 10H7v-3l-4 4 4 4v-3h12v-6h-2v4z`},null,-1)]])}var zt=Q(It,[[`render`,Rt]]);const Bt={},Vt={viewBox:`0 0 24 24`,fill:`currentColor`};function Ht(e,t){return y(),a(`svg`,Vt,[...t[0]||=[o(`circle`,{cx:`5`,cy:`12`,r:`2`},null,-1),o(`circle`,{cx:`12`,cy:`12`,r:`2`},null,-1),o(`circle`,{cx:`19`,cy:`12`,r:`2`},null,-1)]])}var Ut=Q(Bt,[[`render`,Ht]]);const Wt={},Gt={viewBox:`0 0 24 24`,fill:`currentColor`};function Kt(e,t){return y(),a(`svg`,Gt,[...t[0]||=[o(`path`,{d:`M6 19h4V5H6v14zm8-14v14h4V5h-4z`},null,-1)]])}var qt=Q(Wt,[[`render`,Kt]]);const Jt={},Yt={viewBox:`0 0 24 24`,fill:`currentColor`};function Xt(e,t){return y(),a(`svg`,Yt,[...t[0]||=[o(`path`,{d:`M8 5v14l11-7z`},null,-1)]])}var Zt=Q(Jt,[[`render`,Xt]]);const Qt={},$t={viewBox:`0 0 24 24`,fill:`currentColor`};function en(e,t){return y(),a(`svg`,$t,[...t[0]||=[o(`path`,{d:`M12 5V1L7 6l5 5V7c3.31 0 6 2.69 6 6s-2.69 6-6 6-6-2.69-6-6H4c0 4.42 3.58 8 8 8s8-3.58 8-8-3.58-8-8-8z`},null,-1)]])}var tn=Q(Qt,[[`render`,en]]);const nn={},rn={viewBox:`0 0 24 24`,fill:`currentColor`};function an(e,t){return y(),a(`svg`,rn,[...t[0]||=[o(`path`,{d:`M6 18l8.5-6L6 6v12zM16 6v12h2V6h-2z`},null,-1)]])}var on=Q(nn,[[`render`,an]]);const sn={},cn={viewBox:`0 0 24 24`,fill:`currentColor`};function ln(e,t){return y(),a(`svg`,cn,[...t[0]||=[o(`path`,{d:`M16.5 12A4.5 4.5 0 0 0 14 7.97v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51A8.796 8.796 0 0 0 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06A8.99 8.99 0 0 0 17.73 18L19 19.27 20.27 18 5.27 3 4.27 3zM12 4L9.91 6.09 12 8.18V4z`},null,-1)]])}var un=Q(sn,[[`render`,ln]]);const dn={},fn={viewBox:`0 0 24 24`,fill:`currentColor`};function pn(e,t){return y(),a(`svg`,fn,[...t[0]||=[o(`path`,{d:`M3 9v6h4l5 5V4L7 9H3zm13.5 3A4.5 4.5 0 0 0 14 7.97v8.05c1.48-.73 2.5-2.25 2.5-4.02z`},null,-1)]])}var mn=Q(dn,[[`render`,pn]]);const hn=[`aria-label`];var $=Q(u({__name:`PlayPauseButton`,props:{isPlaying:{type:Boolean,required:!0},hasEnded:{type:Boolean,required:!1,default:!1},size:{type:String,required:!1,default:`sm`}},emits:[`toggle-play`],setup(e){let t=e,i=n(()=>t.isPlaying?`Pause`:t.hasEnded?`Replay`:`Play`);return(t,n)=>(y(),a(`button`,{class:m([`ppbtn`,`ppbtn--${e.size}`]),"aria-label":i.value,onClick:n[0]||=O(e=>t.$emit(`toggle-play`),[`stop`])},[e.isPlaying?(y(),r(T(qt),{key:0})):e.hasEnded?(y(),r(T(tn),{key:1})):(y(),r(T(Zt),{key:2}))],10,hn))}}),[[`__scopeId`,`data-v-85902525`]]),gn=u({__name:`VolumeIcon`,setup(e){let t=Z(J),i=n(()=>!t.isMuted&&t.vol>0);return(e,t)=>i.value?(y(),r(T(mn),{key:0})):(y(),r(T(un),{key:1}))}}),_n=Q(u({__name:`Spinner`,props:{size:{type:Number,required:!1,default:14},borderWidth:{type:Number,required:!1,default:2}},setup(e){return(t,n)=>(y(),a(`div`,{class:`spinner`,style:g({width:`${e.size}px`,height:`${e.size}px`,borderWidth:`${e.borderWidth}px`})},null,4))}}),[[`__scopeId`,`data-v-259be2b2`]]);const vn={class:`hud`},yn=[`aria-label`],bn=[`aria-label`],xn=[`aria-label`],Sn=[`aria-label`,`innerHTML`],Cn={key:4,class:`hud__spacer`},wn={class:`hud__play-wrap`};var Tn=Q(u({__name:`HudButtons`,setup(t){let n=Z(J),s=Z(Y),{currentAction:c,isCustom:u,customAction:f,builtinLabel:p,builtinActive:h,onBuiltinClick:g}=dt(d(st),n,Z(X));return(t,d)=>(y(),a(`div`,vn,[!T(s).isOpen&&!T(n).isFullscreen?(y(),a(e,{key:0},[T(c)===`mute`?(y(),a(`button`,{key:0,class:m([`hud__btn`,{"hud__btn--active":T(h)}]),"aria-label":T(p),onClick:d[0]||=O((...e)=>T(g)&&T(g)(...e),[`stop`])},[l(gn)],10,yn)):T(c)===`loop`?(y(),a(`button`,{key:1,class:m([`hud__btn`,{"hud__btn--active":T(h)}]),"aria-label":T(p),onClick:d[1]||=O((...e)=>T(g)&&T(g)(...e),[`stop`])},[l(T(zt))],10,bn)):T(c)===`autoplay`?(y(),a(`button`,{key:2,class:m([`hud__btn`,{"hud__btn--active":T(h)}]),"aria-label":T(p),onClick:d[2]||=O((...e)=>T(g)&&T(g)(...e),[`stop`])},[l(T(on))],10,xn)):T(u)&&T(f)?(y(),a(`button`,{key:3,class:`hud__btn`,"aria-label":T(f).label,onClick:d[3]||=O(e=>T(f).onClick(),[`stop`]),innerHTML:T(f).icon},null,8,Sn)):(y(),a(`div`,Cn))],64)):i(`v-if`,!0),o(`div`,wn,[l($,{"is-playing":T(n).isPlaying,"has-ended":T(n).hasEnded,size:`lg`,onTogglePlay:T(n).togglePlay},null,8,[`is-playing`,`has-ended`,`onTogglePlay`]),T(n).isBuffering?(y(),r(_n,{key:0,class:`hud__buf-spinner`})):i(`v-if`,!0)]),!T(s).isOpen&&!T(n).isFullscreen?(y(),a(`button`,{key:1,class:`hud__btn`,"aria-label":`Show controls`,onClick:d[4]||=O((...e)=>T(s).openControls&&T(s).openControls(...e),[`stop`])},[l(T(Ct))])):i(`v-if`,!0)]))}}),[[`__scopeId`,`data-v-a6d118e7`]]);function En(e){let t=S(null),r=n(()=>t.value??e.progress),i=null;function a(){i&&clearTimeout(i),i=null,t.value=null}function o(e){i&&clearTimeout(i),i=null,t.value=Number(e.target.value)}function s(n){let r=Number(n.target.value);t.value=r,e.seek(r),i&&clearTimeout(i),i=setTimeout(a,3e3)}return E(()=>e.current,()=>{if(t.value===null||!e.total)return;let n=t.value/100*e.total;Math.abs(e.current-n)<1&&a()}),_(a),{displaySeek:r,onSeekInput:o,onSeekChange:s}}function Dn(e,t,n){if(!document.startViewTransition||!e.value){n();return}e.value.style.viewTransitionName=t,document.startViewTransition(async()=>{n(),await p()}).finished.finally(()=>{e.value&&(e.value.style.viewTransitionName=``)})}const On={class:`controls__vol-header`},kn=[`aria-label`],An={class:`controls__vol-body`},jn=[`value`],Mn={class:`controls__vol-pct`};var Nn=Q(u({__name:`VolumePanel`,emits:[`back`],setup(t){let r=Z(J),i=Z(Y),s=n(()=>r.isMuted?0:Math.round(r.vol*100));function c(e){r.setVolume(Number(e.target.value)/100)}return(t,n)=>(y(),a(e,null,[o(`div`,On,[o(`button`,{class:`controls__btn`,"aria-label":`Back`,onClick:n[0]||=e=>t.$emit(`back`)},[l(T(ht))]),n[6]||=o(`span`,{class:`controls__vol-label`},`Volume`,-1),o(`button`,{class:`controls__btn`,"aria-label":T(r).isMuted?`Unmute`:`Mute`,onClick:n[1]||=e=>T(r).toggleMute()},[l(gn)],8,kn)]),o(`div`,An,[o(`input`,{type:`range`,min:`0`,max:`100`,step:`1`,value:s.value,class:`controls__vol-slider`,style:g({"--v":s.value+`%`}),"aria-label":`Volume`,onInput:c,onMousedown:n[2]||=e=>T(i).pauseHide(),onMouseup:n[3]||=e=>T(i).scheduleHide(),onTouchstartPassive:n[4]||=e=>T(i).pauseHide(),onTouchend:n[5]||=e=>T(i).scheduleHide()},null,44,jn),o(`span`,Mn,C(s.value)+`%`,1)])],64))}}),[[`__scopeId`,`data-v-10b0ae67`]]);function Pn(e){function t(){let t=te.indexOf(e.playbackRate);e.setPlaybackRate(te[(t+1)%te.length])}function n(e){return`${e}×`}return{cycleRate:t,fmtRate:n}}const Fn={class:`controls__more-header`},In={class:`controls__more-body`},Ln={class:`controls__more-value`},Rn={class:`controls__more-row-label`},zn={class:`controls__more-value`},Bn={class:`controls__more-row-label`},Vn={class:`controls__more-value`},Hn=[`aria-label`],Un={class:`controls__more-row-label`},Wn=[`innerHTML`];var Gn=Q(u({__name:`MoreMenu`,props:{isCustom:{type:Boolean,required:!0},customAction:{type:[Object,null],required:!0}},emits:[`back`],setup(t){let n=Z(J),r=Z(X),{cycleRate:s,fmtRate:u}=Pn(n);return(d,f)=>(y(),a(e,null,[o(`div`,Fn,[o(`button`,{class:`controls__btn`,"aria-label":`Back`,onClick:f[0]||=e=>d.$emit(`back`)},[l(T(ht))]),f[5]||=o(`span`,{class:`controls__more-label`},`More`,-1)]),o(`div`,In,[T(n).supportsPlaybackRate?(y(),a(`button`,{key:0,class:`controls__more-row`,"aria-label":`Playback speed`,onClick:f[1]||=(...e)=>T(s)&&T(s)(...e)},[f[6]||=o(`span`,null,`Playback speed`,-1),o(`span`,Ln,C(T(u)(T(n).playbackRate)),1)])):i(`v-if`,!0),o(`button`,{class:m([`controls__more-row`,{"controls__more-row--active":T(n).isLooping}]),"aria-label":`Toggle loop`,onClick:f[2]||=e=>T(n).toggleLoop()},[o(`span`,Rn,[l(T(zt),{class:`controls__more-row-icon`}),f[7]||=c(`Loop`,-1)]),o(`span`,zn,C(T(n).isLooping?`On`:`Off`),1)],2),T(r).hasPlaylist?(y(),a(`button`,{key:1,class:m([`controls__more-row`,{"controls__more-row--active":T(r).autoAdvance}]),"aria-label":`Toggle autoplay next`,onClick:f[3]||=e=>T(r).toggleAutoAdvance()},[o(`span`,Bn,[l(T(on),{class:`controls__more-row-icon`}),f[8]||=c(`Autoplay next`,-1)]),o(`span`,Vn,C(T(r).autoAdvance?`On`:`Off`),1)],2)):i(`v-if`,!0),t.isCustom&&t.customAction?(y(),a(`button`,{key:2,class:`controls__more-row`,"aria-label":t.customAction.label,onClick:f[4]||=e=>t.customAction.onClick()},[o(`span`,Un,[o(`span`,{class:`controls__more-row-icon`,innerHTML:t.customAction.icon},null,8,Wn),c(C(t.customAction.label),1)])],8,Hn)):i(`v-if`,!0)])],64))}}),[[`__scopeId`,`data-v-e89a8208`]]);const Kn=[`value`],qn={class:`controls__row`},Jn={class:`controls__play-wrap`},Yn={key:0,class:`controls__live`},Xn={key:1,class:`controls__time`},Zn={class:`controls__fs-wrap`},Qn=[`aria-label`];var $n=Q(u({__name:`ControlsPopup`,setup(t){let n=Z(J),s=Z(Y),u=Z(X),f=ut(d(ct),n),{isCustom:p,customAction:h}=dt(d(st),n,u),b=S(!1),x=S(!1),w=S(null);function E(e){return!w.value||w.value.contains(e)?!1:(s.closeControls(),!0)}function D(e){E(e.target)}function A(e){E(e.target)&&e.preventDefault()}v(()=>{n.fire(`controlsopen`,{element:w.value}),document.addEventListener(`click`,D,!0),document.addEventListener(`touchend`,A,!0)}),_(()=>{b.value=!1,x.value=!1,n.fire(`controlsclose`,{element:w.value}),document.removeEventListener(`click`,D,!0),document.removeEventListener(`touchend`,A,!0)});function j(e){s.suppressMouseLeave(),Dn(w,`controls-popup`,e)}function M(){if(k()){n.toggleMute();return}j(()=>{b.value=!0})}function N(){j(()=>{x.value=!0})}let{displaySeek:P,onSeekInput:F,onSeekChange:I}=En(n);function L(){n.isFullscreen||n.markFullscreenPending(),n.toggleFullscreen()}return(t,d)=>(y(),a(`div`,{ref_key:`popupEl`,ref:w,class:m([`controls`,{"controls--fs":T(n).isFullscreen,"controls--compact":T(f)}]),onMousemove:d[10]||=O((...e)=>T(s).keepOpen&&T(s).keepOpen(...e),[`stop`])},[b.value?(y(),r(Nn,{key:0,onBack:d[0]||=e=>j(()=>b.value=!1)})):x.value?(y(),r(Gn,{key:1,"is-custom":T(p),"custom-action":T(h),onBack:d[1]||=e=>j(()=>x.value=!1)},null,8,[`is-custom`,`custom-action`])):(y(),a(e,{key:2},[T(n).isLive?i(`v-if`,!0):(y(),a(`input`,{key:0,type:`range`,min:`0`,max:`100`,value:T(P),class:`controls__seek`,style:g({"--p":T(P)+`%`,"--b":T(n).bufferedDisplay+`%`}),onInput:d[2]||=(...e)=>T(F)&&T(F)(...e),onChange:d[3]||=(...e)=>T(I)&&T(I)(...e),onMousedown:d[4]||=e=>T(s).pauseHide(),onMouseup:d[5]||=e=>T(s).scheduleHide(),onTouchstartPassive:d[6]||=e=>T(s).pauseHide(),onTouchend:d[7]||=e=>T(s).scheduleHide()},null,44,Kn)),o(`div`,qn,[o(`div`,Jn,[T(n).isBuffering?(y(),r(_n,{key:0})):(y(),r($,{key:1,"is-playing":T(n).isPlaying,"has-ended":T(n).hasEnded,size:`sm`,onTogglePlay:d[8]||=e=>T(n).togglePlay()},null,8,[`is-playing`,`has-ended`]))]),T(n).isLive?(y(),a(`span`,Yn,[...d[11]||=[o(`span`,{class:`controls__live-dot`},null,-1),c(`Live`,-1)]])):(y(),a(`span`,Xn,C(T(n).fmt(T(n).current))+` / `+C(T(n).fmt(T(n).total)),1)),T(u).hasNext?(y(),a(`button`,{key:2,class:`controls__btn`,"aria-label":`Play next`,onClick:d[9]||=e=>T(u).playNext()},[l(T(on))])):i(`v-if`,!0),o(`button`,{class:`controls__btn`,"aria-label":`Volume`,onClick:M},[l(gn)]),o(`button`,{class:m([`controls__btn controls__btn--more`,{"controls__btn--active":T(n).isLooping||T(n).playbackRate!==1||T(u).autoAdvance}]),"aria-label":`More`,onClick:N},[l(T(Ut))],2),o(`div`,Zn,[T(n).isFullscreenPending?(y(),r(_n,{key:0})):(y(),a(`button`,{key:1,class:`controls__btn`,"aria-label":T(n).isFullscreen?`Exit fullscreen`:`Fullscreen`,onClick:L},[T(n).isFullscreen?(y(),r(T(Ft),{key:0})):(y(),r(T(jt),{key:1}))],8,Qn))])])],64))],34))}}),[[`__scopeId`,`data-v-5712aad4`]]);const er={class:`ad-overlay`},tr={class:`ad-overlay__bar`},nr={class:`ad-overlay__badge`},rr={key:0,class:`ad-overlay__countdown`},ir=[`aria-label`],ar={key:0,class:`ad-overlay__resume`};var or=Q(u({__name:`AdOverlay`,setup(e){let t=Z(J),s=n(()=>t.adRemainingTime>0?t.fmt(t.adRemainingTime):``);return(e,n)=>(y(),a(`div`,er,[o(`div`,tr,[o(`div`,nr,[n[2]||=o(`span`,null,`Ad`,-1),s.value?(y(),a(`span`,rr,C(s.value),1)):i(`v-if`,!0)]),o(`button`,{class:`ad-overlay__mute`,"aria-label":T(t).isAdMuted?`Unmute ad`:`Mute ad`,onClick:n[0]||=e=>T(t).toggleAdMute()},[T(t).isAdMuted?(y(),r(T(un),{key:0})):(y(),r(T(mn),{key:1}))],8,ir)]),T(t).isAdPaused?(y(),a(`div`,ar,[l($,{"is-playing":!1,size:`lg`,onTogglePlay:n[1]||=e=>T(t).togglePlay()})])):i(`v-if`,!0)]))}}),[[`__scopeId`,`data-v-23efcc8b`]]);const sr={key:0,class:`overlay__spinner`},cr={key:0,class:`overlay__error`};var lr=Q(u({__name:`PlayerOverlay`,props:{disableTapCapture:{type:Boolean,required:!1,default:!1}},setup(n){let s=Z(J),c=Z(Y),{hudVisible:u,popupVisible:d}=lt(s,c);function f(){if(s.isAdPlaying&&s.isAdPaused){s.togglePlay();return}c.onVideoTap()}return(c,p)=>(y(),a(e,null,[!n.disableTapCapture&&T(s).hasStarted&&!(T(s).isAdPlaying&&!T(s).isAdPaused)?(y(),a(`div`,{key:0,class:`overlay__tap-capture`,onClick:f,onTouchend:O(f,[`prevent`,`stop`])},null,32)):i(`v-if`,!0),T(s).isAdPlaying?(y(),r(or,{key:1})):i(`v-if`,!0),l(t,{name:`fade`},{default:D(()=>[!T(s).isReady&&!T(s).isError?(y(),a(`div`,sr,[l(_n,{size:40,"border-width":3})])):i(`v-if`,!0)]),_:1}),l(t,{name:`fade`},{default:D(()=>[T(s).isError?(y(),a(`div`,cr,[o(`p`,null,C(T(s).errorMessage||`This video could not be played.`),1),o(`button`,{class:`overlay__retry`,onClick:p[0]||=O((...e)=>T(s).retry&&T(s).retry(...e),[`stop`])},`Retry`)])):i(`v-if`,!0)]),_:1}),o(`div`,{class:m([`overlay__hud`,{"overlay__hud--visible":T(u)}])},[l(Tn)],2),l(t,{name:`popup`},{default:D(()=>[T(d)?(y(),a(`div`,{key:0,class:m([`overlay__popup`,{"overlay__popup--fs":T(s).isFullscreen}])},[l($n)],2)):i(`v-if`,!0)]),_:1})],64))}}),[[`__scopeId`,`data-v-f3307b98`]]);const ur={class:`player`},dr={"data-mvp-player":``},fr=[`poster`],pr={key:1,class:`player__native-play`};var mr=Q(u({__name:`VideoPlayer`,props:{videoUrl:{type:String,required:!0},title:{type:String,required:!1,default:``},poster:{type:String,required:!1,default:``},aspectRatio:{type:String,required:!1,default:K},adTagUrl:{type:String,required:!1,default:``},adTagParams:{type:Object,required:!1},headerBidding:{type:Object,required:!1},autoplay:{type:Boolean,required:!1,default:!1},muted:{type:Boolean,required:!1,default:void 0},playbackRate:{type:Number,required:!1},nativeUi:{type:Boolean,required:!1,default:!1},autoStage:{type:Boolean,required:!1,default:!1},lazy:{type:Boolean,required:!1,default:!1},payload:{type:Object,required:!1,default:()=>({})},action:{type:[String,Object,null],required:!1,default:null},disableTapCapture:{type:Boolean,required:!1,default:!1},hasPlaylist:{type:Boolean,required:!1,default:!1},hasNext:{type:Boolean,required:!1,default:!1},hasPrevious:{type:Boolean,required:!1,default:!1},autoAdvance:{type:Boolean,required:!1,default:!1}},emits:[`state-change`,`play-next`,`play-previous`,`toggle-auto-advance`],setup(e,{expose:t,emit:s}){let c=e,u=s,d=S(null),f=x(at(d,c,u)),p=x(ot(w(f,`isPlaying`)));b(J,f),b(Y,p),b(st,w(c,`action`)),b(X,x({hasPlaylist:n(()=>c.hasPlaylist),hasNext:n(()=>c.hasNext),hasPrevious:n(()=>c.hasPrevious),autoAdvance:n(()=>c.autoAdvance),playNext:()=>u(`play-next`),playPrevious:()=>u(`play-previous`),toggleAutoAdvance:()=>u(`toggle-auto-advance`)}));let h=n(()=>M(c.aspectRatio)),_=n(()=>h.value.isPortrait),v=n(()=>h.value.cssRatio),C=n(()=>!c.poster&&!f.isReady);return t(f),(e,t)=>(y(),a(`div`,ur,[o(`div`,{class:m([`player__shell`,{"player__shell--portrait":_.value}]),style:g({aspectRatio:v.value}),onMousemove:t[0]||=e=>p.onMouseMove(),onContextmenuCapture:t[1]||=O(()=>{},[`prevent`]),onMouseleave:t[2]||=e=>p.onMouseLeave()},[o(`div`,dr,[o(`video`,{ref_key:`videoEl`,ref:d,class:m([`mvp-video`,{"mvp-video--hidden":C.value}]),poster:c.poster,playsinline:``},null,10,fr),f.nativeUi?i(`v-if`,!0):(y(),r(lr,{key:0,"disable-tap-capture":c.disableTapCapture},null,8,[`disable-tap-capture`])),f.nativeUi&&!f.hasStarted?(y(),a(`div`,pr,[l($,{"is-playing":!1,size:`lg`,onTogglePlay:f.togglePlay},null,8,[`onTogglePlay`])])):i(`v-if`,!0)])],38)]))}}),[[`__scopeId`,`data-v-4ab3cf75`]]);const hr=S(0),gr=n(()=>hr.value>0);function _r(){hr.value++}function vr(){hr.value--}function yr(e,t){window.dispatchEvent(new CustomEvent(e,{detail:t}))}function br(e,t){let n=e=>t(e.detail);v(()=>window.addEventListener(e,n)),_(()=>window.removeEventListener(e,n))}function xr(e,t){let r=n(()=>!e.value||!t.value?-1:e.value.findIndex(e=>e.videoUrl===t.value?.videoUrl)),i=n(()=>r.value===-1||!e.value?null:e.value[r.value+1]??null),a=n(()=>r.value<=0||!e.value?null:e.value[r.value-1]??null);return{hasNext:n(()=>i.value!==null),hasPrevious:n(()=>a.value!==null),nextEntry:i,previousEntry:a}}function Sr(){return localStorage.getItem(V)===`true`}function Cr(e){localStorage.setItem(V,String(e))}const wr=[`src`],Tr={class:`stage__idle-body`},Er={class:`stage__idle-btn`},Dr={class:`stage__idle-title`},Or={key:1,class:`stage__idle-empty`};var kr=Q(u({__name:`VideoStage`,props:{pinPosition:{type:String,required:!1,default:`bottom-right`},playlist:{type:Array,required:!1}},emits:[`state-change`],setup(t,{expose:s,emit:c}){let u=t,d=c,p=S(Sr());E(p,Cr);let h=n(()=>!!u.playlist?.length),x=S(null),D=S(null),k=S(!1),A=S(!1),j=S(null),N=S(null),P=S(!1);b(ct,P);let{hasNext:F,hasPrevious:I,nextEntry:z,previousEntry:B}=xr(w(u,`playlist`),D),V=n(()=>P.value&&!!D.value&&k.value),ee=n(()=>M(D.value?.aspectRatio||`16:9`).cssRatio),H=S(null),U=S(null);E(P,e=>{H.value=e&&N.value?{height:N.value.offsetHeight,width:N.value.offsetWidth}:null});let W=n(()=>{if(!H.value)return{};let{height:e,width:t}=H.value,n=U.value&&t?U.value/t:1;return{height:`${Math.round(e*n)}px`}}),G=null,K=null;function te(){G?.disconnect(),K?.disconnect(),j.value&&(G=new IntersectionObserver(([e])=>{P.value=!e.isIntersecting},{threshold:1}),G.observe(j.value),K=new ResizeObserver(([e])=>{U.value=e.contentRect.width}),K.observe(j.value))}E(j,te);function ne(){D.value&&(D.value={...D.value,autoplay:!0},k.value=!0)}function re(){j.value?.scrollIntoView({behavior:`smooth`,block:`center`})}function ie(){D.value=null,k.value=!1,A.value=!1,P.value=!1,H.value=null,ae()}function ae(){yr(R,{currentVideoUrl:D.value?.videoUrl??null,isPlaying:A.value})}function oe(e){if(D.value?.videoUrl===e.videoUrl&&k.value){x.value?.togglePlay();return}D.value=e,k.value=!1,A.value=!1,ae(),k.value=!0}function se(e){if(!(!D.value||e.videoUrl!==D.value.videoUrl)){if(!k.value){D.value={...D.value,autoplay:!0},k.value=!0;return}x.value?.togglePlay()}}function ce(){z.value&&oe({...z.value,autoplay:!0})}function le(){B.value&&oe({...B.value,autoplay:!0})}function ue(e){e.type===`play`&&(A.value=!0),(e.type===`pause`||e.type===`ended`)&&(A.value=!1),e.type===`ended`&&p.value&&ce(),ae(),d(`state-change`,e)}return br(L,oe),br(`video-toggle`,se),v(_r),_(()=>{vr(),G?.disconnect(),K?.disconnect()}),s({playNext:ce,playPrevious:le,hasNext:F,hasPrevious:I}),(n,s)=>(y(),a(`div`,{ref_key:`wrapperEl`,ref:j,class:`stage-wrapper`,style:g(W.value)},[o(`div`,{ref_key:`stageEl`,ref:N,class:m([`stage`,{"stage--minified":V.value,[`stage--pin-${t.pinPosition}`]:V.value}])},[V.value?(y(),a(`button`,{key:0,class:`stage__scroll-to`,"aria-label":`Scroll to player`,onClick:O(re,[`stop`])},[l(T(Dt))])):i(`v-if`,!0),V.value?(y(),a(`button`,{key:1,class:`stage__dismiss`,"aria-label":`Close`,onClick:O(ie,[`stop`])},[l(T(yt))])):i(`v-if`,!0),D.value&&k.value?(y(),r(mr,f({ref_key:`playerRef`,ref:x,key:D.value.videoUrl},D.value,{"has-playlist":h.value,"has-next":T(F),"has-previous":T(I),"auto-advance":p.value,onStateChange:ue,onPlayNext:ce,onPlayPrevious:le,onToggleAutoAdvance:s[0]||=e=>p.value=!p.value}),null,16,[`has-playlist`,`has-next`,`has-previous`,`auto-advance`])):(y(),a(`div`,{key:3,class:`stage__idle`,style:g({aspectRatio:ee.value}),onClick:ne},[D.value?.poster?(y(),a(`img`,{key:0,src:D.value.poster,class:`stage__idle-poster`},null,8,wr)):i(`v-if`,!0),s[1]||=o(`div`,{class:`stage__idle-scrim`},null,-1),o(`div`,Tr,[D.value?(y(),a(e,{key:0},[o(`div`,Er,[l(T(Zt))]),o(`p`,Dr,C(D.value.title),1)],64)):(y(),a(`p`,Or,`Select a video to play`))])],4))],2)],4))}}),[[`__scopeId`,`data-v-fb8c86cf`]]);const Ar={class:`placeholder`},jr=[`src`,`alt`],Mr={class:`placeholder__btn-wrap`},Nr={key:1,class:`placeholder__footer`},Pr={class:`placeholder__title`};var Fr=Q(u({__name:`VideoPlaceholder`,props:{videoUrl:{type:String,required:!0},title:{type:String,required:!1,default:``},poster:{type:String,required:!1,default:``},aspectRatio:{type:String,required:!1,default:K},adTagUrl:{type:String,required:!1,default:``},adTagParams:{type:Object,required:!1},headerBidding:{type:Object,required:!1},autoplay:{type:Boolean,required:!1,default:!1},muted:{type:Boolean,required:!1,default:void 0},playbackRate:{type:Number,required:!1},nativeUi:{type:Boolean,required:!1,default:!1},autoStage:{type:Boolean,required:!1,default:!1},lazy:{type:Boolean,required:!1},payload:{type:Object,required:!1,default:()=>({})},action:{type:[String,Object,null],required:!1,default:null},disableTapCapture:{type:Boolean,required:!1}},setup(e){let t=e,r=n(()=>M(t.aspectRatio)),s=n(()=>r.value.isPortrait),c=n(()=>r.value.cssRatio),u=S(!1),d=S(!1);br(R,e=>{u.value=e.currentVideoUrl===t.videoUrl,d.value=u.value&&e.isPlaying});function f(e){yr(L,{...t,...e!==void 0&&{autoplay:e}})}function p(){f(!0)}return v(()=>{t.autoStage&&f()}),(t,n)=>(y(),a(`div`,Ar,[o(`div`,{class:m([`placeholder__shell`,{"placeholder__shell--portrait":s.value,"placeholder__shell--active":u.value}]),style:g({aspectRatio:c.value}),onClick:p},[e.poster?(y(),a(`img`,{key:0,class:`placeholder__poster`,src:e.poster,alt:e.title},null,8,jr)):i(`v-if`,!0),n[0]||=o(`div`,{class:`placeholder__scrim`},null,-1),o(`div`,Mr,[l($,{"is-playing":u.value&&d.value,size:`lg`,onTogglePlay:p},null,8,[`is-playing`])]),e.title?(y(),a(`div`,Nr,[o(`p`,Pr,C(e.title),1)])):i(`v-if`,!0)],6)]))}}),[[`__scopeId`,`data-v-dbcb4f82`]]),Ir=u({__name:`VideoItem`,props:{videoUrl:{type:String,required:!0},title:{type:String,required:!1},poster:{type:String,required:!1},aspectRatio:{type:String,required:!1},adTagUrl:{type:String,required:!1},adTagParams:{type:Object,required:!1},headerBidding:{type:Object,required:!1},autoplay:{type:Boolean,required:!1},muted:{type:Boolean,required:!1,default:void 0},playbackRate:{type:Number,required:!1},nativeUi:{type:Boolean,required:!1},autoStage:{type:Boolean,required:!1},lazy:{type:Boolean,required:!1,default:!0},payload:{type:Object,required:!1},action:{type:[String,Object,null],required:!1,default:null},disableTapCapture:{type:Boolean,required:!1}},emits:[`state-change`],setup(t,{emit:n}){let i=t,o=n,s=S(!1);return(t,n)=>T(gr)?(y(),r(Fr,h(f({key:0},i)),null,16)):(y(),a(e,{key:1},[i.lazy&&!s.value&&!i.autoplay?(y(),r(Fr,f({key:0},i,{onClickCapture:n[0]||=e=>s.value=!0}),null,16)):(y(),r(mr,f({key:1},i,{autoplay:s.value||i.autoplay,onStateChange:n[1]||=e=>o(`state-change`,e)}),null,16,[`autoplay`]))],64))}});const Lr={install(e){e.component(`VideoPlayer`,mr),e.component(`VideoStage`,kr),e.component(`VideoPlaceholder`,Fr),e.component(`VideoItem`,Ir)}};export{st as ActionKey,ct as CompactKey,Y as HudKey,J as PlayerKey,X as PlaylistKey,Ir as VideoItem,Fr as VideoPlaceholder,mr as VideoPlayer,Lr as VideoPlayerPlugin,Lr as default,kr as VideoStage,Me as getPlatform,Z as injectStrict};
|