unified-video-framework 1.4.458 → 1.4.460

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.
@@ -1838,12 +1838,17 @@ export class WebPlayer extends BasePlayer {
1838
1838
  iv_load_policy: 3, // Hide annotations
1839
1839
  modestbranding: 1, // Minimal YouTube branding
1840
1840
  rel: 0, // Don't show related videos
1841
- showinfo: 0, // Hide video info
1841
+ showinfo: 0, // Hide video info (deprecated but keep for older players)
1842
+ autohide: 1, // Auto-hide controls after delay
1843
+ cc_load_policy: 0, // Don't show captions by default
1844
+ playsinline: 1, // Play inline on mobile
1842
1845
  autoplay: this.config.autoPlay ? 1 : 0,
1843
1846
  mute: this.config.muted ? 1 : 0,
1844
1847
  loop: this.config.loop ? 1 : 0, // Enable/disable loop
1845
1848
  playlist: this.config.loop ? videoId : undefined, // Required for loop to work with single video
1846
- widget_referrer: window.location.href // Hide YouTube recommendations
1849
+ widget_referrer: window.location.href, // Hide YouTube recommendations
1850
+ origin: window.location.origin, // Required for security
1851
+ enablejsapi: 1 // Enable JavaScript API
1847
1852
  },
1848
1853
  events: {
1849
1854
  onReady: () => this.onYouTubePlayerReady(),
@@ -7923,6 +7928,38 @@ export class WebPlayer extends BasePlayer {
7923
7928
  opacity: 1;
7924
7929
  transform: translateY(0);
7925
7930
  }
7931
+
7932
+ /* Ensure YouTube custom controls are visible in fullscreen */
7933
+ .uvf-player-wrapper.youtube-custom-controls-mode.uvf-fullscreen .uvf-controls-bar {
7934
+ position: fixed !important;
7935
+ bottom: 0 !important;
7936
+ left: 0 !important;
7937
+ right: 0 !important;
7938
+ z-index: 2147483645 !important;
7939
+ display: flex !important;
7940
+ flex-direction: column !important;
7941
+ visibility: visible !important;
7942
+ opacity: 1 !important;
7943
+ pointer-events: auto !important;
7944
+ }
7945
+
7946
+ .uvf-player-wrapper.youtube-custom-controls-mode.uvf-fullscreen .uvf-top-bar {
7947
+ position: fixed !important;
7948
+ top: 0 !important;
7949
+ left: 0 !important;
7950
+ right: 0 !important;
7951
+ z-index: 2147483645 !important;
7952
+ display: flex !important;
7953
+ visibility: visible !important;
7954
+ opacity: 1 !important;
7955
+ pointer-events: auto !important;
7956
+ }
7957
+
7958
+ /* Keep controls always visible in fullscreen for YouTube */
7959
+ .uvf-player-wrapper.youtube-custom-controls-mode.uvf-fullscreen .uvf-controls-bar,
7960
+ .uvf-player-wrapper.youtube-custom-controls-mode.uvf-fullscreen .uvf-top-bar {
7961
+ transform: translateY(0) !important;
7962
+ }
7926
7963
  }
7927
7964
 
7928
7965
  /* Safe Area Variables - Support for modern mobile devices */
@@ -9002,6 +9039,7 @@ export class WebPlayer extends BasePlayer {
9002
9039
  right: 0 !important;
9003
9040
  z-index: 100 !important;
9004
9041
  display: flex !important;
9042
+ flex-direction: column !important;
9005
9043
  visibility: visible !important;
9006
9044
  pointer-events: auto !important;
9007
9045
  opacity: 1 !important;
@@ -10809,9 +10847,18 @@ export class WebPlayer extends BasePlayer {
10809
10847
  const progressBar = document.querySelector('.uvf-progress-bar') as HTMLElement;
10810
10848
  const progressFilled = document.getElementById('uvf-progress-filled') as HTMLElement;
10811
10849
  const progressHandle = document.getElementById('uvf-progress-handle') as HTMLElement;
10812
- if (!progressBar || !this.video) return;
10850
+ if (!progressBar) return;
10851
+
10852
+ // Get duration from YouTube player or regular video
10853
+ let duration: number;
10854
+ if (this.youtubePlayer && this.youtubePlayerReady) {
10855
+ duration = this.youtubePlayer.getDuration();
10856
+ } else if (this.video) {
10857
+ duration = this.video.duration;
10858
+ } else {
10859
+ return; // No video source available
10860
+ }
10813
10861
 
10814
- const duration = this.video.duration;
10815
10862
  // Validate duration before calculating seek time
10816
10863
  if (!isFinite(duration) || isNaN(duration) || duration <= 0) {
10817
10864
  this.debugWarn('Invalid video duration, cannot seek via progress bar');