@locpd/vidstack 1.12.14
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/LICENSE +21 -0
- package/README.md +22 -0
- package/analyze.json.d.ts +8 -0
- package/bundle.d.ts +1 -0
- package/cdn/chunks/vidstack-2f5gzOW6.js +1 -0
- package/cdn/chunks/vidstack-BYgY9wmd.js +1 -0
- package/cdn/chunks/vidstack-BfBBPhXV.js +1 -0
- package/cdn/chunks/vidstack-Bjo5esRp.js +1 -0
- package/cdn/chunks/vidstack-BuL67v3q.js +1 -0
- package/cdn/chunks/vidstack-C0msPRTd.js +3 -0
- package/cdn/chunks/vidstack-CJNLoJPa.js +1 -0
- package/cdn/chunks/vidstack-CQSpZ7X8.js +16 -0
- package/cdn/chunks/vidstack-C_AxqLKV.js +1 -0
- package/cdn/chunks/vidstack-CioT3Yw2.js +1 -0
- package/cdn/chunks/vidstack-CrqkytHl.js +1 -0
- package/cdn/chunks/vidstack-D0M8R0ZU.js +1 -0
- package/cdn/chunks/vidstack-D40FSa5B.js +3 -0
- package/cdn/chunks/vidstack-DD2JwFVU.js +1 -0
- package/cdn/chunks/vidstack-DRH_1tFW.js +1 -0
- package/cdn/chunks/vidstack-DfDZuHNP.js +1 -0
- package/cdn/chunks/vidstack-DiNS2Vx5.js +1 -0
- package/cdn/chunks/vidstack-xjJ-ui_l.js +1 -0
- package/cdn/providers/vidstack-audio-2Dt_Ivbp.js +1 -0
- package/cdn/providers/vidstack-dash-CUtD4e6q.js +1 -0
- package/cdn/providers/vidstack-google-cast-BdORATUX.js +1 -0
- package/cdn/providers/vidstack-hls-R25Kb6DP.js +1 -0
- package/cdn/providers/vidstack-html-DaAUJYsD.js +1 -0
- package/cdn/providers/vidstack-video-Csvox7SO.js +1 -0
- package/cdn/providers/vidstack-vimeo-D4Z96kg2.js +1 -0
- package/cdn/providers/vidstack-youtube-DiND6h3s.js +1 -0
- package/cdn/vidstack.js +1 -0
- package/cdn/with-layouts/chunks/vidstack-2f5gzOW6.js +1 -0
- package/cdn/with-layouts/chunks/vidstack-45yH5los.js +1 -0
- package/cdn/with-layouts/chunks/vidstack-BBVMdOnf.js +1 -0
- package/cdn/with-layouts/chunks/vidstack-BB_ulI_T.js +1 -0
- package/cdn/with-layouts/chunks/vidstack-BcAewM33.js +1 -0
- package/cdn/with-layouts/chunks/vidstack-BfBBPhXV.js +1 -0
- package/cdn/with-layouts/chunks/vidstack-Bxv1Qnxe.js +1 -0
- package/cdn/with-layouts/chunks/vidstack-C2ZbG62f.js +3 -0
- package/cdn/with-layouts/chunks/vidstack-CCYIOKgL.js +1 -0
- package/cdn/with-layouts/chunks/vidstack-CL6PeIO1.js +1 -0
- package/cdn/with-layouts/chunks/vidstack-C_AxqLKV.js +1 -0
- package/cdn/with-layouts/chunks/vidstack-CifDkwDH.js +795 -0
- package/cdn/with-layouts/chunks/vidstack-Cry7aD59.js +3 -0
- package/cdn/with-layouts/chunks/vidstack-D065okCn.js +1 -0
- package/cdn/with-layouts/chunks/vidstack-DGuMoXmI.js +1 -0
- package/cdn/with-layouts/chunks/vidstack-DRH_1tFW.js +1 -0
- package/cdn/with-layouts/chunks/vidstack-DVBs1XoQ.js +1 -0
- package/cdn/with-layouts/chunks/vidstack-Dge3KT8k.js +1 -0
- package/cdn/with-layouts/chunks/vidstack-DiNS2Vx5.js +1 -0
- package/cdn/with-layouts/chunks/vidstack-HvYfJoen.js +1 -0
- package/cdn/with-layouts/providers/vidstack-audio-DE5vKIzW.js +1 -0
- package/cdn/with-layouts/providers/vidstack-dash-CA2agUuZ.js +1 -0
- package/cdn/with-layouts/providers/vidstack-google-cast-CGs-t8HM.js +1 -0
- package/cdn/with-layouts/providers/vidstack-hls-BHMbMFFR.js +1 -0
- package/cdn/with-layouts/providers/vidstack-html-Dm9gmNk6.js +1 -0
- package/cdn/with-layouts/providers/vidstack-video-C5it_Lbl.js +1 -0
- package/cdn/with-layouts/providers/vidstack-vimeo-BabLn9sy.js +1 -0
- package/cdn/with-layouts/providers/vidstack-youtube-D8UlccUL.js +1 -0
- package/cdn/with-layouts/vidstack.js +1 -0
- package/dev/chunks/vidstack-B7Zi3v_O.js +104 -0
- package/dev/chunks/vidstack-BFg1ZqiG.js +91 -0
- package/dev/chunks/vidstack-BGB2pa9s.js +58 -0
- package/dev/chunks/vidstack-BaIbHZE3.js +1519 -0
- package/dev/chunks/vidstack-Bb2rASIc.js +5188 -0
- package/dev/chunks/vidstack-Bcmx8pmK.js +224 -0
- package/dev/chunks/vidstack-Bl4b0Nen.js +29 -0
- package/dev/chunks/vidstack-Bo5OTJ06.js +58 -0
- package/dev/chunks/vidstack-BoAGnlRt.js +58 -0
- package/dev/chunks/vidstack-Bpr4fI4n.js +7 -0
- package/dev/chunks/vidstack-Bt8MP2DK.js +204 -0
- package/dev/chunks/vidstack-Bu2kfzUd.js +1637 -0
- package/dev/chunks/vidstack-C-ffXlSV.js +2995 -0
- package/dev/chunks/vidstack-C-ztJq-f.js +109 -0
- package/dev/chunks/vidstack-CFNlaVTR.js +55 -0
- package/dev/chunks/vidstack-C_l97D5j.js +254 -0
- package/dev/chunks/vidstack-CjhKISI0.js +114 -0
- package/dev/chunks/vidstack-CofXIJAy.js +57 -0
- package/dev/chunks/vidstack-CwTj4H1w.js +18 -0
- package/dev/chunks/vidstack-DDwbYVHV.js +66 -0
- package/dev/chunks/vidstack-DFImIcIL.js +11 -0
- package/dev/chunks/vidstack-DGDvUbvO.js +33 -0
- package/dev/chunks/vidstack-DO0kqA99.js +107 -0
- package/dev/chunks/vidstack-DXxIKXmd.js +50 -0
- package/dev/chunks/vidstack-DajrMUR0.js +297 -0
- package/dev/chunks/vidstack-DbBJlz7I.js +10 -0
- package/dev/chunks/vidstack-Dihypf8P.js +11 -0
- package/dev/chunks/vidstack-DlAhl87f.js +1193 -0
- package/dev/chunks/vidstack-Dm1xEU9Q.js +34 -0
- package/dev/chunks/vidstack-Dv_LIPFu.js +14 -0
- package/dev/chunks/vidstack-igYn0Apa.js +254 -0
- package/dev/chunks/vidstack-krOAtKMi.js +32 -0
- package/dev/chunks/vidstack-qh1N5_f_.js +26 -0
- package/dev/chunks/vidstack-rB-wqXw1.js +107 -0
- package/dev/chunks/vidstack-zG6PIeGg.js +66 -0
- package/dev/define/plyr-layout.js +51 -0
- package/dev/define/templates/plyr-layout.js +571 -0
- package/dev/define/templates/vidstack-audio-layout.js +167 -0
- package/dev/define/templates/vidstack-video-layout.js +390 -0
- package/dev/define/vidstack-icons.js +1 -0
- package/dev/define/vidstack-player-default-layout.js +21 -0
- package/dev/define/vidstack-player-layouts.js +25 -0
- package/dev/define/vidstack-player-ui.js +70 -0
- package/dev/define/vidstack-player.js +19 -0
- package/dev/global/plyr.js +501 -0
- package/dev/global/vidstack-player.js +129 -0
- package/dev/providers/vidstack-audio.js +35 -0
- package/dev/providers/vidstack-dash.js +516 -0
- package/dev/providers/vidstack-google-cast.js +474 -0
- package/dev/providers/vidstack-hls.js +408 -0
- package/dev/providers/vidstack-html.js +567 -0
- package/dev/providers/vidstack-video.js +207 -0
- package/dev/providers/vidstack-vimeo.js +554 -0
- package/dev/providers/vidstack-youtube.js +286 -0
- package/dev/vidstack-elements.js +36 -0
- package/dev/vidstack.js +91 -0
- package/dom.d.ts +91 -0
- package/elements.d.ts +1433 -0
- package/empty.vtt +1 -0
- package/global/player.d.ts +52 -0
- package/global/plyr.d.ts +343 -0
- package/google-cast.d.ts +1422 -0
- package/icons.d.ts +1 -0
- package/index.d.ts +402 -0
- package/package.json +199 -0
- package/player/index.d.ts +3 -0
- package/player/layouts/default.d.ts +3 -0
- package/player/layouts/index.d.ts +3 -0
- package/player/layouts/plyr.d.ts +3 -0
- package/player/styles/base.css +153 -0
- package/player/styles/default/buffering.css +55 -0
- package/player/styles/default/buttons.css +175 -0
- package/player/styles/default/captions.css +181 -0
- package/player/styles/default/chapter-title.css +26 -0
- package/player/styles/default/controls.css +56 -0
- package/player/styles/default/gestures.css +19 -0
- package/player/styles/default/icons.css +6 -0
- package/player/styles/default/keyboard.css +148 -0
- package/player/styles/default/layouts/audio.css +417 -0
- package/player/styles/default/layouts/video.css +590 -0
- package/player/styles/default/menus.css +959 -0
- package/player/styles/default/poster.css +52 -0
- package/player/styles/default/sliders.css +391 -0
- package/player/styles/default/theme.css +2461 -0
- package/player/styles/default/thumbnail.css +40 -0
- package/player/styles/default/time.css +45 -0
- package/player/styles/default/tooltips.css +141 -0
- package/player/styles/plyr/theme.css +1237 -0
- package/player/ui.d.ts +3 -0
- package/plugins.d.ts +19 -0
- package/plugins.js +13 -0
- package/prod/chunks/vidstack-B01xzxC4.js +7 -0
- package/prod/chunks/vidstack-BCeb7ryV.js +201 -0
- package/prod/chunks/vidstack-BGSTndAW.js +1590 -0
- package/prod/chunks/vidstack-BPitBBjh.js +1519 -0
- package/prod/chunks/vidstack-BQlOPwOu.js +45 -0
- package/prod/chunks/vidstack-BSDzlwxO.js +4778 -0
- package/prod/chunks/vidstack-BT0m6zEi.js +109 -0
- package/prod/chunks/vidstack-BTigPj2h.js +55 -0
- package/prod/chunks/vidstack-BiyXcJ_M.js +107 -0
- package/prod/chunks/vidstack-BoVf5n1M.js +2985 -0
- package/prod/chunks/vidstack-Bq6c3Bam.js +58 -0
- package/prod/chunks/vidstack-ByLCIBtB.js +297 -0
- package/prod/chunks/vidstack-C2US-gSO.js +248 -0
- package/prod/chunks/vidstack-C9vIqaYT.js +10 -0
- package/prod/chunks/vidstack-CF6fixCQ.js +1193 -0
- package/prod/chunks/vidstack-CTojmhKq.js +66 -0
- package/prod/chunks/vidstack-ChQTHmIQ.js +77 -0
- package/prod/chunks/vidstack-Cm6_unwd.js +246 -0
- package/prod/chunks/vidstack-CwTj4H1w.js +18 -0
- package/prod/chunks/vidstack-D3ltXc3a.js +33 -0
- package/prod/chunks/vidstack-D5EzK014.js +14 -0
- package/prod/chunks/vidstack-DDXt6fpN.js +58 -0
- package/prod/chunks/vidstack-DJDnh4xT.js +11 -0
- package/prod/chunks/vidstack-DXxIKXmd.js +50 -0
- package/prod/chunks/vidstack-D_-9AA6_.js +29 -0
- package/prod/chunks/vidstack-DbkZGjSn.js +107 -0
- package/prod/chunks/vidstack-Dihypf8P.js +11 -0
- package/prod/chunks/vidstack-Dm1xEU9Q.js +34 -0
- package/prod/chunks/vidstack-Dq5Yu0Vr.js +205 -0
- package/prod/chunks/vidstack-DqAw8m9J.js +26 -0
- package/prod/chunks/vidstack-DsPOyKtl.js +57 -0
- package/prod/chunks/vidstack-krOAtKMi.js +32 -0
- package/prod/chunks/vidstack-nLyr4NEP.js +58 -0
- package/prod/chunks/vidstack-xMS8dnYq.js +114 -0
- package/prod/chunks/vidstack-yEGTpgeA.js +104 -0
- package/prod/define/plyr-layout.js +51 -0
- package/prod/define/templates/plyr-layout.js +571 -0
- package/prod/define/templates/vidstack-audio-layout.js +167 -0
- package/prod/define/templates/vidstack-video-layout.js +390 -0
- package/prod/define/vidstack-icons.js +1 -0
- package/prod/define/vidstack-player-default-layout.js +21 -0
- package/prod/define/vidstack-player-layouts.js +25 -0
- package/prod/define/vidstack-player-ui.js +70 -0
- package/prod/define/vidstack-player.js +19 -0
- package/prod/global/plyr.js +493 -0
- package/prod/global/vidstack-player.js +129 -0
- package/prod/providers/vidstack-audio.js +35 -0
- package/prod/providers/vidstack-dash.js +501 -0
- package/prod/providers/vidstack-google-cast.js +468 -0
- package/prod/providers/vidstack-hls.js +393 -0
- package/prod/providers/vidstack-html.js +555 -0
- package/prod/providers/vidstack-video.js +204 -0
- package/prod/providers/vidstack-vimeo.js +548 -0
- package/prod/providers/vidstack-youtube.js +286 -0
- package/prod/vidstack-elements.js +36 -0
- package/prod/vidstack.js +158 -0
- package/server/chunks/vidstack-6juFdkKy.js +29 -0
- package/server/chunks/vidstack-B7iHmv7_.js +307 -0
- package/server/chunks/vidstack-BmxyML9v.js +1619 -0
- package/server/chunks/vidstack-BskfxwD3.js +566 -0
- package/server/chunks/vidstack-BvLV0SMz.js +4642 -0
- package/server/chunks/vidstack-BvWwluXZ.js +205 -0
- package/server/chunks/vidstack-C-413dj2.js +8 -0
- package/server/chunks/vidstack-C26K8z_-.js +55 -0
- package/server/chunks/vidstack-CJJiksDz.js +107 -0
- package/server/chunks/vidstack-CUNv52x1.js +141 -0
- package/server/chunks/vidstack-CqyBCODe.js +295 -0
- package/server/chunks/vidstack-CwTj4H1w.js +18 -0
- package/server/chunks/vidstack-DHAyGSOl.js +1502 -0
- package/server/chunks/vidstack-DLU3cjcp.js +381 -0
- package/server/chunks/vidstack-DXxIKXmd.js +50 -0
- package/server/chunks/vidstack-DbtDXDS2.js +104 -0
- package/server/chunks/vidstack-Dm1xEU9Q.js +34 -0
- package/server/chunks/vidstack-DzTHw_bw.js +207 -0
- package/server/chunks/vidstack-Wn3NH5Sg.js +1566 -0
- package/server/chunks/vidstack-krOAtKMi.js +32 -0
- package/server/chunks/vidstack-wNViAkr4.js +3045 -0
- package/server/define/plyr-layout.js +16 -0
- package/server/define/vidstack-icons.js +1 -0
- package/server/define/vidstack-player-default-layout.js +13 -0
- package/server/define/vidstack-player-layouts.js +16 -0
- package/server/define/vidstack-player-ui.js +11 -0
- package/server/define/vidstack-player.js +6 -0
- package/server/global/plyr.js +322 -0
- package/server/global/vidstack-player.js +58 -0
- package/server/vidstack-elements.js +46 -0
- package/server/vidstack.js +148 -0
- package/tailwind.cjs +101 -0
- package/tailwind.d.cts +15 -0
- package/types/vidstack-BOvzfZjK.d.ts +1269 -0
- package/types/vidstack-Cttpg6GU.d.ts +7474 -0
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
import { isString, deferredPromise, isNull, isBoolean, listenEvent, scoped, getScope, useContext, createContext, EventsController, isKeyboardClick, isTouchEvent, effect, isFunction, setAttribute, setStyle, isDOMNode, onDispose, toggleClass, animationFrameThrottle, signal, computed } from './vidstack-Wn3NH5Sg.js';
|
|
2
|
+
import { autoUpdate, computePosition, flip, shift } from '@floating-ui/dom';
|
|
3
|
+
|
|
4
|
+
const AUDIO_EXTENSIONS = /\.(m4a|m4b|mp4a|mpga|mp2|mp2a|mp3|m2a|m3a|wav|weba|aac|oga|spx|flac)($|\?)/i;
|
|
5
|
+
const AUDIO_TYPES = /* @__PURE__ */ new Set([
|
|
6
|
+
"audio/mpeg",
|
|
7
|
+
"audio/ogg",
|
|
8
|
+
"audio/3gp",
|
|
9
|
+
"audio/mp3",
|
|
10
|
+
"audio/webm",
|
|
11
|
+
"audio/flac",
|
|
12
|
+
"audio/m4a",
|
|
13
|
+
"audio/m4b",
|
|
14
|
+
"audio/mp4a",
|
|
15
|
+
"audio/mp4"
|
|
16
|
+
]);
|
|
17
|
+
const VIDEO_EXTENSIONS = /\.(mp4|og[gv]|webm|mov|m4v)(#t=[,\d+]+)?($|\?)/i;
|
|
18
|
+
const VIDEO_TYPES = /* @__PURE__ */ new Set([
|
|
19
|
+
"video/mp4",
|
|
20
|
+
"video/webm",
|
|
21
|
+
"video/3gp",
|
|
22
|
+
"video/ogg",
|
|
23
|
+
"video/avi",
|
|
24
|
+
"video/mpeg"
|
|
25
|
+
]);
|
|
26
|
+
const HLS_VIDEO_EXTENSIONS = /\.(m3u8)($|\?)/i;
|
|
27
|
+
const DASH_VIDEO_EXTENSIONS = /\.(mpd)($|\?)/i;
|
|
28
|
+
const HLS_VIDEO_TYPES = /* @__PURE__ */ new Set([
|
|
29
|
+
// Apple sanctioned
|
|
30
|
+
"application/vnd.apple.mpegurl",
|
|
31
|
+
// Apple sanctioned for backwards compatibility
|
|
32
|
+
"audio/mpegurl",
|
|
33
|
+
// Very common
|
|
34
|
+
"audio/x-mpegurl",
|
|
35
|
+
// Very common
|
|
36
|
+
"application/x-mpegurl",
|
|
37
|
+
// Included for completeness
|
|
38
|
+
"video/x-mpegurl",
|
|
39
|
+
"video/mpegurl",
|
|
40
|
+
"application/mpegurl"
|
|
41
|
+
]);
|
|
42
|
+
const DASH_VIDEO_TYPES = /* @__PURE__ */ new Set(["application/dash+xml"]);
|
|
43
|
+
function isAudioSrc({ src, type }) {
|
|
44
|
+
return isString(src) ? AUDIO_EXTENSIONS.test(src) || AUDIO_TYPES.has(type) || src.startsWith("blob:") && type === "audio/object" : type === "audio/object";
|
|
45
|
+
}
|
|
46
|
+
function isVideoSrc(src) {
|
|
47
|
+
return isString(src.src) ? VIDEO_EXTENSIONS.test(src.src) || VIDEO_TYPES.has(src.type) || src.src.startsWith("blob:") && src.type === "video/object" || isHLSSrc(src) && true : src.type === "video/object";
|
|
48
|
+
}
|
|
49
|
+
function isHLSSrc({ src, type }) {
|
|
50
|
+
return isString(src) && HLS_VIDEO_EXTENSIONS.test(src) || HLS_VIDEO_TYPES.has(type);
|
|
51
|
+
}
|
|
52
|
+
function isDASHSrc({ src, type }) {
|
|
53
|
+
return isString(src) && DASH_VIDEO_EXTENSIONS.test(src) || DASH_VIDEO_TYPES.has(type);
|
|
54
|
+
}
|
|
55
|
+
function canGoogleCastSrc(src) {
|
|
56
|
+
return isString(src.src) && (isAudioSrc(src) || isVideoSrc(src) || isHLSSrc(src));
|
|
57
|
+
}
|
|
58
|
+
function isMediaStream(src) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function appendParamsToURL(baseUrl, params) {
|
|
63
|
+
const url = new URL(baseUrl);
|
|
64
|
+
for (const key of Object.keys(params)) {
|
|
65
|
+
url.searchParams.set(key, params[key] + "");
|
|
66
|
+
}
|
|
67
|
+
return url.toString();
|
|
68
|
+
}
|
|
69
|
+
function preconnect(url, rel = "preconnect") {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
const pendingRequests = {};
|
|
73
|
+
function loadScript(src) {
|
|
74
|
+
if (pendingRequests[src]) return pendingRequests[src].promise;
|
|
75
|
+
const promise = deferredPromise(), exists = document.querySelector(`script[src="${src}"]`);
|
|
76
|
+
if (!isNull(exists)) {
|
|
77
|
+
promise.resolve();
|
|
78
|
+
return promise.promise;
|
|
79
|
+
}
|
|
80
|
+
pendingRequests[src] = promise;
|
|
81
|
+
const script = document.createElement("script");
|
|
82
|
+
script.src = src;
|
|
83
|
+
script.onload = () => {
|
|
84
|
+
promise.resolve();
|
|
85
|
+
delete pendingRequests[src];
|
|
86
|
+
};
|
|
87
|
+
script.onerror = () => {
|
|
88
|
+
promise.reject();
|
|
89
|
+
delete pendingRequests[src];
|
|
90
|
+
};
|
|
91
|
+
setTimeout(() => document.head.append(script), 0);
|
|
92
|
+
return promise.promise;
|
|
93
|
+
}
|
|
94
|
+
function getRequestCredentials(crossOrigin) {
|
|
95
|
+
return crossOrigin === "use-credentials" ? "include" : isString(crossOrigin) ? "same-origin" : void 0;
|
|
96
|
+
}
|
|
97
|
+
function getDownloadFile({
|
|
98
|
+
title,
|
|
99
|
+
src,
|
|
100
|
+
download
|
|
101
|
+
}) {
|
|
102
|
+
const url = isBoolean(download) || download === "" ? src.src : isString(download) ? download : download?.url;
|
|
103
|
+
if (!isValidFileDownload({ url, src, download })) return null;
|
|
104
|
+
return {
|
|
105
|
+
url,
|
|
106
|
+
name: !isBoolean(download) && !isString(download) && download?.filename || title.toLowerCase() || "media"
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
function isValidFileDownload({
|
|
110
|
+
url,
|
|
111
|
+
src,
|
|
112
|
+
download
|
|
113
|
+
}) {
|
|
114
|
+
return isString(url) && (download && download !== true || isAudioSrc(src) || isVideoSrc(src));
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function findActiveCue(cues, time) {
|
|
118
|
+
for (let i = 0, len = cues.length; i < len; i++) {
|
|
119
|
+
if (isCueActive(cues[i], time)) return cues[i];
|
|
120
|
+
}
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
function isCueActive(cue, time) {
|
|
124
|
+
return time >= cue.startTime && time < cue.endTime;
|
|
125
|
+
}
|
|
126
|
+
function watchActiveTextTrack(tracks, kind, onChange) {
|
|
127
|
+
let currentTrack = null, scope = getScope();
|
|
128
|
+
function onModeChange() {
|
|
129
|
+
const kinds = isString(kind) ? [kind] : kind, track = tracks.toArray().find((track2) => kinds.includes(track2.kind) && track2.mode === "showing");
|
|
130
|
+
if (track === currentTrack) return;
|
|
131
|
+
if (!track) {
|
|
132
|
+
onChange(null);
|
|
133
|
+
currentTrack = null;
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
if (track.readyState == 2) {
|
|
137
|
+
onChange(track);
|
|
138
|
+
} else {
|
|
139
|
+
onChange(null);
|
|
140
|
+
scoped(() => {
|
|
141
|
+
}, scope);
|
|
142
|
+
}
|
|
143
|
+
currentTrack = track;
|
|
144
|
+
}
|
|
145
|
+
onModeChange();
|
|
146
|
+
return listenEvent();
|
|
147
|
+
}
|
|
148
|
+
function watchCueTextChange(tracks, kind, callback) {
|
|
149
|
+
watchActiveTextTrack(tracks, kind, (track) => {
|
|
150
|
+
if (!track) {
|
|
151
|
+
callback("");
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const onCueChange = () => {
|
|
155
|
+
const activeCue = track?.activeCues[0];
|
|
156
|
+
callback(activeCue?.text || "");
|
|
157
|
+
};
|
|
158
|
+
onCueChange();
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
const mediaContext = createContext();
|
|
163
|
+
function useMediaContext() {
|
|
164
|
+
return useContext(mediaContext);
|
|
165
|
+
}
|
|
166
|
+
function useMediaState() {
|
|
167
|
+
return useMediaContext().$state;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
function isEventInside(el, event) {
|
|
171
|
+
const target = event.composedPath()[0];
|
|
172
|
+
return isDOMNode(target) && el.contains(target);
|
|
173
|
+
}
|
|
174
|
+
const rafJobs = /* @__PURE__ */ new Set();
|
|
175
|
+
function scheduleRafJob(job) {
|
|
176
|
+
rafJobs.add(job);
|
|
177
|
+
return () => rafJobs.delete(job);
|
|
178
|
+
}
|
|
179
|
+
function setAttributeIfEmpty(target, name, value) {
|
|
180
|
+
if (!target.hasAttribute(name)) target.setAttribute(name, value);
|
|
181
|
+
}
|
|
182
|
+
function setARIALabel(target, $label) {
|
|
183
|
+
if (target.hasAttribute("aria-label") || target.hasAttribute("data-no-label")) return;
|
|
184
|
+
if (!isFunction($label)) {
|
|
185
|
+
setAttribute(target, "aria-label", $label);
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
function updateAriaDescription() {
|
|
189
|
+
setAttribute(target, "aria-label", $label());
|
|
190
|
+
}
|
|
191
|
+
updateAriaDescription();
|
|
192
|
+
}
|
|
193
|
+
function isElementVisible(el) {
|
|
194
|
+
const style = getComputedStyle(el);
|
|
195
|
+
return style.display !== "none" && parseInt(style.opacity) > 0;
|
|
196
|
+
}
|
|
197
|
+
function checkVisibility(el) {
|
|
198
|
+
return !!el && ("checkVisibility" in el ? el.checkVisibility({ checkOpacity: true, checkVisibilityCSS: true }) : isElementVisible(el));
|
|
199
|
+
}
|
|
200
|
+
function observeVisibility(el, callback) {
|
|
201
|
+
return scheduleRafJob(() => callback(checkVisibility(el)));
|
|
202
|
+
}
|
|
203
|
+
function isElementParent(owner, node, test) {
|
|
204
|
+
while (node) {
|
|
205
|
+
if (node === owner) {
|
|
206
|
+
return true;
|
|
207
|
+
} else if (test?.(node)) {
|
|
208
|
+
break;
|
|
209
|
+
} else {
|
|
210
|
+
node = node.parentElement;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
function onPress(target, handler) {
|
|
216
|
+
return new EventsController(target).add("pointerup", (event) => {
|
|
217
|
+
if (event.button === 0 && !event.defaultPrevented) handler(event);
|
|
218
|
+
}).add("keydown", (event) => {
|
|
219
|
+
if (isKeyboardClick(event)) handler(event);
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
function isTouchPinchEvent(event) {
|
|
223
|
+
return isTouchEvent(event) && (event.touches.length > 1 || event.changedTouches.length > 1);
|
|
224
|
+
}
|
|
225
|
+
function requestScopedAnimationFrame(callback) {
|
|
226
|
+
return callback();
|
|
227
|
+
}
|
|
228
|
+
function cloneTemplate(template, length, onCreate) {
|
|
229
|
+
let current, prev = template, parent = template.parentElement, content = template.content.firstElementChild, elements = [];
|
|
230
|
+
if (!content && template.firstElementChild) {
|
|
231
|
+
template.innerHTML = template.firstElementChild.outerHTML;
|
|
232
|
+
template.firstElementChild.remove();
|
|
233
|
+
content = template.content.firstElementChild;
|
|
234
|
+
}
|
|
235
|
+
for (let i = 0; i < length; i++) {
|
|
236
|
+
current = document.importNode(content, true);
|
|
237
|
+
onCreate?.(current, i);
|
|
238
|
+
parent.insertBefore(current, prev.nextSibling);
|
|
239
|
+
elements.push(current);
|
|
240
|
+
prev = current;
|
|
241
|
+
}
|
|
242
|
+
onDispose(() => {
|
|
243
|
+
for (let i = 0; i < elements.length; i++) elements[i].remove();
|
|
244
|
+
});
|
|
245
|
+
return elements;
|
|
246
|
+
}
|
|
247
|
+
function createTemplate(content) {
|
|
248
|
+
const template = document.createElement("template");
|
|
249
|
+
template.innerHTML = content;
|
|
250
|
+
return template.content;
|
|
251
|
+
}
|
|
252
|
+
function cloneTemplateContent(content) {
|
|
253
|
+
const fragment = content.cloneNode(true);
|
|
254
|
+
return fragment.firstElementChild;
|
|
255
|
+
}
|
|
256
|
+
function autoPlacement(el, trigger, placement, {
|
|
257
|
+
offsetVarName,
|
|
258
|
+
xOffset,
|
|
259
|
+
yOffset,
|
|
260
|
+
...options
|
|
261
|
+
}) {
|
|
262
|
+
if (!el) return;
|
|
263
|
+
const floatingPlacement = placement.replace(" ", "-").replace("-center", "");
|
|
264
|
+
setStyle(el, "visibility", !trigger ? "hidden" : null);
|
|
265
|
+
if (!trigger) return;
|
|
266
|
+
let isTop = placement.includes("top");
|
|
267
|
+
const negateX = (x) => placement.includes("left") ? `calc(-1 * ${x})` : x, negateY = (y) => isTop ? `calc(-1 * ${y})` : y;
|
|
268
|
+
return autoUpdate(trigger, el, () => {
|
|
269
|
+
computePosition(trigger, el, {
|
|
270
|
+
placement: floatingPlacement,
|
|
271
|
+
middleware: [
|
|
272
|
+
...options.middleware ?? [],
|
|
273
|
+
flip({ fallbackAxisSideDirection: "start", crossAxis: false }),
|
|
274
|
+
shift()
|
|
275
|
+
],
|
|
276
|
+
...options
|
|
277
|
+
}).then(({ x, y, middlewareData }) => {
|
|
278
|
+
const hasFlipped = !!middlewareData.flip?.index;
|
|
279
|
+
isTop = placement.includes(hasFlipped ? "bottom" : "top");
|
|
280
|
+
el.setAttribute(
|
|
281
|
+
"data-placement",
|
|
282
|
+
hasFlipped ? placement.startsWith("top") ? placement.replace("top", "bottom") : placement.replace("bottom", "top") : placement
|
|
283
|
+
);
|
|
284
|
+
Object.assign(el.style, {
|
|
285
|
+
top: `calc(${y + "px"} + ${negateY(
|
|
286
|
+
yOffset ? yOffset + "px" : `var(--${offsetVarName}-y-offset, 0px)`
|
|
287
|
+
)})`,
|
|
288
|
+
left: `calc(${x + "px"} + ${negateX(
|
|
289
|
+
xOffset ? xOffset + "px" : `var(--${offsetVarName}-x-offset, 0px)`
|
|
290
|
+
)})`
|
|
291
|
+
});
|
|
292
|
+
});
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
function hasAnimation(el) {
|
|
296
|
+
const styles = getComputedStyle(el);
|
|
297
|
+
return styles.animationName !== "none";
|
|
298
|
+
}
|
|
299
|
+
function createSlot(name) {
|
|
300
|
+
const slot = document.createElement("slot");
|
|
301
|
+
slot.name = name;
|
|
302
|
+
return slot;
|
|
303
|
+
}
|
|
304
|
+
function useTransitionActive($el) {
|
|
305
|
+
const $active = signal(false);
|
|
306
|
+
effect(() => {
|
|
307
|
+
const el = $el();
|
|
308
|
+
if (!el) return;
|
|
309
|
+
new EventsController(el).add("transitionstart", () => $active.set(true)).add("transitionend", () => $active.set(false));
|
|
310
|
+
});
|
|
311
|
+
return $active;
|
|
312
|
+
}
|
|
313
|
+
function useResizeObserver($el, onResize) {
|
|
314
|
+
function onElementChange() {
|
|
315
|
+
const el = $el();
|
|
316
|
+
if (!el) return;
|
|
317
|
+
onResize();
|
|
318
|
+
const observer = new ResizeObserver(animationFrameThrottle());
|
|
319
|
+
observer.observe(el);
|
|
320
|
+
return () => observer.disconnect();
|
|
321
|
+
}
|
|
322
|
+
effect(onElementChange);
|
|
323
|
+
}
|
|
324
|
+
function useActive($el) {
|
|
325
|
+
const $isMouseEnter = useMouseEnter($el), $isFocusedIn = useFocusIn($el);
|
|
326
|
+
let prevMouseEnter = false;
|
|
327
|
+
return computed(() => {
|
|
328
|
+
const isMouseEnter = $isMouseEnter();
|
|
329
|
+
if (prevMouseEnter && !isMouseEnter) return false;
|
|
330
|
+
prevMouseEnter = isMouseEnter;
|
|
331
|
+
return isMouseEnter || $isFocusedIn();
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
function useMouseEnter($el) {
|
|
335
|
+
const $isMouseEnter = signal(false);
|
|
336
|
+
effect(() => {
|
|
337
|
+
const el = $el();
|
|
338
|
+
if (!el) {
|
|
339
|
+
$isMouseEnter.set(false);
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
new EventsController(el).add("mouseenter", () => $isMouseEnter.set(true)).add("mouseleave", () => $isMouseEnter.set(false));
|
|
343
|
+
});
|
|
344
|
+
return $isMouseEnter;
|
|
345
|
+
}
|
|
346
|
+
function useFocusIn($el) {
|
|
347
|
+
const $isFocusIn = signal(false);
|
|
348
|
+
effect(() => {
|
|
349
|
+
const el = $el();
|
|
350
|
+
if (!el) {
|
|
351
|
+
$isFocusIn.set(false);
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
new EventsController(el).add("focusin", () => $isFocusIn.set(true)).add("focusout", () => $isFocusIn.set(false));
|
|
355
|
+
});
|
|
356
|
+
return $isFocusIn;
|
|
357
|
+
}
|
|
358
|
+
function isHTMLElement(el) {
|
|
359
|
+
return el instanceof HTMLElement;
|
|
360
|
+
}
|
|
361
|
+
function useColorSchemePreference() {
|
|
362
|
+
const colorScheme = signal("dark");
|
|
363
|
+
return colorScheme;
|
|
364
|
+
}
|
|
365
|
+
function watchColorScheme(el, colorScheme) {
|
|
366
|
+
effect(() => {
|
|
367
|
+
const scheme = colorScheme();
|
|
368
|
+
if (scheme === "system") {
|
|
369
|
+
const preference = useColorSchemePreference();
|
|
370
|
+
effect(() => updateColorScheme(preference()));
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
updateColorScheme(scheme);
|
|
374
|
+
});
|
|
375
|
+
function updateColorScheme(scheme) {
|
|
376
|
+
toggleClass(el, "light", scheme === "light");
|
|
377
|
+
toggleClass(el, "dark", scheme === "dark");
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
export { AUDIO_EXTENSIONS, AUDIO_TYPES, DASH_VIDEO_EXTENSIONS, DASH_VIDEO_TYPES, HLS_VIDEO_EXTENSIONS, HLS_VIDEO_TYPES, VIDEO_EXTENSIONS, VIDEO_TYPES, appendParamsToURL, autoPlacement, canGoogleCastSrc, cloneTemplate, cloneTemplateContent, createSlot, createTemplate, findActiveCue, getDownloadFile, getRequestCredentials, hasAnimation, isAudioSrc, isCueActive, isDASHSrc, isElementParent, isEventInside, isHLSSrc, isHTMLElement, isMediaStream, isTouchPinchEvent, isVideoSrc, loadScript, mediaContext, observeVisibility, onPress, preconnect, requestScopedAnimationFrame, setARIALabel, setAttributeIfEmpty, useActive, useMediaContext, useMediaState, useResizeObserver, useTransitionActive, watchActiveTextTrack, watchColorScheme, watchCueTextChange };
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
var airplay = `<g><path d="M16,1 L2,1 C1.447,1 1,1.447 1,2 L1,12 C1,12.553 1.447,13 2,13 L5,13 L5,11 L3,11 L3,3 L15,3 L15,11 L13,11 L13,13 L16,13 C16.553,13 17,12.553 17,12 L17,2 C17,1.447 16.553,1 16,1 L16,1 Z"></path><polygon points="4 17 14 17 9 11"></polygon></g>`;
|
|
2
|
+
|
|
3
|
+
var captionsOff = `<g fill-rule="evenodd" fill-opacity="0.5"><path d="M1,1 C0.4,1 0,1.4 0,2 L0,13 C0,13.6 0.4,14 1,14 L5.6,14 L8.3,16.7 C8.5,16.9 8.7,17 9,17 C9.3,17 9.5,16.9 9.7,16.7 L12.4,14 L17,14 C17.6,14 18,13.6 18,13 L18,2 C18,1.4 17.6,1 17,1 L1,1 Z M5.52,11.15 C7.51,11.15 8.53,9.83 8.8,8.74 L7.51,8.35 C7.32,9.01 6.73,9.8 5.52,9.8 C4.38,9.8 3.32,8.97 3.32,7.46 C3.32,5.85 4.44,5.09 5.5,5.09 C6.73,5.09 7.28,5.84 7.45,6.52 L8.75,6.11 C8.47,4.96 7.46,3.76 5.5,3.76 C3.6,3.76 1.89,5.2 1.89,7.46 C1.89,9.72 3.54,11.15 5.52,11.15 Z M13.09,11.15 C15.08,11.15 16.1,9.83 16.37,8.74 L15.08,8.35 C14.89,9.01 14.3,9.8 13.09,9.8 C11.95,9.8 10.89,8.97 10.89,7.46 C10.89,5.85 12.01,5.09 13.07,5.09 C14.3,5.09 14.85,5.84 15.02,6.52 L16.32,6.11 C16.04,4.96 15.03,3.76 13.07,3.76 C11.17,3.76 9.46,5.2 9.46,7.46 C9.46,9.72 11.11,11.15 13.09,11.15 Z"></path></g>`;
|
|
4
|
+
|
|
5
|
+
var captionsOn = `<g fill-rule="evenodd"><path d="M1,1 C0.4,1 0,1.4 0,2 L0,13 C0,13.6 0.4,14 1,14 L5.6,14 L8.3,16.7 C8.5,16.9 8.7,17 9,17 C9.3,17 9.5,16.9 9.7,16.7 L12.4,14 L17,14 C17.6,14 18,13.6 18,13 L18,2 C18,1.4 17.6,1 17,1 L1,1 Z M5.52,11.15 C7.51,11.15 8.53,9.83 8.8,8.74 L7.51,8.35 C7.32,9.01 6.73,9.8 5.52,9.8 C4.38,9.8 3.32,8.97 3.32,7.46 C3.32,5.85 4.44,5.09 5.5,5.09 C6.73,5.09 7.28,5.84 7.45,6.52 L8.75,6.11 C8.47,4.96 7.46,3.76 5.5,3.76 C3.6,3.76 1.89,5.2 1.89,7.46 C1.89,9.72 3.54,11.15 5.52,11.15 Z M13.09,11.15 C15.08,11.15 16.1,9.83 16.37,8.74 L15.08,8.35 C14.89,9.01 14.3,9.8 13.09,9.8 C11.95,9.8 10.89,8.97 10.89,7.46 C10.89,5.85 12.01,5.09 13.07,5.09 C14.3,5.09 14.85,5.84 15.02,6.52 L16.32,6.11 C16.04,4.96 15.03,3.76 13.07,3.76 C11.17,3.76 9.46,5.2 9.46,7.46 C9.46,9.72 11.11,11.15 13.09,11.15 Z"></path></g>`;
|
|
6
|
+
|
|
7
|
+
var download = `<g transform="translate(2 1)"><path d="M7,12 C7.3,12 7.5,11.9 7.7,11.7 L13.4,6 L12,4.6 L8,8.6 L8,0 L6,0 L6,8.6 L2,4.6 L0.6,6 L6.3,11.7 C6.5,11.9 6.7,12 7,12 Z" /><rect width="14" height="2" y="14" /></g>`;
|
|
8
|
+
|
|
9
|
+
var exitFullscreen = `<polygon points="10 3 13.6 3 9.6 7 11 8.4 15 4.4 15 8 17 8 17 1 10 1"></polygon><polygon points="7 9.6 3 13.6 3 10 1 10 1 17 8 17 8 15 4.4 15 8.4 11"></polygon>`;
|
|
10
|
+
|
|
11
|
+
var enterFullscreen = `<polygon points="1 12 4.6 12 0.6 16 2 17.4 6 13.4 6 17 8 17 8 10 1 10"></polygon><polygon points="16 0.6 12 4.6 12 1 10 1 10 8 17 8 17 6 13.4 6 17.4 2"></polygon>`;
|
|
12
|
+
|
|
13
|
+
var fastForward = `<polygon points="7.875 7.17142857 0 1 0 17 7.875 10.8285714 7.875 17 18 9 7.875 1"></polygon>`;
|
|
14
|
+
|
|
15
|
+
var muted = `<polygon points="12.4 12.5 14.5 10.4 16.6 12.5 18 11.1 15.9 9 18 6.9 16.6 5.5 14.5 7.6 12.4 5.5 11 6.9 13.1 9 11 11.1"></polygon><path d="M3.78571429,6.00820648 L0.714285714,6.00820648 C0.285714286,6.00820648 0,6.30901277 0,6.76022222 L0,11.2723167 C0,11.7235261 0.285714286,12.0243324 0.714285714,12.0243324 L3.78571429,12.0243324 L7.85714286,15.8819922 C8.35714286,16.1827985 9,15.8819922 9,15.2803796 L9,2.75215925 C9,2.15054666 8.35714286,1.77453879 7.85714286,2.15054666 L3.78571429,6.00820648 Z"></path>`;
|
|
16
|
+
|
|
17
|
+
var pause = `<path d="M6,1 L3,1 C2.4,1 2,1.4 2,2 L2,16 C2,16.6 2.4,17 3,17 L6,17 C6.6,17 7,16.6 7,16 L7,2 C7,1.4 6.6,1 6,1 L6,1 Z"></path><path d="M12,1 C11.4,1 11,1.4 11,2 L11,16 C11,16.6 11.4,17 12,17 L15,17 C15.6,17 16,16.6 16,16 L16,2 C16,1.4 15.6,1 15,1 L12,1 Z"></path>`;
|
|
18
|
+
|
|
19
|
+
var pip = `<polygon points="13.293 3.293 7.022 9.564 8.436 10.978 14.707 4.707 17 7 17 1 11 1"></polygon><path d="M13,15 L3,15 L3,5 L8,5 L8,3 L2,3 C1.448,3 1,3.448 1,4 L1,16 C1,16.552 1.448,17 2,17 L14,17 C14.552,17 15,16.552 15,16 L15,10 L13,10 L13,15 L13,15 Z"></path>`;
|
|
20
|
+
|
|
21
|
+
var play = `<path d="M15.5615866,8.10002147 L3.87056367,0.225209313 C3.05219207,-0.33727727 2,0.225209313 2,1.12518784 L2,16.8748122 C2,17.7747907 3.05219207,18.3372773 3.87056367,17.7747907 L15.5615866,9.89997853 C16.1461378,9.44998927 16.1461378,8.55001073 15.5615866,8.10002147 L15.5615866,8.10002147 Z"></path>`;
|
|
22
|
+
|
|
23
|
+
var restart = `<path d="M9.7,1.2 L10.4,7.6 L12.5,5.5 C14.4,7.4 14.4,10.6 12.5,12.5 C11.6,13.5 10.3,14 9,14 C7.7,14 6.4,13.5 5.5,12.5 C3.6,10.6 3.6,7.4 5.5,5.5 C6.1,4.9 6.9,4.4 7.8,4.2 L7.2,2.3 C6,2.6 4.9,3.2 4,4.1 C1.3,6.8 1.3,11.2 4,14 C5.3,15.3 7.1,16 8.9,16 C10.8,16 12.5,15.3 13.8,14 C16.5,11.3 16.5,6.9 13.8,4.1 L16,1.9 L9.7,1.2 L9.7,1.2 Z"></path>`;
|
|
24
|
+
|
|
25
|
+
var rewind = `<polygon points="10.125 1 0 9 10.125 17 10.125 10.8285714 18 17 18 1 10.125 7.17142857"></polygon>`;
|
|
26
|
+
|
|
27
|
+
var settings = `<path d="M16.135,7.784 C14.832,7.458 14.214,5.966 14.905,4.815 C15.227,4.279 15.13,3.817 14.811,3.499 L14.501,3.189 C14.183,2.871 13.721,2.774 13.185,3.095 C12.033,3.786 10.541,3.168 10.216,1.865 C10.065,1.258 9.669,1 9.219,1 L8.781,1 C8.331,1 7.936,1.258 7.784,1.865 C7.458,3.168 5.966,3.786 4.815,3.095 C4.279,2.773 3.816,2.87 3.498,3.188 L3.188,3.498 C2.87,3.816 2.773,4.279 3.095,4.815 C3.786,5.967 3.168,7.459 1.865,7.784 C1.26,7.935 1,8.33 1,8.781 L1,9.219 C1,9.669 1.258,10.064 1.865,10.216 C3.168,10.542 3.786,12.034 3.095,13.185 C2.773,13.721 2.87,14.183 3.189,14.501 L3.499,14.811 C3.818,15.13 4.281,15.226 4.815,14.905 C5.967,14.214 7.459,14.832 7.784,16.135 C7.935,16.742 8.331,17 8.781,17 L9.219,17 C9.669,17 10.064,16.742 10.216,16.135 C10.542,14.832 12.034,14.214 13.185,14.905 C13.72,15.226 14.182,15.13 14.501,14.811 L14.811,14.501 C15.129,14.183 15.226,13.72 14.905,13.185 C14.214,12.033 14.832,10.541 16.135,10.216 C16.742,10.065 17,9.669 17,9.219 L17,8.781 C17,8.33 16.74,7.935 16.135,7.784 L16.135,7.784 Z M9,12 C7.343,12 6,10.657 6,9 C6,7.343 7.343,6 9,6 C10.657,6 12,7.343 12,9 C12,10.657 10.657,12 9,12 L9,12 Z"></path>`;
|
|
28
|
+
|
|
29
|
+
var volume = `<path d="M15.5999996,3.3 C15.1999996,2.9 14.5999996,2.9 14.1999996,3.3 C13.7999996,3.7 13.7999996,4.3 14.1999996,4.7 C15.3999996,5.9 15.9999996,7.4 15.9999996,9 C15.9999996,10.6 15.3999996,12.1 14.1999996,13.3 C13.7999996,13.7 13.7999996,14.3 14.1999996,14.7 C14.3999996,14.9 14.6999996,15 14.8999996,15 C15.1999996,15 15.3999996,14.9 15.5999996,14.7 C17.0999996,13.2 17.9999996,11.2 17.9999996,9 C17.9999996,6.8 17.0999996,4.8 15.5999996,3.3 L15.5999996,3.3 Z"></path><path d="M11.2819745,5.28197449 C10.9060085,5.65794047 10.9060085,6.22188944 11.2819745,6.59785542 C12.0171538,7.33303477 12.2772954,8.05605449 12.2772954,9.00000021 C12.2772954,9.93588462 11.851678,10.9172014 11.2819745,11.4869049 C10.9060085,11.8628709 10.9060085,12.4268199 11.2819745,12.8027859 C11.4271642,12.9479755 11.9176724,13.0649528 12.2998149,12.9592565 C12.4124479,12.9281035 12.5156669,12.8776063 12.5978555,12.8027859 C13.773371,11.732654 14.1311161,10.1597914 14.1312523,9.00000021 C14.1312723,8.8299555 14.1286311,8.66015647 14.119665,8.4897429 C14.0674781,7.49784946 13.8010171,6.48513613 12.5978554,5.28197449 C12.2218894,4.9060085 11.6579405,4.9060085 11.2819745,5.28197449 Z"></path><path d="M3.78571429,6.00820648 L0.714285714,6.00820648 C0.285714286,6.00820648 0,6.30901277 0,6.76022222 L0,11.2723167 C0,11.7235261 0.285714286,12.0243324 0.714285714,12.0243324 L3.78571429,12.0243324 L7.85714286,15.8819922 C8.35714286,16.1827985 9,15.8819922 9,15.2803796 L9,2.75215925 C9,2.15054666 8.35714286,1.77453879 7.85714286,2.15054666 L3.78571429,6.00820648 Z"></path>`;
|
|
30
|
+
|
|
31
|
+
const icons = {
|
|
32
|
+
airplay,
|
|
33
|
+
"captions-off": captionsOff,
|
|
34
|
+
"captions-on": captionsOn,
|
|
35
|
+
download,
|
|
36
|
+
"enter-fullscreen": enterFullscreen,
|
|
37
|
+
"exit-fullscreen": exitFullscreen,
|
|
38
|
+
"fast-forward": fastForward,
|
|
39
|
+
muted,
|
|
40
|
+
pause,
|
|
41
|
+
"enter-pip": pip,
|
|
42
|
+
"exit-pip": pip,
|
|
43
|
+
play,
|
|
44
|
+
restart,
|
|
45
|
+
rewind,
|
|
46
|
+
settings,
|
|
47
|
+
volume
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export { icons };
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { Host, effect, computed, setAttribute } from './vidstack-Wn3NH5Sg.js';
|
|
2
|
+
import { MediaProvider, MediaPlayer } from './vidstack-BvLV0SMz.js';
|
|
3
|
+
import { useMediaContext } from './vidstack-DLU3cjcp.js';
|
|
4
|
+
|
|
5
|
+
class MediaProviderElement extends Host(HTMLElement, MediaProvider) {
|
|
6
|
+
static tagName = "media-provider";
|
|
7
|
+
#media;
|
|
8
|
+
#target = null;
|
|
9
|
+
#blocker = null;
|
|
10
|
+
onSetup() {
|
|
11
|
+
this.#media = useMediaContext();
|
|
12
|
+
this.setAttribute("keep-alive", "");
|
|
13
|
+
}
|
|
14
|
+
onDestroy() {
|
|
15
|
+
this.#blocker?.remove();
|
|
16
|
+
this.#blocker = null;
|
|
17
|
+
this.#target?.remove();
|
|
18
|
+
this.#target = null;
|
|
19
|
+
}
|
|
20
|
+
onConnect() {
|
|
21
|
+
effect(() => {
|
|
22
|
+
const loader = this.$state.loader(), isYouTubeEmbed = loader?.name === "youtube", isVimeoEmbed = loader?.name === "vimeo", isEmbed = isYouTubeEmbed || isVimeoEmbed, isGoogleCast = loader?.name === "google-cast";
|
|
23
|
+
const target = loader ? isGoogleCast ? this.#createGoogleCastContainer() : isEmbed ? this.#createIFrame() : loader.mediaType() === "audio" ? this.#createAudio() : this.#createVideo() : null;
|
|
24
|
+
if (this.#target !== target) {
|
|
25
|
+
const parent = this.#target?.parentElement ?? this;
|
|
26
|
+
this.#target?.remove();
|
|
27
|
+
this.#target = target;
|
|
28
|
+
if (target) parent.prepend(target);
|
|
29
|
+
if (isEmbed && target) {
|
|
30
|
+
effect(() => {
|
|
31
|
+
const { nativeControls, viewType } = this.#media.$state, showNativeControls = nativeControls(), isAudioView = viewType() === "audio", showBlocker = !showNativeControls && !isAudioView;
|
|
32
|
+
if (showBlocker) {
|
|
33
|
+
this.#blocker = this.querySelector(".vds-blocker");
|
|
34
|
+
if (!this.#blocker) {
|
|
35
|
+
this.#blocker = document.createElement("div");
|
|
36
|
+
this.#blocker.classList.add("vds-blocker");
|
|
37
|
+
target.after(this.#blocker);
|
|
38
|
+
}
|
|
39
|
+
} else {
|
|
40
|
+
this.#blocker?.remove();
|
|
41
|
+
this.#blocker = null;
|
|
42
|
+
}
|
|
43
|
+
setAttribute(target, "data-no-controls", !showNativeControls);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (isYouTubeEmbed) target?.classList.add("vds-youtube");
|
|
48
|
+
else if (isVimeoEmbed) target?.classList.add("vds-vimeo");
|
|
49
|
+
if (!isEmbed) {
|
|
50
|
+
this.#blocker?.remove();
|
|
51
|
+
this.#blocker = null;
|
|
52
|
+
}
|
|
53
|
+
this.load(target);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
#createAudio() {
|
|
57
|
+
const audio = this.#target instanceof HTMLAudioElement ? this.#target : document.createElement("audio");
|
|
58
|
+
const { controls, crossOrigin } = this.#media.$state;
|
|
59
|
+
effect(() => {
|
|
60
|
+
setAttribute(audio, "controls", controls());
|
|
61
|
+
setAttribute(audio, "crossorigin", crossOrigin());
|
|
62
|
+
});
|
|
63
|
+
return audio;
|
|
64
|
+
}
|
|
65
|
+
#createVideo() {
|
|
66
|
+
const video = this.#target instanceof HTMLVideoElement ? this.#target : document.createElement("video");
|
|
67
|
+
const { crossOrigin, poster, nativeControls } = this.#media.$state, $controls = computed(() => nativeControls() ? "true" : null), $poster = computed(() => poster() && nativeControls() ? poster() : null);
|
|
68
|
+
effect(() => {
|
|
69
|
+
setAttribute(video, "controls", $controls());
|
|
70
|
+
setAttribute(video, "crossorigin", crossOrigin());
|
|
71
|
+
setAttribute(video, "poster", $poster());
|
|
72
|
+
});
|
|
73
|
+
return video;
|
|
74
|
+
}
|
|
75
|
+
#createIFrame() {
|
|
76
|
+
const iframe = this.#target instanceof HTMLIFrameElement ? this.#target : document.createElement("iframe"), { nativeControls } = this.#media.$state;
|
|
77
|
+
effect(() => setAttribute(iframe, "tabindex", !nativeControls() ? -1 : null));
|
|
78
|
+
return iframe;
|
|
79
|
+
}
|
|
80
|
+
#createGoogleCastContainer() {
|
|
81
|
+
if (this.#target?.classList.contains("vds-google-cast")) {
|
|
82
|
+
return this.#target;
|
|
83
|
+
}
|
|
84
|
+
const container = document.createElement("div");
|
|
85
|
+
container.classList.add("vds-google-cast");
|
|
86
|
+
import('./vidstack-6juFdkKy.js').then(({ insertContent }) => {
|
|
87
|
+
insertContent(container, this.#media.$state);
|
|
88
|
+
});
|
|
89
|
+
return container;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
class MediaPlayerElement extends Host(HTMLElement, MediaPlayer) {
|
|
94
|
+
static tagName = "media-player";
|
|
95
|
+
static attrs = {
|
|
96
|
+
autoPlay: "autoplay",
|
|
97
|
+
crossOrigin: "crossorigin",
|
|
98
|
+
playsInline: "playsinline",
|
|
99
|
+
preferNativeHLS: "prefer-native-hls",
|
|
100
|
+
minLiveDVRWindow: "min-live-dvr-window"
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export { MediaPlayerElement, MediaProviderElement };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
const videoIdRE = /(?:youtu\.be|youtube|youtube\.com|youtube-nocookie\.com)(?:\/shorts)?\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=|)((?:\w|-){11})/;
|
|
2
|
+
const posterCache = /* @__PURE__ */ new Map();
|
|
3
|
+
const pendingFetch = /* @__PURE__ */ new Map();
|
|
4
|
+
function resolveYouTubeVideoId(src) {
|
|
5
|
+
return src.match(videoIdRE)?.[1];
|
|
6
|
+
}
|
|
7
|
+
async function findYouTubePoster(videoId, abort) {
|
|
8
|
+
if (posterCache.has(videoId)) return posterCache.get(videoId);
|
|
9
|
+
if (pendingFetch.has(videoId)) return pendingFetch.get(videoId);
|
|
10
|
+
const pending = new Promise(async (resolve) => {
|
|
11
|
+
const sizes = ["maxresdefault", "sddefault", "hqdefault"];
|
|
12
|
+
for (const size of sizes) {
|
|
13
|
+
for (const webp of [true, false]) {
|
|
14
|
+
const url = resolveYouTubePosterURL(videoId, size, webp), response = await fetch(url, {
|
|
15
|
+
mode: "no-cors",
|
|
16
|
+
signal: abort.signal
|
|
17
|
+
});
|
|
18
|
+
if (response.status < 400) {
|
|
19
|
+
posterCache.set(videoId, url);
|
|
20
|
+
resolve(url);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}).catch(() => "").finally(() => pendingFetch.delete(videoId));
|
|
26
|
+
pendingFetch.set(videoId, pending);
|
|
27
|
+
return pending;
|
|
28
|
+
}
|
|
29
|
+
function resolveYouTubePosterURL(videoId, size, webp) {
|
|
30
|
+
const type = webp ? "webp" : "jpg";
|
|
31
|
+
return `https://i.ytimg.com/${webp ? "vi_webp" : "vi"}/${videoId}/${size}.${type}`;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export { findYouTubePoster, resolveYouTubeVideoId };
|