unified-video-framework 1.4.244 → 1.4.245

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.
@@ -1176,14 +1176,15 @@ export class WebPlayer extends BasePlayer {
1176
1176
  height: '100%',
1177
1177
  playerVars: {
1178
1178
  controls: 0, // Hide YouTube controls
1179
- disablekb: 1, // Disable keyboard controls
1179
+ disablekb: 0, // Allow keyboard controls
1180
1180
  fs: 0, // Hide fullscreen button
1181
1181
  iv_load_policy: 3, // Hide annotations
1182
1182
  modestbranding: 1, // Minimal YouTube branding
1183
1183
  rel: 0, // Don't show related videos
1184
1184
  showinfo: 0, // Hide video info
1185
1185
  autoplay: this.config.autoPlay ? 1 : 0,
1186
- mute: this.config.muted ? 1 : 0
1186
+ mute: this.config.muted ? 1 : 0,
1187
+ widget_referrer: window.location.href // Hide YouTube recommendations
1187
1188
  },
1188
1189
  events: {
1189
1190
  onReady: () => this.onYouTubePlayerReady(),
@@ -6222,6 +6223,28 @@ export class WebPlayer extends BasePlayer {
6222
6223
  }
6223
6224
  }
6224
6225
 
6226
+ /* Hide YouTube UI elements */
6227
+ iframe[src*="youtube.com"] {
6228
+ pointer-events: auto !important;
6229
+ }
6230
+
6231
+ /* Hide YouTube title, logo, and controls overlay */
6232
+ .ytp-chrome-top,
6233
+ .ytp-chrome-bottom,
6234
+ .ytp-watermark,
6235
+ .ytp-gradient-top,
6236
+ .ytp-gradient-bottom,
6237
+ .ytp-show-cards-title,
6238
+ .ytp-cards-teaser,
6239
+ .ytp-endscreen-element,
6240
+ .ytp-ce-element,
6241
+ .ytp-suggested-action,
6242
+ .ytp-pause-overlay {
6243
+ display: none !important;
6244
+ visibility: hidden !important;
6245
+ opacity: 0 !important;
6246
+ }
6247
+
6225
6248
  /* Ultra-wide screens */
6226
6249
  @media screen and (min-width: 1440px) {
6227
6250
  .uvf-video-title {
@@ -7345,45 +7368,61 @@ export class WebPlayer extends BasePlayer {
7345
7368
  case 'ArrowLeft':
7346
7369
  e.preventDefault();
7347
7370
  e.stopImmediatePropagation(); // Prevent duplicate handler triggers
7348
- if (this.video && !isNaN(this.video.duration)) {
7349
- this.seek(Math.max(0, this.video.currentTime - 10));
7371
+ const currentTime = this.getCurrentTime();
7372
+ const duration = this.getDuration();
7373
+ if (!isNaN(duration) && duration > 0) {
7374
+ this.seek(Math.max(0, currentTime - 10));
7350
7375
  shortcutText = '-10s';
7351
7376
  }
7352
7377
  break;
7353
7378
  case 'ArrowRight':
7354
7379
  e.preventDefault();
7355
7380
  e.stopImmediatePropagation(); // Prevent duplicate handler triggers
7356
- if (this.video && !isNaN(this.video.duration)) {
7357
- this.seek(Math.min(this.video.duration, this.video.currentTime + 10));
7381
+ const currentTimeRight = this.getCurrentTime();
7382
+ const durationRight = this.getDuration();
7383
+ if (!isNaN(durationRight) && durationRight > 0) {
7384
+ this.seek(Math.min(durationRight, currentTimeRight + 10));
7358
7385
  shortcutText = '+10s';
7359
7386
  }
7360
7387
  break;
7361
7388
  case 'ArrowUp':
7362
7389
  e.preventDefault();
7363
7390
  this.changeVolume(0.1);
7364
- if (this.isCasting && this.remotePlayer) {
7365
- shortcutText = `Volume ${Math.round(((this.remotePlayer.volumeLevel || 0) * 100))}%`;
7391
+ let volumeUp = 0;
7392
+ if (this.youtubePlayer && this.youtubePlayerReady) {
7393
+ volumeUp = this.youtubePlayer.getVolume();
7394
+ } else if (this.isCasting && this.remotePlayer) {
7395
+ volumeUp = (this.remotePlayer.volumeLevel || 0) * 100;
7366
7396
  } else {
7367
- shortcutText = `Volume ${Math.round((this.video?.volume || 0) * 100)}%`;
7397
+ volumeUp = (this.video?.volume || 0) * 100;
7368
7398
  }
7399
+ shortcutText = `Volume ${Math.round(volumeUp)}%`;
7369
7400
  break;
7370
7401
  case 'ArrowDown':
7371
7402
  e.preventDefault();
7372
7403
  this.changeVolume(-0.1);
7373
- if (this.isCasting && this.remotePlayer) {
7374
- shortcutText = `Volume ${Math.round(((this.remotePlayer.volumeLevel || 0) * 100))}%`;
7404
+ let volumeDown = 0;
7405
+ if (this.youtubePlayer && this.youtubePlayerReady) {
7406
+ volumeDown = this.youtubePlayer.getVolume();
7407
+ } else if (this.isCasting && this.remotePlayer) {
7408
+ volumeDown = (this.remotePlayer.volumeLevel || 0) * 100;
7375
7409
  } else {
7376
- shortcutText = `Volume ${Math.round((this.video?.volume || 0) * 100)}%`;
7410
+ volumeDown = (this.video?.volume || 0) * 100;
7377
7411
  }
7412
+ shortcutText = `Volume ${Math.round(volumeDown)}%`;
7378
7413
  break;
7379
7414
  case 'm':
7380
7415
  e.preventDefault();
7381
7416
  this.toggleMuteAction();
7382
- if (this.isCasting && this.remotePlayer) {
7383
- shortcutText = this.remotePlayer.isMuted ? 'Muted' : 'Unmuted';
7417
+ let isMuted = false;
7418
+ if (this.youtubePlayer && this.youtubePlayerReady) {
7419
+ isMuted = this.youtubePlayer.isMuted();
7420
+ } else if (this.isCasting && this.remotePlayer) {
7421
+ isMuted = this.remotePlayer.isMuted;
7384
7422
  } else {
7385
- shortcutText = this.video?.muted ? 'Muted' : 'Unmuted';
7423
+ isMuted = this.video?.muted || false;
7386
7424
  }
7425
+ shortcutText = isMuted ? 'Muted' : 'Unmuted';
7387
7426
  break;
7388
7427
  case 'f':
7389
7428
  e.preventDefault();
@@ -7422,9 +7461,11 @@ export class WebPlayer extends BasePlayer {
7422
7461
  case '9':
7423
7462
  e.preventDefault();
7424
7463
  // Only jump to position if video is loaded and duration is valid
7425
- if (this.video && !isNaN(this.video.duration) && this.video.duration > 0) {
7464
+ const durationForSeek = this.getDuration();
7465
+ if (!isNaN(durationForSeek) && durationForSeek > 0) {
7426
7466
  const percent = parseInt(e.key) * 10;
7427
- this.video.currentTime = (this.video.duration * percent) / 100;
7467
+ const seekTime = (durationForSeek * percent) / 100;
7468
+ this.seek(seekTime);
7428
7469
  shortcutText = `${percent}%`;
7429
7470
  }
7430
7471
  break;