@eluvio/elv-player-js 2.0.21 → 2.0.23
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/dist/.vite/manifest.json +17 -17
- package/dist/{Analytics-DdX0-7dQ.mjs → Analytics-B72tGTQx.mjs} +1 -1
- package/dist/{Analytics-B6MHUb3Q.js → Analytics-CDXMirgj.js} +1 -1
- package/dist/{dash.all.min-BgLUy4QY.js → dash.all.min-3hdqLcqd.js} +1 -1
- package/dist/{dash.all.min-DkmG-Qxu.mjs → dash.all.min-DlSRaJ_5.mjs} +1 -1
- package/dist/elv-player-js.cjs.js +1 -1
- package/dist/elv-player-js.css +1 -1
- package/dist/elv-player-js.es.js +1 -1
- package/dist/index-Be7Zq2Nh.js +378 -0
- package/dist/{index-BhYSs-gw.mjs → index-BrZn3sD8.mjs} +77 -79
- package/dist/{index-Clf0EQQK.mjs → index-BxTtC119.mjs} +19599 -19553
- package/dist/{index-MQ4UPeZq.js → index-CO76930D.js} +3 -3
- package/lib/player/Cast.js +280 -0
- package/lib/player/Controls.js +103 -5
- package/lib/player/Player.js +84 -20
- package/lib/static/icons/Icons.js +2 -0
- package/lib/static/icons/svgs/airplay.svg +1 -0
- package/lib/static/icons/svgs/cast.svg +1 -0
- package/lib/static/stylesheets/common.module.scss +65 -0
- package/lib/static/stylesheets/controls-tv.module.scss +1 -0
- package/lib/static/stylesheets/controls-web.module.scss +15 -0
- package/lib/static/stylesheets/player.module.scss +16 -0
- package/lib/ui/BuildIcons.cjs +2 -0
- package/lib/ui/Components.jsx +44 -5
- package/lib/ui/Observers.js +28 -18
- package/lib/ui/PlayerUI.jsx +10 -0
- package/lib/ui/TVControls.jsx +25 -11
- package/lib/ui/WebControls.jsx +30 -25
- package/package.json +3 -3
- package/dist/index-4uggw66b.js +0 -375
package/lib/ui/TVControls.jsx
CHANGED
|
@@ -9,7 +9,14 @@ import {ImageUrl, PlayerClick, Time} from "./Common.js";
|
|
|
9
9
|
import EluvioPlayerParameters from "../player/PlayerParameters.js";
|
|
10
10
|
|
|
11
11
|
import EluvioLogo from "../static/images/Logo.png";
|
|
12
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
CollectionMenu,
|
|
14
|
+
ContentVerificationMenu,
|
|
15
|
+
DVRToggle,
|
|
16
|
+
SeekBar,
|
|
17
|
+
SettingsMenu,
|
|
18
|
+
SVG
|
|
19
|
+
} from "./Components.jsx";
|
|
13
20
|
|
|
14
21
|
export const IconButton = ({icon, ...props}) => {
|
|
15
22
|
return (
|
|
@@ -21,7 +28,7 @@ const TimeIndicator = ({player, videoState}) => {
|
|
|
21
28
|
const [currentTime, setCurrentTime] = useState(player.video.currentTime);
|
|
22
29
|
|
|
23
30
|
useEffect(() => {
|
|
24
|
-
const disposeVideoTimeObserver = ObserveVideoTime({
|
|
31
|
+
const disposeVideoTimeObserver = ObserveVideoTime({player, setCurrentTime, rate: 10});
|
|
25
32
|
|
|
26
33
|
return () => disposeVideoTimeObserver && disposeVideoTimeObserver();
|
|
27
34
|
}, []);
|
|
@@ -250,7 +257,7 @@ const TVControls = ({player, playbackStarted, canPlay, recentlyInteracted, setRe
|
|
|
250
257
|
useEffect(() => {
|
|
251
258
|
setPlayerClickHandler(PlayerClick({player, setRecentUserAction}));
|
|
252
259
|
|
|
253
|
-
const disposeVideoObserver = ObserveVideo({
|
|
260
|
+
const disposeVideoObserver = ObserveVideo({player, setVideoState});
|
|
254
261
|
|
|
255
262
|
return () => disposeVideoObserver && disposeVideoObserver();
|
|
256
263
|
}, []);
|
|
@@ -290,7 +297,7 @@ const TVControls = ({player, playbackStarted, canPlay, recentlyInteracted, setRe
|
|
|
290
297
|
// Take focus off of this button because it should no longer be selectable after playback starts
|
|
291
298
|
player.target.firstChild.focus();
|
|
292
299
|
}}
|
|
293
|
-
className={`${ControlStyles["center-play-button"]} ${ControlStyles["icon-button--drop-shadow-focus"]} ${canPlay && !playbackStarted ? "" : ControlStyles["center-play-button--hidden"]}`}
|
|
300
|
+
className={`${ControlStyles["center-play-button"]} ${ControlStyles["icon-button--drop-shadow-focus"]} ${(canPlay && !playbackStarted && !player.casting) ? "" : ControlStyles["center-play-button--hidden"]}`}
|
|
294
301
|
/>
|
|
295
302
|
{
|
|
296
303
|
showInfo ?
|
|
@@ -309,13 +316,8 @@ const TVControls = ({player, playbackStarted, canPlay, recentlyInteracted, setRe
|
|
|
309
316
|
<div className={ControlStyles["spacer"]}/>
|
|
310
317
|
{
|
|
311
318
|
!player.isLive ? null :
|
|
312
|
-
player.
|
|
313
|
-
<
|
|
314
|
-
onClick={() => player.controls.Seek({time: player.controls.GetDuration() - 2})}
|
|
315
|
-
className={`${ControlStyles["live-indicator"]} ${player.isLive && player.behindLiveEdge ? ControlStyles["live-indicator--faded"] : ""}`}
|
|
316
|
-
>
|
|
317
|
-
Live
|
|
318
|
-
</button> :
|
|
319
|
+
player.controls.IsDVRAvailable() ?
|
|
320
|
+
<DVRToggle player={player} /> :
|
|
319
321
|
<div className={ControlStyles["live-indicator"]}>
|
|
320
322
|
Live
|
|
321
323
|
</div>
|
|
@@ -343,6 +345,18 @@ const TVControls = ({player, playbackStarted, canPlay, recentlyInteracted, setRe
|
|
|
343
345
|
<CenterButtons player={player} videoState={videoState}/>
|
|
344
346
|
<div className={ControlStyles["bottom-right-controls"]}>
|
|
345
347
|
<ContentVerificationControls player={player} />
|
|
348
|
+
{
|
|
349
|
+
!player.airplayAvailable ? null :
|
|
350
|
+
<IconButton
|
|
351
|
+
aria-label="Airplay"
|
|
352
|
+
onClick={() => player.video.webkitShowPlaybackTargetPicker()}
|
|
353
|
+
icon={Icons.AirplayIcon}
|
|
354
|
+
/>
|
|
355
|
+
}
|
|
356
|
+
{
|
|
357
|
+
!player.chromecastAvailable ? null :
|
|
358
|
+
<google-cast-launcher></google-cast-launcher>
|
|
359
|
+
}
|
|
346
360
|
{
|
|
347
361
|
!player.controls.GetOptions().hasAnyOptions ? null :
|
|
348
362
|
<MenuButton
|
package/lib/ui/WebControls.jsx
CHANGED
|
@@ -9,7 +9,7 @@ import {ImageUrl, PlayerClick, Time} from "./Common.js";
|
|
|
9
9
|
import EluvioPlayerParameters from "../player/PlayerParameters.js";
|
|
10
10
|
|
|
11
11
|
import EluvioLogo from "../static/images/Logo.png";
|
|
12
|
-
import {
|
|
12
|
+
import {ContentVerificationMenu, DVRToggle, SeekBar, SettingsMenu, VolumeControls} from "./Components.jsx";
|
|
13
13
|
|
|
14
14
|
export const IconButton = ({icon, className="", ...props}) => {
|
|
15
15
|
return (
|
|
@@ -21,12 +21,12 @@ const TimeIndicator = ({player, videoState}) => {
|
|
|
21
21
|
const [currentTime, setCurrentTime] = useState(player.video.currentTime);
|
|
22
22
|
|
|
23
23
|
useEffect(() => {
|
|
24
|
-
const disposeVideoTimeObserver = ObserveVideoTime({
|
|
24
|
+
const disposeVideoTimeObserver = ObserveVideoTime({player, setCurrentTime, rate: 10});
|
|
25
25
|
|
|
26
26
|
return () => disposeVideoTimeObserver && disposeVideoTimeObserver();
|
|
27
27
|
}, []);
|
|
28
28
|
|
|
29
|
-
if(player.isLive && !player.
|
|
29
|
+
if(player.isLive && !player.controls.IsDVRAvailable()) {
|
|
30
30
|
return (
|
|
31
31
|
<div className={ControlStyles["live-indicator"]}>
|
|
32
32
|
Live
|
|
@@ -37,19 +37,17 @@ const TimeIndicator = ({player, videoState}) => {
|
|
|
37
37
|
return (
|
|
38
38
|
<div className={ControlStyles["time"]}>
|
|
39
39
|
{
|
|
40
|
-
!player.isLive ? null :
|
|
41
|
-
<
|
|
42
|
-
onClick={() => player.controls.Seek({time: player.controls.GetDuration() - 2})}
|
|
43
|
-
className={`${ControlStyles["live-indicator"]} ${player.isLive && player.behindLiveEdge ? ControlStyles["live-indicator--faded"] : ""}`}
|
|
44
|
-
>
|
|
45
|
-
Live
|
|
46
|
-
</button>
|
|
40
|
+
!player.isLive || !player.controls.IsDVRAvailable() ? null :
|
|
41
|
+
<DVRToggle player={player} />
|
|
47
42
|
}
|
|
48
43
|
{
|
|
49
44
|
player.isLive && !player.behindLiveEdge ? null :
|
|
50
45
|
`${Time(currentTime, videoState.duration)} / `
|
|
51
46
|
}
|
|
52
|
-
{
|
|
47
|
+
{
|
|
48
|
+
!player.dvrEnabled ? null :
|
|
49
|
+
Time(videoState.duration, videoState.duration)
|
|
50
|
+
}
|
|
53
51
|
</div>
|
|
54
52
|
);
|
|
55
53
|
};
|
|
@@ -171,11 +169,11 @@ const ContentVerificationControls = ({player}) => {
|
|
|
171
169
|
const [contentVerified, setContentVerified] = useState(false);
|
|
172
170
|
|
|
173
171
|
useEffect(() => {
|
|
174
|
-
const UpdateVerification = () => setContentVerified(player.controls.ContentVerified());
|
|
172
|
+
const UpdateVerification = () => player && player.controls && setContentVerified(player.controls.ContentVerified());
|
|
175
173
|
|
|
176
174
|
UpdateVerification();
|
|
177
175
|
|
|
178
|
-
const disposeSettingsListener = player.controls.RegisterSettingsListener(UpdateVerification);
|
|
176
|
+
const disposeSettingsListener = player.controls && player.controls.RegisterSettingsListener(UpdateVerification);
|
|
179
177
|
|
|
180
178
|
return () => disposeSettingsListener && disposeSettingsListener();
|
|
181
179
|
}, []);
|
|
@@ -206,12 +204,14 @@ const WebControls = ({player, playbackStarted, canPlay, recentlyInteracted, setR
|
|
|
206
204
|
const [menuVisible, setMenuVisible] = useState(player.controls.IsMenuVisible());
|
|
207
205
|
|
|
208
206
|
useEffect(() => {
|
|
207
|
+
if(!player.controls) { return; }
|
|
208
|
+
|
|
209
209
|
setPlayerClickHandler(PlayerClick({player, setRecentUserAction}));
|
|
210
210
|
|
|
211
|
-
const UpdateMenuVisibility = () => setMenuVisible(player.controls.IsMenuVisible());
|
|
211
|
+
const UpdateMenuVisibility = () => player && player.controls && setMenuVisible(player.controls.IsMenuVisible());
|
|
212
212
|
const disposeSettingsListener = player.controls.RegisterSettingsListener(UpdateMenuVisibility);
|
|
213
213
|
|
|
214
|
-
const disposeVideoObserver = ObserveVideo({
|
|
214
|
+
const disposeVideoObserver = ObserveVideo({player, setVideoState});
|
|
215
215
|
|
|
216
216
|
return () => {
|
|
217
217
|
disposeSettingsListener && disposeSettingsListener();
|
|
@@ -258,7 +258,7 @@ const WebControls = ({player, playbackStarted, canPlay, recentlyInteracted, setR
|
|
|
258
258
|
// Take focus off of this button because it should no longer be selectable after playback starts
|
|
259
259
|
player.target.firstChild.focus();
|
|
260
260
|
}}
|
|
261
|
-
className={`${ControlStyles["center-play-button"]} ${canPlay && !playbackStarted ? "" : ControlStyles["center-play-button--hidden"]}`}
|
|
261
|
+
className={`${ControlStyles["center-play-button"]} ${canPlay && !playbackStarted && !(player && player.casting) ? "" : ControlStyles["center-play-button--hidden"]}`}
|
|
262
262
|
/>
|
|
263
263
|
<div className={`${ControlStyles["bottom-controls-container"]} ${hideControls ? ControlStyles["bottom-controls-container--autohide"] : ""}`}>
|
|
264
264
|
<div className={ControlStyles["bottom-controls-gradient"]} />
|
|
@@ -270,23 +270,28 @@ const WebControls = ({player, playbackStarted, canPlay, recentlyInteracted, setR
|
|
|
270
270
|
onClick={() => player.controls.TogglePlay()}
|
|
271
271
|
className={ControlStyles["play-pause-button"]}
|
|
272
272
|
/>
|
|
273
|
-
<CollectionControls player={player}
|
|
274
|
-
<VolumeControls player={player} videoState={videoState}
|
|
273
|
+
<CollectionControls player={player}/>
|
|
274
|
+
<VolumeControls player={player} videoState={videoState}/>
|
|
275
275
|
<TimeIndicator player={player} videoState={videoState}/>
|
|
276
276
|
|
|
277
277
|
<div className={ControlStyles["spacer"]}/>
|
|
278
278
|
|
|
279
|
-
<ContentVerificationControls player={player}
|
|
279
|
+
<ContentVerificationControls player={player}/>
|
|
280
280
|
|
|
281
281
|
{
|
|
282
|
-
!
|
|
283
|
-
<
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
282
|
+
!player.chromecastAvailable ? null :
|
|
283
|
+
<google-cast-launcher></google-cast-launcher>
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
{
|
|
287
|
+
!player.airplayAvailable ? null :
|
|
288
|
+
<IconButton
|
|
289
|
+
aria-label="Airplay"
|
|
290
|
+
onClick={() => player.video.webkitShowPlaybackTargetPicker()}
|
|
291
|
+
icon={Icons.AirplayIcon}
|
|
288
292
|
/>
|
|
289
293
|
}
|
|
294
|
+
|
|
290
295
|
{
|
|
291
296
|
!player.controls.IsRotatable() ? null :
|
|
292
297
|
<IconButton
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eluvio/elv-player-js",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.23",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/elv-player-js.es.js",
|
|
6
6
|
"license": "MIT",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"package-lock.json"
|
|
37
37
|
],
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@eluvio/elv-client-js": "^4.0.
|
|
39
|
+
"@eluvio/elv-client-js": "^4.0.110",
|
|
40
40
|
"dashjs": "~4.7.0",
|
|
41
41
|
"focus-visible": "^5.2.0",
|
|
42
42
|
"hls.js": "~1.5.12",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"url-join": "^4.0.1"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
|
-
"@vitejs/plugin-basic-ssl": "^1.
|
|
50
|
+
"@vitejs/plugin-basic-ssl": "^1.2.0",
|
|
51
51
|
"@vitejs/plugin-react-swc": "^3.5.0",
|
|
52
52
|
"autoprefixer": "^10.4.16",
|
|
53
53
|
"babel-eslint": "^10.1.0",
|