@reacttv/embed-kit 0.4.6
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 +65 -0
- package/dist/elements/_base/EmbedVideoElement.d.ts +84 -0
- package/dist/elements/_base/EmbedVideoElement.d.ts.map +1 -0
- package/dist/elements/_base/EmbedVideoElement.js +246 -0
- package/dist/elements/_base/EmbedVideoElement.js.map +1 -0
- package/dist/elements/_base/createIframe.d.ts +7 -0
- package/dist/elements/_base/createIframe.d.ts.map +1 -0
- package/dist/elements/_base/createIframe.js +14 -0
- package/dist/elements/_base/createIframe.js.map +1 -0
- package/dist/elements/_base/index.d.ts +5 -0
- package/dist/elements/_base/index.d.ts.map +1 -0
- package/dist/elements/_base/index.js +5 -0
- package/dist/elements/_base/index.js.map +1 -0
- package/dist/elements/_base/loadScript.d.ts +21 -0
- package/dist/elements/_base/loadScript.d.ts.map +1 -0
- package/dist/elements/_base/loadScript.js +24 -0
- package/dist/elements/_base/loadScript.js.map +1 -0
- package/dist/elements/_base/player.types.d.ts +59 -0
- package/dist/elements/_base/player.types.d.ts.map +1 -0
- package/dist/elements/_base/player.types.js +16 -0
- package/dist/elements/_base/player.types.js.map +1 -0
- package/dist/elements/dailymotion/constants.d.ts +15 -0
- package/dist/elements/dailymotion/constants.d.ts.map +1 -0
- package/dist/elements/dailymotion/constants.js +15 -0
- package/dist/elements/dailymotion/constants.js.map +1 -0
- package/dist/elements/dailymotion/player.d.ts +2 -0
- package/dist/elements/dailymotion/player.d.ts.map +1 -0
- package/dist/elements/dailymotion/player.js +268 -0
- package/dist/elements/dailymotion/player.js.map +1 -0
- package/dist/elements/dailymotion/player.types.d.ts +144 -0
- package/dist/elements/dailymotion/player.types.d.ts.map +1 -0
- package/dist/elements/dailymotion/player.types.js +4 -0
- package/dist/elements/dailymotion/player.types.js.map +1 -0
- package/dist/elements/tiktok/constants.d.ts +19 -0
- package/dist/elements/tiktok/constants.d.ts.map +1 -0
- package/dist/elements/tiktok/constants.js +19 -0
- package/dist/elements/tiktok/constants.js.map +1 -0
- package/dist/elements/tiktok/player.d.ts +2 -0
- package/dist/elements/tiktok/player.d.ts.map +1 -0
- package/dist/elements/tiktok/player.js +224 -0
- package/dist/elements/tiktok/player.js.map +1 -0
- package/dist/elements/twitch/constants.d.ts +61 -0
- package/dist/elements/twitch/constants.d.ts.map +1 -0
- package/dist/elements/twitch/constants.js +61 -0
- package/dist/elements/twitch/constants.js.map +1 -0
- package/dist/elements/twitch/player.d.ts +2 -0
- package/dist/elements/twitch/player.d.ts.map +1 -0
- package/dist/elements/twitch/player.js +262 -0
- package/dist/elements/twitch/player.js.map +1 -0
- package/dist/elements/twitch/player.types.d.ts +76 -0
- package/dist/elements/twitch/player.types.d.ts.map +1 -0
- package/dist/elements/twitch/player.types.js +7 -0
- package/dist/elements/twitch/player.types.js.map +1 -0
- package/dist/elements/vimeo/constants.d.ts +27 -0
- package/dist/elements/vimeo/constants.d.ts.map +1 -0
- package/dist/elements/vimeo/constants.js +29 -0
- package/dist/elements/vimeo/constants.js.map +1 -0
- package/dist/elements/vimeo/player.d.ts +9 -0
- package/dist/elements/vimeo/player.d.ts.map +1 -0
- package/dist/elements/vimeo/player.js +217 -0
- package/dist/elements/vimeo/player.js.map +1 -0
- package/dist/elements/vimeo/player.types.d.ts +38 -0
- package/dist/elements/vimeo/player.types.d.ts.map +1 -0
- package/dist/elements/vimeo/player.types.js +6 -0
- package/dist/elements/vimeo/player.types.js.map +1 -0
- package/dist/elements/youtube/constants.d.ts +15 -0
- package/dist/elements/youtube/constants.d.ts.map +1 -0
- package/dist/elements/youtube/constants.js +15 -0
- package/dist/elements/youtube/constants.js.map +1 -0
- package/dist/elements/youtube/helpers/parseYouTubeUrl.d.ts +4 -0
- package/dist/elements/youtube/helpers/parseYouTubeUrl.d.ts.map +1 -0
- package/dist/elements/youtube/helpers/parseYouTubeUrl.js +10 -0
- package/dist/elements/youtube/helpers/parseYouTubeUrl.js.map +1 -0
- package/dist/elements/youtube/player.d.ts +2 -0
- package/dist/elements/youtube/player.d.ts.map +1 -0
- package/dist/elements/youtube/player.js +213 -0
- package/dist/elements/youtube/player.js.map +1 -0
- package/dist/elements/youtube/player.types.d.ts +79 -0
- package/dist/elements/youtube/player.types.d.ts.map +1 -0
- package/dist/elements/youtube/player.types.js +8 -0
- package/dist/elements/youtube/player.types.js.map +1 -0
- package/dist/react-embed-kit/HtmlPlayer.d.ts +23 -0
- package/dist/react-embed-kit/HtmlPlayer.d.ts.map +1 -0
- package/dist/react-embed-kit/HtmlPlayer.js +61 -0
- package/dist/react-embed-kit/HtmlPlayer.js.map +1 -0
- package/dist/react-embed-kit/ReactEmbedKit.d.ts +28 -0
- package/dist/react-embed-kit/ReactEmbedKit.d.ts.map +1 -0
- package/dist/react-embed-kit/ReactEmbedKit.js +114 -0
- package/dist/react-embed-kit/ReactEmbedKit.js.map +1 -0
- package/dist/react-embed-kit/constants.d.ts +3 -0
- package/dist/react-embed-kit/constants.d.ts.map +1 -0
- package/dist/react-embed-kit/constants.js +3 -0
- package/dist/react-embed-kit/constants.js.map +1 -0
- package/dist/react-embed-kit/embed-elements.d.ts +64 -0
- package/dist/react-embed-kit/embed-elements.d.ts.map +1 -0
- package/dist/react-embed-kit/embed-elements.js +2 -0
- package/dist/react-embed-kit/embed-elements.js.map +1 -0
- package/dist/react-embed-kit/index.d.ts +6 -0
- package/dist/react-embed-kit/index.d.ts.map +1 -0
- package/dist/react-embed-kit/index.js +4 -0
- package/dist/react-embed-kit/index.js.map +1 -0
- package/dist/react-embed-kit/providers.d.ts +22 -0
- package/dist/react-embed-kit/providers.d.ts.map +1 -0
- package/dist/react-embed-kit/providers.js +72 -0
- package/dist/react-embed-kit/providers.js.map +1 -0
- package/dist/react-embed-kit/registerEmbedElements.d.ts +11 -0
- package/dist/react-embed-kit/registerEmbedElements.d.ts.map +1 -0
- package/dist/react-embed-kit/registerEmbedElements.js +11 -0
- package/dist/react-embed-kit/registerEmbedElements.js.map +1 -0
- package/dist/react-embed-kit/test/ReactEmbedKitTestPage.d.ts +8 -0
- package/dist/react-embed-kit/test/ReactEmbedKitTestPage.d.ts.map +1 -0
- package/dist/react-embed-kit/test/ReactEmbedKitTestPage.js +126 -0
- package/dist/react-embed-kit/test/ReactEmbedKitTestPage.js.map +1 -0
- package/package.json +88 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Twitch embed postMessage types — strict shapes from observed messages only.
|
|
3
|
+
* Namespace "twitch-embed-player-proxy": UPDATE_STATE.
|
|
4
|
+
* Namespace "twitch-embed": seek, video.play, play, playing, ready, video.ready, offline, error.
|
|
5
|
+
*/
|
|
6
|
+
/** Params for eventName "UPDATE_STATE", namespace "twitch-embed-player-proxy". */
|
|
7
|
+
export interface ITwitchUpdateStateParams {
|
|
8
|
+
channelID?: string;
|
|
9
|
+
channelName?: string;
|
|
10
|
+
collectionID?: string;
|
|
11
|
+
currentTime: number;
|
|
12
|
+
duration: number;
|
|
13
|
+
ended: boolean;
|
|
14
|
+
muted?: boolean;
|
|
15
|
+
playback: string;
|
|
16
|
+
qualitiesAvailable: string[];
|
|
17
|
+
quality: string;
|
|
18
|
+
stats: {
|
|
19
|
+
videoStats?: unknown;
|
|
20
|
+
};
|
|
21
|
+
videoID?: string;
|
|
22
|
+
volume?: number;
|
|
23
|
+
}
|
|
24
|
+
/** Params for eventName "seek", namespace "twitch-embed". */
|
|
25
|
+
export interface ITwitchSeekParams {
|
|
26
|
+
position: number;
|
|
27
|
+
}
|
|
28
|
+
/** Params for eventName "play" and "video.play", namespace "twitch-embed". */
|
|
29
|
+
export interface ITwitchPlayParams {
|
|
30
|
+
sessionId: string;
|
|
31
|
+
}
|
|
32
|
+
/** Params for eventName "playing", "ready", "video.ready", "offline" — empty object. */
|
|
33
|
+
export type TTwitchEmptyParams = Record<string, never>;
|
|
34
|
+
/** Params for eventName "error", namespace "twitch-embed". */
|
|
35
|
+
export interface ITwitchErrorParams {
|
|
36
|
+
message?: string;
|
|
37
|
+
}
|
|
38
|
+
/** Discriminated union of all observed Twitch embed postMessage payloads. */
|
|
39
|
+
export type TTwitchMessage = {
|
|
40
|
+
namespace: "twitch-embed-player-proxy";
|
|
41
|
+
eventName: "UPDATE_STATE";
|
|
42
|
+
params: ITwitchUpdateStateParams;
|
|
43
|
+
} | {
|
|
44
|
+
namespace: "twitch-embed";
|
|
45
|
+
eventName: "seek";
|
|
46
|
+
params: ITwitchSeekParams;
|
|
47
|
+
} | {
|
|
48
|
+
namespace: "twitch-embed";
|
|
49
|
+
eventName: "video.play";
|
|
50
|
+
params: ITwitchPlayParams;
|
|
51
|
+
} | {
|
|
52
|
+
namespace: "twitch-embed";
|
|
53
|
+
eventName: "play";
|
|
54
|
+
params: ITwitchPlayParams;
|
|
55
|
+
} | {
|
|
56
|
+
namespace: "twitch-embed";
|
|
57
|
+
eventName: "playing";
|
|
58
|
+
params: TTwitchEmptyParams;
|
|
59
|
+
} | {
|
|
60
|
+
namespace: "twitch-embed";
|
|
61
|
+
eventName: "ready";
|
|
62
|
+
params: TTwitchEmptyParams;
|
|
63
|
+
} | {
|
|
64
|
+
namespace: "twitch-embed";
|
|
65
|
+
eventName: "video.ready";
|
|
66
|
+
params: TTwitchEmptyParams;
|
|
67
|
+
} | {
|
|
68
|
+
namespace: "twitch-embed";
|
|
69
|
+
eventName: "offline";
|
|
70
|
+
params: TTwitchEmptyParams;
|
|
71
|
+
} | {
|
|
72
|
+
namespace: "twitch-embed";
|
|
73
|
+
eventName: "error";
|
|
74
|
+
params?: ITwitchErrorParams;
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=player.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"player.types.d.ts","sourceRoot":"","sources":["../../../src/elements/twitch/player.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,kFAAkF;AAClF,MAAM,WAAW,wBAAwB;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,6DAA6D;AAC7D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,8EAA8E;AAC9E,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wFAAwF;AACxF,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAEvD,8DAA8D;AAC9D,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,6EAA6E;AAC7E,MAAM,MAAM,cAAc,GACtB;IACE,SAAS,EAAE,2BAA2B,CAAC;IACvC,SAAS,EAAE,cAAc,CAAC;IAC1B,MAAM,EAAE,wBAAwB,CAAC;CAClC,GACD;IAAE,SAAS,EAAE,cAAc,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAA;CAAE,GAC3E;IAAE,SAAS,EAAE,cAAc,CAAC;IAAC,SAAS,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAA;CAAE,GACjF;IAAE,SAAS,EAAE,cAAc,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAA;CAAE,GAC3E;IAAE,SAAS,EAAE,cAAc,CAAC;IAAC,SAAS,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,GAC/E;IAAE,SAAS,EAAE,cAAc,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,GAC7E;IAAE,SAAS,EAAE,cAAc,CAAC;IAAC,SAAS,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,GACnF;IAAE,SAAS,EAAE,cAAc,CAAC;IAAC,SAAS,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,GAC/E;IAAE,SAAS,EAAE,cAAc,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,kBAAkB,CAAA;CAAE,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Twitch embed postMessage types — strict shapes from observed messages only.
|
|
3
|
+
* Namespace "twitch-embed-player-proxy": UPDATE_STATE.
|
|
4
|
+
* Namespace "twitch-embed": seek, video.play, play, playing, ready, video.ready, offline, error.
|
|
5
|
+
*/
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=player.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"player.types.js","sourceRoot":"","sources":["../../../src/elements/twitch/player.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider constants: test URLs and IDs for Vimeo.
|
|
3
|
+
* Use these in tests and test pages so videos stay valid in one place.
|
|
4
|
+
*
|
|
5
|
+
* If embeds show "video does not exist":
|
|
6
|
+
* 1. Testing from localhost: In Vimeo → video → Settings → Privacy → Embed,
|
|
7
|
+
* add "localhost" (or your domain) to the allowed list.
|
|
8
|
+
* 2. Unlisted videos: Get the embed code from Vimeo (Share → Embed) and copy
|
|
9
|
+
* the `h=...` value from the URL; set VIMEO_HASH below or pass options.vimeoHash.
|
|
10
|
+
*/
|
|
11
|
+
/** Regex to match player.vimeo.com/video/{id} URLs. */
|
|
12
|
+
export declare const REGEX_PLAYER: RegExp;
|
|
13
|
+
/** Regex to match h= hash param in URL (unlisted videos). */
|
|
14
|
+
export declare const REGEX_HASH: RegExp;
|
|
15
|
+
/** Regex to match vimeo.com/{id} direct URLs. */
|
|
16
|
+
export declare const REGEX_DIRECT: RegExp;
|
|
17
|
+
/** Regex to match vimeo.com/channels/.../{id} URLs. */
|
|
18
|
+
export declare const REGEX_CHANNELS: RegExp;
|
|
19
|
+
/** Regex to match vimeo.com/groups/.../videos/{id} URLs. */
|
|
20
|
+
export declare const REGEX_GROUPS: RegExp;
|
|
21
|
+
/** Video ID for createPlayer and video-id attribute. */
|
|
22
|
+
export declare const VIDEO_ID = "1170179436";
|
|
23
|
+
/** For unlisted videos, set this from the embed URL (Share → Embed on Vimeo). Omit for public. */
|
|
24
|
+
export declare const VIMEO_HASH: string | undefined;
|
|
25
|
+
/** Full URL for src attribute (includes ?h= when VIMEO_HASH is set). */
|
|
26
|
+
export declare const SOURCE_URL: string;
|
|
27
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/elements/vimeo/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,uDAAuD;AACvD,eAAO,MAAM,YAAY,QAAqC,CAAC;AAE/D,6DAA6D;AAC7D,eAAO,MAAM,UAAU,QAAkB,CAAC;AAE1C,iDAAiD;AACjD,eAAO,MAAM,YAAY,QAAiC,CAAC;AAE3D,uDAAuD;AACvD,eAAO,MAAM,cAAc,QAAwC,CAAC;AAEpE,4DAA4D;AAC5D,eAAO,MAAM,YAAY,QAA8C,CAAC;AAExE,wDAAwD;AACxD,eAAO,MAAM,QAAQ,eAAe,CAAC;AAErC,kGAAkG;AAClG,eAAO,MAAM,UAAU,EAAE,MAAM,GAAG,SAAqB,CAAC;AAExD,wEAAwE;AACxE,eAAO,MAAM,UAAU,QAEY,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider constants: test URLs and IDs for Vimeo.
|
|
3
|
+
* Use these in tests and test pages so videos stay valid in one place.
|
|
4
|
+
*
|
|
5
|
+
* If embeds show "video does not exist":
|
|
6
|
+
* 1. Testing from localhost: In Vimeo → video → Settings → Privacy → Embed,
|
|
7
|
+
* add "localhost" (or your domain) to the allowed list.
|
|
8
|
+
* 2. Unlisted videos: Get the embed code from Vimeo (Share → Embed) and copy
|
|
9
|
+
* the `h=...` value from the URL; set VIMEO_HASH below or pass options.vimeoHash.
|
|
10
|
+
*/
|
|
11
|
+
/** Regex to match player.vimeo.com/video/{id} URLs. */
|
|
12
|
+
export const REGEX_PLAYER = /player\.vimeo\.com\/video\/(\d+)/;
|
|
13
|
+
/** Regex to match h= hash param in URL (unlisted videos). */
|
|
14
|
+
export const REGEX_HASH = /[?&]h=([^&]+)/;
|
|
15
|
+
/** Regex to match vimeo.com/{id} direct URLs. */
|
|
16
|
+
export const REGEX_DIRECT = /vimeo\.com\/(\d+)(?:\/|$|\?)/;
|
|
17
|
+
/** Regex to match vimeo.com/channels/.../{id} URLs. */
|
|
18
|
+
export const REGEX_CHANNELS = /vimeo\.com\/channels\/[\w-]+\/(\d+)/;
|
|
19
|
+
/** Regex to match vimeo.com/groups/.../videos/{id} URLs. */
|
|
20
|
+
export const REGEX_GROUPS = /vimeo\.com\/groups\/[\w-]+\/videos\/(\d+)/;
|
|
21
|
+
/** Video ID for createPlayer and video-id attribute. */
|
|
22
|
+
export const VIDEO_ID = "1170179436";
|
|
23
|
+
/** For unlisted videos, set this from the embed URL (Share → Embed on Vimeo). Omit for public. */
|
|
24
|
+
export const VIMEO_HASH = undefined;
|
|
25
|
+
/** Full URL for src attribute (includes ?h= when VIMEO_HASH is set). */
|
|
26
|
+
export const SOURCE_URL = VIMEO_HASH
|
|
27
|
+
? `https://vimeo.com/${VIDEO_ID}?h=${VIMEO_HASH}`
|
|
28
|
+
: `https://vimeo.com/${VIDEO_ID}`;
|
|
29
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/elements/vimeo/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,uDAAuD;AACvD,MAAM,CAAC,MAAM,YAAY,GAAG,kCAAkC,CAAC;AAE/D,6DAA6D;AAC7D,MAAM,CAAC,MAAM,UAAU,GAAG,eAAe,CAAC;AAE1C,iDAAiD;AACjD,MAAM,CAAC,MAAM,YAAY,GAAG,8BAA8B,CAAC;AAE3D,uDAAuD;AACvD,MAAM,CAAC,MAAM,cAAc,GAAG,qCAAqC,CAAC;AAEpE,4DAA4D;AAC5D,MAAM,CAAC,MAAM,YAAY,GAAG,2CAA2C,CAAC;AAExE,wDAAwD;AACxD,MAAM,CAAC,MAAM,QAAQ,GAAG,YAAY,CAAC;AAErC,kGAAkG;AAClG,MAAM,CAAC,MAAM,UAAU,GAAuB,SAAS,CAAC;AAExD,wEAAwE;AACxE,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU;IAClC,CAAC,CAAC,qBAAqB,QAAQ,MAAM,UAAU,EAAE;IACjD,CAAC,CAAC,qBAAqB,QAAQ,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"player.d.ts","sourceRoot":"","sources":["../../../src/elements/vimeo/player.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAEV,YAAY,EAIb,MAAM,mBAAmB,CAAC;AAK3B,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,KAAK,CAAC,EAAE;YAAE,MAAM,EAAE,KAAK,MAAM,EAAE,iBAAiB,KAAK,YAAY,CAAA;SAAE,CAAC;KACrE;CACF"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { createIframe, loadScript, EmbedVideoElement } from "../_base/index.js";
|
|
2
|
+
import { REGEX_PLAYER, REGEX_DIRECT, REGEX_CHANNELS, REGEX_GROUPS, REGEX_HASH, } from "./constants.js";
|
|
3
|
+
const VIMEO_SCRIPT = "https://player.vimeo.com/api/player.js";
|
|
4
|
+
const EMBED_BASE = "https://player.vimeo.com/video/";
|
|
5
|
+
function loadVimeoScript() {
|
|
6
|
+
return loadScript(VIMEO_SCRIPT, {
|
|
7
|
+
isLoaded: () => !!window.Vimeo?.Player,
|
|
8
|
+
errorMessage: "Failed to load Vimeo player script",
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
function parseVimeoId(src) {
|
|
12
|
+
const videoId = src.match(REGEX_PLAYER)?.[1] ??
|
|
13
|
+
src.match(REGEX_DIRECT)?.[1] ??
|
|
14
|
+
src.match(REGEX_CHANNELS)?.[1] ??
|
|
15
|
+
src.match(REGEX_GROUPS)?.[1];
|
|
16
|
+
const vimeoHash = src.match(REGEX_HASH)?.[1] ?? undefined;
|
|
17
|
+
return { videoId, vimeoHash };
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Vimeo embed player as a subclass of EmbedVideoElement.
|
|
21
|
+
*/
|
|
22
|
+
class VimeoEmbedPlayer extends EmbedVideoElement {
|
|
23
|
+
player = null;
|
|
24
|
+
vimeoPlayerState = { destroyed: false };
|
|
25
|
+
load() {
|
|
26
|
+
if (this.iframe?.parentNode) {
|
|
27
|
+
this.iframe.remove();
|
|
28
|
+
this.iframe = null;
|
|
29
|
+
}
|
|
30
|
+
this.player?.destroy();
|
|
31
|
+
this.player = null;
|
|
32
|
+
const attributes = this.getAttributes();
|
|
33
|
+
const { videoId, vimeoHash } = parseVimeoId(attributes.src ?? "");
|
|
34
|
+
if (!videoId)
|
|
35
|
+
return;
|
|
36
|
+
const query = new URLSearchParams({ api: "1" });
|
|
37
|
+
const h = vimeoHash ??
|
|
38
|
+
(this.options.config?.vimeo?.h != null ? String(this.options.config.vimeo.h) : undefined);
|
|
39
|
+
if (h)
|
|
40
|
+
query.set("h", h);
|
|
41
|
+
if (this.options.autoplay)
|
|
42
|
+
query.set("autoplay", "1");
|
|
43
|
+
if (!this.options.controls)
|
|
44
|
+
query.set("controls", "0");
|
|
45
|
+
const vimeoConfig = this.options.config?.vimeo ?? {};
|
|
46
|
+
for (const [key, value] of Object.entries(vimeoConfig)) {
|
|
47
|
+
if (value !== undefined && value !== "" && key !== "h")
|
|
48
|
+
query.set(key, String(value));
|
|
49
|
+
}
|
|
50
|
+
const iframe = createIframe(`${EMBED_BASE}${videoId}?${query.toString()}`);
|
|
51
|
+
this.getEmbedContainer().appendChild(iframe);
|
|
52
|
+
this.iframe = iframe;
|
|
53
|
+
void loadVimeoScript().then(() => {
|
|
54
|
+
if (this.vimeoPlayerState.destroyed)
|
|
55
|
+
return;
|
|
56
|
+
// Don't attach to a stale iframe if load() was called again (e.g. URL change)
|
|
57
|
+
if (this.iframe !== iframe)
|
|
58
|
+
return;
|
|
59
|
+
const vimeoPlayer = new window.Vimeo.Player(iframe);
|
|
60
|
+
this.player = vimeoPlayer;
|
|
61
|
+
this.createListeners(vimeoPlayer);
|
|
62
|
+
this.setInitialPlayerState();
|
|
63
|
+
this.dispatchReadyEvent();
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
setInitialPlayerState() {
|
|
67
|
+
const attributes = this.getAttributes();
|
|
68
|
+
if (attributes.volume) {
|
|
69
|
+
const vol = parseFloat(attributes.volume);
|
|
70
|
+
this.volume = vol;
|
|
71
|
+
}
|
|
72
|
+
if (attributes.muted) {
|
|
73
|
+
this.muted = attributes.muted === "true";
|
|
74
|
+
}
|
|
75
|
+
if (attributes.playing) {
|
|
76
|
+
this.playing = attributes.playing === "true";
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
createListeners(vimeoPlayer) {
|
|
80
|
+
vimeoPlayer.on("error", (data) => {
|
|
81
|
+
const err = data;
|
|
82
|
+
this.playerState.error = {
|
|
83
|
+
code: 0,
|
|
84
|
+
message: err.message ?? "Vimeo playback error",
|
|
85
|
+
};
|
|
86
|
+
this.dispatchErrorEvent(this.playerState.error);
|
|
87
|
+
});
|
|
88
|
+
vimeoPlayer.on("play", () => {
|
|
89
|
+
this.playerState.isPaused = false;
|
|
90
|
+
this.dispatchPlayEvent();
|
|
91
|
+
});
|
|
92
|
+
vimeoPlayer.on("pause", () => {
|
|
93
|
+
this.playerState.isPaused = true;
|
|
94
|
+
this.dispatchPauseEvent();
|
|
95
|
+
});
|
|
96
|
+
vimeoPlayer.on("bufferstart", () => {
|
|
97
|
+
this.dispatchBufferingEvent();
|
|
98
|
+
});
|
|
99
|
+
vimeoPlayer.on("finish", () => {
|
|
100
|
+
this.dispatchEndedEvent();
|
|
101
|
+
});
|
|
102
|
+
vimeoPlayer.on("ended", () => {
|
|
103
|
+
this.dispatchEndedEvent();
|
|
104
|
+
});
|
|
105
|
+
vimeoPlayer.on("timeupdate", (data) => {
|
|
106
|
+
const { seconds, duration } = data;
|
|
107
|
+
this.playerState.currentTime = seconds;
|
|
108
|
+
if (typeof duration === "number" && duration !== this.playerState.duration) {
|
|
109
|
+
this.playerState.duration = duration;
|
|
110
|
+
this.dispatchDurationChangeEvent(duration);
|
|
111
|
+
}
|
|
112
|
+
this.dispatchProgressEvent(seconds);
|
|
113
|
+
});
|
|
114
|
+
vimeoPlayer.on("volumechange", (data) => {
|
|
115
|
+
const { volume, muted } = data;
|
|
116
|
+
if (volume !== this.playerState.volume) {
|
|
117
|
+
this.playerState.volume = volume;
|
|
118
|
+
this.dispatchVolumeChangeEvent(volume * 100);
|
|
119
|
+
}
|
|
120
|
+
if (muted !== this.playerState.muted) {
|
|
121
|
+
this.playerState.muted = muted;
|
|
122
|
+
this.dispatchMuteChangeEvent(muted);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
connectedCallback() {
|
|
127
|
+
this.loadInitialOptions();
|
|
128
|
+
const src = this.getAttribute("src");
|
|
129
|
+
if (!src)
|
|
130
|
+
return;
|
|
131
|
+
const { videoId } = parseVimeoId(src);
|
|
132
|
+
if (!videoId)
|
|
133
|
+
return;
|
|
134
|
+
this.load();
|
|
135
|
+
}
|
|
136
|
+
play() {
|
|
137
|
+
this.player?.play();
|
|
138
|
+
return Promise.resolve();
|
|
139
|
+
}
|
|
140
|
+
pause() {
|
|
141
|
+
this.player?.pause();
|
|
142
|
+
return Promise.resolve();
|
|
143
|
+
}
|
|
144
|
+
destroy() {
|
|
145
|
+
this.vimeoPlayerState.destroyed = true;
|
|
146
|
+
this.player?.destroy();
|
|
147
|
+
this.player = null;
|
|
148
|
+
if (this.iframe?.parentNode)
|
|
149
|
+
this.iframe.remove();
|
|
150
|
+
this.iframe = null;
|
|
151
|
+
}
|
|
152
|
+
get playing() {
|
|
153
|
+
return !this.paused;
|
|
154
|
+
}
|
|
155
|
+
set playing(value) {
|
|
156
|
+
if (value) {
|
|
157
|
+
this.play();
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
this.pause();
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
set controls(value) {
|
|
164
|
+
this.options.controls = value;
|
|
165
|
+
this.load();
|
|
166
|
+
}
|
|
167
|
+
seek(seconds) {
|
|
168
|
+
this.player?.setCurrentTime(seconds);
|
|
169
|
+
this.playerState.currentTime = seconds;
|
|
170
|
+
}
|
|
171
|
+
mute() {
|
|
172
|
+
this.playerState.muted = true;
|
|
173
|
+
this.player?.setMuted(true);
|
|
174
|
+
}
|
|
175
|
+
unmute() {
|
|
176
|
+
this.playerState.muted = false;
|
|
177
|
+
this.player?.setMuted(false);
|
|
178
|
+
}
|
|
179
|
+
get paused() {
|
|
180
|
+
return this.playerState.isPaused;
|
|
181
|
+
}
|
|
182
|
+
get currentTime() {
|
|
183
|
+
return this.playerState.currentTime;
|
|
184
|
+
}
|
|
185
|
+
set currentTime(seconds) {
|
|
186
|
+
this.seek(seconds);
|
|
187
|
+
}
|
|
188
|
+
get duration() {
|
|
189
|
+
return this.playerState.duration;
|
|
190
|
+
}
|
|
191
|
+
get muted() {
|
|
192
|
+
return this.playerState.muted;
|
|
193
|
+
}
|
|
194
|
+
set muted(value) {
|
|
195
|
+
if (value) {
|
|
196
|
+
this.mute();
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
this.unmute();
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
get volume() {
|
|
203
|
+
return (this.playerState.volume ?? 1) * 100;
|
|
204
|
+
}
|
|
205
|
+
set volume(vol) {
|
|
206
|
+
const v = vol <= 1 ? Math.max(0, Math.min(1, vol)) : Math.max(0, Math.min(1, vol / 100));
|
|
207
|
+
this.playerState.volume = v;
|
|
208
|
+
this.player?.setVolume(v);
|
|
209
|
+
}
|
|
210
|
+
get error() {
|
|
211
|
+
return this.playerState.error;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
if (globalThis.customElements && !globalThis.customElements.get("vimeo-video")) {
|
|
215
|
+
globalThis.customElements.define("vimeo-video", VimeoEmbedPlayer);
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=player.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"player.js","sourceRoot":"","sources":["../../../src/elements/vimeo/player.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vimeo Player SDK event data types.
|
|
3
|
+
* @see https://developer.vimeo.com/player/sdk/reference
|
|
4
|
+
*/
|
|
5
|
+
/** Event data for timeupdate (see https://developer.vimeo.com/player/sdk/reference#timeupdate) */
|
|
6
|
+
export interface IVimeoTimeupdateData {
|
|
7
|
+
percent: number;
|
|
8
|
+
seconds: number;
|
|
9
|
+
duration: number;
|
|
10
|
+
}
|
|
11
|
+
/** Event data for volumechange (see https://developer.vimeo.com/player/sdk/reference#volumechange) */
|
|
12
|
+
export interface IVimeoVolumechangeData {
|
|
13
|
+
volume: number;
|
|
14
|
+
muted: boolean;
|
|
15
|
+
}
|
|
16
|
+
/** Event data for error (see https://developer.vimeo.com/player/sdk/reference#error) */
|
|
17
|
+
export interface IVimeoErrorData {
|
|
18
|
+
message?: string;
|
|
19
|
+
method?: string;
|
|
20
|
+
name?: string;
|
|
21
|
+
}
|
|
22
|
+
export type TVimeoEventData = IVimeoTimeupdateData | IVimeoVolumechangeData | IVimeoErrorData;
|
|
23
|
+
export interface IVimeoPlayer {
|
|
24
|
+
ready?: () => Promise<void>;
|
|
25
|
+
play: () => Promise<void>;
|
|
26
|
+
pause: () => Promise<void>;
|
|
27
|
+
getPaused: () => Promise<boolean>;
|
|
28
|
+
getCurrentTime: () => Promise<number>;
|
|
29
|
+
getDuration: () => Promise<number>;
|
|
30
|
+
setCurrentTime: (seconds: number) => Promise<number>;
|
|
31
|
+
getMuted: () => Promise<boolean>;
|
|
32
|
+
setMuted: (muted: boolean) => Promise<void>;
|
|
33
|
+
getVolume: () => Promise<number>;
|
|
34
|
+
setVolume: (volume: number) => Promise<number>;
|
|
35
|
+
on: (event: string, callback: (data: TVimeoEventData) => void) => void;
|
|
36
|
+
destroy: () => void;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=player.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"player.types.d.ts","sourceRoot":"","sources":["../../../src/elements/vimeo/player.types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,kGAAkG;AAClG,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,sGAAsG;AACtG,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,wFAAwF;AACxF,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,eAAe,GAAG,oBAAoB,GAAG,sBAAsB,GAAG,eAAe,CAAC;AAE9F,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,SAAS,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,cAAc,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,WAAW,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,QAAQ,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACjC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACjC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,KAAK,IAAI,CAAC;IACvE,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"player.types.js","sourceRoot":"","sources":["../../../src/elements/vimeo/player.types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider constants: test URLs and IDs for YouTube.
|
|
3
|
+
* Use these in tests and test pages so videos stay valid in one place.
|
|
4
|
+
*/
|
|
5
|
+
/** Regex to match youtube.com/watch?...v=... URLs. */
|
|
6
|
+
export declare const REGEX_WATCH: RegExp;
|
|
7
|
+
/** Regex to match youtu.be/{id} short URLs. */
|
|
8
|
+
export declare const REGEX_SHORT: RegExp;
|
|
9
|
+
/** Regex to match youtube.com/embed/{id} URLs. */
|
|
10
|
+
export declare const REGEX_EMBED: RegExp;
|
|
11
|
+
/** Video ID for createPlayer and video-id attribute. */
|
|
12
|
+
export declare const VIDEO_ID = "dQw4w9WgXcQ";
|
|
13
|
+
/** Full watch URL for src attribute. */
|
|
14
|
+
export declare const SOURCE_URL = "https://www.youtube.com/watch?v=dQw4w9WgXcQ";
|
|
15
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/elements/youtube/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,sDAAsD;AACtD,eAAO,MAAM,WAAW,QAAuD,CAAC;AAEhF,+CAA+C;AAC/C,eAAO,MAAM,WAAW,QAAmC,CAAC;AAE5D,kDAAkD;AAClD,eAAO,MAAM,WAAW,QAA6C,CAAC;AAEtE,wDAAwD;AACxD,eAAO,MAAM,QAAQ,gBAAgB,CAAC;AAEtC,wCAAwC;AACxC,eAAO,MAAM,UAAU,gDAAgD,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider constants: test URLs and IDs for YouTube.
|
|
3
|
+
* Use these in tests and test pages so videos stay valid in one place.
|
|
4
|
+
*/
|
|
5
|
+
/** Regex to match youtube.com/watch?...v=... URLs. */
|
|
6
|
+
export const REGEX_WATCH = /(?:youtube\.com\/watch\?.*\bv=)([a-zA-Z0-9_-]{11})/;
|
|
7
|
+
/** Regex to match youtu.be/{id} short URLs. */
|
|
8
|
+
export const REGEX_SHORT = /youtu\.be\/([a-zA-Z0-9_-]{11})/;
|
|
9
|
+
/** Regex to match youtube.com/embed/{id} URLs. */
|
|
10
|
+
export const REGEX_EMBED = /youtube\.com\/embed\/([a-zA-Z0-9_-]{11})/;
|
|
11
|
+
/** Video ID for createPlayer and video-id attribute. */
|
|
12
|
+
export const VIDEO_ID = "dQw4w9WgXcQ";
|
|
13
|
+
/** Full watch URL for src attribute. */
|
|
14
|
+
export const SOURCE_URL = `https://www.youtube.com/watch?v=${VIDEO_ID}`;
|
|
15
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/elements/youtube/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,sDAAsD;AACtD,MAAM,CAAC,MAAM,WAAW,GAAG,oDAAoD,CAAC;AAEhF,+CAA+C;AAC/C,MAAM,CAAC,MAAM,WAAW,GAAG,gCAAgC,CAAC;AAE5D,kDAAkD;AAClD,MAAM,CAAC,MAAM,WAAW,GAAG,0CAA0C,CAAC;AAEtE,wDAAwD;AACxD,MAAM,CAAC,MAAM,QAAQ,GAAG,aAAa,CAAC;AAEtC,wCAAwC;AACxC,MAAM,CAAC,MAAM,UAAU,GAAG,mCAAmC,QAAQ,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseYouTubeUrl.d.ts","sourceRoot":"","sources":["../../../../src/elements/youtube/helpers/parseYouTubeUrl.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAQ5E"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { REGEX_WATCH, REGEX_SHORT, REGEX_EMBED } from "../constants.js";
|
|
2
|
+
export function parseYouTubeUrl(url) {
|
|
3
|
+
if (url == null || typeof url !== "string")
|
|
4
|
+
return { videoId: undefined };
|
|
5
|
+
const videoId = url.match(REGEX_WATCH)?.[1] ?? url.match(REGEX_SHORT)?.[1] ?? url.match(REGEX_EMBED)?.[1];
|
|
6
|
+
return {
|
|
7
|
+
videoId,
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=parseYouTubeUrl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseYouTubeUrl.js","sourceRoot":"","sources":["../../../../src/elements/youtube/helpers/parseYouTubeUrl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAExE,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,IAAI,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAC1E,MAAM,OAAO,GACX,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAE5F,OAAO;QACL,OAAO;KACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"player.d.ts","sourceRoot":"","sources":["../../../src/elements/youtube/player.ts"],"names":[],"mappings":""}
|