@edm-webplayer/webplayer-angular 0.1.31 → 0.1.32

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.
@@ -78,12 +78,18 @@ class PlyrPlayerComponent {
78
78
  recommendationBlocker;
79
79
  recommendationBlockerActiveZone;
80
80
  topClickBlocker;
81
+ gestureOverlay;
81
82
  menuObserver;
82
83
  playbackEnded = false;
83
84
  overlayBlockAll = false;
84
85
  endedPosterOverlay;
85
86
  fullscreenCleanup;
86
- onResize = () => this.updateRecommendationBlockerSafeZone();
87
+ interactionUnmuteCleanup;
88
+ pendingGesturePlay = false;
89
+ onResize = () => {
90
+ this.updateRecommendationBlockerSafeZone();
91
+ this.updateGestureOverlaySafeZone();
92
+ };
87
93
  onTopBlockerPointerDown = (event) => {
88
94
  try {
89
95
  event.preventDefault();
@@ -340,13 +346,12 @@ ${allPairs.map(([n, v]) => ` ${n}: ${v};`).join('\n')}
340
346
  this.updateTopClickBlockerSafeZone();
341
347
  }
342
348
  updateRecommendationBlockerSafeZone() {
343
- if (!this.recommendationBlockerActiveZone && !this.topClickBlocker)
344
- return;
345
- const safeZone = this.getOverlaySafeZone();
349
+ const overlaySafeZone = this.getOverlaySafeZone();
346
350
  if (this.recommendationBlockerActiveZone) {
347
- this.recommendationBlockerActiveZone.style.bottom = `${safeZone}px`;
351
+ this.recommendationBlockerActiveZone.style.bottom = `${overlaySafeZone}px`;
348
352
  }
349
- this.updateTopClickBlockerSafeZone(safeZone);
353
+ this.updateTopClickBlockerSafeZone(overlaySafeZone);
354
+ this.updateGestureOverlaySafeZone(this.getControlsSafeZone());
350
355
  }
351
356
  updateTopClickBlockerSafeZone(precomputed) {
352
357
  if (!this.topClickBlocker)
@@ -355,6 +360,13 @@ ${allPairs.map(([n, v]) => ` ${n}: ${v};`).join('\n')}
355
360
  const safeZone = Math.max(0, safeZoneRaw);
356
361
  this.topClickBlocker.style.bottom = `${safeZone}px`;
357
362
  }
363
+ updateGestureOverlaySafeZone(precomputed) {
364
+ if (!this.gestureOverlay)
365
+ return;
366
+ const safeZoneRaw = typeof precomputed === 'number' ? precomputed : this.getControlsSafeZone();
367
+ const safeZone = Math.max(0, safeZoneRaw);
368
+ this.gestureOverlay.style.bottom = `${safeZone}px`;
369
+ }
358
370
  togglePlayback(force) {
359
371
  if (!this.plyr)
360
372
  return;
@@ -386,6 +398,7 @@ ${allPairs.map(([n, v]) => ` ${n}: ${v};`).join('\n')}
386
398
  this.playbackEnded = false;
387
399
  this.overlayBlockAll = false;
388
400
  this.updateRecommendationBlockerSafeZone();
401
+ this.hideGestureOverlay();
389
402
  try {
390
403
  const result = this.plyr.play?.();
391
404
  if (result && typeof result.catch === 'function') {
@@ -477,6 +490,333 @@ ${allPairs.map(([n, v]) => ` ${n}: ${v};`).join('\n')}
477
490
  }
478
491
  return 'ontouchstart' in window;
479
492
  }
493
+ isIframeProvider() {
494
+ return this.config?.video_host === 'youtube' || this.config?.video_host === 'vimeo';
495
+ }
496
+ shouldAutoplay() {
497
+ return !!(this.config?.autoplay || this.config?.is_live);
498
+ }
499
+ requiresMutedAutoplay() {
500
+ return this.isIOSDevice();
501
+ }
502
+ setPlayerMutedState(muted, volume = 1, target) {
503
+ if (this.plyr) {
504
+ try {
505
+ this.plyr.muted = muted;
506
+ }
507
+ catch { }
508
+ if (!muted) {
509
+ try {
510
+ this.plyr.volume = volume;
511
+ }
512
+ catch { }
513
+ }
514
+ }
515
+ const media = target ?? this.videoRef?.nativeElement ?? null;
516
+ if (media) {
517
+ try {
518
+ media.muted = muted;
519
+ }
520
+ catch { }
521
+ if (!muted && typeof media.volume === 'number') {
522
+ try {
523
+ media.volume = volume;
524
+ }
525
+ catch { }
526
+ }
527
+ }
528
+ }
529
+ clearAutoplayUnlockListener() {
530
+ if (this.interactionUnmuteCleanup) {
531
+ try {
532
+ this.interactionUnmuteCleanup();
533
+ }
534
+ catch { }
535
+ this.interactionUnmuteCleanup = undefined;
536
+ }
537
+ }
538
+ ensureAutoplayUnlockListener() {
539
+ if (typeof window === 'undefined' ||
540
+ this.interactionUnmuteCleanup ||
541
+ !this.shouldAutoplay()) {
542
+ return;
543
+ }
544
+ const capture = true;
545
+ const handler = () => {
546
+ this.setPlayerMutedState(false);
547
+ try {
548
+ this.plyr?.play();
549
+ }
550
+ catch { }
551
+ this.clearAutoplayUnlockListener();
552
+ };
553
+ window.addEventListener('touchend', handler, capture);
554
+ window.addEventListener('pointerup', handler, capture);
555
+ window.addEventListener('click', handler, capture);
556
+ this.interactionUnmuteCleanup = () => {
557
+ window.removeEventListener('touchend', handler, capture);
558
+ window.removeEventListener('pointerup', handler, capture);
559
+ window.removeEventListener('click', handler, capture);
560
+ this.interactionUnmuteCleanup = undefined;
561
+ };
562
+ }
563
+ scheduleUserInteractionUnmute(video) {
564
+ this.unmuteAfterDelay(video || undefined);
565
+ this.ensureAutoplayUnlockListener();
566
+ }
567
+ applyStartTimeToCurrentSource(start, opts = {}) {
568
+ if (!this.plyr || !(start > 0)) {
569
+ return;
570
+ }
571
+ const video = opts.video ?? this.videoRef?.nativeElement ?? null;
572
+ let attempts = Math.max(1, opts.attempts ?? 6);
573
+ const delayMs = opts.delayMs ?? 250;
574
+ const tolerance = 0.35;
575
+ const scheduleRetry = () => {
576
+ attempts -= 1;
577
+ if (attempts > 0) {
578
+ setTimeout(trySeek, delayMs);
579
+ }
580
+ };
581
+ const verifyAfterAttempt = () => {
582
+ const current = this.plyr?.currentTime || 0;
583
+ if (Math.abs(current - start) <= tolerance) {
584
+ attempts = 0;
585
+ return;
586
+ }
587
+ scheduleRetry();
588
+ };
589
+ const trySeek = () => {
590
+ if (!this.plyr)
591
+ return;
592
+ let maybePromise = null;
593
+ try {
594
+ const result = this.seekUsingHostAPI(start, video);
595
+ if (result && typeof result.then === 'function') {
596
+ maybePromise = result;
597
+ }
598
+ }
599
+ catch {
600
+ scheduleRetry();
601
+ return;
602
+ }
603
+ if (maybePromise) {
604
+ maybePromise
605
+ .then(() => verifyAfterAttempt())
606
+ .catch(() => scheduleRetry());
607
+ return;
608
+ }
609
+ verifyAfterAttempt();
610
+ };
611
+ trySeek();
612
+ }
613
+ seekUsingHostAPI(target, video) {
614
+ if (!Number.isFinite(target) || target < 0) {
615
+ return null;
616
+ }
617
+ if (this.config.video_host === 'vimeo') {
618
+ const embed = this.plyr?.embed;
619
+ if (embed && typeof embed.setCurrentTime === 'function') {
620
+ try {
621
+ return embed.setCurrentTime(target);
622
+ }
623
+ catch {
624
+ return null;
625
+ }
626
+ }
627
+ }
628
+ if (video) {
629
+ try {
630
+ video.currentTime = target;
631
+ }
632
+ catch { }
633
+ }
634
+ try {
635
+ this.plyr.currentTime = target;
636
+ }
637
+ catch { }
638
+ return null;
639
+ }
640
+ ensureGestureOverlay() {
641
+ if (this.gestureOverlay && this.gestureOverlay.isConnected) {
642
+ return this.gestureOverlay;
643
+ }
644
+ const wrapper = this.getVideoWrapper();
645
+ if (!wrapper) {
646
+ return null;
647
+ }
648
+ const overlay = this.document.createElement('button');
649
+ overlay.type = 'button';
650
+ overlay.className = 'plyr-gesture-overlay';
651
+ overlay.style.position = 'absolute';
652
+ overlay.style.top = '0';
653
+ overlay.style.left = '0';
654
+ overlay.style.right = '0';
655
+ overlay.style.bottom = '0';
656
+ overlay.style.width = '100%';
657
+ overlay.style.height = '100%';
658
+ overlay.style.display = 'none';
659
+ overlay.style.alignItems = 'center';
660
+ overlay.style.justifyContent = 'center';
661
+ overlay.style.padding = '0 16px';
662
+ overlay.style.background = 'rgba(0,0,0,0.35)';
663
+ overlay.style.backdropFilter = 'blur(1px)';
664
+ overlay.style.border = '0';
665
+ overlay.style.zIndex = '16';
666
+ overlay.style.color = 'var(--theme-text-color, #fff)';
667
+ overlay.style.fontSize = '14px';
668
+ overlay.style.fontWeight = '600';
669
+ overlay.style.textAlign = 'center';
670
+ overlay.style.cursor = 'pointer';
671
+ overlay.style.touchAction = 'manipulation';
672
+ overlay.style.pointerEvents = 'none';
673
+ overlay.textContent = 'Toque para reproduzir';
674
+ wrapper.appendChild(overlay);
675
+ this.gestureOverlay = overlay;
676
+ this.updateGestureOverlaySafeZone();
677
+ return overlay;
678
+ }
679
+ hideGestureOverlay() {
680
+ if (this.gestureOverlay) {
681
+ this.gestureOverlay.style.display = 'none';
682
+ this.gestureOverlay.style.pointerEvents = 'none';
683
+ }
684
+ this.pendingGesturePlay = false;
685
+ }
686
+ requestGestureToPlay(video) {
687
+ if (!this.isIframeProvider()) {
688
+ return;
689
+ }
690
+ if (this.pendingGesturePlay) {
691
+ return;
692
+ }
693
+ const overlay = this.ensureGestureOverlay();
694
+ if (!overlay) {
695
+ return;
696
+ }
697
+ this.pendingGesturePlay = true;
698
+ const media = video ?? this.videoRef?.nativeElement ?? null;
699
+ const onInteraction = (event) => {
700
+ try {
701
+ event.preventDefault();
702
+ }
703
+ catch { }
704
+ try {
705
+ event.stopPropagation();
706
+ }
707
+ catch { }
708
+ overlay.removeEventListener('click', onInteraction);
709
+ overlay.removeEventListener('touchend', onInteraction);
710
+ overlay.style.display = 'none';
711
+ this.pendingGesturePlay = false;
712
+ this.clearAutoplayUnlockListener();
713
+ this.setPlayerMutedState(this.requiresMutedAutoplay(), 1, media);
714
+ try {
715
+ const result = this.plyr?.play();
716
+ if (result && typeof result.catch === 'function') {
717
+ result.catch(() => {
718
+ this.requestGestureToPlay(media);
719
+ });
720
+ }
721
+ }
722
+ catch {
723
+ this.requestGestureToPlay(media);
724
+ }
725
+ };
726
+ overlay.addEventListener('click', onInteraction, { once: true });
727
+ overlay.addEventListener('touchend', onInteraction, { once: true });
728
+ this.updateGestureOverlaySafeZone();
729
+ overlay.style.pointerEvents = 'auto';
730
+ overlay.style.display = 'flex';
731
+ }
732
+ shouldShowGestureOverlayForError(error) {
733
+ if (!this.isIframeProvider()) {
734
+ return false;
735
+ }
736
+ if (!error) {
737
+ return true;
738
+ }
739
+ const err = error;
740
+ const name = typeof err.name === 'string' ? err.name.toLowerCase() : '';
741
+ const message = typeof err.message === 'string' ? err.message.toLowerCase() : '';
742
+ if (!name && !message) {
743
+ return true;
744
+ }
745
+ return (name.includes('notallowed') ||
746
+ name.includes('notallowederror') ||
747
+ name.includes('gesture') ||
748
+ message.includes('gesture') ||
749
+ message.includes('user interaction') ||
750
+ message.includes('user activation') ||
751
+ message.includes('without user') ||
752
+ message.includes('play() failed'));
753
+ }
754
+ startAutoplayFlow(video) {
755
+ if (!this.shouldAutoplay() || !this.plyr)
756
+ return;
757
+ const media = video ?? this.videoRef?.nativeElement ?? null;
758
+ const tryPlay = (muted) => {
759
+ this.setPlayerMutedState(muted, 1, media);
760
+ let playResult;
761
+ try {
762
+ playResult = this.plyr.play();
763
+ }
764
+ catch (error) {
765
+ if (!muted) {
766
+ tryPlay(true);
767
+ return;
768
+ }
769
+ if (media) {
770
+ try {
771
+ const nativePlay = media.play();
772
+ if (nativePlay && typeof nativePlay.catch === 'function') {
773
+ nativePlay.catch(() => { });
774
+ }
775
+ }
776
+ catch { }
777
+ }
778
+ this.scheduleUserInteractionUnmute(media);
779
+ if (this.shouldShowGestureOverlayForError(error)) {
780
+ this.requestGestureToPlay(media);
781
+ }
782
+ return;
783
+ }
784
+ if (playResult && typeof playResult.catch === 'function') {
785
+ playResult.catch((error) => {
786
+ if (!muted) {
787
+ tryPlay(true);
788
+ return;
789
+ }
790
+ if (media) {
791
+ try {
792
+ const nativePlay = media.play();
793
+ if (nativePlay && typeof nativePlay.catch === 'function') {
794
+ nativePlay.catch(() => { });
795
+ }
796
+ }
797
+ catch { }
798
+ }
799
+ this.scheduleUserInteractionUnmute(media);
800
+ if (this.shouldShowGestureOverlayForError(error)) {
801
+ this.requestGestureToPlay(media);
802
+ }
803
+ });
804
+ return;
805
+ }
806
+ if (muted) {
807
+ this.scheduleUserInteractionUnmute(media);
808
+ }
809
+ else {
810
+ this.clearAutoplayUnlockListener();
811
+ }
812
+ };
813
+ if (this.requiresMutedAutoplay()) {
814
+ tryPlay(true);
815
+ }
816
+ else {
817
+ tryPlay(false);
818
+ }
819
+ }
480
820
  setupControlsVisibility() {
481
821
  const container = this.plyr?.elements?.container;
482
822
  if (!container) {
@@ -663,12 +1003,28 @@ ${allPairs.map(([n, v]) => ` ${n}: ${v};`).join('\n')}
663
1003
  this.fullscreenCleanup?.();
664
1004
  this.fullscreenCleanup = undefined;
665
1005
  this.plyr?.destroy();
1006
+ this.clearAutoplayUnlockListener();
1007
+ this.hideGestureOverlay();
666
1008
  this.recommendationBlocker = null;
667
1009
  const speedOptions = [1, 1.25, 1.5, 2];
668
1010
  const locale = this.resolveLocale();
669
1011
  const captionsLanguage = this.resolveCaptionsLanguage(locale) ?? 'pt';
670
1012
  const hideVimeoRecommendations = this.shouldHideVimeoRecommendations();
671
1013
  const vimeoPremium = Boolean(this.config?.vimeo_premium);
1014
+ const shouldAutoplay = this.shouldAutoplay();
1015
+ const startMuted = this.requiresMutedAutoplay();
1016
+ try {
1017
+ this.videoRef.nativeElement.muted = startMuted;
1018
+ }
1019
+ catch { }
1020
+ try {
1021
+ this.videoRef.nativeElement.playsInline = true;
1022
+ }
1023
+ catch { }
1024
+ try {
1025
+ this.videoRef.nativeElement.autoplay = shouldAutoplay;
1026
+ }
1027
+ catch { }
672
1028
  const vimeoOptions = {
673
1029
  byline: false,
674
1030
  portrait: false,
@@ -680,6 +1036,9 @@ ${allPairs.map(([n, v]) => ` ${n}: ${v};`).join('\n')}
680
1036
  quality: "auto",
681
1037
  transparent: false,
682
1038
  };
1039
+ vimeoOptions.autoplay = shouldAutoplay;
1040
+ vimeoOptions.muted = startMuted;
1041
+ vimeoOptions.playsinline = true;
683
1042
  if (hideVimeoRecommendations) {
684
1043
  vimeoOptions.controls = false;
685
1044
  vimeoOptions.sidedock = 0;
@@ -695,6 +1054,9 @@ ${allPairs.map(([n, v]) => ` ${n}: ${v};`).join('\n')}
695
1054
  youtubePlayerVars.playerVars = {
696
1055
  hl: locale,
697
1056
  cc_lang_pref: captionsLanguage || locale.split('-')[0]?.toLowerCase(),
1057
+ autoplay: shouldAutoplay ? 1 : 0,
1058
+ mute: startMuted ? 1 : 0,
1059
+ playsinline: 1,
698
1060
  };
699
1061
  if (captionsLanguage) {
700
1062
  youtubePlayerVars.playerVars.cc_load_policy = 1;
@@ -732,7 +1094,8 @@ ${allPairs.map(([n, v]) => ` ${n}: ${v};`).join('\n')}
732
1094
  clickToPlay: true,
733
1095
  hideControls: false,
734
1096
  keyboard: { focused: true, global: false },
735
- muted: false,
1097
+ autoplay: shouldAutoplay,
1098
+ muted: startMuted,
736
1099
  };
737
1100
  plyrOptions.hl = locale;
738
1101
  if (captionsLanguage) {
@@ -760,8 +1123,7 @@ ${allPairs.map(([n, v]) => ` ${n}: ${v};`).join('\n')}
760
1123
  const apply = () => {
761
1124
  const dur = this.plyr.duration || 0;
762
1125
  const start = this.resolveStartTime(this.config.last_time, this.config.last_percent, dur);
763
- if (start > 0)
764
- this.plyr.currentTime = start;
1126
+ this.applyStartTimeToCurrentSource(start);
765
1127
  this.plyr.off("ready", apply);
766
1128
  };
767
1129
  this.plyr.on("ready", apply);
@@ -790,12 +1152,14 @@ ${allPairs.map(([n, v]) => ` ${n}: ${v};`).join('\n')}
790
1152
  });
791
1153
  };
792
1154
  this.plyr?.on?.("play", () => {
1155
+ this.hideGestureOverlay();
793
1156
  this.clearVimeoEndedState();
794
1157
  this.playbackEnded = false;
795
1158
  this.overlayBlockAll = false;
796
1159
  this.updateRecommendationBlockerSafeZone();
797
1160
  this.toggleRecommendationBlocker(false);
798
1161
  parent.postMessage('playing_video', "*");
1162
+ console.log('event: playing_video');
799
1163
  this.postCastEvent({ event: 'play', currentTime: this.plyr.currentTime || 0 });
800
1164
  });
801
1165
  this.plyr?.on?.("timeupdate", onTimeUpdate);
@@ -813,6 +1177,7 @@ ${allPairs.map(([n, v]) => ` ${n}: ${v};`).join('\n')}
813
1177
  this.playbackEnded = true;
814
1178
  this.overlayBlockAll = true;
815
1179
  this.updateRecommendationBlockerSafeZone();
1180
+ console.log('event: ended');
816
1181
  parent.postMessage('event: ended', "*");
817
1182
  this.postCastEvent({ event: 'ended', currentTime: this.plyr.currentTime || 0 });
818
1183
  this.progressService.ended$.next();
@@ -821,7 +1186,7 @@ ${allPairs.map(([n, v]) => ` ${n}: ${v};`).join('\n')}
821
1186
  });
822
1187
  }
823
1188
  unmuteAfterDelay(video, delayMs = 2000, volume = 1) {
824
- if (!this.config.autoplay)
1189
+ if (!this.shouldAutoplay())
825
1190
  return;
826
1191
  setTimeout(() => {
827
1192
  try {
@@ -876,13 +1241,8 @@ ${allPairs.map(([n, v]) => ` ${n}: ${v};`).join('\n')}
876
1241
  const onReady = () => {
877
1242
  this.plyr.off("ready", onReady);
878
1243
  const start = this.resolveStartTime(this.config.last_time, this.config.last_percent, this.plyr.duration);
879
- if (start > 0)
880
- this.plyr.currentTime = start;
881
- if (this.config.autoplay || this.config.is_live) {
882
- setTimeout(() => {
883
- this.plyr.play();
884
- }, 1500);
885
- }
1244
+ this.applyStartTimeToCurrentSource(start);
1245
+ this.startAutoplayFlow();
886
1246
  parent.postMessage('playerIsReadyToPlay', "*");
887
1247
  parent.postMessage('duration:' + this.plyr.duration, "*");
888
1248
  console.log('event: current_time ' + this.plyr.currentTime);
@@ -944,35 +1304,8 @@ ${allPairs.map(([n, v]) => ` ${n}: ${v};`).join('\n')}
944
1304
  const onLoadedMeta = () => {
945
1305
  const dur = this.plyr.duration || video.duration || 0;
946
1306
  const start = this.resolveStartTime(this.config.last_time, this.config.last_percent, dur);
947
- if (start > 0) {
948
- try {
949
- this.plyr.currentTime = start;
950
- }
951
- catch {
952
- try {
953
- video.currentTime = start;
954
- }
955
- catch { }
956
- }
957
- }
958
- if (this.config.autoplay) {
959
- try {
960
- video.muted = true;
961
- }
962
- catch { }
963
- setTimeout(() => {
964
- try {
965
- this.plyr.play();
966
- }
967
- catch {
968
- try {
969
- video.play();
970
- }
971
- catch { }
972
- }
973
- this.unmuteAfterDelay(video);
974
- }, 250);
975
- }
1307
+ this.applyStartTimeToCurrentSource(start, { video });
1308
+ this.startAutoplayFlow(video);
976
1309
  video.removeEventListener("loadedmetadata", onLoadedMeta);
977
1310
  };
978
1311
  video.addEventListener("loadedmetadata", onLoadedMeta);
@@ -986,17 +1319,8 @@ ${allPairs.map(([n, v]) => ` ${n}: ${v};`).join('\n')}
986
1319
  this.hls.on(Hls.Events.MANIFEST_PARSED, () => {
987
1320
  const dur = video.duration || 0;
988
1321
  const start = this.resolveStartTime(this.config.last_time, this.config.last_percent, dur);
989
- if (start > 0) {
990
- try {
991
- video.currentTime = start;
992
- }
993
- catch { }
994
- }
995
- if (this.config.autoplay) {
996
- video.muted = true;
997
- video.play().catch(() => { });
998
- this.unmuteAfterDelay(video);
999
- }
1322
+ this.applyStartTimeToCurrentSource(start, { video });
1323
+ this.startAutoplayFlow(video);
1000
1324
  });
1001
1325
  this.hls.on(Hls.Events.ERROR, (_evt, data) => {
1002
1326
  if (data?.fatal) {
@@ -1085,6 +1409,7 @@ ${allPairs.map(([n, v]) => ` ${n}: ${v};`).join('\n')}
1085
1409
  this.hls?.destroy();
1086
1410
  this.controlsVisibilityCleanup?.();
1087
1411
  this.controlsVisibilityCleanup = undefined;
1412
+ this.clearAutoplayUnlockListener();
1088
1413
  const container = this.plyr?.elements?.container;
1089
1414
  container?.classList.remove("plyr--vimeo-ended");
1090
1415
  if (this.recommendationBlocker?.parentElement) {
@@ -1111,6 +1436,14 @@ ${allPairs.map(([n, v]) => ` ${n}: ${v};`).join('\n')}
1111
1436
  catch { }
1112
1437
  }
1113
1438
  this.topClickBlocker = null;
1439
+ if (this.gestureOverlay?.parentElement) {
1440
+ try {
1441
+ this.gestureOverlay.parentElement.removeChild(this.gestureOverlay);
1442
+ }
1443
+ catch { }
1444
+ }
1445
+ this.gestureOverlay = null;
1446
+ this.pendingGesturePlay = false;
1114
1447
  this.menuObserver?.disconnect();
1115
1448
  this.menuObserver = undefined;
1116
1449
  window.removeEventListener('resize', this.onResize);
@@ -1 +1 @@
1
- {"version":3,"file":"edm-webplayer-webplayer-angular.mjs","sources":["../../../projects/webplayer-angular/src/webplayer.types.ts","../../../projects/webplayer-angular/src/webplayer-config.service.ts","../../../projects/webplayer-angular/src/progress.service.ts","../../../projects/webplayer-angular/src/players/plyr-player/plyr-player.component.ts","../../../projects/webplayer-angular/src/players/panda-player/panda-player.component.ts","../../../projects/webplayer-angular/src/players/scaleup-player/scaleup-player.component.ts","../../../projects/webplayer-angular/src/global.service.ts","../../../projects/webplayer-angular/src/player-loader/player-loader.component.ts","../../../projects/webplayer-angular/src/webplayer.component.ts","../../../projects/webplayer-angular/src/utils/time-format.pipe.ts","../../../projects/webplayer-angular/src/webplayer.module.ts","../../../projects/webplayer-angular/src/edm-webplayer-webplayer-angular.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport interface WebplayerConfig {\n video_host: 'youtube' | 'vimeo' | 'mp4' | 'hls' | 'panda' | 'scaleup';\n video_id: string | null;\n library_id?: string | number | null;\n video_external_id?: string | null;\n video_locale?: string | null;\n video_language?: string | null;\n captions_locale?: string | null;\n captions_language?: string | null;\n last_time?: number | null;\n last_percent?: number;\n embed?: string | null;\n watermark?: string;\n progress_url?: string;\n is_live?: boolean; // is the video live\n mirror?: boolean; // mirror the video\n autoplay?: boolean; // auto play the video\n locale?: string | null; // preferred locale/language (e.g. pt-BR)\n language?: string | null; // backwards compatibility alias\n disable_vimeo_recommendations?: boolean; // hide Vimeo suggested videos after playback\n vimeo_premium?: boolean; // set to true when the Vimeo account supports premium embeds\n ui?: {\n colors?: {\n bg?: string;\n alert?: string;\n 'font-bt'?: string;\n 'text-color'?: string;\n 'progress-view-off'?: string;\n };\n };\n}\n\nexport const WEPLAYER_CONFIG = new InjectionToken<WebplayerConfig>('webplayer.config');\n","import { Injectable, Inject, Optional } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { WebplayerConfig, WEPLAYER_CONFIG } from './webplayer.types';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WebplayerConfigService {\n private configSubject: BehaviorSubject<WebplayerConfig | null>;\n\n public get config$(): Observable<WebplayerConfig | null> {\n return this.configSubject.asObservable();\n }\n\n constructor(@Optional() @Inject(WEPLAYER_CONFIG) providedConfig: WebplayerConfig) {\n this.configSubject = new BehaviorSubject<WebplayerConfig | null>(providedConfig);\n }\n\n setConfig(config: Partial<WebplayerConfig>) {\n const currentConfig = this.configSubject.getValue();\n const newConfig = { ...(currentConfig || {}), ...config } as WebplayerConfig;\n this.configSubject.next(newConfig);\n }\n\n getConfig(): WebplayerConfig | null {\n return this.configSubject.getValue();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nexport interface WebplayerProgress {\n currentTime: number;\n duration: number;\n percent: number;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class WebplayerProgressService {\n\n public progress$ = new Subject<WebplayerProgress>();\n public ended$ = new Subject<void>();\n\n private key(videoKey: string) { return `webplayer:${videoKey}`; }\n\n saveProgress(videoKey: string, time: number) {\n try {\n localStorage.setItem(this.key(videoKey), String(Math.floor(time)));\n } catch {}\n }\n\n getProgress(videoKey: string): number {\n try {\n return Number(localStorage.getItem(this.key(videoKey)) || 0);\n } catch {\n return 0;\n }\n }\n}\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n ViewChild,\n Output,\n EventEmitter\n} from \"@angular/core\";\nimport { CommonModule, DOCUMENT } from '@angular/common';\nimport * as Plyr from 'plyr';\nimport \"plyr/dist/plyr.css\";\nimport Hls from \"hls.js\";\nimport { WebplayerConfig } from \"../../webplayer.types\";\nimport { WebplayerProgressService } from \"../../progress.service\";\n\n@Component({\n selector: \"app-plyr-player\",\n template: `<video #video playsinline></video>`,\n standalone: true,\n imports: [CommonModule],\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n height: 100%;\n position: relative;\n --plyr-color-main: var(--theme-alert, #19a6d9);\n --plyr-color-hover: var(--theme-alert, #2dbbff);\n --plyr-progress-buffer-background: var(--theme-progress-view-off, rgba(255, 255, 255, 0.25));\n --plyr-control-background: var(--theme-bg, rgba(0, 0, 0, 0.8));\n --plyr-control-color: var(--theme-text-color, #fff);\n --plyr-control-button-color: var(--theme-font-bt, #fff);\n }\n :host ::ng-deep .plyr__controls {\n color: var(--plyr-control-color) !important;\n transition: opacity 0.2s ease, transform 0.2s ease;\n }\n :host ::ng-deep .plyr__controls button {\n color: var(--plyr-control-color) !important;\n }\n :host ::ng-deep .plyr__progress__buffer {\n background-color: var(--plyr-progress-buffer-background) !important;\n }\n :host ::ng-deep .plyr,\n :host ::ng-deep .plyr__video-wrapper,\n :host ::ng-deep .plyr__video-embed,\n :host ::ng-deep .plyr__video-embed > iframe,\n :host ::ng-deep video {\n width: 100% !important;\n height: 100% !important;\n aspect-ratio: auto !important;\n top: 0 !important;\n left: 0 !important;\n }\n :host ::ng-deep .mirror {\n transform: scaleX(-1) !important;\n -webkit-transform: scaleX(-1) !important;\n }\n :host ::ng-deep .plyr--video .plyr__control.plyr__tab-focus,\n :host ::ng-deep .plyr--video .plyr__control:hover,\n :host ::ng-deep .plyr--video .plyr__control[aria-expanded=true] {\n background: var(--plyr-color-hover) !important;\n color: var(--plyr-control-button-color) !important;\n }\n\n :host ::ng-deep .plyr--full-ui input[type=range] {\n color: var(--plyr-color-main) !important;\n }\n\n :host ::ng-deep .plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]::before {\n background: var(--plyr-color-main) !important;\n }\n\n :host ::ng-deep .plyr__menu__container {\n background: var(--plyr-control-background) !important;\n z-index: 7 !important;\n }\n\n :host ::ng-deep .plyr--auto-hide-controls .plyr__controls {\n opacity: 0 !important;\n pointer-events: none !important;\n transform: translateY(12px);\n }\n\n :host ::ng-deep .ytp-more-videos-view .ytp-suggestions{\n pointer-events: none !important;\n }\n `,\n ],\n})\nexport class PlyrPlayerComponent\n implements AfterViewInit, OnDestroy, OnChanges, OnInit\n{\n @ViewChild(\"video\", { static: true }) videoRef!: ElementRef<HTMLVideoElement>;\n @Input() config!: WebplayerConfig;\n @Output() ready = new EventEmitter<void>();\n\n private plyr!: any;\n private hls?: Hls;\n private controlsVisibilityCleanup?: () => void;\n private recommendationBlocker?: HTMLElement | null;\n private recommendationBlockerActiveZone?: HTMLElement | null;\n private topClickBlocker?: HTMLElement | null;\n private menuObserver?: MutationObserver;\n private playbackEnded = false;\n private overlayBlockAll = false;\n private endedPosterOverlay?: HTMLElement | null;\n private fullscreenCleanup?: () => void;\n private readonly onResize = () => this.updateRecommendationBlockerSafeZone();\n private readonly onTopBlockerPointerDown = (event: Event) => {\n try { event.preventDefault(); } catch {}\n event.stopPropagation();\n };\n private readonly onTopBlockerClick = () => {\n this.togglePlayback();\n };\n private readonly onRecommendationBlockerClick = (event?: Event) => {\n if (event) {\n try { event.preventDefault(); } catch {}\n try { event.stopPropagation(); } catch {}\n }\n this.togglePlayback();\n };\n private readonly controlsSafeZonePxDesktop = 96;\n private readonly controlsSafeZonePxTouch = 144;\n\n constructor(\n private progressService: WebplayerProgressService,\n @Inject(DOCUMENT) private document: Document\n ) {}\n\n ngOnInit() {\n console.log(this.config);\n if (this.config?.ui?.colors) {\n this.applyTheme(this.config.ui.colors);\n }\n }\n\n private getControlsSafeZone(): number {\n const controls = (this.plyr?.elements?.controls ?? null) as HTMLElement | null;\n const menuHeight = this.getOpenMenuHeight();\n const baseSafeZone = this.isTouchDevice() ? this.controlsSafeZonePxTouch : this.controlsSafeZonePxDesktop;\n if (!controls) {\n return Math.max(baseSafeZone, menuHeight + 5);\n }\n let controlsHeight = 0;\n try {\n const rect = controls.getBoundingClientRect?.();\n if (rect && rect.height) {\n controlsHeight = rect.height;\n }\n } catch {}\n if (!controlsHeight) {\n controlsHeight = controls.offsetHeight || controls.clientHeight || 0;\n }\n return Math.max(baseSafeZone, Math.ceil(controlsHeight + menuHeight + 24));\n }\n\n private getOverlaySafeZone(): number {\n const host = this.config?.video_host;\n if (\n this.overlayBlockAll &&\n (host === 'youtube' || host === 'vimeo')\n ) {\n return 0;\n }\n return this.getControlsSafeZone();\n }\n\n private getOpenMenuHeight(): number {\n const container = this.plyr?.elements?.container as HTMLElement | undefined;\n if (!container) return 0;\n const menu = container.querySelector('.plyr__menu__container[aria-hidden=\"false\"], .plyr__menu__container:not([aria-hidden])') as HTMLElement | null;\n if (!menu) return 0;\n try {\n const rect = menu.getBoundingClientRect?.();\n if (rect && rect.height) return Math.ceil(rect.height);\n } catch {}\n const fallback = menu.offsetHeight || menu.clientHeight || 0;\n return fallback;\n }\n\n ngAfterViewInit() {\n this.setupPlayer();\n window.addEventListener('message', this.onCastMessage);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes[\"config\"] && this.plyr) {\n this.setupPlayer();\n }\n }\n\n private applyTheme(colors: { [key: string]: string }) {\n const STYLE_ID = 'webplayer-theme-vars';\n let styleEl = this.document.getElementById(STYLE_ID) as HTMLStyleElement | null;\n if (!styleEl) {\n styleEl = this.document.createElement('style');\n styleEl.id = STYLE_ID;\n this.document.head.appendChild(styleEl);\n }\n\n const rootStyle = this.document.documentElement.style;\n const allPairs: Array<[string, string]> = [];\n\n for (const key in colors) {\n if (Object.prototype.hasOwnProperty.call(colors, key)) {\n const cssVarName = `--theme-${key.replace('progresss-', 'progress-')}`;\n const cssVarValue = String(colors[key]);\n allPairs.push([cssVarName, cssVarValue]);\n try { rootStyle.setProperty(cssVarName, cssVarValue); } catch {}\n }\n }\n\n const cssRule = `:root{\n${allPairs.map(([n,v]) => ` ${n}: ${v};`).join('\\n')}\n}`;\n styleEl.textContent = cssRule;\n }\n\n private normalizeLocaleCandidate(value: unknown): string | null {\n if (value === null || value === undefined) {\n return null;\n }\n const candidate = String(value).trim();\n if (!candidate) {\n return null;\n }\n return candidate.replace(/_/g, '-');\n }\n\n private resolveLocale(): string {\n const candidates: unknown[] = [\n (this.config as any)?.video_locale,\n (this.config as any)?.video_language,\n this.config?.locale,\n this.config?.language,\n (this.config as any)?.content_locale,\n (this.config as any)?.content_language,\n ];\n for (const candidate of candidates) {\n const normalized = this.normalizeLocaleCandidate(candidate);\n if (normalized) {\n return normalized;\n }\n }\n return 'pt-BR';\n }\n\n private resolveCaptionsLanguage(locale: string): string | null {\n const explicit = this.normalizeLocaleCandidate(\n (this.config as any)?.captions_locale ??\n (this.config as any)?.captions_language ??\n (this.config as any)?.subtitle_locale ??\n (this.config as any)?.subtitle_language ??\n null\n );\n const baseLocale = explicit || locale;\n if (!baseLocale) return null;\n const code = baseLocale.split('-')[0]?.trim();\n return code ? code.toLowerCase() : null;\n }\n\n private shouldHideVimeoRecommendations(): boolean {\n const flag = (this.config as any)?.disable_vimeo_recommendations;\n return flag !== false;\n }\n\n private clearVimeoEndedState() {\n if (this.config.video_host !== \"vimeo\") return;\n const container = this.plyr?.elements?.container as HTMLElement | undefined;\n container?.classList.remove(\"plyr--vimeo-ended\");\n this.toggleRecommendationBlocker(false);\n }\n\n private preventVimeoRecommendations() {\n if (this.config.video_host !== \"vimeo\") return;\n if (!this.shouldHideVimeoRecommendations()) return;\n\n try {\n this.plyr?.stop();\n } catch {}\n\n const embed = (this.plyr as any)?.embed;\n if (embed && typeof embed.unload === \"function\") {\n try {\n embed.unload().catch(() => {});\n } catch {}\n }\n\n const container = this.plyr?.elements?.container as HTMLElement | undefined;\n container?.classList.add(\"plyr--vimeo-ended\");\n this.toggleRecommendationBlocker(true);\n }\n\n private getVideoWrapper(): HTMLElement | null {\n const container = this.plyr?.elements?.container as HTMLElement | undefined;\n if (!container) return null;\n const wrapper =\n (this.plyr?.elements as any)?.wrapper ||\n container.querySelector('.plyr__video-wrapper');\n return (wrapper as HTMLElement) || null;\n }\n\n private ensureRecommendationBlocker(): HTMLElement | null {\n if (this.recommendationBlocker && this.recommendationBlocker.isConnected) {\n return this.recommendationBlocker;\n }\n const wrapper = this.getVideoWrapper();\n if (!wrapper) return null;\n\n const blocker = this.document.createElement('div');\n blocker.className = 'plyr-recommendation-blocker';\n blocker.style.position = 'absolute';\n blocker.style.top = '0';\n blocker.style.left = '0';\n blocker.style.width = '100%';\n blocker.style.height = '100%';\n blocker.style.zIndex = '11';\n blocker.style.pointerEvents = 'none';\n blocker.style.display = 'none';\n blocker.style.background = 'rgba(0,0,0,0)';\n blocker.style.cursor = 'pointer';\n\n const activeZone = this.document.createElement('div');\n activeZone.className = 'plyr-recommendation-blocker__zone';\n activeZone.style.position = 'absolute';\n activeZone.style.top = '0';\n activeZone.style.left = '0';\n activeZone.style.width = '100%';\n activeZone.style.bottom = `20px`;\n activeZone.style.pointerEvents = 'auto';\n activeZone.style.background = 'rgba(0,0,0,0)';\n activeZone.style.cursor = 'pointer';\n activeZone.addEventListener('pointerdown', this.onTopBlockerPointerDown);\n activeZone.addEventListener('click', this.onRecommendationBlockerClick);\n blocker.appendChild(activeZone);\n\n wrapper.appendChild(blocker);\n this.recommendationBlocker = blocker;\n this.recommendationBlockerActiveZone = activeZone;\n this.updateRecommendationBlockerSafeZone();\n return blocker;\n }\n\n private toggleRecommendationBlocker(active: boolean) {\n if (this.config.video_host !== \"youtube\" && this.config.video_host !== \"vimeo\") {\n return;\n }\n const blocker = this.ensureRecommendationBlocker();\n if (!blocker) return;\n const activeZone = this.recommendationBlockerActiveZone;\n if (active) {\n blocker.style.display = 'block';\n blocker.style.pointerEvents = 'none';\n if (activeZone) {\n activeZone.style.pointerEvents = 'auto';\n }\n this.updateRecommendationBlockerSafeZone();\n } else {\n blocker.style.display = 'none';\n blocker.style.pointerEvents = 'none';\n if (activeZone) {\n activeZone.style.pointerEvents = 'none';\n }\n }\n this.updateTopClickBlockerSafeZone();\n }\n\n private updateRecommendationBlockerSafeZone() {\n if (!this.recommendationBlockerActiveZone && !this.topClickBlocker) return;\n const safeZone = this.getOverlaySafeZone();\n if (this.recommendationBlockerActiveZone) {\n this.recommendationBlockerActiveZone.style.bottom = `${safeZone}px`;\n }\n this.updateTopClickBlockerSafeZone(safeZone);\n }\n\n private updateTopClickBlockerSafeZone(precomputed?: number) {\n if (!this.topClickBlocker) return;\n const safeZoneRaw = typeof precomputed === 'number' ? precomputed : this.getOverlaySafeZone();\n const safeZone = Math.max(0, safeZoneRaw);\n this.topClickBlocker.style.bottom = `${safeZone}px`;\n }\n\n private togglePlayback(force?: boolean) {\n if (!this.plyr) return;\n const hasTogglePlay = typeof this.plyr.togglePlay === 'function';\n const ended = this.playbackEnded;\n if (hasTogglePlay && typeof force === 'undefined') {\n try {\n const result = this.plyr.togglePlay();\n if (result && typeof result.catch === 'function') {\n result.catch(() => {});\n }\n return;\n } catch {}\n }\n\n const shouldPlay =\n typeof force === 'boolean' ? !!force : !this.plyr.playing;\n\n if (shouldPlay) {\n if (ended) {\n try {\n if (typeof this.plyr.restart === 'function') {\n this.plyr.restart();\n } else {\n this.plyr.currentTime = 0;\n }\n } catch {}\n }\n this.playbackEnded = false;\n this.overlayBlockAll = false;\n this.updateRecommendationBlockerSafeZone();\n try {\n const result = this.plyr.play?.();\n if (result && typeof result.catch === 'function') {\n result.catch(() => {});\n }\n } catch {}\n return;\n }\n\n this.overlayBlockAll = true;\n this.updateRecommendationBlockerSafeZone();\n try {\n this.plyr.pause?.();\n } catch {}\n }\n\n private ensureTopClickBlocker() {\n if (this.config.video_host !== \"youtube\" && this.config.video_host !== \"vimeo\") {\n return;\n }\n const wrapper = this.getVideoWrapper();\n if (!wrapper) return;\n if (this.topClickBlocker && this.topClickBlocker.isConnected) {\n return;\n }\n const blocker = this.document.createElement('div');\n blocker.className = 'plyr-top-click-blocker';\n blocker.style.position = 'absolute';\n blocker.style.top = '0';\n blocker.style.left = '0';\n blocker.style.right = '0';\n blocker.style.width = '100%';\n blocker.style.zIndex = '12';\n blocker.style.pointerEvents = 'auto';\n blocker.style.background = 'rgba(0,0,0,0)';\n blocker.style.touchAction = 'none';\n blocker.style.cursor = 'pointer';\n blocker.addEventListener('pointerdown', this.onTopBlockerPointerDown);\n blocker.addEventListener('click', this.onTopBlockerClick);\n wrapper.appendChild(blocker);\n this.topClickBlocker = blocker;\n this.updateTopClickBlockerSafeZone();\n }\n\n private observeMenuChanges() {\n this.menuObserver?.disconnect();\n const container = this.plyr?.elements?.container as HTMLElement | undefined;\n if (!container) {\n this.menuObserver = undefined;\n return;\n }\n const observer = new MutationObserver(() => {\n this.updateRecommendationBlockerSafeZone();\n });\n observer.observe(container, {\n subtree: true,\n attributes: true,\n attributeFilter: ['aria-hidden', 'class', 'style'],\n });\n this.menuObserver = observer;\n }\n\n private isIOSDevice(): boolean {\n if (typeof navigator === 'undefined') return false;\n const ua = navigator.userAgent || '';\n const iOS = /iPad|iPhone|iPod/.test(ua);\n const iPadOS = navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1;\n return iOS || iPadOS;\n }\n\n private isAndroidDevice(): boolean {\n if (typeof navigator === 'undefined') return false;\n return /Android/i.test(navigator.userAgent || '');\n }\n\n private isTouchDevice(): boolean {\n if (typeof window === 'undefined') {\n return false;\n }\n if (typeof navigator !== 'undefined' && navigator.maxTouchPoints > 0) {\n return true;\n }\n if (window.matchMedia) {\n try {\n if (window.matchMedia('(pointer: coarse)').matches) {\n return true;\n }\n } catch {}\n }\n return 'ontouchstart' in window;\n }\n\n private setupControlsVisibility() {\n const container = this.plyr?.elements?.container as HTMLElement | undefined;\n if (!container) {\n this.controlsVisibilityCleanup = undefined;\n return;\n }\n\n if (this.isTouchDevice()) {\n const HIDE_DELAY = 2000;\n let hideTimeout: ReturnType<typeof setTimeout> | null = null;\n\n const clearHideTimeout = () => {\n if (hideTimeout) {\n clearTimeout(hideTimeout);\n hideTimeout = null;\n }\n };\n\n const showControls = () => {\n container.classList.remove('plyr--auto-hide-controls');\n };\n\n const hideControls = () => {\n if (this.plyr?.playing) {\n container.classList.add('plyr--auto-hide-controls');\n }\n };\n\n const scheduleHide = () => {\n clearHideTimeout();\n if (!this.plyr?.playing) return;\n hideTimeout = setTimeout(() => hideControls(), HIDE_DELAY);\n };\n\n const onPlay = () => {\n showControls();\n scheduleHide();\n };\n const onPause = () => {\n clearHideTimeout();\n showControls();\n };\n const onEnded = () => {\n clearHideTimeout();\n showControls();\n };\n const onUserInteraction = () => {\n showControls();\n scheduleHide();\n };\n\n this.plyr?.on?.('play', onPlay);\n this.plyr?.on?.('pause', onPause);\n this.plyr?.on?.('ended', onEnded);\n container.addEventListener('touchstart', onUserInteraction);\n container.addEventListener('click', onUserInteraction);\n\n this.controlsVisibilityCleanup = () => {\n clearHideTimeout();\n this.plyr?.off?.('play', onPlay);\n this.plyr?.off?.('pause', onPause);\n this.plyr?.off?.('ended', onEnded);\n container.removeEventListener('touchstart', onUserInteraction);\n container.removeEventListener('click', onUserInteraction);\n container.classList.remove('plyr--auto-hide-controls');\n };\n\n onPlay();\n return;\n }\n\n let hovering = false;\n const toggleClass = () => {\n const playing = !!this.plyr?.playing;\n if (playing && !hovering) {\n container.classList.add('plyr--auto-hide-controls');\n } else {\n container.classList.remove('plyr--auto-hide-controls');\n }\n };\n\n const onPlay = () => toggleClass();\n const onPause = () => toggleClass();\n const onEnded = () => toggleClass();\n const onMouseEnter = () => {\n hovering = true;\n toggleClass();\n };\n const onMouseLeave = () => {\n hovering = false;\n toggleClass();\n };\n const onFocusIn = () => {\n hovering = true;\n toggleClass();\n };\n const onFocusOut = () => {\n hovering = container.matches(':hover');\n toggleClass();\n };\n\n this.plyr?.on?.('play', onPlay);\n this.plyr?.on?.('pause', onPause);\n this.plyr?.on?.('ended', onEnded);\n container.addEventListener('mouseenter', onMouseEnter);\n container.addEventListener('mouseleave', onMouseLeave);\n container.addEventListener('focusin', onFocusIn);\n container.addEventListener('focusout', onFocusOut);\n\n toggleClass();\n\n this.controlsVisibilityCleanup = () => {\n this.plyr?.off?.('play', onPlay);\n this.plyr?.off?.('pause', onPause);\n this.plyr?.off?.('ended', onEnded);\n container.removeEventListener('mouseenter', onMouseEnter);\n container.removeEventListener('mouseleave', onMouseLeave);\n container.removeEventListener('focusin', onFocusIn);\n container.removeEventListener('focusout', onFocusOut);\n container.classList.remove('plyr--auto-hide-controls');\n };\n }\n\n private bindFullscreenBehavior() {\n this.fullscreenCleanup?.();\n this.fullscreenCleanup = undefined;\n if (!this.plyr) return;\n if (this.isIOSDevice() || !this.isAndroidDevice()) {\n return;\n }\n if (typeof window === 'undefined' || typeof screen === 'undefined') {\n return;\n }\n const orientation = (screen as Screen & { orientation?: ScreenOrientation | any }).orientation;\n const canLockOrientation =\n orientation && typeof orientation.lock === 'function' && typeof orientation.unlock === 'function';\n if (!canLockOrientation) {\n return;\n }\n\n const isPortrait = () => {\n if (typeof window.matchMedia === 'function') {\n try {\n return window.matchMedia('(orientation: portrait)').matches;\n } catch {}\n }\n return (window.innerHeight || 0) >= (window.innerWidth || 0);\n };\n\n let orientationLocked = false;\n\n const lockLandscape = async () => {\n if (!orientation) return;\n try {\n await orientation.lock('landscape');\n orientationLocked = true;\n } catch {}\n };\n\n const unlockOrientation = () => {\n if (orientationLocked && orientation) {\n try {\n orientation.unlock();\n } catch {}\n }\n orientationLocked = false;\n };\n\n const onEnterFullscreen = () => {\n if (isPortrait()) {\n lockLandscape();\n }\n };\n\n const onExitFullscreen = () => {\n unlockOrientation();\n };\n\n const onOrientationChange = () => {\n if (!this.plyr?.fullscreen?.active) {\n unlockOrientation();\n }\n };\n\n this.plyr.on('enterfullscreen', onEnterFullscreen as any);\n this.plyr.on('exitfullscreen', onExitFullscreen as any);\n window.addEventListener('orientationchange', onOrientationChange);\n\n this.fullscreenCleanup = () => {\n unlockOrientation();\n this.plyr?.off('enterfullscreen', onEnterFullscreen as any);\n this.plyr?.off('exitfullscreen', onExitFullscreen as any);\n window.removeEventListener('orientationchange', onOrientationChange);\n };\n }\n\n private setupPlayer() {\n if (!this.videoRef) return;\n\n this.hls?.destroy();\n this.controlsVisibilityCleanup?.();\n this.controlsVisibilityCleanup = undefined;\n this.fullscreenCleanup?.();\n this.fullscreenCleanup = undefined;\n this.plyr?.destroy();\n this.recommendationBlocker = null;\n const speedOptions = [1, 1.25, 1.5, 2];\n const locale = this.resolveLocale();\n const captionsLanguage = this.resolveCaptionsLanguage(locale) ?? 'pt';\n const hideVimeoRecommendations = this.shouldHideVimeoRecommendations();\n const vimeoPremium = Boolean((this.config as any)?.vimeo_premium);\n\n const vimeoOptions: any = {\n byline: false,\n portrait: false,\n title: false,\n playsinline: false,\n speed: true,\n dnt: 1,\n pip: false,\n quality: \"auto\",\n transparent: false,\n };\n\n if (hideVimeoRecommendations) {\n vimeoOptions.controls = false;\n vimeoOptions.sidedock = 0;\n }\n\n if (vimeoPremium) {\n vimeoOptions.premium = true;\n }\n\n const youtubePlayerVars: Record<string, any> = {\n rel: 0,\n modestbranding: 1,\n noCookie: true,\n };\n\n youtubePlayerVars.playerVars = {\n hl: locale,\n cc_lang_pref: captionsLanguage || locale.split('-')[0]?.toLowerCase(),\n };\n if (captionsLanguage) {\n youtubePlayerVars.playerVars.cc_load_policy = 1;\n }\n\n const plyrOptions: any = {\n controls: [\n \"play-large\",\n \"play\",\n \"progress\",\n \"current-time\",\n \"duration\",\n \"mute\",\n \"volume\",\n \"captions\",\n \"settings\",\n \"pip\",\n \"airplay\",\n \"fullscreen\",\n ],\n youtube: youtubePlayerVars,\n vimeo: vimeoOptions,\n fullscreen: {\n enabled: true,\n fallback: true,\n iosNative: true,\n container: null,\n },\n i18n: {\n speed: 'Velocidade',\n },\n speed: {\n selected: 1,\n options: speedOptions\n },\n clickToPlay: true,\n hideControls: false,\n keyboard: { focused: true, global: false },\n muted: false,\n };\n\n plyrOptions.hl = locale;\n if (captionsLanguage) {\n plyrOptions.captions = { language: captionsLanguage };\n }\n\n this.plyr = new (Plyr as any).default(this.videoRef.nativeElement, plyrOptions);\n this.bindFullscreenBehavior();\n\n this.setupControlsVisibility();\n this.ensureTopClickBlocker();\n this.observeMenuChanges();\n this.playbackEnded = false;\n this.overlayBlockAll = false;\n window.removeEventListener('resize', this.onResize);\n window.addEventListener('resize', this.onResize);\n this.bindProgressEvents();\n this.loadSource(this.videoRef.nativeElement).then(() => {\n this.setupStartTime();\n });\n\n // Dispara o evento ready quando o player estiver pronto\n this.plyr.on(\"ready\", () => {\n this.ready.emit();\n });\n }\n\n private setupStartTime() {\n const apply = () => {\n const dur = this.plyr.duration || 0;\n const start = this.resolveStartTime(this.config.last_time, this.config.last_percent, dur);\n if (start > 0) this.plyr.currentTime = start;\n this.plyr.off(\"ready\", apply as any);\n };\n this.plyr.on(\"ready\", apply as any);\n }\n\n private bindProgressEvents() {\n const THROTTLE_MS = 300;\n let lastEmit = 0;\n\n const emitProgress = () => {\n const t = this.plyr.currentTime || 0;\n const d = this.plyr.duration || 0;\n const p = d > 0 ? +((t / d) * 100).toFixed(2) : 0;\n this.progressService.progress$.next({ currentTime: t, duration: d, percent: p });\n };\n\n const onTimeUpdate = () => {\n const now = performance.now();\n if (now - lastEmit >= THROTTLE_MS) {\n lastEmit = now;\n emitProgress();\n }\n parent.postMessage('currentTime:' + (this.plyr.currentTime || 0), \"*\");\n console.log('event: current_time ' + (this.plyr.currentTime || 0));\n this.postCastEvent({\n event: 'current_time',\n currentTime: this.plyr.currentTime || 0,\n duration: this.plyr.duration || 0,\n });\n };\n this.plyr?.on?.(\"play\", () => {\n this.clearVimeoEndedState();\n this.playbackEnded = false;\n this.overlayBlockAll = false;\n this.updateRecommendationBlockerSafeZone();\n this.toggleRecommendationBlocker(false);\n parent.postMessage('playing_video', \"*\");\n this.postCastEvent({ event: 'play', currentTime: this.plyr.currentTime || 0 });\n\n });\n this.plyr?.on?.(\"timeupdate\", onTimeUpdate);\n this.plyr?.on?.(\"pause\", () => {\n emitProgress();\n console.log('event: pause')\n parent.postMessage('paused_video', \"*\");\n this.postCastEvent({ event: 'pause', currentTime: this.plyr.currentTime || 0 });\n this.overlayBlockAll = true;\n this.updateRecommendationBlockerSafeZone();\n this.toggleRecommendationBlocker(true);\n });\n this.plyr?.on?.(\"ended\", () => {\n emitProgress();\n this.playbackEnded = true;\n this.overlayBlockAll = true;\n this.updateRecommendationBlockerSafeZone();\n parent.postMessage('event: ended', \"*\");\n this.postCastEvent({ event: 'ended', currentTime: this.plyr.currentTime || 0 });\n this.progressService.ended$.next();\n this.preventVimeoRecommendations();\n this.toggleRecommendationBlocker(true);\n });\n }\n\n private unmuteAfterDelay(\n video?: HTMLVideoElement,\n delayMs = 2000,\n volume = 1\n ) {\n if (!this.config.autoplay) return;\n setTimeout(() => {\n try {\n if (this.plyr) {\n this.plyr.muted = false;\n this.plyr.volume = volume;\n }\n } catch {}\n try {\n if (video) {\n video.muted = false;\n if (typeof video.volume === \"number\") video.volume = volume;\n }\n } catch {}\n }, delayMs);\n }\n\n private resetPlaybackRate(video?: HTMLVideoElement) {\n try {\n if (this.plyr && typeof this.plyr.speed !== 'undefined') {\n this.plyr.speed = 1;\n }\n } catch {}\n const media = video ?? this.videoRef?.nativeElement ?? null;\n if (media) {\n try { media.playbackRate = 1; } catch {}\n try {\n if ((media as any).defaultPlaybackRate !== undefined) {\n (media as any).defaultPlaybackRate = 1;\n }\n } catch {}\n }\n }\n\n private loadSource(\n video: HTMLVideoElement,\n ): Promise<void> {\n\n return new Promise((resolve) => {\n if (!this.config) {\n return resolve();\n }\n\n if (this.hls) {\n this.hls.destroy();\n this.hls = undefined;\n }\n\n this.resetPlaybackRate(video);\n\n if (this.config.video_host === \"youtube\" || this.config.video_host === \"vimeo\") {\n const onReady = () => {\n this.plyr.off(\"ready\", onReady);\n const start = this.resolveStartTime(\n this.config.last_time,\n this.config.last_percent,\n this.plyr.duration\n );\n if (start > 0) this.plyr.currentTime = start;\n \n if (this.config.autoplay || this.config.is_live) {\n setTimeout(() => {\n this.plyr.play();\n }, 1500);\n }\n parent.postMessage('playerIsReadyToPlay', \"*\");\n parent.postMessage('duration:' + this.plyr.duration, \"*\");\n console.log('event: current_time ' + this.plyr.currentTime);\n console.log('event: duration ' + this.plyr.duration);\n console.log('event: ready');\n this.postCastEvent({\n event: 'ready',\n duration: this.plyr.duration || 0,\n currentTime: this.plyr.currentTime || 0,\n });\n\n if(this.config.is_live) {\n this.plyr?.on('playing', function() {\n console.log('event: playing_live');\n parent.postMessage('event: playing_live', '*');\n });\n }\n\n if (this.config.mirror) {\n setTimeout(() => {\n document\n .querySelector(`.plyr__video-embed iframe`) // eslint-disable-line\n ?.classList.add(\"mirror\");\n }, 1000);\n }\n };\n this.plyr.on(\"ready\", onReady);\n }\n\n if (this.config.video_host === \"youtube\") {\n this.plyr.source = {\n type: \"video\",\n sources: [{ src: this.config.video_id, provider: \"youtube\" }],\n };\n } else if (this.config.video_host === \"vimeo\") {\n this.plyr.source = {\n type: \"video\",\n sources: [{ src: this.config.video_id, provider: \"vimeo\" }],\n };\n } else if (this.config.video_host === \"mp4\") {\n this.plyr.source = {\n type: \"video\",\n sources: [{ src: this.config.video_external_id, type: \"video/mp4\" }],\n };\n } else if (this.config.video_host === \"hls\") {\n let sourceX = \"\";\n try {\n sourceX = atob(this.config.video_id || '');\n } catch (e) {\n sourceX = this.config.video_id || '';\n }\n const canNative = video.canPlayType(\"application/vnd.apple.mpegurl\");\n\n if (canNative) {\n this.plyr.source = {\n type: \"video\",\n sources: [{ src: sourceX, type: \"application/vnd.apple.mpegurl\" }],\n };\n const onLoadedMeta = () => {\n const dur = this.plyr.duration || video.duration || 0;\n const start = this.resolveStartTime(this.config.last_time, this.config.last_percent, dur);\n if (start > 0) { try { this.plyr.currentTime = start; } catch { try { video.currentTime = start; } catch {} } \n }\n if (this.config.autoplay) {\n try { video.muted = true; } catch {}\n setTimeout(() => {\n try { this.plyr.play(); } catch { try { video.play(); } catch {} }\n this.unmuteAfterDelay(video);\n }, 250);\n }\n video.removeEventListener(\"loadedmetadata\", onLoadedMeta);\n };\n video.addEventListener(\"loadedmetadata\", onLoadedMeta);\n } else if (Hls.isSupported()) {\n this.hls = new Hls({ enableWorker: true, lowLatencyMode: true });\n this.hls.attachMedia(video);\n this.hls.on(Hls.Events.MEDIA_ATTACHED, () => {\n this.hls!.loadSource(sourceX);\n });\n this.hls.on(Hls.Events.MANIFEST_PARSED, () => {\n const dur = video.duration || 0;\n const start = this.resolveStartTime(this.config.last_time, this.config.last_percent, dur);\n if (start > 0) { try { video.currentTime = start; } catch {} }\n if (this.config.autoplay) {\n video.muted = true;\n video.play().catch(() => {});\n this.unmuteAfterDelay(video);\n }\n });\n this.hls.on(Hls.Events.ERROR, (_evt, data) => {\n if (data?.fatal) {\n switch (data.type) {\n case Hls.ErrorTypes.NETWORK_ERROR:\n this.hls!.startLoad();\n break;\n case Hls.ErrorTypes.MEDIA_ERROR:\n this.hls!.recoverMediaError();\n break;\n default:\n try { this.hls!.destroy(); } catch {} break;\n }\n }\n });\n } else {\n this.plyr.source = { type: \"video\", sources: [{ src: sourceX }] };\n }\n }\n resolve();\n });\n }\n\n private resolveStartTime(\n last_time: any,\n last_percent: any,\n duration: number,\n opts: { minStartSec?: number; endGuardSec?: number } = {}\n ): number {\n const minStartSec = opts.minStartSec ?? 3;\n const endGuardSec = opts.endGuardSec ?? 2;\n const dur = Number(duration) || 0;\n if (dur <= 0) return 0;\n\n const hasTime = last_time !== undefined && last_time !== null && last_time !== \"\";\n if (hasTime) {\n let t = Number(last_time);\n if (!isFinite(t) || t < 0) t = 0;\n if (t < minStartSec) return 0;\n return Math.min(dur - endGuardSec, t);\n }\n\n const hasPercent =\n last_percent !== undefined && last_percent !== null && last_percent !== \"\";\n if (hasPercent) {\n let p = Number(last_percent);\n if (!isFinite(p) || p < 0) p = 0;\n if (p > 1) p = p / 100;\n let t = dur * p;\n if (t < minStartSec) return 0;\n return Math.min(dur - endGuardSec, t);\n }\n\n return 0;\n }\n\n private postCastEvent(payload: Record<string, unknown>) {\n parent.postMessage(JSON.stringify(payload), '*');\n }\n\n private onCastMessage = (evt: MessageEvent) => {\n let data = evt.data;\n if (typeof data === 'string') {\n try { data = JSON.parse(data); } catch { /* ignora */ }\n }\n if (data?.action === 'request-iframe-media-metadata') {\n this.postCastEvent({\n event: 'metadata',\n duration: this.plyr?.duration || 0,\n currentTime: this.plyr?.currentTime || 0,\n });\n }\n if (data?.action === 'play') {\n this.plyr?.play();\n }\n if (data?.action === 'pause') {\n this.plyr?.pause();\n }\n if (data?.action === 'seek' && typeof data.time === 'number') {\n this.plyr && (this.plyr.currentTime = data.time);\n }\n };\n\n ngOnDestroy() {\n this.hls?.destroy();\n this.controlsVisibilityCleanup?.();\n this.controlsVisibilityCleanup = undefined;\n const container = this.plyr?.elements?.container as HTMLElement | undefined;\n container?.classList.remove(\"plyr--vimeo-ended\");\n if (this.recommendationBlocker?.parentElement) {\n try {\n this.recommendationBlocker.parentElement.removeChild(this.recommendationBlocker);\n } catch {}\n }\n if (this.recommendationBlockerActiveZone) {\n try {\n this.recommendationBlockerActiveZone.removeEventListener('pointerdown', this.onTopBlockerPointerDown);\n this.recommendationBlockerActiveZone.removeEventListener('click', this.onRecommendationBlockerClick);\n } catch {}\n }\n this.recommendationBlocker = null;\n this.recommendationBlockerActiveZone = null;\n if (this.topClickBlocker?.parentElement) {\n try {\n this.topClickBlocker.removeEventListener('pointerdown', this.onTopBlockerPointerDown);\n this.topClickBlocker.removeEventListener('click', this.onTopBlockerClick);\n this.topClickBlocker.parentElement.removeChild(this.topClickBlocker);\n } catch {}\n }\n this.topClickBlocker = null;\n this.menuObserver?.disconnect();\n this.menuObserver = undefined;\n window.removeEventListener('resize', this.onResize);\n this.fullscreenCleanup?.();\n this.fullscreenCleanup = undefined;\n this.plyr?.destroy();\n window.removeEventListener('message', this.onCastMessage);\n }\n}\n","import { Component, ElementRef, Input, OnDestroy, OnInit, OnChanges, SimpleChanges, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { WebplayerConfig } from '../../webplayer.types';\nimport { WebplayerProgressService } from '../../progress.service';\n\ndeclare global {\n interface Window {\n pandascripttag?: any[];\n PandaPlayer?: any;\n }\n}\n\n@Component({\n selector: 'app-panda-player',\n template: '', // O conteúdo do DOM é gerenciado programaticamente\n standalone: true,\n imports: [CommonModule],\n styles: [`\n :host {\n display: block;\n width: 100%;\n height: 100%;\n position: relative;\n }\n :host ::ng-deep .panda-player,\n :host ::ng-deep iframe[src*=\"pandavideo.com.br\"] {\n position: absolute !important;\n top: 0 !important;\n left: 0 !important;\n width: 100% !important;\n height: 100% !important;\n border: none !important;\n }\n `]\n})\nexport class PandaPlayerComponent implements OnInit, OnDestroy, OnChanges {\n @Input() config!: WebplayerConfig;\n @Output() ready = new EventEmitter<void>();\n\n private pandaPlayer?: any;\n private pandaContainer?: HTMLDivElement;\n private pandaProgressThrottle = 0;\n private primaryColor?: string;\n private controlsColor?: string;\n\n constructor(\n private elementRef: ElementRef,\n private progressService: WebplayerProgressService,\n ) {}\n\n ngOnInit() {\n if (this.config?.video_host !== 'panda') {\n return;\n }\n this.applyTheme();\n this.loadPandaPlayer();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['config'] && this.pandaPlayer) {\n this.loadPandaPlayer();\n }\n }\n\n private applyTheme() {\n if (this.config?.ui?.colors) {\n this.primaryColor = this.config.ui.colors['progress-view-off'];\n this.controlsColor = this.config.ui.colors['text-color'];\n }\n }\n\n private loadPandaPlayer() {\n if (!this.config.embed) {\n return;\n }\n\n this.ensurePandaScript().then(() => {\n const host: HTMLElement = this.elementRef.nativeElement;\n console.log('Panda Player Config:', this.config, host);\n if (!this.pandaContainer) {\n this.pandaContainer = document.createElement(\"div\");\n this.pandaContainer.style.width = \"100%\";\n this.pandaContainer.style.height = \"100%\";\n this.pandaContainer.id = `panda-${this.config.video_id || Math.random().toString(36).slice(2)}`;\n host.appendChild(this.pandaContainer);\n }\n\n try {\n this.pandaPlayer?.destroy?.();\n } catch {}\n\n const videoId = this.config.video_external_id || (this.config.embed ? this.extractPandaVideoId(this.config.embed) : undefined);\n const libraryId = (this.config.embed ? this.extractPandaLibraryId(this.config.embed) : undefined);\n\n window.pandascripttag = window.pandascripttag || [];\n window.pandascripttag.push(() => {\n this.pandaPlayer = new (window as any).PandaPlayer(\n this.pandaContainer!.id,\n {\n video_external_id: videoId,\n library_id: libraryId,\n onReady: () => {\n if (this.primaryColor) {\n try { this.pandaPlayer.setColor('primary', this.primaryColor); } catch {}\n }\n if (this.controlsColor) {\n try { this.pandaPlayer.setColor('secondary', this.controlsColor); } catch {}\n }\n\n const dur = this.pandaPlayer?.getDuration?.() || 0;\n const start = this.resolveStartTime(this.config.last_time, this.config.last_percent, dur);\n if (start > 0) {\n try { this.pandaPlayer.setCurrentTime(start); } catch {}\n }\n if (this.config.autoplay) {\n try { this.pandaPlayer.play(); } catch {}\n }\n this.ready.emit();\n },\n playerConfigs: {\n autoplay: !!this.config.autoplay,\n smartAutoplay: !!this.config.autoplay,\n },\n \n }\n );\n\n this.pandaPlayer.onEvent((event: any) => {\n this.handlePandaEvent(event);\n });\n });\n });\n }\n\n ngOnDestroy() {\n try {\n this.pandaPlayer?.destroy?.();\n } catch {}\n try {\n this.pandaContainer?.remove?.();\n } catch {}\n }\n\n private async ensurePandaScript(): Promise<void> {\n return new Promise<void>((resolve) => {\n if (window.PandaPlayer) return resolve();\n const existing = document.querySelector(\n 'script[src^=\"https://player.pandavideo.com.br/api.v2.js\"]'\n ) as HTMLScriptElement;\n if (existing) {\n existing.addEventListener(\"load\", () => resolve());\n if ((existing as any).readyState === \"complete\") resolve();\n return;\n }\n const script = document.createElement(\"script\");\n script.src = \"https://player.pandavideo.com.br/api.v2.js\";\n script.async = true;\n script.onload = () => resolve();\n document.head.appendChild(script);\n });\n }\n\n private extractPandaVideoId(url: string): string | undefined {\n let u: URL;\n try {\n u = new URL(url);\n } catch {\n try {\n u = new URL(decodeURIComponent(url));\n } catch {\n return undefined;\n }\n }\n try {\n const v = u.searchParams.get(\"v\") || undefined;\n return v || undefined;\n } catch {\n return undefined;\n }\n }\n\n private extractPandaLibraryId(url: string): string | undefined {\n let u: URL;\n try {\n u = new URL(url);\n } catch {\n try {\n u = new URL(decodeURIComponent(url));\n } catch {\n return undefined;\n }\n }\n try {\n const { hostname } = u;\n const firstLabel = hostname.split(\".\")[0] || \"\";\n const maybeLib = firstLabel.startsWith(\"player-\")\n ? firstLabel.slice(\"player-\".length)\n : firstLabel;\n return maybeLib || undefined;\n } catch {\n return undefined;\n }\n }\n\n private handlePandaEvent(evt: any) {\n const type = evt?.message || evt?.type;\n const THROTTLE_MS = 300;\n const now = performance.now();\n\n if (type === \"panda_timeupdate\") {\n if (now - this.pandaProgressThrottle >= THROTTLE_MS) {\n this.pandaProgressThrottle = now;\n try {\n const t = this.pandaPlayer?.getCurrentTime?.() || 0;\n const d = this.pandaPlayer?.getDuration?.() || 0;\n const p = d > 0 ? +((t / d) * 100).toFixed(2) : 0;\n this.progressService.progress$.next({ currentTime: t, duration: d, percent: p });\n } catch {}\n }\n }\n\n if (type === \"panda_play\") {\n const snapshot = this.safeProgressSnapshot();\n if (snapshot) {\n this.progressService.progress$.next(snapshot);\n }\n this.notifyParentPlaybackEvent('play', snapshot ?? {});\n }\n\n if (type === \"panda_pause\") {\n try {\n const t = this.pandaPlayer?.getCurrentTime?.() || 0;\n const d = this.pandaPlayer?.getDuration?.() || 0;\n const p = d > 0 ? +((t / d) * 100).toFixed(2) : 0;\n this.progressService.progress$.next({ currentTime: t, duration: d, percent: p });\n } catch {}\n this.notifyParentPlaybackEvent('pause', this.safeProgressSnapshot());\n }\n\n if (type === \"panda_ended\") {\n const snapshot = this.safeProgressSnapshot();\n if (snapshot) {\n this.progressService.progress$.next(snapshot);\n }\n this.progressService.ended$.next();\n this.notifyParentPlaybackEvent('ended', snapshot ?? {});\n }\n }\n\n private resolveStartTime(\n last_time: any,\n last_percent: any,\n duration: number,\n opts: { minStartSec?: number; endGuardSec?: number } = {}\n ): number {\n const minStartSec = opts.minStartSec ?? 3;\n const endGuardSec = opts.endGuardSec ?? 2;\n\n const dur = Number(duration) || 0;\n if (dur <= 0) return 0;\n\n const hasTime =\n last_time !== undefined && last_time !== null && last_time !== \"\";\n if (hasTime) {\n let t = Number(last_time);\n if (!isFinite(t) || t < 0) t = 0;\n if (t < minStartSec) return 0;\n return Math.min(dur - endGuardSec, t);\n }\n\n const hasPercent =\n last_percent !== undefined &&\n last_percent !== null &&\n last_percent !== \"\";\n if (hasPercent) {\n let p = Number(last_percent);\n if (!isFinite(p) || p < 0) p = 0;\n if (p > 1) p = p / 100;\n let t = dur * p;\n if (t < minStartSec) return 0;\n return Math.min(dur - endGuardSec, t);\n }\n\n return 0;\n }\n\n private safeProgressSnapshot():\n | { currentTime: number; duration: number; percent: number }\n | null {\n try {\n const currentTime = this.pandaPlayer?.getCurrentTime?.() || 0;\n const duration = this.pandaPlayer?.getDuration?.() || 0;\n const percent =\n duration > 0 ? +((currentTime / duration) * 100).toFixed(2) : 0;\n return { currentTime, duration, percent };\n } catch {\n return null;\n }\n }\n\n private notifyParentPlaybackEvent(event: string, extra: any = {}) {\n if (typeof window === 'undefined') return;\n const target = typeof parent !== 'undefined' ? parent : null;\n if (!target || target === window) return;\n const payload = { event, ...extra };\n try {\n target.postMessage(`event: ${event}`, '*');\n } catch {}\n try {\n target.postMessage(JSON.stringify(payload), '*');\n } catch {}\n }\n}\n","import { Component, ElementRef, Input, OnDestroy, OnInit, OnChanges, SimpleChanges, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { WebplayerConfig } from '../../webplayer.types';\nimport { WebplayerProgressService } from '../../progress.service';\n\n@Component({\n selector: 'app-scaleup-player',\n template: '', // O conteúdo do DOM é gerenciado programaticamente\n standalone: true,\n imports: [CommonModule],\n styles: [`\n :host {\n display: block;\n width: 100%;\n height: 100%;\n position: relative;\n }\n :host ::ng-deep iframe[src*=\"scaleup.com.br\"] {\n position: absolute !important;\n top: 0 !important;\n left: 0 !important;\n width: 100% !important;\n height: 100% !important;\n border: none !important;\n }\n `]\n})\nexport class ScaleupPlayerComponent implements OnInit, OnDestroy, OnChanges {\n @Input() config!: WebplayerConfig;\n @Output() ready = new EventEmitter<void>();\n private scaleupIframe?: HTMLIFrameElement;\n private scaleupMessageHandler?: (e: MessageEvent) => void;\n private scaleupProgressThrottle = 0;\n\n constructor(\n private elementRef: ElementRef,\n private progressService: WebplayerProgressService\n ) {}\n\n ngOnInit() {\n if (this.config?.video_host !== 'scaleup') {\n return;\n }\n this.loadScaleupPlayer();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['config'] && this.scaleupIframe) {\n this.loadScaleupPlayer();\n }\n }\n\n private loadScaleupPlayer() {\n const videoId = this.config.video_id;\n const lastTime = Math.max(0, Math.floor(Number(this.config.last_time) || 0));\n const eventsList =\n \"controlsdisabled,controlsenabled,dispose,durationchange,ended,enterFullWindow,enterpictureinpicture,error,exitFullWindow,firstplay,fullscreenchange,leavepictureinpicture,loadedmetadata,loadstart,pause,play,playerreset,playerresize,playing,posterchange,progress,ratechange,ready,resize,seeked,seeking,textdata,timeupdate,useractive,userinactive,volumechange,waiting\";\n const scaleupSrc = `https://player.scaleup.com.br/embed/${videoId}?seekTo=${lastTime}&events=${eventsList}&autoplay=${this.config.autoplay}`;\n\n const host: HTMLElement = this.elementRef.nativeElement;\n \n if (this.scaleupIframe) {\n this.scaleupIframe.remove();\n }\n\n const iframe = document.createElement(\"iframe\");\n iframe.src = scaleupSrc;\n iframe.allow = \"autoplay; fullscreen; encrypted-media; picture-in-picture\";\n iframe.referrerPolicy = \"origin-when-cross-origin\";\n iframe.frameBorder = \"0\";\n iframe.style.width = \"100%\";\n iframe.style.height = \"100%\";\n iframe.style.position = \"absolute\";\n iframe.style.top = \"0\";\n iframe.style.left = \"0\";\n\n host.appendChild(iframe);\n this.scaleupIframe = iframe;\n\n // Emite evento ready quando o iframe carregar\n iframe.onload = () => {\n this.ready.emit();\n };\n\n if (this.scaleupMessageHandler) {\n window.removeEventListener(\"message\", this.scaleupMessageHandler);\n }\n\n this.scaleupMessageHandler = (e: MessageEvent) => {\n try {\n const originOk =\n typeof e.origin === \"string\" &&\n e.origin.includes(\"scaleup.com.br\");\n if (!originOk) return;\n\n const data =\n typeof e.data === \"string\"\n ? (() => {\n try {\n return JSON.parse(e.data);\n } catch {\n return undefined;\n }\n })()\n : e.data;\n if (!data || typeof data !== \"object\") return;\n\n const type = (\n data.event ||\n data.type ||\n data.message ||\n data.eventName ||\n \"\"\n )\n .toString()\n .toLowerCase();\n if (!type) return;\n\n const t = Number(\n (data.currentTime ?? data.time ?? data.position) || 0\n );\n const d = Number((data.duration ?? data.totalDuration) || 0);\n const p = d > 0 ? +((t / d) * 100).toFixed(2) : 0;\n\n const THROTTLE_MS = 300;\n const now = performance.now();\n\n if (\n type.includes(\"timeupdate\") ||\n type === \"playing\" ||\n type === \"progress\"\n ) {\n if (now - this.scaleupProgressThrottle >= THROTTLE_MS) {\n this.scaleupProgressThrottle = now;\n this.progressService.progress$.next({ currentTime: t, duration: d, percent: p });\n }\n }\n if (type === \"pause\" || type === \"paused\") {\n this.progressService.progress$.next({ currentTime: t, duration: d, percent: p });\n }\n if (type === \"ended\" || type === \"end\" || type === \"complete\") {\n this.progressService.progress$.next({ currentTime: t, duration: d, percent: p });\n this.progressService.ended$.next();\n }\n } catch {}\n };\n window.addEventListener(\"message\", this.scaleupMessageHandler);\n }\n\n ngOnDestroy() {\n try {\n this.scaleupIframe?.remove();\n } catch {}\n if (this.scaleupMessageHandler) {\n window.removeEventListener(\"message\", this.scaleupMessageHandler);\n this.scaleupMessageHandler = undefined;\n }\n }\n}\n","import { Injectable, Inject } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GlobalLoadingService {\n private loadingElement: HTMLElement | null;\n\n constructor(@Inject(DOCUMENT) private document: Document) {\n this.loadingElement = this.document.getElementById('global-loading');\n }\n\n public hide() {\n if (this.loadingElement) {\n this.loadingElement.style.opacity = '0';\n setTimeout(() => {\n if (this.loadingElement) {\n this.loadingElement.style.display = 'none';\n }\n }, 500); // Duração da transição do CSS\n }\n }\n\n public show() {\n if (this.loadingElement) {\n this.loadingElement.style.display = 'flex';\n this.loadingElement.style.opacity = '1';\n }\n }\n}","import { CommonModule } from \"@angular/common\";\nimport { Component, Inject, Input } from \"@angular/core\";\n\nimport { PlyrPlayerComponent } from \"../players/plyr-player/plyr-player.component\";\nimport { PandaPlayerComponent } from \"../players/panda-player/panda-player.component\";\nimport { ScaleupPlayerComponent } from \"../players/scaleup-player/scaleup-player.component\";\n\nimport { WebplayerConfig, WEPLAYER_CONFIG } from \"../webplayer.types\";\nimport { GlobalLoadingService } from \"../global.service\";\n\n@Component({\n selector: \"app-player-loader\",\n template: `\n <div style=\"width: 100%; height: 100%;\">\n <div [ngSwitch]=\"config?.video_host\" style=\"width: 100%; height: 100%;\">\n <app-plyr-player\n *ngSwitchCase=\"'hls'\"\n [config]=\"config\"\n (ready)=\"onPlayerReady()\"\n ></app-plyr-player>\n <app-plyr-player\n *ngSwitchCase=\"'mp4'\"\n [config]=\"config\"\n (ready)=\"onPlayerReady()\"\n ></app-plyr-player>\n <app-plyr-player\n *ngSwitchCase=\"'youtube'\"\n [config]=\"config\"\n (ready)=\"onPlayerReady()\"\n ></app-plyr-player>\n <app-plyr-player\n *ngSwitchCase=\"'vimeo'\"\n [config]=\"config\"\n (ready)=\"onPlayerReady()\"\n ></app-plyr-player>\n <app-panda-player\n *ngSwitchCase=\"'panda'\"\n [config]=\"config\"\n (ready)=\"onPlayerReady()\"\n ></app-panda-player>\n <app-scaleup-player\n *ngSwitchCase=\"'scaleup'\"\n [config]=\"config\"\n (ready)=\"onPlayerReady()\"\n ></app-scaleup-player>\n <div *ngSwitchDefault>\n <p>Player não suportado ou configuração não fornecida.</p>\n </div>\n </div>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n `,\n ],\n standalone: true,\n imports: [\n CommonModule,\n PlyrPlayerComponent,\n PandaPlayerComponent,\n ScaleupPlayerComponent,\n ],\n})\nexport class PlayerLoaderComponent {\n @Input() config!: WebplayerConfig | any;\n playerType: \"plyr\" | \"panda\" | \"scaleup\" | null = null;\n\n constructor(\n @Inject(WEPLAYER_CONFIG) private defaultConfig: WebplayerConfig,\n private globalLoading: GlobalLoadingService\n ) {\n this.config = { ...this.defaultConfig, ...this.config };\n this.playerType = this.getPlayerType(this.config.videoUrl);\n }\n\n private getPlayerType(videoUrl: string): \"plyr\" | \"panda\" | \"scaleup\" | null {\n if (videoUrl?.includes(\"panda\")) return \"panda\";\n if (videoUrl?.includes(\"scaleup\")) return \"scaleup\";\n if (\n videoUrl?.includes(\"vimeo\") ||\n videoUrl?.includes(\"youtube\") ||\n videoUrl?.includes(\".m3u8\") ||\n videoUrl?.includes(\".mp4\")\n )\n return \"plyr\";\n return \"plyr\";\n }\n\n onPlayerReady() {\n this.globalLoading.hide();\n }\n}\n","import { Component, Output, EventEmitter, OnDestroy, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Subscription } from 'rxjs';\nimport { WebplayerConfig } from './webplayer.types';\nimport { WebplayerConfigService } from './webplayer-config.service';\nimport { WebplayerProgress, WebplayerProgressService } from './progress.service';\nimport { PlayerLoaderComponent } from './player-loader/player-loader.component';\n\n@Component({\n selector: 'edm-webplayer',\n template: `\n <app-player-loader [config]=\"config\" *ngIf=\"config\"></app-player-loader>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n `,\n ],\n standalone: true,\n imports: [CommonModule, PlayerLoaderComponent],\n})\nexport class WebplayerComponent implements OnInit, OnDestroy {\n @Output('playProgress') progress = new EventEmitter<WebplayerProgress>();\n @Output('playEnded') ended = new EventEmitter<void>();\n\n config: WebplayerConfig | null = null;\n private subscriptions = new Subscription();\n\n constructor(\n private configService: WebplayerConfigService,\n private progressService: WebplayerProgressService\n ) {}\n\n ngOnInit(): void {\n this.subscriptions.add(\n this.configService.config$.subscribe(config => {\n this.config = config;\n })\n );\n\n this.subscriptions.add(\n this.progressService.progress$.subscribe(p => this.progress.emit(p))\n );\n\n this.subscriptions.add(\n this.progressService.ended$.subscribe(() => this.ended.emit())\n );\n }\n\n ngOnDestroy(): void {\n this.subscriptions.unsubscribe();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'timeFormat', standalone: true })\nexport class TimeFormatPipe implements PipeTransform {\n transform(seconds: number | null | undefined): string {\n const val = typeof seconds === 'number' && isFinite(seconds) ? seconds : 0;\n const sec = Math.floor(val % 60).toString().padStart(2, '0');\n const min = Math.floor(val / 60).toString().padStart(2, '0');\n const hrs = Math.floor(val / 3600);\n if (hrs > 0) {\n const mm = Math.floor((val % 3600) / 60).toString().padStart(2, '0');\n return `${hrs}:${mm}:${sec}`;\n }\n return `${min}:${sec}`;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { WebplayerComponent } from './webplayer.component';\nimport { TimeFormatPipe } from './utils/time-format.pipe';\nimport { PlayerLoaderComponent } from './player-loader/player-loader.component';\nimport { PlyrPlayerComponent } from './players/plyr-player/plyr-player.component';\nimport { PandaPlayerComponent } from './players/panda-player/panda-player.component';\nimport { ScaleupPlayerComponent } from './players/scaleup-player/scaleup-player.component';\n\n@NgModule({\n imports: [\n CommonModule,\n WebplayerComponent,\n PlayerLoaderComponent,\n PlyrPlayerComponent,\n PandaPlayerComponent,\n ScaleupPlayerComponent,\n TimeFormatPipe,\n ],\n exports: [\n WebplayerComponent,\n PlayerLoaderComponent,\n PlyrPlayerComponent,\n PandaPlayerComponent,\n ScaleupPlayerComponent,\n TimeFormatPipe,\n ]\n})\nexport class WebplayerModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.WebplayerProgressService","i1.GlobalLoadingService","i1.WebplayerConfigService","i2.WebplayerProgressService"],"mappings":"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"}
1
+ {"version":3,"file":"edm-webplayer-webplayer-angular.mjs","sources":["../../../projects/webplayer-angular/src/webplayer.types.ts","../../../projects/webplayer-angular/src/webplayer-config.service.ts","../../../projects/webplayer-angular/src/progress.service.ts","../../../projects/webplayer-angular/src/players/plyr-player/plyr-player.component.ts","../../../projects/webplayer-angular/src/players/panda-player/panda-player.component.ts","../../../projects/webplayer-angular/src/players/scaleup-player/scaleup-player.component.ts","../../../projects/webplayer-angular/src/global.service.ts","../../../projects/webplayer-angular/src/player-loader/player-loader.component.ts","../../../projects/webplayer-angular/src/webplayer.component.ts","../../../projects/webplayer-angular/src/utils/time-format.pipe.ts","../../../projects/webplayer-angular/src/webplayer.module.ts","../../../projects/webplayer-angular/src/edm-webplayer-webplayer-angular.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport interface WebplayerConfig {\n video_host: 'youtube' | 'vimeo' | 'mp4' | 'hls' | 'panda' | 'scaleup';\n video_id: string | null;\n library_id?: string | number | null;\n video_external_id?: string | null;\n video_locale?: string | null;\n video_language?: string | null;\n captions_locale?: string | null;\n captions_language?: string | null;\n last_time?: number | null;\n last_percent?: number;\n embed?: string | null;\n watermark?: string;\n progress_url?: string;\n is_live?: boolean; // is the video live\n mirror?: boolean; // mirror the video\n autoplay?: boolean; // auto play the video\n locale?: string | null; // preferred locale/language (e.g. pt-BR)\n language?: string | null; // backwards compatibility alias\n disable_vimeo_recommendations?: boolean; // hide Vimeo suggested videos after playback\n vimeo_premium?: boolean; // set to true when the Vimeo account supports premium embeds\n ui?: {\n colors?: {\n bg?: string;\n alert?: string;\n 'font-bt'?: string;\n 'text-color'?: string;\n 'progress-view-off'?: string;\n };\n };\n}\n\nexport const WEPLAYER_CONFIG = new InjectionToken<WebplayerConfig>('webplayer.config');\n","import { Injectable, Inject, Optional } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { WebplayerConfig, WEPLAYER_CONFIG } from './webplayer.types';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WebplayerConfigService {\n private configSubject: BehaviorSubject<WebplayerConfig | null>;\n\n public get config$(): Observable<WebplayerConfig | null> {\n return this.configSubject.asObservable();\n }\n\n constructor(@Optional() @Inject(WEPLAYER_CONFIG) providedConfig: WebplayerConfig) {\n this.configSubject = new BehaviorSubject<WebplayerConfig | null>(providedConfig);\n }\n\n setConfig(config: Partial<WebplayerConfig>) {\n const currentConfig = this.configSubject.getValue();\n const newConfig = { ...(currentConfig || {}), ...config } as WebplayerConfig;\n this.configSubject.next(newConfig);\n }\n\n getConfig(): WebplayerConfig | null {\n return this.configSubject.getValue();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nexport interface WebplayerProgress {\n currentTime: number;\n duration: number;\n percent: number;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class WebplayerProgressService {\n\n public progress$ = new Subject<WebplayerProgress>();\n public ended$ = new Subject<void>();\n\n private key(videoKey: string) { return `webplayer:${videoKey}`; }\n\n saveProgress(videoKey: string, time: number) {\n try {\n localStorage.setItem(this.key(videoKey), String(Math.floor(time)));\n } catch {}\n }\n\n getProgress(videoKey: string): number {\n try {\n return Number(localStorage.getItem(this.key(videoKey)) || 0);\n } catch {\n return 0;\n }\n }\n}\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n ViewChild,\n Output,\n EventEmitter\n} from \"@angular/core\";\nimport { CommonModule, DOCUMENT } from '@angular/common';\nimport * as Plyr from 'plyr';\nimport \"plyr/dist/plyr.css\";\nimport Hls from \"hls.js\";\nimport { WebplayerConfig } from \"../../webplayer.types\";\nimport { WebplayerProgressService } from \"../../progress.service\";\n\n@Component({\n selector: \"app-plyr-player\",\n template: `<video #video playsinline></video>`,\n standalone: true,\n imports: [CommonModule],\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n height: 100%;\n position: relative;\n --plyr-color-main: var(--theme-alert, #19a6d9);\n --plyr-color-hover: var(--theme-alert, #2dbbff);\n --plyr-progress-buffer-background: var(--theme-progress-view-off, rgba(255, 255, 255, 0.25));\n --plyr-control-background: var(--theme-bg, rgba(0, 0, 0, 0.8));\n --plyr-control-color: var(--theme-text-color, #fff);\n --plyr-control-button-color: var(--theme-font-bt, #fff);\n }\n :host ::ng-deep .plyr__controls {\n color: var(--plyr-control-color) !important;\n transition: opacity 0.2s ease, transform 0.2s ease;\n }\n :host ::ng-deep .plyr__controls button {\n color: var(--plyr-control-color) !important;\n }\n :host ::ng-deep .plyr__progress__buffer {\n background-color: var(--plyr-progress-buffer-background) !important;\n }\n :host ::ng-deep .plyr,\n :host ::ng-deep .plyr__video-wrapper,\n :host ::ng-deep .plyr__video-embed,\n :host ::ng-deep .plyr__video-embed > iframe,\n :host ::ng-deep video {\n width: 100% !important;\n height: 100% !important;\n aspect-ratio: auto !important;\n top: 0 !important;\n left: 0 !important;\n }\n :host ::ng-deep .mirror {\n transform: scaleX(-1) !important;\n -webkit-transform: scaleX(-1) !important;\n }\n :host ::ng-deep .plyr--video .plyr__control.plyr__tab-focus,\n :host ::ng-deep .plyr--video .plyr__control:hover,\n :host ::ng-deep .plyr--video .plyr__control[aria-expanded=true] {\n background: var(--plyr-color-hover) !important;\n color: var(--plyr-control-button-color) !important;\n }\n\n :host ::ng-deep .plyr--full-ui input[type=range] {\n color: var(--plyr-color-main) !important;\n }\n\n :host ::ng-deep .plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]::before {\n background: var(--plyr-color-main) !important;\n }\n\n :host ::ng-deep .plyr__menu__container {\n background: var(--plyr-control-background) !important;\n z-index: 7 !important;\n }\n\n :host ::ng-deep .plyr--auto-hide-controls .plyr__controls {\n opacity: 0 !important;\n pointer-events: none !important;\n transform: translateY(12px);\n }\n\n :host ::ng-deep .ytp-more-videos-view .ytp-suggestions{\n pointer-events: none !important;\n }\n `,\n ],\n})\nexport class PlyrPlayerComponent\n implements AfterViewInit, OnDestroy, OnChanges, OnInit\n{\n @ViewChild(\"video\", { static: true }) videoRef!: ElementRef<HTMLVideoElement>;\n @Input() config!: WebplayerConfig;\n @Output() ready = new EventEmitter<void>();\n\n private plyr!: any;\n private hls?: Hls;\n private controlsVisibilityCleanup?: () => void;\n private recommendationBlocker?: HTMLElement | null;\n private recommendationBlockerActiveZone?: HTMLElement | null;\n private topClickBlocker?: HTMLElement | null;\n private gestureOverlay?: HTMLElement | null;\n private menuObserver?: MutationObserver;\n private playbackEnded = false;\n private overlayBlockAll = false;\n private endedPosterOverlay?: HTMLElement | null;\n private fullscreenCleanup?: () => void;\n private interactionUnmuteCleanup?: () => void;\n private pendingGesturePlay = false;\n private readonly onResize = () => {\n this.updateRecommendationBlockerSafeZone();\n this.updateGestureOverlaySafeZone();\n };\n private readonly onTopBlockerPointerDown = (event: Event) => {\n try { event.preventDefault(); } catch {}\n event.stopPropagation();\n };\n private readonly onTopBlockerClick = () => {\n this.togglePlayback();\n };\n private readonly onRecommendationBlockerClick = (event?: Event) => {\n if (event) {\n try { event.preventDefault(); } catch {}\n try { event.stopPropagation(); } catch {}\n }\n this.togglePlayback();\n };\n private readonly controlsSafeZonePxDesktop = 96;\n private readonly controlsSafeZonePxTouch = 144;\n\n constructor(\n private progressService: WebplayerProgressService,\n @Inject(DOCUMENT) private document: Document\n ) {}\n\n ngOnInit() {\n console.log(this.config);\n if (this.config?.ui?.colors) {\n this.applyTheme(this.config.ui.colors);\n }\n }\n\n private getControlsSafeZone(): number {\n const controls = (this.plyr?.elements?.controls ?? null) as HTMLElement | null;\n const menuHeight = this.getOpenMenuHeight();\n const baseSafeZone = this.isTouchDevice() ? this.controlsSafeZonePxTouch : this.controlsSafeZonePxDesktop;\n if (!controls) {\n return Math.max(baseSafeZone, menuHeight + 5);\n }\n let controlsHeight = 0;\n try {\n const rect = controls.getBoundingClientRect?.();\n if (rect && rect.height) {\n controlsHeight = rect.height;\n }\n } catch {}\n if (!controlsHeight) {\n controlsHeight = controls.offsetHeight || controls.clientHeight || 0;\n }\n return Math.max(baseSafeZone, Math.ceil(controlsHeight + menuHeight + 24));\n }\n\n private getOverlaySafeZone(): number {\n const host = this.config?.video_host;\n if (\n this.overlayBlockAll &&\n (host === 'youtube' || host === 'vimeo')\n ) {\n return 0;\n }\n return this.getControlsSafeZone();\n }\n\n private getOpenMenuHeight(): number {\n const container = this.plyr?.elements?.container as HTMLElement | undefined;\n if (!container) return 0;\n const menu = container.querySelector('.plyr__menu__container[aria-hidden=\"false\"], .plyr__menu__container:not([aria-hidden])') as HTMLElement | null;\n if (!menu) return 0;\n try {\n const rect = menu.getBoundingClientRect?.();\n if (rect && rect.height) return Math.ceil(rect.height);\n } catch {}\n const fallback = menu.offsetHeight || menu.clientHeight || 0;\n return fallback;\n }\n\n ngAfterViewInit() {\n this.setupPlayer();\n window.addEventListener('message', this.onCastMessage);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes[\"config\"] && this.plyr) {\n this.setupPlayer();\n }\n }\n\n private applyTheme(colors: { [key: string]: string }) {\n const STYLE_ID = 'webplayer-theme-vars';\n let styleEl = this.document.getElementById(STYLE_ID) as HTMLStyleElement | null;\n if (!styleEl) {\n styleEl = this.document.createElement('style');\n styleEl.id = STYLE_ID;\n this.document.head.appendChild(styleEl);\n }\n\n const rootStyle = this.document.documentElement.style;\n const allPairs: Array<[string, string]> = [];\n\n for (const key in colors) {\n if (Object.prototype.hasOwnProperty.call(colors, key)) {\n const cssVarName = `--theme-${key.replace('progresss-', 'progress-')}`;\n const cssVarValue = String(colors[key]);\n allPairs.push([cssVarName, cssVarValue]);\n try { rootStyle.setProperty(cssVarName, cssVarValue); } catch {}\n }\n }\n\n const cssRule = `:root{\n${allPairs.map(([n,v]) => ` ${n}: ${v};`).join('\\n')}\n}`;\n styleEl.textContent = cssRule;\n }\n\n private normalizeLocaleCandidate(value: unknown): string | null {\n if (value === null || value === undefined) {\n return null;\n }\n const candidate = String(value).trim();\n if (!candidate) {\n return null;\n }\n return candidate.replace(/_/g, '-');\n }\n\n private resolveLocale(): string {\n const candidates: unknown[] = [\n (this.config as any)?.video_locale,\n (this.config as any)?.video_language,\n this.config?.locale,\n this.config?.language,\n (this.config as any)?.content_locale,\n (this.config as any)?.content_language,\n ];\n for (const candidate of candidates) {\n const normalized = this.normalizeLocaleCandidate(candidate);\n if (normalized) {\n return normalized;\n }\n }\n return 'pt-BR';\n }\n\n private resolveCaptionsLanguage(locale: string): string | null {\n const explicit = this.normalizeLocaleCandidate(\n (this.config as any)?.captions_locale ??\n (this.config as any)?.captions_language ??\n (this.config as any)?.subtitle_locale ??\n (this.config as any)?.subtitle_language ??\n null\n );\n const baseLocale = explicit || locale;\n if (!baseLocale) return null;\n const code = baseLocale.split('-')[0]?.trim();\n return code ? code.toLowerCase() : null;\n }\n\n private shouldHideVimeoRecommendations(): boolean {\n const flag = (this.config as any)?.disable_vimeo_recommendations;\n return flag !== false;\n }\n\n private clearVimeoEndedState() {\n if (this.config.video_host !== \"vimeo\") return;\n const container = this.plyr?.elements?.container as HTMLElement | undefined;\n container?.classList.remove(\"plyr--vimeo-ended\");\n this.toggleRecommendationBlocker(false);\n }\n\n private preventVimeoRecommendations() {\n if (this.config.video_host !== \"vimeo\") return;\n if (!this.shouldHideVimeoRecommendations()) return;\n\n try {\n this.plyr?.stop();\n } catch {}\n\n const embed = (this.plyr as any)?.embed;\n if (embed && typeof embed.unload === \"function\") {\n try {\n embed.unload().catch(() => {});\n } catch {}\n }\n\n const container = this.plyr?.elements?.container as HTMLElement | undefined;\n container?.classList.add(\"plyr--vimeo-ended\");\n this.toggleRecommendationBlocker(true);\n }\n\n private getVideoWrapper(): HTMLElement | null {\n const container = this.plyr?.elements?.container as HTMLElement | undefined;\n if (!container) return null;\n const wrapper =\n (this.plyr?.elements as any)?.wrapper ||\n container.querySelector('.plyr__video-wrapper');\n return (wrapper as HTMLElement) || null;\n }\n\n private ensureRecommendationBlocker(): HTMLElement | null {\n if (this.recommendationBlocker && this.recommendationBlocker.isConnected) {\n return this.recommendationBlocker;\n }\n const wrapper = this.getVideoWrapper();\n if (!wrapper) return null;\n\n const blocker = this.document.createElement('div');\n blocker.className = 'plyr-recommendation-blocker';\n blocker.style.position = 'absolute';\n blocker.style.top = '0';\n blocker.style.left = '0';\n blocker.style.width = '100%';\n blocker.style.height = '100%';\n blocker.style.zIndex = '11';\n blocker.style.pointerEvents = 'none';\n blocker.style.display = 'none';\n blocker.style.background = 'rgba(0,0,0,0)';\n blocker.style.cursor = 'pointer';\n\n const activeZone = this.document.createElement('div');\n activeZone.className = 'plyr-recommendation-blocker__zone';\n activeZone.style.position = 'absolute';\n activeZone.style.top = '0';\n activeZone.style.left = '0';\n activeZone.style.width = '100%';\n activeZone.style.bottom = `20px`;\n activeZone.style.pointerEvents = 'auto';\n activeZone.style.background = 'rgba(0,0,0,0)';\n activeZone.style.cursor = 'pointer';\n activeZone.addEventListener('pointerdown', this.onTopBlockerPointerDown);\n activeZone.addEventListener('click', this.onRecommendationBlockerClick);\n blocker.appendChild(activeZone);\n\n wrapper.appendChild(blocker);\n this.recommendationBlocker = blocker;\n this.recommendationBlockerActiveZone = activeZone;\n this.updateRecommendationBlockerSafeZone();\n return blocker;\n }\n\n private toggleRecommendationBlocker(active: boolean) {\n if (this.config.video_host !== \"youtube\" && this.config.video_host !== \"vimeo\") {\n return;\n }\n const blocker = this.ensureRecommendationBlocker();\n if (!blocker) return;\n const activeZone = this.recommendationBlockerActiveZone;\n if (active) {\n blocker.style.display = 'block';\n blocker.style.pointerEvents = 'none';\n if (activeZone) {\n activeZone.style.pointerEvents = 'auto';\n }\n this.updateRecommendationBlockerSafeZone();\n } else {\n blocker.style.display = 'none';\n blocker.style.pointerEvents = 'none';\n if (activeZone) {\n activeZone.style.pointerEvents = 'none';\n }\n }\n this.updateTopClickBlockerSafeZone();\n }\n\n private updateRecommendationBlockerSafeZone() {\n const overlaySafeZone = this.getOverlaySafeZone();\n if (this.recommendationBlockerActiveZone) {\n this.recommendationBlockerActiveZone.style.bottom = `${overlaySafeZone}px`;\n }\n this.updateTopClickBlockerSafeZone(overlaySafeZone);\n this.updateGestureOverlaySafeZone(this.getControlsSafeZone());\n }\n\n private updateTopClickBlockerSafeZone(precomputed?: number) {\n if (!this.topClickBlocker) return;\n const safeZoneRaw = typeof precomputed === 'number' ? precomputed : this.getOverlaySafeZone();\n const safeZone = Math.max(0, safeZoneRaw);\n this.topClickBlocker.style.bottom = `${safeZone}px`;\n }\n\n private updateGestureOverlaySafeZone(precomputed?: number) {\n if (!this.gestureOverlay) return;\n const safeZoneRaw = typeof precomputed === 'number' ? precomputed : this.getControlsSafeZone();\n const safeZone = Math.max(0, safeZoneRaw);\n this.gestureOverlay.style.bottom = `${safeZone}px`;\n }\n\n private togglePlayback(force?: boolean) {\n if (!this.plyr) return;\n const hasTogglePlay = typeof this.plyr.togglePlay === 'function';\n const ended = this.playbackEnded;\n if (hasTogglePlay && typeof force === 'undefined') {\n try {\n const result = this.plyr.togglePlay();\n if (result && typeof result.catch === 'function') {\n result.catch(() => {});\n }\n return;\n } catch {}\n }\n\n const shouldPlay =\n typeof force === 'boolean' ? !!force : !this.plyr.playing;\n\n if (shouldPlay) {\n if (ended) {\n try {\n if (typeof this.plyr.restart === 'function') {\n this.plyr.restart();\n } else {\n this.plyr.currentTime = 0;\n }\n } catch {}\n }\n this.playbackEnded = false;\n this.overlayBlockAll = false;\n this.updateRecommendationBlockerSafeZone();\n this.hideGestureOverlay();\n try {\n const result = this.plyr.play?.();\n if (result && typeof result.catch === 'function') {\n result.catch(() => {});\n }\n } catch {}\n return;\n }\n\n this.overlayBlockAll = true;\n this.updateRecommendationBlockerSafeZone();\n try {\n this.plyr.pause?.();\n } catch {}\n }\n\n private ensureTopClickBlocker() {\n if (this.config.video_host !== \"youtube\" && this.config.video_host !== \"vimeo\") {\n return;\n }\n const wrapper = this.getVideoWrapper();\n if (!wrapper) return;\n if (this.topClickBlocker && this.topClickBlocker.isConnected) {\n return;\n }\n const blocker = this.document.createElement('div');\n blocker.className = 'plyr-top-click-blocker';\n blocker.style.position = 'absolute';\n blocker.style.top = '0';\n blocker.style.left = '0';\n blocker.style.right = '0';\n blocker.style.width = '100%';\n blocker.style.zIndex = '12';\n blocker.style.pointerEvents = 'auto';\n blocker.style.background = 'rgba(0,0,0,0)';\n blocker.style.touchAction = 'none';\n blocker.style.cursor = 'pointer';\n blocker.addEventListener('pointerdown', this.onTopBlockerPointerDown);\n blocker.addEventListener('click', this.onTopBlockerClick);\n wrapper.appendChild(blocker);\n this.topClickBlocker = blocker;\n this.updateTopClickBlockerSafeZone();\n }\n\n private observeMenuChanges() {\n this.menuObserver?.disconnect();\n const container = this.plyr?.elements?.container as HTMLElement | undefined;\n if (!container) {\n this.menuObserver = undefined;\n return;\n }\n const observer = new MutationObserver(() => {\n this.updateRecommendationBlockerSafeZone();\n });\n observer.observe(container, {\n subtree: true,\n attributes: true,\n attributeFilter: ['aria-hidden', 'class', 'style'],\n });\n this.menuObserver = observer;\n }\n\n private isIOSDevice(): boolean {\n if (typeof navigator === 'undefined') return false;\n const ua = navigator.userAgent || '';\n const iOS = /iPad|iPhone|iPod/.test(ua);\n const iPadOS = navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1;\n return iOS || iPadOS;\n }\n\n private isAndroidDevice(): boolean {\n if (typeof navigator === 'undefined') return false;\n return /Android/i.test(navigator.userAgent || '');\n }\n\n private isTouchDevice(): boolean {\n if (typeof window === 'undefined') {\n return false;\n }\n if (typeof navigator !== 'undefined' && navigator.maxTouchPoints > 0) {\n return true;\n }\n if (window.matchMedia) {\n try {\n if (window.matchMedia('(pointer: coarse)').matches) {\n return true;\n }\n } catch {}\n }\n return 'ontouchstart' in window;\n }\n\n private isIframeProvider(): boolean {\n return this.config?.video_host === 'youtube' || this.config?.video_host === 'vimeo';\n }\n\n private shouldAutoplay(): boolean {\n return !!(this.config?.autoplay || this.config?.is_live);\n }\n\n private requiresMutedAutoplay(): boolean {\n return this.isIOSDevice();\n }\n\n private setPlayerMutedState(\n muted: boolean,\n volume = 1,\n target?: HTMLVideoElement | null\n ) {\n if (this.plyr) {\n try { this.plyr.muted = muted; } catch {}\n if (!muted) {\n try { this.plyr.volume = volume; } catch {}\n }\n }\n const media = target ?? this.videoRef?.nativeElement ?? null;\n if (media) {\n try { media.muted = muted; } catch {}\n if (!muted && typeof media.volume === 'number') {\n try { media.volume = volume; } catch {}\n }\n }\n }\n\n private clearAutoplayUnlockListener() {\n if (this.interactionUnmuteCleanup) {\n try {\n this.interactionUnmuteCleanup();\n } catch {}\n this.interactionUnmuteCleanup = undefined;\n }\n }\n\n private ensureAutoplayUnlockListener() {\n if (\n typeof window === 'undefined' ||\n this.interactionUnmuteCleanup ||\n !this.shouldAutoplay()\n ) {\n return;\n }\n const capture = true;\n const handler = () => {\n this.setPlayerMutedState(false);\n try { this.plyr?.play(); } catch {}\n this.clearAutoplayUnlockListener();\n };\n window.addEventListener('touchend', handler, capture);\n window.addEventListener('pointerup', handler, capture);\n window.addEventListener('click', handler, capture);\n this.interactionUnmuteCleanup = () => {\n window.removeEventListener('touchend', handler, capture);\n window.removeEventListener('pointerup', handler, capture);\n window.removeEventListener('click', handler, capture);\n this.interactionUnmuteCleanup = undefined;\n };\n }\n\n private scheduleUserInteractionUnmute(video?: HTMLVideoElement | null) {\n this.unmuteAfterDelay(video || undefined);\n this.ensureAutoplayUnlockListener();\n }\n\n private applyStartTimeToCurrentSource(\n start: number,\n opts: { video?: HTMLVideoElement | null; attempts?: number; delayMs?: number } = {}\n ) {\n if (!this.plyr || !(start > 0)) {\n return;\n }\n const video = opts.video ?? this.videoRef?.nativeElement ?? null;\n let attempts = Math.max(1, opts.attempts ?? 6);\n const delayMs = opts.delayMs ?? 250;\n const tolerance = 0.35;\n\n const scheduleRetry = () => {\n attempts -= 1;\n if (attempts > 0) {\n setTimeout(trySeek, delayMs);\n }\n };\n\n const verifyAfterAttempt = () => {\n const current = this.plyr?.currentTime || 0;\n if (Math.abs(current - start) <= tolerance) {\n attempts = 0;\n return;\n }\n scheduleRetry();\n };\n\n const trySeek = () => {\n if (!this.plyr) return;\n let maybePromise: Promise<unknown> | null = null;\n try {\n const result = this.seekUsingHostAPI(start, video);\n if (result && typeof (result as Promise<unknown>).then === 'function') {\n maybePromise = result as Promise<unknown>;\n }\n } catch {\n scheduleRetry();\n return;\n }\n\n if (maybePromise) {\n maybePromise\n .then(() => verifyAfterAttempt())\n .catch(() => scheduleRetry());\n return;\n }\n verifyAfterAttempt();\n };\n\n trySeek();\n }\n\n private seekUsingHostAPI(\n target: number,\n video?: HTMLVideoElement | null\n ): Promise<unknown> | null {\n if (!Number.isFinite(target) || target < 0) {\n return null;\n }\n if (this.config.video_host === 'vimeo') {\n const embed = (this.plyr as any)?.embed;\n if (embed && typeof embed.setCurrentTime === 'function') {\n try {\n return embed.setCurrentTime(target);\n } catch {\n return null;\n }\n }\n }\n if (video) {\n try { video.currentTime = target; } catch {}\n }\n try { this.plyr.currentTime = target; } catch {}\n return null;\n }\n\n private ensureGestureOverlay(): HTMLElement | null {\n if (this.gestureOverlay && this.gestureOverlay.isConnected) {\n return this.gestureOverlay;\n }\n const wrapper = this.getVideoWrapper();\n if (!wrapper) {\n return null;\n }\n const overlay = this.document.createElement('button');\n overlay.type = 'button';\n overlay.className = 'plyr-gesture-overlay';\n overlay.style.position = 'absolute';\n overlay.style.top = '0';\n overlay.style.left = '0';\n overlay.style.right = '0';\n overlay.style.bottom = '0';\n overlay.style.width = '100%';\n overlay.style.height = '100%';\n overlay.style.display = 'none';\n overlay.style.alignItems = 'center';\n overlay.style.justifyContent = 'center';\n overlay.style.padding = '0 16px';\n overlay.style.background = 'rgba(0,0,0,0.35)';\n overlay.style.backdropFilter = 'blur(1px)';\n overlay.style.border = '0';\n overlay.style.zIndex = '16';\n overlay.style.color = 'var(--theme-text-color, #fff)';\n overlay.style.fontSize = '14px';\n overlay.style.fontWeight = '600';\n overlay.style.textAlign = 'center';\n overlay.style.cursor = 'pointer';\n overlay.style.touchAction = 'manipulation';\n overlay.style.pointerEvents = 'none';\n overlay.textContent = 'Toque para reproduzir';\n wrapper.appendChild(overlay);\n this.gestureOverlay = overlay;\n this.updateGestureOverlaySafeZone();\n return overlay;\n }\n\n private hideGestureOverlay() {\n if (this.gestureOverlay) {\n this.gestureOverlay.style.display = 'none';\n this.gestureOverlay.style.pointerEvents = 'none';\n }\n this.pendingGesturePlay = false;\n }\n\n private requestGestureToPlay(video?: HTMLVideoElement | null) {\n if (!this.isIframeProvider()) {\n return;\n }\n if (this.pendingGesturePlay) {\n return;\n }\n const overlay = this.ensureGestureOverlay();\n if (!overlay) {\n return;\n }\n this.pendingGesturePlay = true;\n const media = video ?? this.videoRef?.nativeElement ?? null;\n const onInteraction = (event: Event) => {\n try { event.preventDefault(); } catch {}\n try { event.stopPropagation(); } catch {}\n overlay.removeEventListener('click', onInteraction);\n overlay.removeEventListener('touchend', onInteraction);\n overlay.style.display = 'none';\n this.pendingGesturePlay = false;\n this.clearAutoplayUnlockListener();\n this.setPlayerMutedState(this.requiresMutedAutoplay(), 1, media);\n try {\n const result = this.plyr?.play();\n if (result && typeof result.catch === 'function') {\n result.catch(() => {\n this.requestGestureToPlay(media);\n });\n }\n } catch {\n this.requestGestureToPlay(media);\n }\n };\n overlay.addEventListener('click', onInteraction, { once: true });\n overlay.addEventListener('touchend', onInteraction, { once: true });\n this.updateGestureOverlaySafeZone();\n overlay.style.pointerEvents = 'auto';\n overlay.style.display = 'flex';\n }\n\n private shouldShowGestureOverlayForError(error: unknown): boolean {\n if (!this.isIframeProvider()) {\n return false;\n }\n if (!error) {\n return true;\n }\n const err = error as { name?: unknown; message?: unknown };\n const name = typeof err.name === 'string' ? err.name.toLowerCase() : '';\n const message = typeof err.message === 'string' ? err.message.toLowerCase() : '';\n if (!name && !message) {\n return true;\n }\n return (\n name.includes('notallowed') ||\n name.includes('notallowederror') ||\n name.includes('gesture') ||\n message.includes('gesture') ||\n message.includes('user interaction') ||\n message.includes('user activation') ||\n message.includes('without user') ||\n message.includes('play() failed')\n );\n }\n\n private startAutoplayFlow(video?: HTMLVideoElement | null) {\n if (!this.shouldAutoplay() || !this.plyr) return;\n const media = video ?? this.videoRef?.nativeElement ?? null;\n const tryPlay = (muted: boolean) => {\n this.setPlayerMutedState(muted, 1, media);\n let playResult: Promise<void> | void;\n try {\n playResult = this.plyr.play();\n } catch (error) {\n if (!muted) {\n tryPlay(true);\n return;\n }\n if (media) {\n try {\n const nativePlay = media.play();\n if (nativePlay && typeof nativePlay.catch === 'function') {\n nativePlay.catch(() => {});\n }\n } catch {}\n }\n this.scheduleUserInteractionUnmute(media);\n if (this.shouldShowGestureOverlayForError(error)) {\n this.requestGestureToPlay(media);\n }\n return;\n }\n\n if (playResult && typeof (playResult as Promise<void>).catch === 'function') {\n (playResult as Promise<void>).catch((error) => {\n if (!muted) {\n tryPlay(true);\n return;\n }\n if (media) {\n try {\n const nativePlay = media.play();\n if (nativePlay && typeof nativePlay.catch === 'function') {\n nativePlay.catch(() => {});\n }\n } catch {}\n }\n this.scheduleUserInteractionUnmute(media);\n if (this.shouldShowGestureOverlayForError(error)) {\n this.requestGestureToPlay(media);\n }\n });\n return;\n }\n\n if (muted) {\n this.scheduleUserInteractionUnmute(media);\n } else {\n this.clearAutoplayUnlockListener();\n }\n };\n\n if (this.requiresMutedAutoplay()) {\n tryPlay(true);\n } else {\n tryPlay(false);\n }\n }\n\n private setupControlsVisibility() {\n const container = this.plyr?.elements?.container as HTMLElement | undefined;\n if (!container) {\n this.controlsVisibilityCleanup = undefined;\n return;\n }\n\n if (this.isTouchDevice()) {\n const HIDE_DELAY = 2000;\n let hideTimeout: ReturnType<typeof setTimeout> | null = null;\n\n const clearHideTimeout = () => {\n if (hideTimeout) {\n clearTimeout(hideTimeout);\n hideTimeout = null;\n }\n };\n\n const showControls = () => {\n container.classList.remove('plyr--auto-hide-controls');\n };\n\n const hideControls = () => {\n if (this.plyr?.playing) {\n container.classList.add('plyr--auto-hide-controls');\n }\n };\n\n const scheduleHide = () => {\n clearHideTimeout();\n if (!this.plyr?.playing) return;\n hideTimeout = setTimeout(() => hideControls(), HIDE_DELAY);\n };\n\n const onPlay = () => {\n showControls();\n scheduleHide();\n };\n const onPause = () => {\n clearHideTimeout();\n showControls();\n };\n const onEnded = () => {\n clearHideTimeout();\n showControls();\n };\n const onUserInteraction = () => {\n showControls();\n scheduleHide();\n };\n\n this.plyr?.on?.('play', onPlay);\n this.plyr?.on?.('pause', onPause);\n this.plyr?.on?.('ended', onEnded);\n container.addEventListener('touchstart', onUserInteraction);\n container.addEventListener('click', onUserInteraction);\n\n this.controlsVisibilityCleanup = () => {\n clearHideTimeout();\n this.plyr?.off?.('play', onPlay);\n this.plyr?.off?.('pause', onPause);\n this.plyr?.off?.('ended', onEnded);\n container.removeEventListener('touchstart', onUserInteraction);\n container.removeEventListener('click', onUserInteraction);\n container.classList.remove('plyr--auto-hide-controls');\n };\n\n onPlay();\n return;\n }\n\n let hovering = false;\n const toggleClass = () => {\n const playing = !!this.plyr?.playing;\n if (playing && !hovering) {\n container.classList.add('plyr--auto-hide-controls');\n } else {\n container.classList.remove('plyr--auto-hide-controls');\n }\n };\n\n const onPlay = () => toggleClass();\n const onPause = () => toggleClass();\n const onEnded = () => toggleClass();\n const onMouseEnter = () => {\n hovering = true;\n toggleClass();\n };\n const onMouseLeave = () => {\n hovering = false;\n toggleClass();\n };\n const onFocusIn = () => {\n hovering = true;\n toggleClass();\n };\n const onFocusOut = () => {\n hovering = container.matches(':hover');\n toggleClass();\n };\n\n this.plyr?.on?.('play', onPlay);\n this.plyr?.on?.('pause', onPause);\n this.plyr?.on?.('ended', onEnded);\n container.addEventListener('mouseenter', onMouseEnter);\n container.addEventListener('mouseleave', onMouseLeave);\n container.addEventListener('focusin', onFocusIn);\n container.addEventListener('focusout', onFocusOut);\n\n toggleClass();\n\n this.controlsVisibilityCleanup = () => {\n this.plyr?.off?.('play', onPlay);\n this.plyr?.off?.('pause', onPause);\n this.plyr?.off?.('ended', onEnded);\n container.removeEventListener('mouseenter', onMouseEnter);\n container.removeEventListener('mouseleave', onMouseLeave);\n container.removeEventListener('focusin', onFocusIn);\n container.removeEventListener('focusout', onFocusOut);\n container.classList.remove('plyr--auto-hide-controls');\n };\n }\n\n private bindFullscreenBehavior() {\n this.fullscreenCleanup?.();\n this.fullscreenCleanup = undefined;\n if (!this.plyr) return;\n if (this.isIOSDevice() || !this.isAndroidDevice()) {\n return;\n }\n if (typeof window === 'undefined' || typeof screen === 'undefined') {\n return;\n }\n const orientation = (screen as Screen & { orientation?: ScreenOrientation | any }).orientation;\n const canLockOrientation =\n orientation && typeof orientation.lock === 'function' && typeof orientation.unlock === 'function';\n if (!canLockOrientation) {\n return;\n }\n\n const isPortrait = () => {\n if (typeof window.matchMedia === 'function') {\n try {\n return window.matchMedia('(orientation: portrait)').matches;\n } catch {}\n }\n return (window.innerHeight || 0) >= (window.innerWidth || 0);\n };\n\n let orientationLocked = false;\n\n const lockLandscape = async () => {\n if (!orientation) return;\n try {\n await orientation.lock('landscape');\n orientationLocked = true;\n } catch {}\n };\n\n const unlockOrientation = () => {\n if (orientationLocked && orientation) {\n try {\n orientation.unlock();\n } catch {}\n }\n orientationLocked = false;\n };\n\n const onEnterFullscreen = () => {\n if (isPortrait()) {\n lockLandscape();\n }\n };\n\n const onExitFullscreen = () => {\n unlockOrientation();\n };\n\n const onOrientationChange = () => {\n if (!this.plyr?.fullscreen?.active) {\n unlockOrientation();\n }\n };\n\n this.plyr.on('enterfullscreen', onEnterFullscreen as any);\n this.plyr.on('exitfullscreen', onExitFullscreen as any);\n window.addEventListener('orientationchange', onOrientationChange);\n\n this.fullscreenCleanup = () => {\n unlockOrientation();\n this.plyr?.off('enterfullscreen', onEnterFullscreen as any);\n this.plyr?.off('exitfullscreen', onExitFullscreen as any);\n window.removeEventListener('orientationchange', onOrientationChange);\n };\n }\n\n private setupPlayer() {\n if (!this.videoRef) return;\n\n this.hls?.destroy();\n this.controlsVisibilityCleanup?.();\n this.controlsVisibilityCleanup = undefined;\n this.fullscreenCleanup?.();\n this.fullscreenCleanup = undefined;\n this.plyr?.destroy();\n this.clearAutoplayUnlockListener();\n this.hideGestureOverlay();\n this.recommendationBlocker = null;\n const speedOptions = [1, 1.25, 1.5, 2];\n const locale = this.resolveLocale();\n const captionsLanguage = this.resolveCaptionsLanguage(locale) ?? 'pt';\n const hideVimeoRecommendations = this.shouldHideVimeoRecommendations();\n const vimeoPremium = Boolean((this.config as any)?.vimeo_premium);\n const shouldAutoplay = this.shouldAutoplay();\n const startMuted = this.requiresMutedAutoplay();\n try { this.videoRef.nativeElement.muted = startMuted; } catch {}\n try { (this.videoRef.nativeElement as any).playsInline = true; } catch {}\n try { this.videoRef.nativeElement.autoplay = shouldAutoplay; } catch {}\n\n const vimeoOptions: any = {\n byline: false,\n portrait: false,\n title: false,\n playsinline: false,\n speed: true,\n dnt: 1,\n pip: false,\n quality: \"auto\",\n transparent: false,\n };\n\n vimeoOptions.autoplay = shouldAutoplay;\n vimeoOptions.muted = startMuted;\n vimeoOptions.playsinline = true;\n\n if (hideVimeoRecommendations) {\n vimeoOptions.controls = false;\n vimeoOptions.sidedock = 0;\n }\n\n if (vimeoPremium) {\n vimeoOptions.premium = true;\n }\n\n const youtubePlayerVars: Record<string, any> = {\n rel: 0,\n modestbranding: 1,\n noCookie: true,\n };\n\n youtubePlayerVars.playerVars = {\n hl: locale,\n cc_lang_pref: captionsLanguage || locale.split('-')[0]?.toLowerCase(),\n autoplay: shouldAutoplay ? 1 : 0,\n mute: startMuted ? 1 : 0,\n playsinline: 1,\n };\n if (captionsLanguage) {\n youtubePlayerVars.playerVars.cc_load_policy = 1;\n }\n\n const plyrOptions: any = {\n controls: [\n \"play-large\",\n \"play\",\n \"progress\",\n \"current-time\",\n \"duration\",\n \"mute\",\n \"volume\",\n \"captions\",\n \"settings\",\n \"pip\",\n \"airplay\",\n \"fullscreen\",\n ],\n youtube: youtubePlayerVars,\n vimeo: vimeoOptions,\n fullscreen: {\n enabled: true,\n fallback: true,\n iosNative: true,\n container: null,\n },\n i18n: {\n speed: 'Velocidade',\n },\n speed: {\n selected: 1,\n options: speedOptions\n },\n clickToPlay: true,\n hideControls: false,\n keyboard: { focused: true, global: false },\n autoplay: shouldAutoplay,\n muted: startMuted,\n };\n\n plyrOptions.hl = locale;\n if (captionsLanguage) {\n plyrOptions.captions = { language: captionsLanguage };\n }\n\n this.plyr = new (Plyr as any).default(this.videoRef.nativeElement, plyrOptions);\n this.bindFullscreenBehavior();\n\n this.setupControlsVisibility();\n this.ensureTopClickBlocker();\n this.observeMenuChanges();\n this.playbackEnded = false;\n this.overlayBlockAll = false;\n window.removeEventListener('resize', this.onResize);\n window.addEventListener('resize', this.onResize);\n this.bindProgressEvents();\n this.loadSource(this.videoRef.nativeElement).then(() => {\n this.setupStartTime();\n });\n\n // Dispara o evento ready quando o player estiver pronto\n this.plyr.on(\"ready\", () => {\n this.ready.emit();\n });\n }\n\n private setupStartTime() {\n const apply = () => {\n const dur = this.plyr.duration || 0;\n const start = this.resolveStartTime(this.config.last_time, this.config.last_percent, dur);\n this.applyStartTimeToCurrentSource(start);\n this.plyr.off(\"ready\", apply as any);\n };\n this.plyr.on(\"ready\", apply as any);\n }\n\n private bindProgressEvents() {\n const THROTTLE_MS = 300;\n let lastEmit = 0;\n\n const emitProgress = () => {\n const t = this.plyr.currentTime || 0;\n const d = this.plyr.duration || 0;\n const p = d > 0 ? +((t / d) * 100).toFixed(2) : 0;\n this.progressService.progress$.next({ currentTime: t, duration: d, percent: p });\n };\n\n const onTimeUpdate = () => {\n const now = performance.now();\n if (now - lastEmit >= THROTTLE_MS) {\n lastEmit = now;\n emitProgress();\n }\n parent.postMessage('currentTime:' + (this.plyr.currentTime || 0), \"*\");\n console.log('event: current_time ' + (this.plyr.currentTime || 0));\n this.postCastEvent({\n event: 'current_time',\n currentTime: this.plyr.currentTime || 0,\n duration: this.plyr.duration || 0,\n });\n };\n this.plyr?.on?.(\"play\", () => {\n this.hideGestureOverlay();\n this.clearVimeoEndedState();\n this.playbackEnded = false;\n this.overlayBlockAll = false;\n this.updateRecommendationBlockerSafeZone();\n this.toggleRecommendationBlocker(false);\n parent.postMessage('playing_video', \"*\");\n console.log('event: playing_video');\n this.postCastEvent({ event: 'play', currentTime: this.plyr.currentTime || 0 });\n\n });\n this.plyr?.on?.(\"timeupdate\", onTimeUpdate);\n this.plyr?.on?.(\"pause\", () => {\n emitProgress();\n console.log('event: pause')\n parent.postMessage('paused_video', \"*\");\n this.postCastEvent({ event: 'pause', currentTime: this.plyr.currentTime || 0 });\n this.overlayBlockAll = true;\n this.updateRecommendationBlockerSafeZone();\n this.toggleRecommendationBlocker(true);\n });\n this.plyr?.on?.(\"ended\", () => {\n emitProgress();\n this.playbackEnded = true;\n this.overlayBlockAll = true;\n this.updateRecommendationBlockerSafeZone();\n console.log('event: ended');\n parent.postMessage('event: ended', \"*\");\n this.postCastEvent({ event: 'ended', currentTime: this.plyr.currentTime || 0 });\n this.progressService.ended$.next();\n this.preventVimeoRecommendations();\n this.toggleRecommendationBlocker(true);\n });\n }\n\n private unmuteAfterDelay(\n video?: HTMLVideoElement | null,\n delayMs = 2000,\n volume = 1\n ) {\n if (!this.shouldAutoplay()) return;\n setTimeout(() => {\n try {\n if (this.plyr) {\n this.plyr.muted = false;\n this.plyr.volume = volume;\n }\n } catch {}\n try {\n if (video) {\n video.muted = false;\n if (typeof video.volume === \"number\") video.volume = volume;\n }\n } catch {}\n }, delayMs);\n }\n\n private resetPlaybackRate(video?: HTMLVideoElement) {\n try {\n if (this.plyr && typeof this.plyr.speed !== 'undefined') {\n this.plyr.speed = 1;\n }\n } catch {}\n const media = video ?? this.videoRef?.nativeElement ?? null;\n if (media) {\n try { media.playbackRate = 1; } catch {}\n try {\n if ((media as any).defaultPlaybackRate !== undefined) {\n (media as any).defaultPlaybackRate = 1;\n }\n } catch {}\n }\n }\n\n private loadSource(\n video: HTMLVideoElement,\n ): Promise<void> {\n\n return new Promise((resolve) => {\n if (!this.config) {\n return resolve();\n }\n\n if (this.hls) {\n this.hls.destroy();\n this.hls = undefined;\n }\n\n this.resetPlaybackRate(video);\n\n if (this.config.video_host === \"youtube\" || this.config.video_host === \"vimeo\") {\n const onReady = () => {\n this.plyr.off(\"ready\", onReady);\n const start = this.resolveStartTime(\n this.config.last_time,\n this.config.last_percent,\n this.plyr.duration\n );\n this.applyStartTimeToCurrentSource(start);\n \n this.startAutoplayFlow();\n parent.postMessage('playerIsReadyToPlay', \"*\");\n parent.postMessage('duration:' + this.plyr.duration, \"*\");\n console.log('event: current_time ' + this.plyr.currentTime);\n console.log('event: duration ' + this.plyr.duration);\n console.log('event: ready');\n this.postCastEvent({\n event: 'ready',\n duration: this.plyr.duration || 0,\n currentTime: this.plyr.currentTime || 0,\n });\n\n if(this.config.is_live) {\n this.plyr?.on('playing', function() {\n console.log('event: playing_live');\n parent.postMessage('event: playing_live', '*');\n });\n }\n\n if (this.config.mirror) {\n setTimeout(() => {\n document\n .querySelector(`.plyr__video-embed iframe`) // eslint-disable-line\n ?.classList.add(\"mirror\");\n }, 1000);\n }\n };\n this.plyr.on(\"ready\", onReady);\n }\n\n if (this.config.video_host === \"youtube\") {\n this.plyr.source = {\n type: \"video\",\n sources: [{ src: this.config.video_id, provider: \"youtube\" }],\n };\n } else if (this.config.video_host === \"vimeo\") {\n this.plyr.source = {\n type: \"video\",\n sources: [{ src: this.config.video_id, provider: \"vimeo\" }],\n };\n } else if (this.config.video_host === \"mp4\") {\n this.plyr.source = {\n type: \"video\",\n sources: [{ src: this.config.video_external_id, type: \"video/mp4\" }],\n };\n } else if (this.config.video_host === \"hls\") {\n let sourceX = \"\";\n try {\n sourceX = atob(this.config.video_id || '');\n } catch (e) {\n sourceX = this.config.video_id || '';\n }\n const canNative = video.canPlayType(\"application/vnd.apple.mpegurl\");\n\n if (canNative) {\n this.plyr.source = {\n type: \"video\",\n sources: [{ src: sourceX, type: \"application/vnd.apple.mpegurl\" }],\n };\n const onLoadedMeta = () => {\n const dur = this.plyr.duration || video.duration || 0;\n const start = this.resolveStartTime(this.config.last_time, this.config.last_percent, dur);\n this.applyStartTimeToCurrentSource(start, { video });\n this.startAutoplayFlow(video);\n video.removeEventListener(\"loadedmetadata\", onLoadedMeta);\n };\n video.addEventListener(\"loadedmetadata\", onLoadedMeta);\n } else if (Hls.isSupported()) {\n this.hls = new Hls({ enableWorker: true, lowLatencyMode: true });\n this.hls.attachMedia(video);\n this.hls.on(Hls.Events.MEDIA_ATTACHED, () => {\n this.hls!.loadSource(sourceX);\n });\n this.hls.on(Hls.Events.MANIFEST_PARSED, () => {\n const dur = video.duration || 0;\n const start = this.resolveStartTime(this.config.last_time, this.config.last_percent, dur);\n this.applyStartTimeToCurrentSource(start, { video });\n this.startAutoplayFlow(video);\n });\n this.hls.on(Hls.Events.ERROR, (_evt, data) => {\n if (data?.fatal) {\n switch (data.type) {\n case Hls.ErrorTypes.NETWORK_ERROR:\n this.hls!.startLoad();\n break;\n case Hls.ErrorTypes.MEDIA_ERROR:\n this.hls!.recoverMediaError();\n break;\n default:\n try { this.hls!.destroy(); } catch {} break;\n }\n }\n });\n } else {\n this.plyr.source = { type: \"video\", sources: [{ src: sourceX }] };\n }\n }\n resolve();\n });\n }\n\n private resolveStartTime(\n last_time: any,\n last_percent: any,\n duration: number,\n opts: { minStartSec?: number; endGuardSec?: number } = {}\n ): number {\n const minStartSec = opts.minStartSec ?? 3;\n const endGuardSec = opts.endGuardSec ?? 2;\n const dur = Number(duration) || 0;\n if (dur <= 0) return 0;\n\n const hasTime = last_time !== undefined && last_time !== null && last_time !== \"\";\n if (hasTime) {\n let t = Number(last_time);\n if (!isFinite(t) || t < 0) t = 0;\n if (t < minStartSec) return 0;\n return Math.min(dur - endGuardSec, t);\n }\n\n const hasPercent =\n last_percent !== undefined && last_percent !== null && last_percent !== \"\";\n if (hasPercent) {\n let p = Number(last_percent);\n if (!isFinite(p) || p < 0) p = 0;\n if (p > 1) p = p / 100;\n let t = dur * p;\n if (t < minStartSec) return 0;\n return Math.min(dur - endGuardSec, t);\n }\n\n return 0;\n }\n\n private postCastEvent(payload: Record<string, unknown>) {\n parent.postMessage(JSON.stringify(payload), '*');\n }\n\n private onCastMessage = (evt: MessageEvent) => {\n let data = evt.data;\n if (typeof data === 'string') {\n try { data = JSON.parse(data); } catch { /* ignora */ }\n }\n if (data?.action === 'request-iframe-media-metadata') {\n this.postCastEvent({\n event: 'metadata',\n duration: this.plyr?.duration || 0,\n currentTime: this.plyr?.currentTime || 0,\n });\n }\n if (data?.action === 'play') {\n this.plyr?.play();\n }\n if (data?.action === 'pause') {\n this.plyr?.pause();\n }\n if (data?.action === 'seek' && typeof data.time === 'number') {\n this.plyr && (this.plyr.currentTime = data.time);\n }\n };\n\n ngOnDestroy() {\n this.hls?.destroy();\n this.controlsVisibilityCleanup?.();\n this.controlsVisibilityCleanup = undefined;\n this.clearAutoplayUnlockListener();\n const container = this.plyr?.elements?.container as HTMLElement | undefined;\n container?.classList.remove(\"plyr--vimeo-ended\");\n if (this.recommendationBlocker?.parentElement) {\n try {\n this.recommendationBlocker.parentElement.removeChild(this.recommendationBlocker);\n } catch {}\n }\n if (this.recommendationBlockerActiveZone) {\n try {\n this.recommendationBlockerActiveZone.removeEventListener('pointerdown', this.onTopBlockerPointerDown);\n this.recommendationBlockerActiveZone.removeEventListener('click', this.onRecommendationBlockerClick);\n } catch {}\n }\n this.recommendationBlocker = null;\n this.recommendationBlockerActiveZone = null;\n if (this.topClickBlocker?.parentElement) {\n try {\n this.topClickBlocker.removeEventListener('pointerdown', this.onTopBlockerPointerDown);\n this.topClickBlocker.removeEventListener('click', this.onTopBlockerClick);\n this.topClickBlocker.parentElement.removeChild(this.topClickBlocker);\n } catch {}\n }\n this.topClickBlocker = null;\n if (this.gestureOverlay?.parentElement) {\n try {\n this.gestureOverlay.parentElement.removeChild(this.gestureOverlay);\n } catch {}\n }\n this.gestureOverlay = null;\n this.pendingGesturePlay = false;\n this.menuObserver?.disconnect();\n this.menuObserver = undefined;\n window.removeEventListener('resize', this.onResize);\n this.fullscreenCleanup?.();\n this.fullscreenCleanup = undefined;\n this.plyr?.destroy();\n window.removeEventListener('message', this.onCastMessage);\n }\n}\n","import { Component, ElementRef, Input, OnDestroy, OnInit, OnChanges, SimpleChanges, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { WebplayerConfig } from '../../webplayer.types';\nimport { WebplayerProgressService } from '../../progress.service';\n\ndeclare global {\n interface Window {\n pandascripttag?: any[];\n PandaPlayer?: any;\n }\n}\n\n@Component({\n selector: 'app-panda-player',\n template: '', // O conteúdo do DOM é gerenciado programaticamente\n standalone: true,\n imports: [CommonModule],\n styles: [`\n :host {\n display: block;\n width: 100%;\n height: 100%;\n position: relative;\n }\n :host ::ng-deep .panda-player,\n :host ::ng-deep iframe[src*=\"pandavideo.com.br\"] {\n position: absolute !important;\n top: 0 !important;\n left: 0 !important;\n width: 100% !important;\n height: 100% !important;\n border: none !important;\n }\n `]\n})\nexport class PandaPlayerComponent implements OnInit, OnDestroy, OnChanges {\n @Input() config!: WebplayerConfig;\n @Output() ready = new EventEmitter<void>();\n\n private pandaPlayer?: any;\n private pandaContainer?: HTMLDivElement;\n private pandaProgressThrottle = 0;\n private primaryColor?: string;\n private controlsColor?: string;\n\n constructor(\n private elementRef: ElementRef,\n private progressService: WebplayerProgressService,\n ) {}\n\n ngOnInit() {\n if (this.config?.video_host !== 'panda') {\n return;\n }\n this.applyTheme();\n this.loadPandaPlayer();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['config'] && this.pandaPlayer) {\n this.loadPandaPlayer();\n }\n }\n\n private applyTheme() {\n if (this.config?.ui?.colors) {\n this.primaryColor = this.config.ui.colors['progress-view-off'];\n this.controlsColor = this.config.ui.colors['text-color'];\n }\n }\n\n private loadPandaPlayer() {\n if (!this.config.embed) {\n return;\n }\n\n this.ensurePandaScript().then(() => {\n const host: HTMLElement = this.elementRef.nativeElement;\n console.log('Panda Player Config:', this.config, host);\n if (!this.pandaContainer) {\n this.pandaContainer = document.createElement(\"div\");\n this.pandaContainer.style.width = \"100%\";\n this.pandaContainer.style.height = \"100%\";\n this.pandaContainer.id = `panda-${this.config.video_id || Math.random().toString(36).slice(2)}`;\n host.appendChild(this.pandaContainer);\n }\n\n try {\n this.pandaPlayer?.destroy?.();\n } catch {}\n\n const videoId = this.config.video_external_id || (this.config.embed ? this.extractPandaVideoId(this.config.embed) : undefined);\n const libraryId = (this.config.embed ? this.extractPandaLibraryId(this.config.embed) : undefined);\n\n window.pandascripttag = window.pandascripttag || [];\n window.pandascripttag.push(() => {\n this.pandaPlayer = new (window as any).PandaPlayer(\n this.pandaContainer!.id,\n {\n video_external_id: videoId,\n library_id: libraryId,\n onReady: () => {\n if (this.primaryColor) {\n try { this.pandaPlayer.setColor('primary', this.primaryColor); } catch {}\n }\n if (this.controlsColor) {\n try { this.pandaPlayer.setColor('secondary', this.controlsColor); } catch {}\n }\n\n const dur = this.pandaPlayer?.getDuration?.() || 0;\n const start = this.resolveStartTime(this.config.last_time, this.config.last_percent, dur);\n if (start > 0) {\n try { this.pandaPlayer.setCurrentTime(start); } catch {}\n }\n if (this.config.autoplay) {\n try { this.pandaPlayer.play(); } catch {}\n }\n this.ready.emit();\n },\n playerConfigs: {\n autoplay: !!this.config.autoplay,\n smartAutoplay: !!this.config.autoplay,\n },\n \n }\n );\n\n this.pandaPlayer.onEvent((event: any) => {\n this.handlePandaEvent(event);\n });\n });\n });\n }\n\n ngOnDestroy() {\n try {\n this.pandaPlayer?.destroy?.();\n } catch {}\n try {\n this.pandaContainer?.remove?.();\n } catch {}\n }\n\n private async ensurePandaScript(): Promise<void> {\n return new Promise<void>((resolve) => {\n if (window.PandaPlayer) return resolve();\n const existing = document.querySelector(\n 'script[src^=\"https://player.pandavideo.com.br/api.v2.js\"]'\n ) as HTMLScriptElement;\n if (existing) {\n existing.addEventListener(\"load\", () => resolve());\n if ((existing as any).readyState === \"complete\") resolve();\n return;\n }\n const script = document.createElement(\"script\");\n script.src = \"https://player.pandavideo.com.br/api.v2.js\";\n script.async = true;\n script.onload = () => resolve();\n document.head.appendChild(script);\n });\n }\n\n private extractPandaVideoId(url: string): string | undefined {\n let u: URL;\n try {\n u = new URL(url);\n } catch {\n try {\n u = new URL(decodeURIComponent(url));\n } catch {\n return undefined;\n }\n }\n try {\n const v = u.searchParams.get(\"v\") || undefined;\n return v || undefined;\n } catch {\n return undefined;\n }\n }\n\n private extractPandaLibraryId(url: string): string | undefined {\n let u: URL;\n try {\n u = new URL(url);\n } catch {\n try {\n u = new URL(decodeURIComponent(url));\n } catch {\n return undefined;\n }\n }\n try {\n const { hostname } = u;\n const firstLabel = hostname.split(\".\")[0] || \"\";\n const maybeLib = firstLabel.startsWith(\"player-\")\n ? firstLabel.slice(\"player-\".length)\n : firstLabel;\n return maybeLib || undefined;\n } catch {\n return undefined;\n }\n }\n\n private handlePandaEvent(evt: any) {\n const type = evt?.message || evt?.type;\n const THROTTLE_MS = 300;\n const now = performance.now();\n\n if (type === \"panda_timeupdate\") {\n if (now - this.pandaProgressThrottle >= THROTTLE_MS) {\n this.pandaProgressThrottle = now;\n try {\n const t = this.pandaPlayer?.getCurrentTime?.() || 0;\n const d = this.pandaPlayer?.getDuration?.() || 0;\n const p = d > 0 ? +((t / d) * 100).toFixed(2) : 0;\n this.progressService.progress$.next({ currentTime: t, duration: d, percent: p });\n } catch {}\n }\n }\n\n if (type === \"panda_play\") {\n const snapshot = this.safeProgressSnapshot();\n if (snapshot) {\n this.progressService.progress$.next(snapshot);\n }\n this.notifyParentPlaybackEvent('play', snapshot ?? {});\n }\n\n if (type === \"panda_pause\") {\n try {\n const t = this.pandaPlayer?.getCurrentTime?.() || 0;\n const d = this.pandaPlayer?.getDuration?.() || 0;\n const p = d > 0 ? +((t / d) * 100).toFixed(2) : 0;\n this.progressService.progress$.next({ currentTime: t, duration: d, percent: p });\n } catch {}\n this.notifyParentPlaybackEvent('pause', this.safeProgressSnapshot());\n }\n\n if (type === \"panda_ended\") {\n const snapshot = this.safeProgressSnapshot();\n if (snapshot) {\n this.progressService.progress$.next(snapshot);\n }\n this.progressService.ended$.next();\n this.notifyParentPlaybackEvent('ended', snapshot ?? {});\n }\n }\n\n private resolveStartTime(\n last_time: any,\n last_percent: any,\n duration: number,\n opts: { minStartSec?: number; endGuardSec?: number } = {}\n ): number {\n const minStartSec = opts.minStartSec ?? 3;\n const endGuardSec = opts.endGuardSec ?? 2;\n\n const dur = Number(duration) || 0;\n if (dur <= 0) return 0;\n\n const hasTime =\n last_time !== undefined && last_time !== null && last_time !== \"\";\n if (hasTime) {\n let t = Number(last_time);\n if (!isFinite(t) || t < 0) t = 0;\n if (t < minStartSec) return 0;\n return Math.min(dur - endGuardSec, t);\n }\n\n const hasPercent =\n last_percent !== undefined &&\n last_percent !== null &&\n last_percent !== \"\";\n if (hasPercent) {\n let p = Number(last_percent);\n if (!isFinite(p) || p < 0) p = 0;\n if (p > 1) p = p / 100;\n let t = dur * p;\n if (t < minStartSec) return 0;\n return Math.min(dur - endGuardSec, t);\n }\n\n return 0;\n }\n\n private safeProgressSnapshot():\n | { currentTime: number; duration: number; percent: number }\n | null {\n try {\n const currentTime = this.pandaPlayer?.getCurrentTime?.() || 0;\n const duration = this.pandaPlayer?.getDuration?.() || 0;\n const percent =\n duration > 0 ? +((currentTime / duration) * 100).toFixed(2) : 0;\n return { currentTime, duration, percent };\n } catch {\n return null;\n }\n }\n\n private notifyParentPlaybackEvent(event: string, extra: any = {}) {\n if (typeof window === 'undefined') return;\n const target = typeof parent !== 'undefined' ? parent : null;\n if (!target || target === window) return;\n const payload = { event, ...extra };\n try {\n target.postMessage(`event: ${event}`, '*');\n } catch {}\n try {\n target.postMessage(JSON.stringify(payload), '*');\n } catch {}\n }\n}\n","import { Component, ElementRef, Input, OnDestroy, OnInit, OnChanges, SimpleChanges, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { WebplayerConfig } from '../../webplayer.types';\nimport { WebplayerProgressService } from '../../progress.service';\n\n@Component({\n selector: 'app-scaleup-player',\n template: '', // O conteúdo do DOM é gerenciado programaticamente\n standalone: true,\n imports: [CommonModule],\n styles: [`\n :host {\n display: block;\n width: 100%;\n height: 100%;\n position: relative;\n }\n :host ::ng-deep iframe[src*=\"scaleup.com.br\"] {\n position: absolute !important;\n top: 0 !important;\n left: 0 !important;\n width: 100% !important;\n height: 100% !important;\n border: none !important;\n }\n `]\n})\nexport class ScaleupPlayerComponent implements OnInit, OnDestroy, OnChanges {\n @Input() config!: WebplayerConfig;\n @Output() ready = new EventEmitter<void>();\n private scaleupIframe?: HTMLIFrameElement;\n private scaleupMessageHandler?: (e: MessageEvent) => void;\n private scaleupProgressThrottle = 0;\n\n constructor(\n private elementRef: ElementRef,\n private progressService: WebplayerProgressService\n ) {}\n\n ngOnInit() {\n if (this.config?.video_host !== 'scaleup') {\n return;\n }\n this.loadScaleupPlayer();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['config'] && this.scaleupIframe) {\n this.loadScaleupPlayer();\n }\n }\n\n private loadScaleupPlayer() {\n const videoId = this.config.video_id;\n const lastTime = Math.max(0, Math.floor(Number(this.config.last_time) || 0));\n const eventsList =\n \"controlsdisabled,controlsenabled,dispose,durationchange,ended,enterFullWindow,enterpictureinpicture,error,exitFullWindow,firstplay,fullscreenchange,leavepictureinpicture,loadedmetadata,loadstart,pause,play,playerreset,playerresize,playing,posterchange,progress,ratechange,ready,resize,seeked,seeking,textdata,timeupdate,useractive,userinactive,volumechange,waiting\";\n const scaleupSrc = `https://player.scaleup.com.br/embed/${videoId}?seekTo=${lastTime}&events=${eventsList}&autoplay=${this.config.autoplay}`;\n\n const host: HTMLElement = this.elementRef.nativeElement;\n \n if (this.scaleupIframe) {\n this.scaleupIframe.remove();\n }\n\n const iframe = document.createElement(\"iframe\");\n iframe.src = scaleupSrc;\n iframe.allow = \"autoplay; fullscreen; encrypted-media; picture-in-picture\";\n iframe.referrerPolicy = \"origin-when-cross-origin\";\n iframe.frameBorder = \"0\";\n iframe.style.width = \"100%\";\n iframe.style.height = \"100%\";\n iframe.style.position = \"absolute\";\n iframe.style.top = \"0\";\n iframe.style.left = \"0\";\n\n host.appendChild(iframe);\n this.scaleupIframe = iframe;\n\n // Emite evento ready quando o iframe carregar\n iframe.onload = () => {\n this.ready.emit();\n };\n\n if (this.scaleupMessageHandler) {\n window.removeEventListener(\"message\", this.scaleupMessageHandler);\n }\n\n this.scaleupMessageHandler = (e: MessageEvent) => {\n try {\n const originOk =\n typeof e.origin === \"string\" &&\n e.origin.includes(\"scaleup.com.br\");\n if (!originOk) return;\n\n const data =\n typeof e.data === \"string\"\n ? (() => {\n try {\n return JSON.parse(e.data);\n } catch {\n return undefined;\n }\n })()\n : e.data;\n if (!data || typeof data !== \"object\") return;\n\n const type = (\n data.event ||\n data.type ||\n data.message ||\n data.eventName ||\n \"\"\n )\n .toString()\n .toLowerCase();\n if (!type) return;\n\n const t = Number(\n (data.currentTime ?? data.time ?? data.position) || 0\n );\n const d = Number((data.duration ?? data.totalDuration) || 0);\n const p = d > 0 ? +((t / d) * 100).toFixed(2) : 0;\n\n const THROTTLE_MS = 300;\n const now = performance.now();\n\n if (\n type.includes(\"timeupdate\") ||\n type === \"playing\" ||\n type === \"progress\"\n ) {\n if (now - this.scaleupProgressThrottle >= THROTTLE_MS) {\n this.scaleupProgressThrottle = now;\n this.progressService.progress$.next({ currentTime: t, duration: d, percent: p });\n }\n }\n if (type === \"pause\" || type === \"paused\") {\n this.progressService.progress$.next({ currentTime: t, duration: d, percent: p });\n }\n if (type === \"ended\" || type === \"end\" || type === \"complete\") {\n this.progressService.progress$.next({ currentTime: t, duration: d, percent: p });\n this.progressService.ended$.next();\n }\n } catch {}\n };\n window.addEventListener(\"message\", this.scaleupMessageHandler);\n }\n\n ngOnDestroy() {\n try {\n this.scaleupIframe?.remove();\n } catch {}\n if (this.scaleupMessageHandler) {\n window.removeEventListener(\"message\", this.scaleupMessageHandler);\n this.scaleupMessageHandler = undefined;\n }\n }\n}\n","import { Injectable, Inject } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GlobalLoadingService {\n private loadingElement: HTMLElement | null;\n\n constructor(@Inject(DOCUMENT) private document: Document) {\n this.loadingElement = this.document.getElementById('global-loading');\n }\n\n public hide() {\n if (this.loadingElement) {\n this.loadingElement.style.opacity = '0';\n setTimeout(() => {\n if (this.loadingElement) {\n this.loadingElement.style.display = 'none';\n }\n }, 500); // Duração da transição do CSS\n }\n }\n\n public show() {\n if (this.loadingElement) {\n this.loadingElement.style.display = 'flex';\n this.loadingElement.style.opacity = '1';\n }\n }\n}","import { CommonModule } from \"@angular/common\";\nimport { Component, Inject, Input } from \"@angular/core\";\n\nimport { PlyrPlayerComponent } from \"../players/plyr-player/plyr-player.component\";\nimport { PandaPlayerComponent } from \"../players/panda-player/panda-player.component\";\nimport { ScaleupPlayerComponent } from \"../players/scaleup-player/scaleup-player.component\";\n\nimport { WebplayerConfig, WEPLAYER_CONFIG } from \"../webplayer.types\";\nimport { GlobalLoadingService } from \"../global.service\";\n\n@Component({\n selector: \"app-player-loader\",\n template: `\n <div style=\"width: 100%; height: 100%;\">\n <div [ngSwitch]=\"config?.video_host\" style=\"width: 100%; height: 100%;\">\n <app-plyr-player\n *ngSwitchCase=\"'hls'\"\n [config]=\"config\"\n (ready)=\"onPlayerReady()\"\n ></app-plyr-player>\n <app-plyr-player\n *ngSwitchCase=\"'mp4'\"\n [config]=\"config\"\n (ready)=\"onPlayerReady()\"\n ></app-plyr-player>\n <app-plyr-player\n *ngSwitchCase=\"'youtube'\"\n [config]=\"config\"\n (ready)=\"onPlayerReady()\"\n ></app-plyr-player>\n <app-plyr-player\n *ngSwitchCase=\"'vimeo'\"\n [config]=\"config\"\n (ready)=\"onPlayerReady()\"\n ></app-plyr-player>\n <app-panda-player\n *ngSwitchCase=\"'panda'\"\n [config]=\"config\"\n (ready)=\"onPlayerReady()\"\n ></app-panda-player>\n <app-scaleup-player\n *ngSwitchCase=\"'scaleup'\"\n [config]=\"config\"\n (ready)=\"onPlayerReady()\"\n ></app-scaleup-player>\n <div *ngSwitchDefault>\n <p>Player não suportado ou configuração não fornecida.</p>\n </div>\n </div>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n `,\n ],\n standalone: true,\n imports: [\n CommonModule,\n PlyrPlayerComponent,\n PandaPlayerComponent,\n ScaleupPlayerComponent,\n ],\n})\nexport class PlayerLoaderComponent {\n @Input() config!: WebplayerConfig | any;\n playerType: \"plyr\" | \"panda\" | \"scaleup\" | null = null;\n\n constructor(\n @Inject(WEPLAYER_CONFIG) private defaultConfig: WebplayerConfig,\n private globalLoading: GlobalLoadingService\n ) {\n this.config = { ...this.defaultConfig, ...this.config };\n this.playerType = this.getPlayerType(this.config.videoUrl);\n }\n\n private getPlayerType(videoUrl: string): \"plyr\" | \"panda\" | \"scaleup\" | null {\n if (videoUrl?.includes(\"panda\")) return \"panda\";\n if (videoUrl?.includes(\"scaleup\")) return \"scaleup\";\n if (\n videoUrl?.includes(\"vimeo\") ||\n videoUrl?.includes(\"youtube\") ||\n videoUrl?.includes(\".m3u8\") ||\n videoUrl?.includes(\".mp4\")\n )\n return \"plyr\";\n return \"plyr\";\n }\n\n onPlayerReady() {\n this.globalLoading.hide();\n }\n}\n","import { Component, Output, EventEmitter, OnDestroy, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Subscription } from 'rxjs';\nimport { WebplayerConfig } from './webplayer.types';\nimport { WebplayerConfigService } from './webplayer-config.service';\nimport { WebplayerProgress, WebplayerProgressService } from './progress.service';\nimport { PlayerLoaderComponent } from './player-loader/player-loader.component';\n\n@Component({\n selector: 'edm-webplayer',\n template: `\n <app-player-loader [config]=\"config\" *ngIf=\"config\"></app-player-loader>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n `,\n ],\n standalone: true,\n imports: [CommonModule, PlayerLoaderComponent],\n})\nexport class WebplayerComponent implements OnInit, OnDestroy {\n @Output('playProgress') progress = new EventEmitter<WebplayerProgress>();\n @Output('playEnded') ended = new EventEmitter<void>();\n\n config: WebplayerConfig | null = null;\n private subscriptions = new Subscription();\n\n constructor(\n private configService: WebplayerConfigService,\n private progressService: WebplayerProgressService\n ) {}\n\n ngOnInit(): void {\n this.subscriptions.add(\n this.configService.config$.subscribe(config => {\n this.config = config;\n })\n );\n\n this.subscriptions.add(\n this.progressService.progress$.subscribe(p => this.progress.emit(p))\n );\n\n this.subscriptions.add(\n this.progressService.ended$.subscribe(() => this.ended.emit())\n );\n }\n\n ngOnDestroy(): void {\n this.subscriptions.unsubscribe();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'timeFormat', standalone: true })\nexport class TimeFormatPipe implements PipeTransform {\n transform(seconds: number | null | undefined): string {\n const val = typeof seconds === 'number' && isFinite(seconds) ? seconds : 0;\n const sec = Math.floor(val % 60).toString().padStart(2, '0');\n const min = Math.floor(val / 60).toString().padStart(2, '0');\n const hrs = Math.floor(val / 3600);\n if (hrs > 0) {\n const mm = Math.floor((val % 3600) / 60).toString().padStart(2, '0');\n return `${hrs}:${mm}:${sec}`;\n }\n return `${min}:${sec}`;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { WebplayerComponent } from './webplayer.component';\nimport { TimeFormatPipe } from './utils/time-format.pipe';\nimport { PlayerLoaderComponent } from './player-loader/player-loader.component';\nimport { PlyrPlayerComponent } from './players/plyr-player/plyr-player.component';\nimport { PandaPlayerComponent } from './players/panda-player/panda-player.component';\nimport { ScaleupPlayerComponent } from './players/scaleup-player/scaleup-player.component';\n\n@NgModule({\n imports: [\n CommonModule,\n WebplayerComponent,\n PlayerLoaderComponent,\n PlyrPlayerComponent,\n PandaPlayerComponent,\n ScaleupPlayerComponent,\n TimeFormatPipe,\n ],\n exports: [\n WebplayerComponent,\n PlayerLoaderComponent,\n PlyrPlayerComponent,\n PandaPlayerComponent,\n ScaleupPlayerComponent,\n TimeFormatPipe,\n ]\n})\nexport class WebplayerModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.WebplayerProgressService","i1.GlobalLoadingService","i1.WebplayerConfigService","i2.WebplayerProgressService"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@edm-webplayer/webplayer-angular",
3
- "version": "0.1.31",
3
+ "version": "0.1.32",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^19.2.14",
6
6
  "@angular/core": "^19.2.14",
@@ -15,11 +15,14 @@ export declare class PlyrPlayerComponent implements AfterViewInit, OnDestroy, On
15
15
  private recommendationBlocker?;
16
16
  private recommendationBlockerActiveZone?;
17
17
  private topClickBlocker?;
18
+ private gestureOverlay?;
18
19
  private menuObserver?;
19
20
  private playbackEnded;
20
21
  private overlayBlockAll;
21
22
  private endedPosterOverlay?;
22
23
  private fullscreenCleanup?;
24
+ private interactionUnmuteCleanup?;
25
+ private pendingGesturePlay;
23
26
  private readonly onResize;
24
27
  private readonly onTopBlockerPointerDown;
25
28
  private readonly onTopBlockerClick;
@@ -45,12 +48,27 @@ export declare class PlyrPlayerComponent implements AfterViewInit, OnDestroy, On
45
48
  private toggleRecommendationBlocker;
46
49
  private updateRecommendationBlockerSafeZone;
47
50
  private updateTopClickBlockerSafeZone;
51
+ private updateGestureOverlaySafeZone;
48
52
  private togglePlayback;
49
53
  private ensureTopClickBlocker;
50
54
  private observeMenuChanges;
51
55
  private isIOSDevice;
52
56
  private isAndroidDevice;
53
57
  private isTouchDevice;
58
+ private isIframeProvider;
59
+ private shouldAutoplay;
60
+ private requiresMutedAutoplay;
61
+ private setPlayerMutedState;
62
+ private clearAutoplayUnlockListener;
63
+ private ensureAutoplayUnlockListener;
64
+ private scheduleUserInteractionUnmute;
65
+ private applyStartTimeToCurrentSource;
66
+ private seekUsingHostAPI;
67
+ private ensureGestureOverlay;
68
+ private hideGestureOverlay;
69
+ private requestGestureToPlay;
70
+ private shouldShowGestureOverlayForError;
71
+ private startAutoplayFlow;
54
72
  private setupControlsVisibility;
55
73
  private bindFullscreenBehavior;
56
74
  private setupPlayer;