unified-video-framework 1.4.459 → 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.
- package/package.json +1 -1
- package/packages/core/dist/version.d.ts +1 -1
- package/packages/core/dist/version.js +1 -1
- package/packages/core/src/version.ts +1 -1
- package/packages/web/dist/WebPlayer.d.ts.map +1 -1
- package/packages/web/dist/WebPlayer.js +49 -3
- package/packages/web/dist/WebPlayer.js.map +1 -1
- package/packages/web/src/WebPlayer.ts +50 -4
|
@@ -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
|
|
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 */
|
|
@@ -10810,9 +10847,18 @@ export class WebPlayer extends BasePlayer {
|
|
|
10810
10847
|
const progressBar = document.querySelector('.uvf-progress-bar') as HTMLElement;
|
|
10811
10848
|
const progressFilled = document.getElementById('uvf-progress-filled') as HTMLElement;
|
|
10812
10849
|
const progressHandle = document.getElementById('uvf-progress-handle') as HTMLElement;
|
|
10813
|
-
if (!progressBar
|
|
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
|
+
}
|
|
10814
10861
|
|
|
10815
|
-
const duration = this.video.duration;
|
|
10816
10862
|
// Validate duration before calculating seek time
|
|
10817
10863
|
if (!isFinite(duration) || isNaN(duration) || duration <= 0) {
|
|
10818
10864
|
this.debugWarn('Invalid video duration, cannot seek via progress bar');
|