unified-video-framework 1.4.454 → 1.4.456

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.
@@ -216,6 +216,9 @@ export class WebPlayer extends BasePlayer {
216
216
  private currentThumbnailUrl: string | null = null;
217
217
  private thumbnailPreviewEnabled: boolean = false;
218
218
 
219
+ // YouTube custom controls mode tracking
220
+ private isYouTubeCustomControlsMode: boolean = false;
221
+
219
222
  // Debug logging helper
220
223
  private debugLog(message: string, ...args: any[]): void {
221
224
  if (this.config.debug) {
@@ -1646,6 +1649,9 @@ export class WebPlayer extends BasePlayer {
1646
1649
 
1647
1650
  private async loadYouTube(url: string, source: any): Promise<void> {
1648
1651
  try {
1652
+ // Reset YouTube custom controls mode flag when loading new video
1653
+ this.isYouTubeCustomControlsMode = false;
1654
+
1649
1655
  this.debugLog('Loading YouTube video:', url);
1650
1656
 
1651
1657
  // Extract video ID and fetch metadata
@@ -1897,7 +1903,13 @@ export class WebPlayer extends BasePlayer {
1897
1903
  this.debugLog('[YouTube] Custom controls only mode - showing custom controls, hiding YouTube native controls');
1898
1904
  this.playerWrapper.classList.remove('youtube-native-controls-mode');
1899
1905
  this.playerWrapper.classList.add('youtube-custom-controls-mode');
1906
+ this.playerWrapper.classList.add('controls-visible');
1907
+
1908
+ // Prevent auto-hide from interfering
1909
+ this.isYouTubeCustomControlsMode = true;
1910
+
1900
1911
  this.showCustomControls();
1912
+ this.debugLog('[YouTube] Auto-hide disabled for custom controls');
1901
1913
  } else if (!this.youtubeNativeControls && !this.useCustomControls && this.playerWrapper) {
1902
1914
  // No controls mode - both YouTube native and custom controls are hidden
1903
1915
  this.debugLog('[YouTube] No controls mode - all controls hidden');
@@ -5668,8 +5680,8 @@ export class WebPlayer extends BasePlayer {
5668
5680
 
5669
5681
  .uvf-player-wrapper:hover .uvf-controls-bar,
5670
5682
  .uvf-player-wrapper.controls-visible .uvf-controls-bar {
5671
- opacity: 1;
5672
- transform: translateY(0);
5683
+ opacity: 1 !important;
5684
+ transform: translateY(0) !important;
5673
5685
  }
5674
5686
 
5675
5687
  .uvf-player-wrapper.no-cursor {
@@ -7124,8 +7136,8 @@ export class WebPlayer extends BasePlayer {
7124
7136
 
7125
7137
  .uvf-player-wrapper:hover .uvf-top-bar,
7126
7138
  .uvf-player-wrapper.controls-visible .uvf-top-bar {
7127
- opacity: 1;
7128
- transform: translateY(0);
7139
+ opacity: 1 !important;
7140
+ transform: translateY(0) !important;
7129
7141
  }
7130
7142
 
7131
7143
  /* Title Bar - After navigation buttons */
@@ -8842,18 +8854,66 @@ export class WebPlayer extends BasePlayer {
8842
8854
  display: flex !important;
8843
8855
  visibility: visible !important;
8844
8856
  pointer-events: auto !important;
8857
+ opacity: 1 !important;
8858
+ transform: translateY(0) !important;
8859
+ }
8860
+
8861
+ .uvf-player-wrapper.youtube-custom-controls-mode .uvf-top-bar {
8862
+ display: flex !important;
8863
+ visibility: visible !important;
8864
+ pointer-events: auto !important;
8865
+ opacity: 1 !important;
8866
+ transform: translateY(0) !important;
8867
+ }
8868
+
8869
+ .uvf-player-wrapper.youtube-custom-controls-mode .uvf-center-play-container {
8870
+ display: flex !important;
8871
+ visibility: visible !important;
8872
+ pointer-events: auto !important;
8873
+ opacity: 1 !important;
8874
+ transform: scale(1) !important;
8875
+ }
8876
+
8877
+ /* Force YouTube custom controls visible even with no-cursor class */
8878
+ .uvf-player-wrapper.youtube-custom-controls-mode.no-cursor .uvf-controls-bar,
8879
+ .uvf-player-wrapper.youtube-custom-controls-mode .uvf-controls-bar {
8880
+ display: flex !important;
8881
+ visibility: visible !important;
8882
+ pointer-events: auto !important;
8883
+ opacity: 1 !important;
8884
+ transform: translateY(0) !important;
8845
8885
  }
8846
8886
 
8887
+ .uvf-player-wrapper.youtube-custom-controls-mode.no-cursor .uvf-top-bar,
8847
8888
  .uvf-player-wrapper.youtube-custom-controls-mode .uvf-top-bar {
8848
8889
  display: flex !important;
8849
8890
  visibility: visible !important;
8850
8891
  pointer-events: auto !important;
8892
+ opacity: 1 !important;
8893
+ transform: translateY(0) !important;
8851
8894
  }
8852
8895
 
8896
+ .uvf-player-wrapper.youtube-custom-controls-mode.no-cursor .uvf-top-gradient,
8897
+ .uvf-player-wrapper.youtube-custom-controls-mode .uvf-top-gradient {
8898
+ opacity: 1 !important;
8899
+ }
8900
+
8901
+ .uvf-player-wrapper.youtube-custom-controls-mode.no-cursor .uvf-controls-gradient,
8902
+ .uvf-player-wrapper.youtube-custom-controls-mode .uvf-controls-gradient {
8903
+ opacity: 1 !important;
8904
+ }
8905
+
8906
+ .uvf-player-wrapper.youtube-custom-controls-mode.no-cursor .uvf-center-play-container,
8853
8907
  .uvf-player-wrapper.youtube-custom-controls-mode .uvf-center-play-container {
8854
8908
  display: flex !important;
8855
8909
  visibility: visible !important;
8856
8910
  pointer-events: auto !important;
8911
+ opacity: 1 !important;
8912
+ transform: scale(1) !important;
8913
+ }
8914
+
8915
+ .uvf-player-wrapper.youtube-custom-controls-mode.no-cursor {
8916
+ cursor: default !important;
8857
8917
  }
8858
8918
 
8859
8919
  /* Override any inline styles */
@@ -10748,6 +10808,11 @@ export class WebPlayer extends BasePlayer {
10748
10808
  private hideControls(): void {
10749
10809
  if (!this.state.isPlaying) return;
10750
10810
 
10811
+ // Don't hide controls in YouTube custom mode
10812
+ if (this.isYouTubeCustomControlsMode) {
10813
+ return;
10814
+ }
10815
+
10751
10816
  const wrapper = this.container?.querySelector('.uvf-player-wrapper');
10752
10817
  if (wrapper) {
10753
10818
  wrapper.classList.remove('controls-visible');
@@ -10758,6 +10823,11 @@ export class WebPlayer extends BasePlayer {
10758
10823
  private scheduleHideControls(): void {
10759
10824
  if (!this.state.isPlaying) return;
10760
10825
 
10826
+ // Don't auto-hide in YouTube custom controls mode
10827
+ if (this.isYouTubeCustomControlsMode) {
10828
+ return;
10829
+ }
10830
+
10761
10831
  if (this.hideControlsTimeout) clearTimeout(this.hideControlsTimeout);
10762
10832
  // Use longer timeout in fullscreen for better UX
10763
10833
  const timeout = this.isFullscreen() ? 4000 : 3000;