ts-video-player 0.1.0
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.md +21 -0
- package/README.md +438 -0
- package/dist/cdn.d.ts +10 -0
- package/dist/cdn.d.ts.map +1 -0
- package/dist/cdn.min.js +1046 -0
- package/dist/cdn.min.js.map +54 -0
- package/dist/cdn.test.d.ts +2 -0
- package/dist/cdn.test.d.ts.map +1 -0
- package/dist/chunk-36x4yhjn.js +765 -0
- package/dist/chunk-36x4yhjn.js.map +12 -0
- package/dist/chunk-eajts2jv.js +4243 -0
- package/dist/chunk-eajts2jv.js.map +42 -0
- package/dist/chunk-z1ehbz9f.js +380 -0
- package/dist/chunk-z1ehbz9f.js.map +19 -0
- package/dist/config.d.ts +9 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/core/audio-gain.d.ts +67 -0
- package/dist/core/audio-gain.d.ts.map +1 -0
- package/dist/core/caption-styles.d.ts +121 -0
- package/dist/core/caption-styles.d.ts.map +1 -0
- package/dist/core/chapters.d.ts +150 -0
- package/dist/core/chapters.d.ts.map +1 -0
- package/dist/core/error-overlay.d.ts +71 -0
- package/dist/core/error-overlay.d.ts.map +1 -0
- package/dist/core/events.d.ts +119 -0
- package/dist/core/events.d.ts.map +1 -0
- package/dist/core/features.d.ts +64 -0
- package/dist/core/features.d.ts.map +1 -0
- package/dist/core/i18n.d.ts +132 -0
- package/dist/core/i18n.d.ts.map +1 -0
- package/dist/core/index.d.ts +37 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/live.d.ts +130 -0
- package/dist/core/live.d.ts.map +1 -0
- package/dist/core/media-session.d.ts +38 -0
- package/dist/core/media-session.d.ts.map +1 -0
- package/dist/core/orientation.d.ts +22 -0
- package/dist/core/orientation.d.ts.map +1 -0
- package/dist/core/popover.d.ts +42 -0
- package/dist/core/popover.d.ts.map +1 -0
- package/dist/core/remote-playback.d.ts +195 -0
- package/dist/core/remote-playback.d.ts.map +1 -0
- package/dist/core/settings-menu.d.ts +132 -0
- package/dist/core/settings-menu.d.ts.map +1 -0
- package/dist/core/spinner.d.ts +67 -0
- package/dist/core/spinner.d.ts.map +1 -0
- package/dist/core/state.d.ts +142 -0
- package/dist/core/state.d.ts.map +1 -0
- package/dist/core/text-tracks.d.ts +162 -0
- package/dist/core/text-tracks.d.ts.map +1 -0
- package/dist/core/themes.d.ts +213 -0
- package/dist/core/themes.d.ts.map +1 -0
- package/dist/core/thumbnails.d.ts +124 -0
- package/dist/core/thumbnails.d.ts.map +1 -0
- package/dist/core/tooltips.d.ts +100 -0
- package/dist/core/tooltips.d.ts.map +1 -0
- package/dist/elements/base.d.ts +3 -0
- package/dist/elements/base.d.ts.map +1 -0
- package/dist/elements/index.d.ts +33 -0
- package/dist/elements/index.d.ts.map +1 -0
- package/dist/elements/index.js +55 -0
- package/dist/elements/index.js.map +9 -0
- package/dist/elements/media-airplay-button.d.ts +13 -0
- package/dist/elements/media-airplay-button.d.ts.map +1 -0
- package/dist/elements/media-error-display.d.ts +13 -0
- package/dist/elements/media-error-display.d.ts.map +1 -0
- package/dist/elements/media-fullscreen-button.d.ts +13 -0
- package/dist/elements/media-fullscreen-button.d.ts.map +1 -0
- package/dist/elements/media-live-button.d.ts +13 -0
- package/dist/elements/media-live-button.d.ts.map +1 -0
- package/dist/elements/media-mute-button.d.ts +13 -0
- package/dist/elements/media-mute-button.d.ts.map +1 -0
- package/dist/elements/media-pip-button.d.ts +13 -0
- package/dist/elements/media-pip-button.d.ts.map +1 -0
- package/dist/elements/media-play-button.d.ts +14 -0
- package/dist/elements/media-play-button.d.ts.map +1 -0
- package/dist/elements/media-playback-rate-button.d.ts +10 -0
- package/dist/elements/media-playback-rate-button.d.ts.map +1 -0
- package/dist/elements/media-preview-time.d.ts +18 -0
- package/dist/elements/media-preview-time.d.ts.map +1 -0
- package/dist/elements/media-progress-bar.d.ts +16 -0
- package/dist/elements/media-progress-bar.d.ts.map +1 -0
- package/dist/elements/media-remote-playback-button.d.ts +16 -0
- package/dist/elements/media-remote-playback-button.d.ts.map +1 -0
- package/dist/elements/media-seek-button.d.ts +9 -0
- package/dist/elements/media-seek-button.d.ts.map +1 -0
- package/dist/elements/media-settings-menu.d.ts +32 -0
- package/dist/elements/media-settings-menu.d.ts.map +1 -0
- package/dist/elements/media-time-display.d.ts +21 -0
- package/dist/elements/media-time-display.d.ts.map +1 -0
- package/dist/elements/media-time-group.d.ts +22 -0
- package/dist/elements/media-time-group.d.ts.map +1 -0
- package/dist/elements/media-time-separator.d.ts +13 -0
- package/dist/elements/media-time-separator.d.ts.map +1 -0
- package/dist/elements/media-volume-slider.d.ts +16 -0
- package/dist/elements/media-volume-slider.d.ts.map +1 -0
- package/dist/elements/utils.d.ts +27 -0
- package/dist/elements/utils.d.ts.map +1 -0
- package/dist/elements/video-player.d.ts +23 -0
- package/dist/elements/video-player.d.ts.map +1 -0
- package/dist/elements/video-skin.d.ts +23 -0
- package/dist/elements/video-skin.d.ts.map +1 -0
- package/dist/features/captions.d.ts +8 -0
- package/dist/features/captions.d.ts.map +1 -0
- package/dist/features/create-player.d.ts +45 -0
- package/dist/features/create-player.d.ts.map +1 -0
- package/dist/features/fullscreen.d.ts +8 -0
- package/dist/features/fullscreen.d.ts.map +1 -0
- package/dist/features/gestures.d.ts +8 -0
- package/dist/features/gestures.d.ts.map +1 -0
- package/dist/features/index.d.ts +26 -0
- package/dist/features/index.d.ts.map +1 -0
- package/dist/features/index.js +31 -0
- package/dist/features/index.js.map +9 -0
- package/dist/features/keyboard.d.ts +8 -0
- package/dist/features/keyboard.d.ts.map +1 -0
- package/dist/features/pip.d.ts +8 -0
- package/dist/features/pip.d.ts.map +1 -0
- package/dist/features/playback.d.ts +8 -0
- package/dist/features/playback.d.ts.map +1 -0
- package/dist/features/quality.d.ts +8 -0
- package/dist/features/quality.d.ts.map +1 -0
- package/dist/features/types.d.ts +26 -0
- package/dist/features/types.d.ts.map +1 -0
- package/dist/features/volume.d.ts +8 -0
- package/dist/features/volume.d.ts.map +1 -0
- package/dist/index.d.ts +84 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8149 -0
- package/dist/index.js.map +31 -0
- package/dist/layouts/index.d.ts +58 -0
- package/dist/layouts/index.d.ts.map +1 -0
- package/dist/player.d.ts +90 -0
- package/dist/player.d.ts.map +1 -0
- package/dist/plugins/ads.d.ts +311 -0
- package/dist/plugins/ads.d.ts.map +1 -0
- package/dist/plugins/analytics.d.ts +203 -0
- package/dist/plugins/analytics.d.ts.map +1 -0
- package/dist/plugins/end-screen.d.ts +184 -0
- package/dist/plugins/end-screen.d.ts.map +1 -0
- package/dist/plugins/index.d.ts +13 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +20 -0
- package/dist/plugins/index.js.map +9 -0
- package/dist/plugins/skip-segments.d.ts +159 -0
- package/dist/plugins/skip-segments.d.ts.map +1 -0
- package/dist/plugins/watermark.d.ts +157 -0
- package/dist/plugins/watermark.d.ts.map +1 -0
- package/dist/providers/base.d.ts +56 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/dash.d.ts +94 -0
- package/dist/providers/dash.d.ts.map +1 -0
- package/dist/providers/hls.d.ts +182 -0
- package/dist/providers/hls.d.ts.map +1 -0
- package/dist/providers/html5.d.ts +64 -0
- package/dist/providers/html5.d.ts.map +1 -0
- package/dist/providers/index.d.ts +41 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/vimeo.d.ts +157 -0
- package/dist/providers/vimeo.d.ts.map +1 -0
- package/dist/providers/youtube.d.ts +134 -0
- package/dist/providers/youtube.d.ts.map +1 -0
- package/dist/stx/index.d.ts +59 -0
- package/dist/stx/index.d.ts.map +1 -0
- package/dist/stx/index.js +480 -0
- package/dist/stx/index.js.map +11 -0
- package/dist/types.d.ts +724 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/ui/components.d.ts +121 -0
- package/dist/ui/components.d.ts.map +1 -0
- package/dist/ui/index.d.ts +9 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +16 -0
- package/dist/ui/index.js.map +9 -0
- package/package.json +109 -0
- package/src/cdn.test.ts +10 -0
- package/src/cdn.ts +60 -0
- package/src/config.ts +25 -0
- package/src/core/audio-gain.ts +171 -0
- package/src/core/caption-styles.ts +568 -0
- package/src/core/chapters.ts +551 -0
- package/src/core/error-overlay.ts +354 -0
- package/src/core/events.ts +552 -0
- package/src/core/features.ts +287 -0
- package/src/core/i18n.ts +590 -0
- package/src/core/index.ts +249 -0
- package/src/core/live.ts +472 -0
- package/src/core/media-session.ts +137 -0
- package/src/core/orientation.ts +57 -0
- package/src/core/popover.ts +143 -0
- package/src/core/remote-playback.ts +661 -0
- package/src/core/settings-menu.ts +630 -0
- package/src/core/spinner.ts +310 -0
- package/src/core/state.ts +476 -0
- package/src/core/text-tracks.ts +599 -0
- package/src/core/themes.ts +607 -0
- package/src/core/thumbnails.ts +457 -0
- package/src/core/tooltips.ts +370 -0
- package/src/elements/base.ts +2 -0
- package/src/elements/index.ts +82 -0
- package/src/elements/media-airplay-button.ts +78 -0
- package/src/elements/media-error-display.ts +47 -0
- package/src/elements/media-fullscreen-button.ts +72 -0
- package/src/elements/media-live-button.ts +65 -0
- package/src/elements/media-mute-button.ts +69 -0
- package/src/elements/media-pip-button.ts +66 -0
- package/src/elements/media-play-button.ts +69 -0
- package/src/elements/media-playback-rate-button.ts +59 -0
- package/src/elements/media-preview-time.ts +75 -0
- package/src/elements/media-progress-bar.ts +200 -0
- package/src/elements/media-remote-playback-button.ts +108 -0
- package/src/elements/media-seek-button.ts +50 -0
- package/src/elements/media-settings-menu.ts +302 -0
- package/src/elements/media-time-display.ts +99 -0
- package/src/elements/media-time-group.ts +41 -0
- package/src/elements/media-time-separator.ts +35 -0
- package/src/elements/media-volume-slider.ts +140 -0
- package/src/elements/utils.ts +82 -0
- package/src/elements/video-player.ts +175 -0
- package/src/elements/video-skin.ts +127 -0
- package/src/features/captions.ts +56 -0
- package/src/features/create-player.ts +91 -0
- package/src/features/fullscreen.ts +44 -0
- package/src/features/gestures.ts +44 -0
- package/src/features/index.ts +44 -0
- package/src/features/keyboard.ts +89 -0
- package/src/features/pip.ts +47 -0
- package/src/features/playback.ts +68 -0
- package/src/features/quality.ts +19 -0
- package/src/features/types.ts +28 -0
- package/src/features/volume.ts +46 -0
- package/src/index.ts +635 -0
- package/src/layouts/index.ts +672 -0
- package/src/player.ts +821 -0
- package/src/plugins/ads.ts +1045 -0
- package/src/plugins/analytics.ts +673 -0
- package/src/plugins/end-screen.ts +793 -0
- package/src/plugins/index.ts +61 -0
- package/src/plugins/skip-segments.ts +537 -0
- package/src/plugins/watermark.ts +537 -0
- package/src/providers/base.ts +197 -0
- package/src/providers/dash.ts +588 -0
- package/src/providers/hls.ts +624 -0
- package/src/providers/html5.ts +473 -0
- package/src/providers/index.ts +97 -0
- package/src/providers/vimeo.ts +533 -0
- package/src/providers/youtube.ts +542 -0
- package/src/stx/index.ts +606 -0
- package/src/types.ts +874 -0
- package/src/ui/components.ts +910 -0
- package/src/ui/index.ts +29 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Player Layouts
|
|
3
|
+
*
|
|
4
|
+
* Pre-built player layouts for quick setup.
|
|
5
|
+
*
|
|
6
|
+
* @module layouts
|
|
7
|
+
*/
|
|
8
|
+
import type { PlayerOptions } from '../types';
|
|
9
|
+
export interface LayoutConfig {
|
|
10
|
+
/** Layout name */
|
|
11
|
+
name: string;
|
|
12
|
+
/** Layout description */
|
|
13
|
+
description: string;
|
|
14
|
+
/** CSS styles to inject */
|
|
15
|
+
styles: string;
|
|
16
|
+
/** HTML structure template */
|
|
17
|
+
template: string;
|
|
18
|
+
/** Default player options for this layout */
|
|
19
|
+
defaultOptions?: Partial<PlayerOptions>;
|
|
20
|
+
/** Initialize layout-specific behavior */
|
|
21
|
+
init?: (container: HTMLElement) => void;
|
|
22
|
+
/** Cleanup layout */
|
|
23
|
+
destroy?: (container: HTMLElement) => void;
|
|
24
|
+
}
|
|
25
|
+
export type LayoutName = 'default' | 'minimal' | 'cinema' | 'youtube' | 'vimeo' | 'audio';
|
|
26
|
+
export declare const defaultLayout: LayoutConfig;
|
|
27
|
+
export declare const minimalLayout: LayoutConfig;
|
|
28
|
+
export declare const cinemaLayout: LayoutConfig;
|
|
29
|
+
export declare const youtubeLayout: LayoutConfig;
|
|
30
|
+
export declare const vimeoLayout: LayoutConfig;
|
|
31
|
+
export declare const audioLayout: LayoutConfig;
|
|
32
|
+
export declare const layouts: Record<LayoutName, LayoutConfig>;
|
|
33
|
+
export declare class LayoutManager {
|
|
34
|
+
private container;
|
|
35
|
+
private currentLayout;
|
|
36
|
+
private styleElement;
|
|
37
|
+
constructor(container: HTMLElement);
|
|
38
|
+
/**
|
|
39
|
+
* Apply a layout to the container
|
|
40
|
+
*/
|
|
41
|
+
apply(layout: LayoutName | LayoutConfig): void;
|
|
42
|
+
/**
|
|
43
|
+
* Get current layout
|
|
44
|
+
*/
|
|
45
|
+
getLayout(): LayoutConfig | null;
|
|
46
|
+
/**
|
|
47
|
+
* Cleanup current layout
|
|
48
|
+
*/
|
|
49
|
+
cleanup(): void;
|
|
50
|
+
/**
|
|
51
|
+
* Destroy layout manager
|
|
52
|
+
*/
|
|
53
|
+
destroy(): void;
|
|
54
|
+
}
|
|
55
|
+
export declare function createLayoutManager(container: HTMLElement): LayoutManager;
|
|
56
|
+
export declare function getLayout(name: LayoutName): LayoutConfig;
|
|
57
|
+
export declare function registerLayout(config: LayoutConfig): void;
|
|
58
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/layouts/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAM7C,MAAM,WAAW,YAAY;IAC3B,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,yBAAyB;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,2BAA2B;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAA;IAChB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;IACvC,0CAA0C;IAC1C,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,WAAW,KAAK,IAAI,CAAA;IACvC,qBAAqB;IACrB,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,WAAW,KAAK,IAAI,CAAA;CAC3C;AAED,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAA;AAMzF,eAAO,MAAM,aAAa,EAAE,YAyF3B,CAAA;AAMD,eAAO,MAAM,aAAa,EAAE,YA4C3B,CAAA;AAMD,eAAO,MAAM,YAAY,EAAE,YAkG1B,CAAA;AAMD,eAAO,MAAM,aAAa,EAAE,YA2F3B,CAAA;AAMD,eAAO,MAAM,WAAW,EAAE,YAsFzB,CAAA;AAMD,eAAO,MAAM,WAAW,EAAE,YAuFzB,CAAA;AAMD,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,YAAY,CAOpD,CAAA;AAMD,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,YAAY,CAAgC;gBAExC,SAAS,EAAE,WAAW;IAIlC;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,YAAY,GAAG,IAAI;IA0B9C;;OAEG;IACH,SAAS,IAAI,YAAY,GAAG,IAAI;IAIhC;;OAEG;IACH,OAAO,IAAI,IAAI;IAoBf;;OAEG;IACH,OAAO,IAAI,IAAI;CAGhB;AAMD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,WAAW,GAAG,aAAa,CAEzE;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY,CAExD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAEzD"}
|
package/dist/player.d.ts
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ts-video-player Player
|
|
3
|
+
*
|
|
4
|
+
* Main player class that orchestrates providers, state, and UI.
|
|
5
|
+
*
|
|
6
|
+
* @module player
|
|
7
|
+
*/
|
|
8
|
+
import type { Player as IPlayer, PlayerOptions, PlayerState, PlayerEventMap, Provider, Src, VideoQuality } from './types';
|
|
9
|
+
/**
|
|
10
|
+
* ts-video-player main class
|
|
11
|
+
*/
|
|
12
|
+
export declare class Player implements IPlayer {
|
|
13
|
+
private _el;
|
|
14
|
+
private _options;
|
|
15
|
+
private _store;
|
|
16
|
+
private _events;
|
|
17
|
+
private _provider;
|
|
18
|
+
private _loaders;
|
|
19
|
+
private _cleanupFns;
|
|
20
|
+
private _destroyed;
|
|
21
|
+
private _sourceLoadId;
|
|
22
|
+
private _announcer;
|
|
23
|
+
/**
|
|
24
|
+
* Create a new player instance
|
|
25
|
+
*/
|
|
26
|
+
constructor(container: HTMLElement | string, options?: PlayerOptions);
|
|
27
|
+
get el(): HTMLElement;
|
|
28
|
+
get state(): PlayerState;
|
|
29
|
+
get provider(): Provider | null;
|
|
30
|
+
get ready(): boolean;
|
|
31
|
+
private setupElement;
|
|
32
|
+
private setupState;
|
|
33
|
+
private setupKeyboard;
|
|
34
|
+
private setupActivity;
|
|
35
|
+
private setupStorage;
|
|
36
|
+
private setupMediaSession;
|
|
37
|
+
private setupEvents;
|
|
38
|
+
private updateAttributes;
|
|
39
|
+
/**
|
|
40
|
+
* Announce a message to screen readers via the ARIA live region
|
|
41
|
+
*/
|
|
42
|
+
private announce;
|
|
43
|
+
destroy(): void;
|
|
44
|
+
setSrc(src: Src | Src[]): Promise<void>;
|
|
45
|
+
getSrc(): Src | null;
|
|
46
|
+
private attachProviderEvents;
|
|
47
|
+
play(): Promise<void>;
|
|
48
|
+
pause(): void;
|
|
49
|
+
togglePlay(): void;
|
|
50
|
+
stop(): void;
|
|
51
|
+
seekTo(time: number): void;
|
|
52
|
+
seekBy(offset: number): void;
|
|
53
|
+
setVolume(volume: number): void;
|
|
54
|
+
setMuted(muted: boolean): void;
|
|
55
|
+
toggleMute(): void;
|
|
56
|
+
setPlaybackRate(rate: number): void;
|
|
57
|
+
enterFullscreen(): Promise<void>;
|
|
58
|
+
exitFullscreen(): Promise<void>;
|
|
59
|
+
toggleFullscreen(): Promise<void>;
|
|
60
|
+
enterPiP(): Promise<void>;
|
|
61
|
+
exitPiP(): Promise<void>;
|
|
62
|
+
togglePiP(): Promise<void>;
|
|
63
|
+
setQuality(quality: VideoQuality | 'auto'): void;
|
|
64
|
+
setTextTrack(trackId: string, mode: 'disabled' | 'hidden' | 'showing'): void;
|
|
65
|
+
setAudioTrack(trackId: string): void;
|
|
66
|
+
private toggleCaptions;
|
|
67
|
+
on<K extends keyof PlayerEventMap>(event: K, handler: PlayerEventMap[K]): void;
|
|
68
|
+
off<K extends keyof PlayerEventMap>(event: K, handler: PlayerEventMap[K]): void;
|
|
69
|
+
once<K extends keyof PlayerEventMap>(event: K, handler: PlayerEventMap[K]): void;
|
|
70
|
+
subscribe(keyOrListener: keyof PlayerState | '*' | ((state: PlayerState, key?: keyof PlayerState) => void), listener?: (state: PlayerState, key?: keyof PlayerState) => void): () => void;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Create a new player instance
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* ```typescript
|
|
77
|
+
* const player = createPlayer('#video-container', {
|
|
78
|
+
* src: 'https://example.com/video.mp4',
|
|
79
|
+
* autoplay: true,
|
|
80
|
+
* })
|
|
81
|
+
*
|
|
82
|
+
* player.on('playing', () => console.log('Video is playing!'))
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
export declare function createPlayer(container: HTMLElement | string, options?: PlayerOptions): Player;
|
|
86
|
+
/**
|
|
87
|
+
* Get player instance from element
|
|
88
|
+
*/
|
|
89
|
+
export declare function getPlayer(element: HTMLElement): Player | null;
|
|
90
|
+
//# sourceMappingURL=player.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"player.d.ts","sourceRoot":"","sources":["../src/player.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Video Ads Plugin
|
|
3
|
+
*
|
|
4
|
+
* VAST/VPAID ad support for video playback.
|
|
5
|
+
*
|
|
6
|
+
* @module plugins/ads
|
|
7
|
+
*/
|
|
8
|
+
import type { Player } from '../player';
|
|
9
|
+
export type AdType = 'linear' | 'nonlinear' | 'companion';
|
|
10
|
+
export type AdBreakType = 'preroll' | 'midroll' | 'postroll';
|
|
11
|
+
export interface AdConfig {
|
|
12
|
+
/** VAST tag URL or inline VAST XML */
|
|
13
|
+
vastUrl?: string;
|
|
14
|
+
/** VAST XML content */
|
|
15
|
+
vastXml?: string;
|
|
16
|
+
/** VMAP URL for ad schedule */
|
|
17
|
+
vmapUrl?: string;
|
|
18
|
+
/** Ad schedule */
|
|
19
|
+
schedule?: AdBreak[];
|
|
20
|
+
/** Skip delay in seconds (0 = no skip, -1 = use VAST value) */
|
|
21
|
+
skipDelay?: number;
|
|
22
|
+
/** Maximum number of redirects to follow */
|
|
23
|
+
maxRedirects?: number;
|
|
24
|
+
/** Timeout for ad requests in ms */
|
|
25
|
+
timeout?: number;
|
|
26
|
+
/** Enable VPAID */
|
|
27
|
+
vpaidEnabled?: boolean;
|
|
28
|
+
/** Companion ad container selectors */
|
|
29
|
+
companionContainers?: Record<string, string>;
|
|
30
|
+
/** Preload ads */
|
|
31
|
+
preloadAds?: boolean;
|
|
32
|
+
/** Debug mode */
|
|
33
|
+
debug?: boolean;
|
|
34
|
+
}
|
|
35
|
+
export interface AdBreak {
|
|
36
|
+
/** Break type */
|
|
37
|
+
type: AdBreakType;
|
|
38
|
+
/** Time offset in seconds (for midrolls) */
|
|
39
|
+
timeOffset?: number;
|
|
40
|
+
/** VAST URL */
|
|
41
|
+
vastUrl?: string;
|
|
42
|
+
/** VAST XML */
|
|
43
|
+
vastXml?: string;
|
|
44
|
+
/** Has played */
|
|
45
|
+
played?: boolean;
|
|
46
|
+
}
|
|
47
|
+
export interface Ad {
|
|
48
|
+
/** Ad ID */
|
|
49
|
+
id: string;
|
|
50
|
+
/** Ad type */
|
|
51
|
+
type: AdType;
|
|
52
|
+
/** Ad system */
|
|
53
|
+
adSystem?: string;
|
|
54
|
+
/** Ad title */
|
|
55
|
+
title?: string;
|
|
56
|
+
/** Ad description */
|
|
57
|
+
description?: string;
|
|
58
|
+
/** Ad duration in seconds */
|
|
59
|
+
duration: number;
|
|
60
|
+
/** Skip offset in seconds */
|
|
61
|
+
skipOffset?: number;
|
|
62
|
+
/** Click through URL */
|
|
63
|
+
clickThroughUrl?: string;
|
|
64
|
+
/** Media files */
|
|
65
|
+
mediaFiles: AdMediaFile[];
|
|
66
|
+
/** Companion ads */
|
|
67
|
+
companions?: CompanionAd[];
|
|
68
|
+
/** Tracking events */
|
|
69
|
+
trackingEvents: AdTrackingEvent[];
|
|
70
|
+
/** VPAID script */
|
|
71
|
+
vpaidScript?: string;
|
|
72
|
+
/** Icons */
|
|
73
|
+
icons?: AdIcon[];
|
|
74
|
+
}
|
|
75
|
+
export interface AdMediaFile {
|
|
76
|
+
/** Media URL */
|
|
77
|
+
url: string;
|
|
78
|
+
/** MIME type */
|
|
79
|
+
type: string;
|
|
80
|
+
/** Width */
|
|
81
|
+
width: number;
|
|
82
|
+
/** Height */
|
|
83
|
+
height: number;
|
|
84
|
+
/** Bitrate */
|
|
85
|
+
bitrate?: number;
|
|
86
|
+
/** Codec */
|
|
87
|
+
codec?: string;
|
|
88
|
+
/** Delivery type */
|
|
89
|
+
delivery: 'progressive' | 'streaming';
|
|
90
|
+
}
|
|
91
|
+
export interface CompanionAd {
|
|
92
|
+
/** Width */
|
|
93
|
+
width: number;
|
|
94
|
+
/** Height */
|
|
95
|
+
height: number;
|
|
96
|
+
/** Resource URL (image, iframe, HTML) */
|
|
97
|
+
resourceUrl: string;
|
|
98
|
+
/** Resource type */
|
|
99
|
+
resourceType: 'static' | 'iframe' | 'html';
|
|
100
|
+
/** Click through URL */
|
|
101
|
+
clickThroughUrl?: string;
|
|
102
|
+
/** Alt text */
|
|
103
|
+
altText?: string;
|
|
104
|
+
/** Tracking pixel */
|
|
105
|
+
trackingUrl?: string;
|
|
106
|
+
}
|
|
107
|
+
export interface AdTrackingEvent {
|
|
108
|
+
/** Event name */
|
|
109
|
+
event: string;
|
|
110
|
+
/** Tracking URL */
|
|
111
|
+
url: string;
|
|
112
|
+
/** Offset (for progress events) */
|
|
113
|
+
offset?: number;
|
|
114
|
+
}
|
|
115
|
+
export interface AdIcon {
|
|
116
|
+
/** Icon URL */
|
|
117
|
+
url: string;
|
|
118
|
+
/** Width */
|
|
119
|
+
width: number;
|
|
120
|
+
/** Height */
|
|
121
|
+
height: number;
|
|
122
|
+
/** Position */
|
|
123
|
+
xPosition: string;
|
|
124
|
+
/** Position */
|
|
125
|
+
yPosition: string;
|
|
126
|
+
/** Click URL */
|
|
127
|
+
clickUrl?: string;
|
|
128
|
+
}
|
|
129
|
+
export interface AdState {
|
|
130
|
+
/** Is ad playing */
|
|
131
|
+
isPlaying: boolean;
|
|
132
|
+
/** Current ad */
|
|
133
|
+
currentAd: Ad | null;
|
|
134
|
+
/** Current ad break */
|
|
135
|
+
currentBreak: AdBreak | null;
|
|
136
|
+
/** Time remaining */
|
|
137
|
+
timeRemaining: number;
|
|
138
|
+
/** Can skip */
|
|
139
|
+
canSkip: boolean;
|
|
140
|
+
/** Skip countdown */
|
|
141
|
+
skipCountdown: number;
|
|
142
|
+
/** Is loading */
|
|
143
|
+
isLoading: boolean;
|
|
144
|
+
/** Error */
|
|
145
|
+
error: string | null;
|
|
146
|
+
}
|
|
147
|
+
export declare class VASTParser {
|
|
148
|
+
private maxRedirects;
|
|
149
|
+
private timeout;
|
|
150
|
+
private redirectCount;
|
|
151
|
+
constructor(options?: {
|
|
152
|
+
maxRedirects?: number;
|
|
153
|
+
timeout?: number;
|
|
154
|
+
});
|
|
155
|
+
/**
|
|
156
|
+
* Parse VAST from URL
|
|
157
|
+
*/
|
|
158
|
+
parseFromUrl(url: string): Promise<Ad[]>;
|
|
159
|
+
/**
|
|
160
|
+
* Parse VAST from XML string
|
|
161
|
+
*/
|
|
162
|
+
parseFromXml(xml: string): Ad[];
|
|
163
|
+
/**
|
|
164
|
+
* Fetch and parse VAST
|
|
165
|
+
*/
|
|
166
|
+
private fetchAndParse;
|
|
167
|
+
/**
|
|
168
|
+
* Parse VAST document
|
|
169
|
+
*/
|
|
170
|
+
private parseDocument;
|
|
171
|
+
/**
|
|
172
|
+
* Parse duration string (HH:MM:SS.mmm)
|
|
173
|
+
*/
|
|
174
|
+
private parseDuration;
|
|
175
|
+
/**
|
|
176
|
+
* Parse offset (time or percentage)
|
|
177
|
+
*/
|
|
178
|
+
private parseOffset;
|
|
179
|
+
/**
|
|
180
|
+
* Generate unique ID
|
|
181
|
+
*/
|
|
182
|
+
private generateId;
|
|
183
|
+
}
|
|
184
|
+
export declare class AdsManager {
|
|
185
|
+
private player;
|
|
186
|
+
private config;
|
|
187
|
+
private parser;
|
|
188
|
+
private state;
|
|
189
|
+
private container;
|
|
190
|
+
private adVideo;
|
|
191
|
+
private adContainer;
|
|
192
|
+
private skipButton;
|
|
193
|
+
private adBreaks;
|
|
194
|
+
private currentAds;
|
|
195
|
+
private currentAdIndex;
|
|
196
|
+
private skipTimer;
|
|
197
|
+
private contentPaused;
|
|
198
|
+
private onAdStart;
|
|
199
|
+
private onAdComplete;
|
|
200
|
+
private onAdSkip;
|
|
201
|
+
private onAdClick;
|
|
202
|
+
private onAdErrorCallback;
|
|
203
|
+
private onAllAdsComplete;
|
|
204
|
+
constructor(config?: AdConfig);
|
|
205
|
+
/**
|
|
206
|
+
* Attach to player
|
|
207
|
+
*/
|
|
208
|
+
attach(player: Player, container: HTMLElement): void;
|
|
209
|
+
/**
|
|
210
|
+
* Create ad container
|
|
211
|
+
*/
|
|
212
|
+
private createAdContainer;
|
|
213
|
+
/**
|
|
214
|
+
* Attach player events
|
|
215
|
+
*/
|
|
216
|
+
private attachPlayerEvents;
|
|
217
|
+
/**
|
|
218
|
+
* Preload ads
|
|
219
|
+
*/
|
|
220
|
+
private preloadAds;
|
|
221
|
+
/**
|
|
222
|
+
* Play ad break
|
|
223
|
+
*/
|
|
224
|
+
playAdBreak(adBreak: AdBreak): Promise<void>;
|
|
225
|
+
/**
|
|
226
|
+
* Play single ad
|
|
227
|
+
*/
|
|
228
|
+
private playAd;
|
|
229
|
+
/**
|
|
230
|
+
* Select best media file
|
|
231
|
+
*/
|
|
232
|
+
private selectMediaFile;
|
|
233
|
+
/**
|
|
234
|
+
* Start skip timer
|
|
235
|
+
*/
|
|
236
|
+
private startSkipTimer;
|
|
237
|
+
/**
|
|
238
|
+
* Update skip button
|
|
239
|
+
*/
|
|
240
|
+
private updateSkipButton;
|
|
241
|
+
/**
|
|
242
|
+
* Skip current ad
|
|
243
|
+
*/
|
|
244
|
+
skipAd(): void;
|
|
245
|
+
/**
|
|
246
|
+
* Handle ad click
|
|
247
|
+
*/
|
|
248
|
+
private handleAdClick;
|
|
249
|
+
/**
|
|
250
|
+
* Handle ad time update
|
|
251
|
+
*/
|
|
252
|
+
private onAdTimeUpdate;
|
|
253
|
+
/**
|
|
254
|
+
* Handle ad ended
|
|
255
|
+
*/
|
|
256
|
+
private onAdEnded;
|
|
257
|
+
/**
|
|
258
|
+
* Handle ad error
|
|
259
|
+
*/
|
|
260
|
+
private handleAdError;
|
|
261
|
+
/**
|
|
262
|
+
* Finish ad break
|
|
263
|
+
*/
|
|
264
|
+
private finishAdBreak;
|
|
265
|
+
/**
|
|
266
|
+
* Pause content
|
|
267
|
+
*/
|
|
268
|
+
private pauseContent;
|
|
269
|
+
/**
|
|
270
|
+
* Resume content
|
|
271
|
+
*/
|
|
272
|
+
private resumeContent;
|
|
273
|
+
/**
|
|
274
|
+
* Track ad event
|
|
275
|
+
*/
|
|
276
|
+
private trackEvent;
|
|
277
|
+
/**
|
|
278
|
+
* Track URL (fire pixel)
|
|
279
|
+
*/
|
|
280
|
+
private trackUrl;
|
|
281
|
+
/**
|
|
282
|
+
* Log debug message
|
|
283
|
+
*/
|
|
284
|
+
private log;
|
|
285
|
+
/**
|
|
286
|
+
* Get current state
|
|
287
|
+
*/
|
|
288
|
+
getState(): AdState;
|
|
289
|
+
/**
|
|
290
|
+
* Set event handlers
|
|
291
|
+
*/
|
|
292
|
+
on(event: 'adStart', handler: (ad: Ad) => void): void;
|
|
293
|
+
on(event: 'adComplete', handler: (ad: Ad) => void): void;
|
|
294
|
+
on(event: 'adSkip', handler: (ad: Ad) => void): void;
|
|
295
|
+
on(event: 'adClick', handler: (ad: Ad) => void): void;
|
|
296
|
+
on(event: 'adError', handler: (error: string) => void): void;
|
|
297
|
+
on(event: 'allAdsComplete', handler: () => void): void;
|
|
298
|
+
/**
|
|
299
|
+
* Destroy ads manager
|
|
300
|
+
*/
|
|
301
|
+
destroy(): void;
|
|
302
|
+
}
|
|
303
|
+
export declare function createAdsManager(config?: AdConfig): AdsManager;
|
|
304
|
+
/**
|
|
305
|
+
* Ads plugin for Player
|
|
306
|
+
*/
|
|
307
|
+
export declare function adsPlugin(config: AdConfig): {
|
|
308
|
+
name: string;
|
|
309
|
+
install: (player: Player, container: HTMLElement) => () => void;
|
|
310
|
+
};
|
|
311
|
+
//# sourceMappingURL=ads.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ads.d.ts","sourceRoot":"","sources":["../../src/plugins/ads.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Video Analytics Plugin
|
|
3
|
+
*
|
|
4
|
+
* Deep integration with ts-analytics for comprehensive video tracking.
|
|
5
|
+
*
|
|
6
|
+
* @module plugins/analytics
|
|
7
|
+
*/
|
|
8
|
+
import type { Player } from '../player';
|
|
9
|
+
export interface VideoAnalyticsConfig {
|
|
10
|
+
/** Site ID for analytics */
|
|
11
|
+
siteId: string;
|
|
12
|
+
/** Analytics API endpoint */
|
|
13
|
+
apiEndpoint: string;
|
|
14
|
+
/** Video ID (unique identifier) */
|
|
15
|
+
videoId: string;
|
|
16
|
+
/** Video title */
|
|
17
|
+
videoTitle?: string;
|
|
18
|
+
/** Video duration (auto-detected if not provided) */
|
|
19
|
+
duration?: number;
|
|
20
|
+
/** Content type (vod, live, etc.) */
|
|
21
|
+
contentType?: 'vod' | 'live' | 'dvr';
|
|
22
|
+
/** Content category */
|
|
23
|
+
category?: string;
|
|
24
|
+
/** Content tags */
|
|
25
|
+
tags?: string[];
|
|
26
|
+
/** Creator/channel ID */
|
|
27
|
+
creatorId?: string;
|
|
28
|
+
/** Series/playlist ID */
|
|
29
|
+
seriesId?: string;
|
|
30
|
+
/** Episode number */
|
|
31
|
+
episode?: number;
|
|
32
|
+
/** Season number */
|
|
33
|
+
season?: number;
|
|
34
|
+
/** Track playback milestones (percentages) */
|
|
35
|
+
milestones?: number[];
|
|
36
|
+
/** Track heartbeat interval (seconds) */
|
|
37
|
+
heartbeatInterval?: number;
|
|
38
|
+
/** Track quality changes */
|
|
39
|
+
trackQualityChanges?: boolean;
|
|
40
|
+
/** Track seeking behavior */
|
|
41
|
+
trackSeeking?: boolean;
|
|
42
|
+
/** Track buffering */
|
|
43
|
+
trackBuffering?: boolean;
|
|
44
|
+
/** Track errors */
|
|
45
|
+
trackErrors?: boolean;
|
|
46
|
+
/** Track engagement (pauses, replays) */
|
|
47
|
+
trackEngagement?: boolean;
|
|
48
|
+
/** Custom properties to include */
|
|
49
|
+
customProperties?: Record<string, string | number | boolean>;
|
|
50
|
+
/** Session ID (auto-generated if not provided) */
|
|
51
|
+
sessionId?: string;
|
|
52
|
+
/** Visitor ID (auto-generated if not provided) */
|
|
53
|
+
visitorId?: string;
|
|
54
|
+
/** Disable analytics */
|
|
55
|
+
disabled?: boolean;
|
|
56
|
+
}
|
|
57
|
+
export interface VideoEvent {
|
|
58
|
+
/** Event name */
|
|
59
|
+
name: VideoEventName;
|
|
60
|
+
/** Timestamp */
|
|
61
|
+
timestamp: Date;
|
|
62
|
+
/** Current playback time */
|
|
63
|
+
currentTime: number;
|
|
64
|
+
/** Video duration */
|
|
65
|
+
duration: number;
|
|
66
|
+
/** Additional properties */
|
|
67
|
+
properties?: Record<string, unknown>;
|
|
68
|
+
}
|
|
69
|
+
export type VideoEventName = 'video_start' | 'video_play' | 'video_pause' | 'video_resume' | 'video_seek' | 'video_buffer_start' | 'video_buffer_end' | 'video_quality_change' | 'video_volume_change' | 'video_mute' | 'video_unmute' | 'video_fullscreen_enter' | 'video_fullscreen_exit' | 'video_pip_enter' | 'video_pip_exit' | 'video_caption_enable' | 'video_caption_disable' | 'video_caption_change' | 'video_audio_track_change' | 'video_speed_change' | 'video_error' | 'video_milestone' | 'video_quartile' | 'video_complete' | 'video_heartbeat' | 'video_engagement' | 'video_ad_start' | 'video_ad_complete' | 'video_ad_skip' | 'video_ad_click';
|
|
70
|
+
export interface VideoAnalyticsState {
|
|
71
|
+
/** Has video started playing */
|
|
72
|
+
hasStarted: boolean;
|
|
73
|
+
/** Has video completed */
|
|
74
|
+
hasCompleted: boolean;
|
|
75
|
+
/** Total watch time in seconds */
|
|
76
|
+
watchTime: number;
|
|
77
|
+
/** Number of pauses */
|
|
78
|
+
pauseCount: number;
|
|
79
|
+
/** Number of seeks */
|
|
80
|
+
seekCount: number;
|
|
81
|
+
/** Number of buffer events */
|
|
82
|
+
bufferCount: number;
|
|
83
|
+
/** Total buffer time in seconds */
|
|
84
|
+
bufferTime: number;
|
|
85
|
+
/** Number of quality changes */
|
|
86
|
+
qualityChangeCount: number;
|
|
87
|
+
/** Reached milestones */
|
|
88
|
+
reachedMilestones: number[];
|
|
89
|
+
/** Reached quartiles */
|
|
90
|
+
reachedQuartiles: number[];
|
|
91
|
+
/** Playback start time */
|
|
92
|
+
playbackStartTime: number | null;
|
|
93
|
+
/** Last heartbeat time */
|
|
94
|
+
lastHeartbeat: number;
|
|
95
|
+
/** Is currently buffering */
|
|
96
|
+
isBuffering: boolean;
|
|
97
|
+
/** Buffer start time */
|
|
98
|
+
bufferStartTime: number | null;
|
|
99
|
+
}
|
|
100
|
+
export declare class VideoAnalytics {
|
|
101
|
+
private player;
|
|
102
|
+
private config;
|
|
103
|
+
private state;
|
|
104
|
+
private heartbeatTimer;
|
|
105
|
+
private eventQueue;
|
|
106
|
+
private flushTimer;
|
|
107
|
+
private sessionId;
|
|
108
|
+
private visitorId;
|
|
109
|
+
private unsubscribers;
|
|
110
|
+
constructor(config: VideoAnalyticsConfig);
|
|
111
|
+
/**
|
|
112
|
+
* Create initial analytics state
|
|
113
|
+
*/
|
|
114
|
+
private createInitialState;
|
|
115
|
+
/**
|
|
116
|
+
* Attach to a player instance
|
|
117
|
+
*/
|
|
118
|
+
attach(player: Player): void;
|
|
119
|
+
/**
|
|
120
|
+
* Detach from player
|
|
121
|
+
*/
|
|
122
|
+
detach(): void;
|
|
123
|
+
/**
|
|
124
|
+
* Attach event listeners to player
|
|
125
|
+
*/
|
|
126
|
+
private attachEventListeners;
|
|
127
|
+
/**
|
|
128
|
+
* Helper to subscribe to player events
|
|
129
|
+
*/
|
|
130
|
+
private on;
|
|
131
|
+
/**
|
|
132
|
+
* Check and track milestones
|
|
133
|
+
*/
|
|
134
|
+
private checkMilestones;
|
|
135
|
+
/**
|
|
136
|
+
* Update watch time
|
|
137
|
+
*/
|
|
138
|
+
private updateWatchTime;
|
|
139
|
+
/**
|
|
140
|
+
* Start heartbeat tracking
|
|
141
|
+
*/
|
|
142
|
+
private startHeartbeat;
|
|
143
|
+
/**
|
|
144
|
+
* Stop heartbeat tracking
|
|
145
|
+
*/
|
|
146
|
+
private stopHeartbeat;
|
|
147
|
+
/**
|
|
148
|
+
* Track an event
|
|
149
|
+
*/
|
|
150
|
+
trackEvent(name: VideoEventName, properties?: Record<string, unknown>): void;
|
|
151
|
+
/**
|
|
152
|
+
* Schedule event flush
|
|
153
|
+
*/
|
|
154
|
+
private scheduleFlush;
|
|
155
|
+
/**
|
|
156
|
+
* Flush events to analytics endpoint
|
|
157
|
+
*/
|
|
158
|
+
flush(): Promise<void>;
|
|
159
|
+
/**
|
|
160
|
+
* Send events to analytics endpoint
|
|
161
|
+
*/
|
|
162
|
+
private sendEvents;
|
|
163
|
+
/**
|
|
164
|
+
* Build event payload for ts-analytics
|
|
165
|
+
*/
|
|
166
|
+
private buildEventPayload;
|
|
167
|
+
/**
|
|
168
|
+
* Generate unique ID
|
|
169
|
+
*/
|
|
170
|
+
private generateId;
|
|
171
|
+
/**
|
|
172
|
+
* Get or create visitor ID
|
|
173
|
+
*/
|
|
174
|
+
private getOrCreateVisitorId;
|
|
175
|
+
/**
|
|
176
|
+
* Get current analytics state
|
|
177
|
+
*/
|
|
178
|
+
getState(): VideoAnalyticsState;
|
|
179
|
+
/**
|
|
180
|
+
* Get session summary
|
|
181
|
+
*/
|
|
182
|
+
getSummary(): Record<string, unknown>;
|
|
183
|
+
/**
|
|
184
|
+
* Reset analytics state
|
|
185
|
+
*/
|
|
186
|
+
reset(): void;
|
|
187
|
+
/**
|
|
188
|
+
* Destroy analytics instance
|
|
189
|
+
*/
|
|
190
|
+
destroy(): void;
|
|
191
|
+
}
|
|
192
|
+
export declare function createVideoAnalytics(config: VideoAnalyticsConfig): VideoAnalytics;
|
|
193
|
+
/**
|
|
194
|
+
* Analytics plugin for Player
|
|
195
|
+
*/
|
|
196
|
+
export declare function analyticsPlugin(config: Omit<VideoAnalyticsConfig, 'videoId'>): {
|
|
197
|
+
name: string;
|
|
198
|
+
install: (player: Player, videoConfig: {
|
|
199
|
+
videoId: string;
|
|
200
|
+
videoTitle?: string;
|
|
201
|
+
}) => () => void;
|
|
202
|
+
};
|
|
203
|
+
//# sourceMappingURL=analytics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/plugins/analytics.ts"],"names":[],"mappings":"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"}
|