@mottosports/motto-video-player 1.0.1-rc.80 → 1.0.1-rc.82

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/index.mjs CHANGED
@@ -393,7 +393,7 @@ html[dir=rtl] .shaka-overflow-menu .shaka-overflow-button .material-svg-icon:fir
393
393
  `);
394
394
 
395
395
  // src/Player.tsx
396
- import { forwardRef, useEffect as useEffect4, useRef as useRef8, useImperativeHandle, useCallback as useCallback9, useState as useState3 } from "react";
396
+ import { forwardRef, useEffect as useEffect4, useRef as useRef9, useImperativeHandle, useCallback as useCallback9, useState as useState3 } from "react";
397
397
  import shaka3 from "shaka-player/dist/shaka-player.ui";
398
398
 
399
399
  // src/hooks/useShakaPlayer.ts
@@ -449,7 +449,7 @@ var supportsWidevinePersistentLicenses = () => {
449
449
  import initShakaPlayerMux from "@mux/mux-data-shakaplayer";
450
450
 
451
451
  // package.json
452
- var version = "1.0.1-rc.80";
452
+ var version = "1.0.1-rc.82";
453
453
 
454
454
  // src/utils/licenseCache.ts
455
455
  var PERSISTENT_LICENSE_PREFIX = "motto_lic_";
@@ -1569,18 +1569,44 @@ var useShakaUI = (playerRef, containerRef, videoRef, controls, chromecastConfig,
1569
1569
  };
1570
1570
 
1571
1571
  // src/hooks/useEventHandlers.ts
1572
- import { useCallback as useCallback6 } from "react";
1573
- var useEventHandlers = (videoRef, handlers) => {
1572
+ import { useCallback as useCallback6, useRef as useRef5 } from "react";
1573
+ var useEventHandlers = (videoRef, playerRef, handlers) => {
1574
+ const timeUpdateHandlerRef = useRef5(null);
1574
1575
  const setupEventListeners = useCallback6(() => {
1575
1576
  const video = videoRef.current;
1576
1577
  if (!video) return;
1577
- const { onPlay, onPause, onEnded, onLoadStart, onCanPlay } = handlers;
1578
+ const { onPlay, onPause, onEnded, onLoadStart, onCanPlay, onTimeUpdate } = handlers;
1578
1579
  if (onPlay) video.addEventListener("play", onPlay);
1579
1580
  if (onPause) video.addEventListener("pause", onPause);
1580
1581
  if (onEnded) video.addEventListener("ended", onEnded);
1581
1582
  if (onLoadStart) video.addEventListener("loadstart", onLoadStart);
1582
1583
  if (onCanPlay) video.addEventListener("canplay", onCanPlay);
1583
- }, [videoRef, handlers]);
1584
+ if (onTimeUpdate) {
1585
+ const handleTimeUpdate = () => {
1586
+ const player = playerRef.current;
1587
+ const currentTime = video.currentTime;
1588
+ const duration = video.duration;
1589
+ const isLive = player && typeof player.isLive === "function" ? player.isLive() : false;
1590
+ const timeData = {
1591
+ currentTime,
1592
+ duration,
1593
+ isLive
1594
+ };
1595
+ if (isLive && player && typeof player.seekRange === "function") {
1596
+ const seekRange = player.seekRange();
1597
+ if (seekRange && seekRange.end !== void 0) {
1598
+ timeData.liveEdge = seekRange.end;
1599
+ timeData.timeBehindLive = seekRange.end - currentTime;
1600
+ }
1601
+ } else if (duration && isFinite(duration) && duration > 0) {
1602
+ timeData.progress = currentTime / duration * 100;
1603
+ }
1604
+ onTimeUpdate(timeData);
1605
+ };
1606
+ timeUpdateHandlerRef.current = handleTimeUpdate;
1607
+ video.addEventListener("timeupdate", handleTimeUpdate);
1608
+ }
1609
+ }, [videoRef, playerRef, handlers]);
1584
1610
  const cleanupEventListeners = useCallback6(() => {
1585
1611
  const video = videoRef.current;
1586
1612
  if (!video) return;
@@ -1590,6 +1616,10 @@ var useEventHandlers = (videoRef, handlers) => {
1590
1616
  if (onEnded) video.removeEventListener("ended", onEnded);
1591
1617
  if (onLoadStart) video.removeEventListener("loadstart", onLoadStart);
1592
1618
  if (onCanPlay) video.removeEventListener("canplay", onCanPlay);
1619
+ if (timeUpdateHandlerRef.current) {
1620
+ video.removeEventListener("timeupdate", timeUpdateHandlerRef.current);
1621
+ timeUpdateHandlerRef.current = null;
1622
+ }
1593
1623
  }, [videoRef, handlers]);
1594
1624
  return {
1595
1625
  setupEventListeners,
@@ -1601,11 +1631,11 @@ var useEventHandlers = (videoRef, handlers) => {
1601
1631
  import { useEffect, useState as useState2 } from "react";
1602
1632
 
1603
1633
  // src/hooks/useLiveIndicator.ts
1604
- import { useEffect as useEffect2, useRef as useRef6 } from "react";
1634
+ import { useEffect as useEffect2, useRef as useRef7 } from "react";
1605
1635
  var useLiveIndicator = (containerRef, playerRef, options = {}) => {
1606
- const observerRef = useRef6(null);
1607
- const intervalRef = useRef6(null);
1608
- const lastStatusRef = useRef6(null);
1636
+ const observerRef = useRef7(null);
1637
+ const intervalRef = useRef7(null);
1638
+ const lastStatusRef = useRef7(null);
1609
1639
  const {
1610
1640
  enabled = true,
1611
1641
  indicatorColor = "#ff0000",
@@ -1619,23 +1649,21 @@ var useLiveIndicator = (containerRef, playerRef, options = {}) => {
1619
1649
  return { isLive: false, isNearEdge: false };
1620
1650
  }
1621
1651
  try {
1622
- if (!player.getManifest || typeof player.getManifest !== "function") {
1652
+ if (typeof player.isLive !== "function") {
1623
1653
  return { isLive: false, isNearEdge: false };
1624
1654
  }
1625
- const manifest = player.getManifest();
1626
- if (!manifest) {
1627
- return { isLive: false, isNearEdge: false };
1628
- }
1629
- const timeline = manifest.presentationTimeline;
1630
- if (!timeline || typeof timeline.isLive !== "function") {
1631
- return { isLive: false, isNearEdge: false };
1632
- }
1633
- const isLiveStream = timeline.isLive();
1655
+ const isLiveStream = player.isLive();
1634
1656
  if (!isLiveStream) return { isLive: false, isNearEdge: false };
1635
1657
  const videoElement = player.getMediaElement?.();
1636
1658
  if (!videoElement) return { isLive: true, isNearEdge: false };
1637
- const liveEdge = timeline.getSeekRangeEnd?.() ?? timeline.getSegmentAvailabilityEnd?.();
1638
- if (liveEdge === void 0) return { isLive: true, isNearEdge: false };
1659
+ if (typeof player.seekRange !== "function") {
1660
+ return { isLive: true, isNearEdge: false };
1661
+ }
1662
+ const seekRange = player.seekRange();
1663
+ if (!seekRange || seekRange.end === void 0) {
1664
+ return { isLive: true, isNearEdge: false };
1665
+ }
1666
+ const liveEdge = seekRange.end;
1639
1667
  const currentTime = videoElement.currentTime;
1640
1668
  const timeBehindLive = liveEdge - currentTime;
1641
1669
  return {
@@ -1652,15 +1680,13 @@ var useLiveIndicator = (containerRef, playerRef, options = {}) => {
1652
1680
  const player = playerRef.current;
1653
1681
  if (!player) return;
1654
1682
  try {
1655
- const manifest = player.getManifest();
1656
- if (!manifest) return;
1657
- const timeline = manifest.presentationTimeline;
1658
- const liveEdge = timeline?.getSeekRangeEnd?.() ?? timeline?.getSegmentAvailabilityEnd?.();
1659
- if (liveEdge !== void 0) {
1660
- const videoElement = player.getMediaElement?.();
1661
- if (videoElement) {
1662
- videoElement.currentTime = liveEdge;
1663
- }
1683
+ if (typeof player.seekRange !== "function") return;
1684
+ const seekRange = player.seekRange();
1685
+ if (!seekRange || seekRange.end === void 0) return;
1686
+ const liveEdge = seekRange.end;
1687
+ const videoElement = player.getMediaElement?.();
1688
+ if (videoElement) {
1689
+ videoElement.currentTime = liveEdge;
1664
1690
  }
1665
1691
  } catch (error) {
1666
1692
  console.error("Error seeking to live edge:", error);
@@ -1830,9 +1856,9 @@ var useKeyboardControls = (videoRef, options = {}) => {
1830
1856
  };
1831
1857
 
1832
1858
  // src/hooks/useAdEvents.ts
1833
- import { useCallback as useCallback8, useRef as useRef7 } from "react";
1859
+ import { useCallback as useCallback8, useRef as useRef8 } from "react";
1834
1860
  var useAdEvents = (playerRef, handlers) => {
1835
- const listenersRef = useRef7([]);
1861
+ const listenersRef = useRef8([]);
1836
1862
  const setupAdEventListeners = useCallback8(() => {
1837
1863
  const player = playerRef.current;
1838
1864
  if (!player) return;
@@ -2149,8 +2175,8 @@ var Player = forwardRef(
2149
2175
  auth,
2150
2176
  ...videoProps
2151
2177
  }, ref) => {
2152
- const videoRef = useRef8(null);
2153
- const containerRef = useRef8(null);
2178
+ const videoRef = useRef9(null);
2179
+ const containerRef = useRef9(null);
2154
2180
  const [isScriptsLoaded, setIsScriptsLoaded] = useState3(false);
2155
2181
  const [isInitialLoading, setIsInitialLoading] = useState3(true);
2156
2182
  const [bfResetKey, setBfResetKey] = useState3(0);
@@ -2194,12 +2220,13 @@ var Player = forwardRef(
2194
2220
  skipForward,
2195
2221
  enabled: true
2196
2222
  });
2197
- const { setupEventListeners, cleanupEventListeners } = useEventHandlers(videoRef, {
2223
+ const { setupEventListeners, cleanupEventListeners } = useEventHandlers(videoRef, playerRef, {
2198
2224
  onPlay: events?.onPlay,
2199
2225
  onPause: events?.onPause,
2200
2226
  onEnded: events?.onEnded,
2201
2227
  onLoadStart: events?.onLoadStart,
2202
- onCanPlay: events?.onCanPlay
2228
+ onCanPlay: events?.onCanPlay,
2229
+ onTimeUpdate: events?.onTimeUpdate
2203
2230
  });
2204
2231
  const { uiRef, initializeUI, destroyUI } = useShakaUI(
2205
2232
  playerRef,