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,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Live Streaming UI
|
|
3
|
+
*
|
|
4
|
+
* Components and utilities for live streaming playback.
|
|
5
|
+
*
|
|
6
|
+
* @module core/live
|
|
7
|
+
*/
|
|
8
|
+
import type { StateStore } from './state';
|
|
9
|
+
export interface LiveConfig {
|
|
10
|
+
/** Threshold in seconds to consider "at live edge" (default: 10) */
|
|
11
|
+
liveEdgeThreshold?: number;
|
|
12
|
+
/** Auto-sync to live when seeking within threshold (default: true) */
|
|
13
|
+
autoSyncToLive?: boolean;
|
|
14
|
+
/** Show live indicator badge (default: true) */
|
|
15
|
+
showLiveIndicator?: boolean;
|
|
16
|
+
/** Show time behind live (default: true) */
|
|
17
|
+
showTimeBehind?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface LiveState {
|
|
20
|
+
/** Whether the stream is live */
|
|
21
|
+
isLive: boolean;
|
|
22
|
+
/** Whether currently at the live edge */
|
|
23
|
+
isAtLiveEdge: boolean;
|
|
24
|
+
/** Seconds behind the live edge */
|
|
25
|
+
secondsBehindLive: number;
|
|
26
|
+
/** Whether DVR (seeking) is available */
|
|
27
|
+
isDVR: boolean;
|
|
28
|
+
/** The live edge time (seekable end) */
|
|
29
|
+
liveEdgeTime: number;
|
|
30
|
+
}
|
|
31
|
+
export declare class LiveIndicator {
|
|
32
|
+
private container;
|
|
33
|
+
private dot;
|
|
34
|
+
private label;
|
|
35
|
+
private timeBehind;
|
|
36
|
+
private state;
|
|
37
|
+
private config;
|
|
38
|
+
constructor(config?: LiveConfig);
|
|
39
|
+
/**
|
|
40
|
+
* Apply default styles
|
|
41
|
+
*/
|
|
42
|
+
private applyStyles;
|
|
43
|
+
/**
|
|
44
|
+
* Get the element
|
|
45
|
+
*/
|
|
46
|
+
getElement(): HTMLElement;
|
|
47
|
+
/**
|
|
48
|
+
* Update live state
|
|
49
|
+
*/
|
|
50
|
+
update(state: Partial<LiveState>): void;
|
|
51
|
+
/**
|
|
52
|
+
* Show indicator
|
|
53
|
+
*/
|
|
54
|
+
show(): void;
|
|
55
|
+
/**
|
|
56
|
+
* Hide indicator
|
|
57
|
+
*/
|
|
58
|
+
hide(): void;
|
|
59
|
+
/**
|
|
60
|
+
* Set click handler (for seeking to live)
|
|
61
|
+
*/
|
|
62
|
+
onClick(handler: () => void): void;
|
|
63
|
+
/**
|
|
64
|
+
* Get current state
|
|
65
|
+
*/
|
|
66
|
+
getState(): LiveState;
|
|
67
|
+
/**
|
|
68
|
+
* Destroy component
|
|
69
|
+
*/
|
|
70
|
+
destroy(): void;
|
|
71
|
+
}
|
|
72
|
+
export declare class SeekToLiveButton {
|
|
73
|
+
private button;
|
|
74
|
+
private icon;
|
|
75
|
+
private label;
|
|
76
|
+
private visible;
|
|
77
|
+
constructor();
|
|
78
|
+
private applyStyles;
|
|
79
|
+
getElement(): HTMLButtonElement;
|
|
80
|
+
show(): void;
|
|
81
|
+
hide(): void;
|
|
82
|
+
isVisible(): boolean;
|
|
83
|
+
onClick(handler: () => void): void;
|
|
84
|
+
destroy(): void;
|
|
85
|
+
}
|
|
86
|
+
export declare class LiveController {
|
|
87
|
+
private indicator;
|
|
88
|
+
private seekToLiveButton;
|
|
89
|
+
private store;
|
|
90
|
+
private config;
|
|
91
|
+
private unsubscribe;
|
|
92
|
+
private onSeekToLive;
|
|
93
|
+
constructor(store: StateStore, config?: LiveConfig);
|
|
94
|
+
/**
|
|
95
|
+
* Update from player state
|
|
96
|
+
*/
|
|
97
|
+
private updateFromState;
|
|
98
|
+
/**
|
|
99
|
+
* Seek to live edge
|
|
100
|
+
*/
|
|
101
|
+
seekToLive(): void;
|
|
102
|
+
/**
|
|
103
|
+
* Set seek to live callback
|
|
104
|
+
*/
|
|
105
|
+
setSeekToLiveHandler(handler: () => void): void;
|
|
106
|
+
/**
|
|
107
|
+
* Get live indicator element
|
|
108
|
+
*/
|
|
109
|
+
getIndicator(): HTMLElement;
|
|
110
|
+
/**
|
|
111
|
+
* Get seek to live button element
|
|
112
|
+
*/
|
|
113
|
+
getSeekToLiveButton(): HTMLElement;
|
|
114
|
+
/**
|
|
115
|
+
* Get current live state
|
|
116
|
+
*/
|
|
117
|
+
getState(): LiveState;
|
|
118
|
+
/**
|
|
119
|
+
* Check if at live edge
|
|
120
|
+
*/
|
|
121
|
+
isAtLiveEdge(): boolean;
|
|
122
|
+
/**
|
|
123
|
+
* Destroy controller
|
|
124
|
+
*/
|
|
125
|
+
destroy(): void;
|
|
126
|
+
}
|
|
127
|
+
export declare function createLiveIndicator(config?: LiveConfig): LiveIndicator;
|
|
128
|
+
export declare function createSeekToLiveButton(): SeekToLiveButton;
|
|
129
|
+
export declare function createLiveController(store: StateStore, config?: LiveConfig): LiveController;
|
|
130
|
+
//# sourceMappingURL=live.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../../src/core/live.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ts-video-player Media Session API Integration
|
|
3
|
+
*
|
|
4
|
+
* Provides lock screen / notification controls via navigator.mediaSession.
|
|
5
|
+
*
|
|
6
|
+
* @module core/media-session
|
|
7
|
+
*/
|
|
8
|
+
import type { StateStore } from './state';
|
|
9
|
+
export interface MediaSessionOptions {
|
|
10
|
+
/** Title to display */
|
|
11
|
+
title?: string;
|
|
12
|
+
/** Artist name */
|
|
13
|
+
artist?: string;
|
|
14
|
+
/** Album name */
|
|
15
|
+
album?: string;
|
|
16
|
+
/** Artwork images for lock screen */
|
|
17
|
+
artwork?: MediaImage[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Check if Media Session API is available
|
|
21
|
+
*/
|
|
22
|
+
export declare function isMediaSessionSupported(): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Create a Media Session controller that syncs player state to the browser's
|
|
25
|
+
* media session (lock screen controls, notification area, etc.)
|
|
26
|
+
*/
|
|
27
|
+
export declare function createMediaSession(store: StateStore, actions: {
|
|
28
|
+
play: () => void;
|
|
29
|
+
pause: () => void;
|
|
30
|
+
seekTo: (time: number) => void;
|
|
31
|
+
seekBy: (offset: number) => void;
|
|
32
|
+
stop: () => void;
|
|
33
|
+
}, options?: MediaSessionOptions): () => void;
|
|
34
|
+
/**
|
|
35
|
+
* Update media session metadata
|
|
36
|
+
*/
|
|
37
|
+
export declare function updateMetadata(options: MediaSessionOptions): void;
|
|
38
|
+
//# sourceMappingURL=media-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-session.d.ts","sourceRoot":"","sources":["../../src/core/media-session.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC,MAAM,WAAW,mBAAmB;IAClC,uBAAuB;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kBAAkB;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,qCAAqC;IACrC,OAAO,CAAC,EAAE,UAAU,EAAE,CAAA;CACvB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,OAAO,CAEjD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE;IACP,IAAI,EAAE,MAAM,IAAI,CAAA;IAChB,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9B,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,IAAI,EAAE,MAAM,IAAI,CAAA;CACjB,EACD,OAAO,CAAC,EAAE,mBAAmB,GAC5B,MAAM,IAAI,CAiFZ;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAQjE"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ts-video-player Orientation Lock
|
|
3
|
+
*
|
|
4
|
+
* Auto-lock screen orientation to landscape when entering fullscreen on mobile.
|
|
5
|
+
*
|
|
6
|
+
* @module core/orientation
|
|
7
|
+
*/
|
|
8
|
+
type OrientationType = 'landscape' | 'portrait' | 'any';
|
|
9
|
+
/**
|
|
10
|
+
* Check if Screen Orientation API is available
|
|
11
|
+
*/
|
|
12
|
+
export declare function isOrientationLockSupported(): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Lock the screen orientation (best-effort, silently fails if unsupported)
|
|
15
|
+
*/
|
|
16
|
+
export declare function lockOrientation(type: OrientationType): void;
|
|
17
|
+
/**
|
|
18
|
+
* Unlock the screen orientation
|
|
19
|
+
*/
|
|
20
|
+
export declare function unlockOrientation(): void;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=orientation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orientation.d.ts","sourceRoot":"","sources":["../../src/core/orientation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,KAAK,eAAe,GAAG,WAAW,GAAG,UAAU,GAAG,KAAK,CAAA;AAOvD;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,OAAO,CAMpD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAc3D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAQxC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ts-video-player Popover Positioning
|
|
3
|
+
*
|
|
4
|
+
* Collision-aware positioning for menus and tooltips.
|
|
5
|
+
*
|
|
6
|
+
* @module core/popover
|
|
7
|
+
*/
|
|
8
|
+
export interface Rect {
|
|
9
|
+
top: number;
|
|
10
|
+
left: number;
|
|
11
|
+
bottom: number;
|
|
12
|
+
right: number;
|
|
13
|
+
width: number;
|
|
14
|
+
height: number;
|
|
15
|
+
}
|
|
16
|
+
export type Placement = 'top' | 'bottom' | 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end';
|
|
17
|
+
export interface PositionOptions {
|
|
18
|
+
/** Preferred placement */
|
|
19
|
+
placement?: Placement;
|
|
20
|
+
/** Gap between anchor and popover in px */
|
|
21
|
+
offset?: number;
|
|
22
|
+
/** Boundary element (defaults to viewport) */
|
|
23
|
+
boundary?: HTMLElement | null;
|
|
24
|
+
/** Minimum distance from boundary edges in px */
|
|
25
|
+
padding?: number;
|
|
26
|
+
}
|
|
27
|
+
export interface PositionResult {
|
|
28
|
+
top: number;
|
|
29
|
+
left: number;
|
|
30
|
+
placement: Placement;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Calculate the position of a popover relative to an anchor element,
|
|
34
|
+
* flipping when it would overflow the boundary.
|
|
35
|
+
*/
|
|
36
|
+
export declare function computePosition(anchor: HTMLElement, popover: HTMLElement, options?: PositionOptions): PositionResult;
|
|
37
|
+
/**
|
|
38
|
+
* Apply computed position to a popover element using absolute positioning
|
|
39
|
+
* relative to an offset parent.
|
|
40
|
+
*/
|
|
41
|
+
export declare function applyPosition(anchor: HTMLElement, popover: HTMLElement, options?: PositionOptions): Placement;
|
|
42
|
+
//# sourceMappingURL=popover.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"popover.d.ts","sourceRoot":"","sources":["../../src/core/popover.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,IAAI;IACnB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,cAAc,GAAG,YAAY,CAAA;AAElG,MAAM,WAAW,eAAe;IAC9B,0BAA0B;IAC1B,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,2CAA2C;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;IAC7B,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,SAAS,CAAA;CACrB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,WAAW,EACpB,OAAO,GAAE,eAAoB,GAC5B,cAAc,CAkEhB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,WAAW,EACpB,OAAO,GAAE,eAAoB,GAC5B,SAAS,CAsBX"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remote Playback (AirPlay & Google Cast)
|
|
3
|
+
*
|
|
4
|
+
* Provides support for remote playback via AirPlay and Google Cast.
|
|
5
|
+
*
|
|
6
|
+
* @module core/remote-playback
|
|
7
|
+
*/
|
|
8
|
+
export type RemotePlaybackType = 'airplay' | 'googlecast' | 'none';
|
|
9
|
+
export type RemotePlaybackState = 'disconnected' | 'connecting' | 'connected';
|
|
10
|
+
export interface RemoteDevice {
|
|
11
|
+
/** Device name */
|
|
12
|
+
name: string;
|
|
13
|
+
/** Device type */
|
|
14
|
+
type: RemotePlaybackType;
|
|
15
|
+
/** Device ID (if available) */
|
|
16
|
+
id?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface RemotePlaybackConfig {
|
|
19
|
+
/** Enable AirPlay (default: true on Safari) */
|
|
20
|
+
airPlay?: boolean;
|
|
21
|
+
/** Enable Google Cast (default: true) */
|
|
22
|
+
googleCast?: boolean;
|
|
23
|
+
/** Google Cast application ID (default: Chrome default receiver) */
|
|
24
|
+
castApplicationId?: string;
|
|
25
|
+
/** Callback when device availability changes */
|
|
26
|
+
onAvailabilityChange?: (type: RemotePlaybackType, available: boolean) => void;
|
|
27
|
+
/** Callback when connection state changes */
|
|
28
|
+
onStateChange?: (state: RemotePlaybackState, device?: RemoteDevice) => void;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Check if AirPlay is supported
|
|
32
|
+
*/
|
|
33
|
+
export declare function isAirPlaySupported(): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Check if an element has AirPlay available
|
|
36
|
+
*/
|
|
37
|
+
export declare function isAirPlayAvailable(video: HTMLVideoElement): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Show AirPlay picker
|
|
40
|
+
*/
|
|
41
|
+
export declare function showAirPlayPicker(video: HTMLVideoElement): void;
|
|
42
|
+
/**
|
|
43
|
+
* Check if currently playing via AirPlay
|
|
44
|
+
*/
|
|
45
|
+
export declare function isAirPlaying(video: HTMLVideoElement): boolean;
|
|
46
|
+
declare global {
|
|
47
|
+
interface Window {
|
|
48
|
+
chrome?: {
|
|
49
|
+
cast?: any;
|
|
50
|
+
};
|
|
51
|
+
__onGCastApiAvailable?: (isAvailable: boolean) => void;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Check if Google Cast is supported
|
|
56
|
+
*/
|
|
57
|
+
export declare function isGoogleCastSupported(): boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Load the Google Cast SDK
|
|
60
|
+
*/
|
|
61
|
+
export declare function loadGoogleCastSDK(): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* Initialize Google Cast
|
|
64
|
+
*/
|
|
65
|
+
export declare function initializeGoogleCast(applicationId?: string): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Request a Google Cast session
|
|
68
|
+
*/
|
|
69
|
+
export declare function requestCastSession(): Promise<any>;
|
|
70
|
+
/**
|
|
71
|
+
* End Google Cast session
|
|
72
|
+
*/
|
|
73
|
+
export declare function endCastSession(): void;
|
|
74
|
+
/**
|
|
75
|
+
* Check if currently casting
|
|
76
|
+
*/
|
|
77
|
+
export declare function isCasting(): boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Get current cast session
|
|
80
|
+
*/
|
|
81
|
+
export declare function getCastSession(): any;
|
|
82
|
+
/**
|
|
83
|
+
* Cast media to connected device
|
|
84
|
+
*/
|
|
85
|
+
export declare function castMedia(url: string, contentType: string, metadata?: {
|
|
86
|
+
title?: string;
|
|
87
|
+
subtitle?: string;
|
|
88
|
+
images?: string[];
|
|
89
|
+
}): Promise<void>;
|
|
90
|
+
export declare class RemotePlaybackController {
|
|
91
|
+
private video;
|
|
92
|
+
private config;
|
|
93
|
+
private state;
|
|
94
|
+
private connectedDevice;
|
|
95
|
+
private airPlayAvailable;
|
|
96
|
+
private googleCastAvailable;
|
|
97
|
+
private listeners;
|
|
98
|
+
constructor(config?: RemotePlaybackConfig);
|
|
99
|
+
/**
|
|
100
|
+
* Attach to a video element
|
|
101
|
+
*/
|
|
102
|
+
attach(video: HTMLVideoElement): Promise<void>;
|
|
103
|
+
/**
|
|
104
|
+
* Setup AirPlay event listeners
|
|
105
|
+
*/
|
|
106
|
+
private setupAirPlay;
|
|
107
|
+
/**
|
|
108
|
+
* Setup Google Cast event listeners
|
|
109
|
+
*/
|
|
110
|
+
private setupGoogleCast;
|
|
111
|
+
/**
|
|
112
|
+
* Show remote playback picker
|
|
113
|
+
*/
|
|
114
|
+
showPicker(type?: RemotePlaybackType): Promise<void>;
|
|
115
|
+
/**
|
|
116
|
+
* Disconnect from remote device
|
|
117
|
+
*/
|
|
118
|
+
disconnect(): void;
|
|
119
|
+
/**
|
|
120
|
+
* Check if AirPlay is available
|
|
121
|
+
*/
|
|
122
|
+
isAirPlayAvailable(): boolean;
|
|
123
|
+
/**
|
|
124
|
+
* Check if Google Cast is available
|
|
125
|
+
*/
|
|
126
|
+
isGoogleCastAvailable(): boolean;
|
|
127
|
+
/**
|
|
128
|
+
* Check if any remote playback is available
|
|
129
|
+
*/
|
|
130
|
+
isRemotePlaybackAvailable(): boolean;
|
|
131
|
+
/**
|
|
132
|
+
* Get current state
|
|
133
|
+
*/
|
|
134
|
+
getState(): RemotePlaybackState;
|
|
135
|
+
/**
|
|
136
|
+
* Get connected device
|
|
137
|
+
*/
|
|
138
|
+
getConnectedDevice(): RemoteDevice | null;
|
|
139
|
+
/**
|
|
140
|
+
* Check if currently connected to a remote device
|
|
141
|
+
*/
|
|
142
|
+
isConnected(): boolean;
|
|
143
|
+
/**
|
|
144
|
+
* Add event listener
|
|
145
|
+
*/
|
|
146
|
+
on(event: string, handler: (...args: any[]) => void): void;
|
|
147
|
+
/**
|
|
148
|
+
* Remove event listener
|
|
149
|
+
*/
|
|
150
|
+
off(event: string, handler: (...args: any[]) => void): void;
|
|
151
|
+
/**
|
|
152
|
+
* Emit event
|
|
153
|
+
*/
|
|
154
|
+
private emit;
|
|
155
|
+
/**
|
|
156
|
+
* Detach from video element
|
|
157
|
+
*/
|
|
158
|
+
detach(): void;
|
|
159
|
+
/**
|
|
160
|
+
* Destroy controller
|
|
161
|
+
*/
|
|
162
|
+
destroy(): void;
|
|
163
|
+
}
|
|
164
|
+
export declare class AirPlayButton {
|
|
165
|
+
private button;
|
|
166
|
+
private _available;
|
|
167
|
+
constructor();
|
|
168
|
+
private applyStyles;
|
|
169
|
+
getElement(): HTMLButtonElement;
|
|
170
|
+
setAvailable(available: boolean): void;
|
|
171
|
+
isAvailable(): boolean;
|
|
172
|
+
show(): void;
|
|
173
|
+
hide(): void;
|
|
174
|
+
setActive(active: boolean): void;
|
|
175
|
+
onClick(handler: () => void): void;
|
|
176
|
+
destroy(): void;
|
|
177
|
+
}
|
|
178
|
+
export declare class GoogleCastButton {
|
|
179
|
+
private button;
|
|
180
|
+
private _available;
|
|
181
|
+
constructor();
|
|
182
|
+
private applyStyles;
|
|
183
|
+
getElement(): HTMLButtonElement;
|
|
184
|
+
setAvailable(available: boolean): void;
|
|
185
|
+
isAvailable(): boolean;
|
|
186
|
+
show(): void;
|
|
187
|
+
hide(): void;
|
|
188
|
+
setActive(active: boolean): void;
|
|
189
|
+
onClick(handler: () => void): void;
|
|
190
|
+
destroy(): void;
|
|
191
|
+
}
|
|
192
|
+
export declare function createRemotePlaybackController(config?: RemotePlaybackConfig): RemotePlaybackController;
|
|
193
|
+
export declare function createAirPlayButton(): AirPlayButton;
|
|
194
|
+
export declare function createGoogleCastButton(): GoogleCastButton;
|
|
195
|
+
//# sourceMappingURL=remote-playback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-playback.d.ts","sourceRoot":"","sources":["../../src/core/remote-playback.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Settings Menu
|
|
3
|
+
*
|
|
4
|
+
* Unified settings menu for quality, speed, captions, and audio.
|
|
5
|
+
*
|
|
6
|
+
* @module core/settings-menu
|
|
7
|
+
*/
|
|
8
|
+
import type { VideoQuality, AudioTrack, TextTrack } from '../types';
|
|
9
|
+
export interface SettingsMenuConfig {
|
|
10
|
+
/** Show quality options */
|
|
11
|
+
quality?: boolean;
|
|
12
|
+
/** Show playback speed options */
|
|
13
|
+
speed?: boolean;
|
|
14
|
+
/** Show captions options */
|
|
15
|
+
captions?: boolean;
|
|
16
|
+
/** Show audio track options */
|
|
17
|
+
audioTracks?: boolean;
|
|
18
|
+
/** Show audio boost options */
|
|
19
|
+
audioBoost?: boolean;
|
|
20
|
+
/** Custom speed values */
|
|
21
|
+
speedValues?: number[];
|
|
22
|
+
/** Custom boost values */
|
|
23
|
+
boostValues?: number[];
|
|
24
|
+
}
|
|
25
|
+
export interface SettingsMenuState {
|
|
26
|
+
qualities: VideoQuality[];
|
|
27
|
+
currentQuality: VideoQuality | null;
|
|
28
|
+
isAutoQuality: boolean;
|
|
29
|
+
speeds: number[];
|
|
30
|
+
currentSpeed: number;
|
|
31
|
+
textTracks: TextTrack[];
|
|
32
|
+
currentTextTrack: TextTrack | null;
|
|
33
|
+
audioTracks: AudioTrack[];
|
|
34
|
+
currentAudioTrack: AudioTrack | null;
|
|
35
|
+
audioBoost: number;
|
|
36
|
+
}
|
|
37
|
+
export declare class SettingsMenu {
|
|
38
|
+
private container;
|
|
39
|
+
private config;
|
|
40
|
+
private state;
|
|
41
|
+
private currentView;
|
|
42
|
+
private visible;
|
|
43
|
+
private onQualityChange;
|
|
44
|
+
private onSpeedChange;
|
|
45
|
+
private onTextTrackChange;
|
|
46
|
+
private onAudioTrackChange;
|
|
47
|
+
private onBoostChange;
|
|
48
|
+
constructor(config?: SettingsMenuConfig);
|
|
49
|
+
private applyStyles;
|
|
50
|
+
/**
|
|
51
|
+
* Update state
|
|
52
|
+
*/
|
|
53
|
+
updateState(state: Partial<SettingsMenuState>): void;
|
|
54
|
+
/**
|
|
55
|
+
* Render menu
|
|
56
|
+
*/
|
|
57
|
+
private render;
|
|
58
|
+
/**
|
|
59
|
+
* Render main menu
|
|
60
|
+
*/
|
|
61
|
+
private renderMainMenu;
|
|
62
|
+
/**
|
|
63
|
+
* Render quality submenu
|
|
64
|
+
*/
|
|
65
|
+
private renderQualityMenu;
|
|
66
|
+
/**
|
|
67
|
+
* Render speed submenu
|
|
68
|
+
*/
|
|
69
|
+
private renderSpeedMenu;
|
|
70
|
+
/**
|
|
71
|
+
* Render captions submenu
|
|
72
|
+
*/
|
|
73
|
+
private renderCaptionsMenu;
|
|
74
|
+
/**
|
|
75
|
+
* Render audio submenu
|
|
76
|
+
*/
|
|
77
|
+
private renderAudioMenu;
|
|
78
|
+
/**
|
|
79
|
+
* Render audio boost submenu
|
|
80
|
+
*/
|
|
81
|
+
private renderBoostMenu;
|
|
82
|
+
/**
|
|
83
|
+
* Add menu item with value
|
|
84
|
+
*/
|
|
85
|
+
private addMenuItem;
|
|
86
|
+
/**
|
|
87
|
+
* Add radio item
|
|
88
|
+
*/
|
|
89
|
+
private addRadioItem;
|
|
90
|
+
/**
|
|
91
|
+
* Add back button
|
|
92
|
+
*/
|
|
93
|
+
private addBackButton;
|
|
94
|
+
/**
|
|
95
|
+
* Go back to main menu
|
|
96
|
+
*/
|
|
97
|
+
private goBack;
|
|
98
|
+
/**
|
|
99
|
+
* Show menu
|
|
100
|
+
*/
|
|
101
|
+
show(): void;
|
|
102
|
+
/**
|
|
103
|
+
* Hide menu
|
|
104
|
+
*/
|
|
105
|
+
hide(): void;
|
|
106
|
+
/**
|
|
107
|
+
* Toggle menu
|
|
108
|
+
*/
|
|
109
|
+
toggle(): void;
|
|
110
|
+
/**
|
|
111
|
+
* Check if visible
|
|
112
|
+
*/
|
|
113
|
+
isVisible(): boolean;
|
|
114
|
+
/**
|
|
115
|
+
* Set event handlers
|
|
116
|
+
*/
|
|
117
|
+
onQuality(handler: (quality: VideoQuality | 'auto') => void): void;
|
|
118
|
+
onSpeed(handler: (speed: number) => void): void;
|
|
119
|
+
onTextTrack(handler: (track: TextTrack | null) => void): void;
|
|
120
|
+
onAudioTrack(handler: (track: AudioTrack) => void): void;
|
|
121
|
+
onBoost(handler: (boost: number) => void): void;
|
|
122
|
+
/**
|
|
123
|
+
* Get element
|
|
124
|
+
*/
|
|
125
|
+
getElement(): HTMLElement;
|
|
126
|
+
/**
|
|
127
|
+
* Destroy
|
|
128
|
+
*/
|
|
129
|
+
destroy(): void;
|
|
130
|
+
}
|
|
131
|
+
export declare function createSettingsMenu(config?: SettingsMenuConfig): SettingsMenu;
|
|
132
|
+
//# sourceMappingURL=settings-menu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-menu.d.ts","sourceRoot":"","sources":["../../src/core/settings-menu.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Buffering Spinner
|
|
3
|
+
*
|
|
4
|
+
* Loading indicator for buffering states.
|
|
5
|
+
*
|
|
6
|
+
* @module core/spinner
|
|
7
|
+
*/
|
|
8
|
+
export interface SpinnerConfig {
|
|
9
|
+
/** Spinner size in pixels */
|
|
10
|
+
size?: number;
|
|
11
|
+
/** Track width */
|
|
12
|
+
trackWidth?: number;
|
|
13
|
+
/** Track color */
|
|
14
|
+
trackColor?: string;
|
|
15
|
+
/** Fill color */
|
|
16
|
+
fillColor?: string;
|
|
17
|
+
/** Animation duration in ms */
|
|
18
|
+
duration?: number;
|
|
19
|
+
/** Show/hide delay in ms */
|
|
20
|
+
delay?: number;
|
|
21
|
+
}
|
|
22
|
+
export declare class Spinner {
|
|
23
|
+
private container;
|
|
24
|
+
private svg;
|
|
25
|
+
private track;
|
|
26
|
+
private fill;
|
|
27
|
+
private config;
|
|
28
|
+
private visible;
|
|
29
|
+
private showTimeout;
|
|
30
|
+
constructor(config?: SpinnerConfig);
|
|
31
|
+
private applyStyles;
|
|
32
|
+
/**
|
|
33
|
+
* Get the element
|
|
34
|
+
*/
|
|
35
|
+
getElement(): HTMLElement;
|
|
36
|
+
/**
|
|
37
|
+
* Show spinner (with optional delay)
|
|
38
|
+
*/
|
|
39
|
+
show(immediate?: boolean): void;
|
|
40
|
+
/**
|
|
41
|
+
* Hide spinner
|
|
42
|
+
*/
|
|
43
|
+
hide(): void;
|
|
44
|
+
/**
|
|
45
|
+
* Check if visible
|
|
46
|
+
*/
|
|
47
|
+
isVisible(): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Set fill percentage (0-100)
|
|
50
|
+
*/
|
|
51
|
+
setProgress(percent: number): void;
|
|
52
|
+
/**
|
|
53
|
+
* Reset to indeterminate
|
|
54
|
+
*/
|
|
55
|
+
resetProgress(): void;
|
|
56
|
+
/**
|
|
57
|
+
* Update config
|
|
58
|
+
*/
|
|
59
|
+
updateConfig(config: Partial<SpinnerConfig>): void;
|
|
60
|
+
/**
|
|
61
|
+
* Destroy
|
|
62
|
+
*/
|
|
63
|
+
destroy(): void;
|
|
64
|
+
}
|
|
65
|
+
export declare function createSpinner(config?: SpinnerConfig): Spinner;
|
|
66
|
+
export declare const SPINNER_STYLES = "\n.tsvp-spinner {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: 5;\n pointer-events: none;\n}\n\n.tsvp-spinner svg {\n animation: tsvp-spinner-rotate 1s linear infinite;\n}\n\n@keyframes tsvp-spinner-rotate {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n";
|
|
67
|
+
//# sourceMappingURL=spinner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/core/spinner.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,aAAa;IAC5B,6BAA6B;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,iBAAiB;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAMD,qBAAa,OAAO;IAClB,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,GAAG,CAAe;IAC1B,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,IAAI,CAAkB;IAC9B,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,WAAW,CAA6C;gBAEpD,MAAM,GAAE,aAAkB;IAuDtC,OAAO,CAAC,WAAW;IA8CnB;;OAEG;IACH,UAAU,IAAI,WAAW;IAIzB;;OAEG;IACH,IAAI,CAAC,SAAS,UAAQ,GAAG,IAAI;IAsB7B;;OAEG;IACH,IAAI,IAAI,IAAI;IAuBZ;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IASlC;;OAEG;IACH,aAAa,IAAI,IAAI;IAQrB;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;IAoClD;;OAEG;IACH,OAAO,IAAI,IAAI;CAMhB;AAMD,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAE7D;AAMD,eAAO,MAAM,cAAc,2VAkB1B,CAAA"}
|