@edm-webplayer/webplayer-angular 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/edm-webplayer-webplayer-angular.mjs +107 -65
- package/fesm2022/edm-webplayer-webplayer-angular.mjs.map +1 -1
- package/package.json +1 -1
- package/player-loader/player-loader.component.d.ts +2 -0
- package/players/panda-player/panda-player.component.d.ts +3 -2
- package/players/plyr-player/plyr-player.component.d.ts +3 -2
- package/players/scaleup-player/scaleup-player.component.d.ts +3 -2
- package/webplayer.types.d.ts +2 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, Optional, Inject, Injectable,
|
|
2
|
+
import { InjectionToken, Optional, Inject, Injectable, EventEmitter, Output, Input, ViewChild, Component, Pipe, NgModule } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/common';
|
|
4
4
|
import { DOCUMENT, CommonModule } from '@angular/common';
|
|
5
5
|
import { BehaviorSubject, Subject, Subscription } from 'rxjs';
|
|
@@ -71,6 +71,7 @@ class PlyrPlayerComponent {
|
|
|
71
71
|
document;
|
|
72
72
|
videoRef;
|
|
73
73
|
config;
|
|
74
|
+
ready = new EventEmitter();
|
|
74
75
|
plyr;
|
|
75
76
|
hls;
|
|
76
77
|
constructor(progressService, document) {
|
|
@@ -141,7 +142,13 @@ ${allPairs.map(([n, v]) => ` ${n}: ${v};`).join('\n')}
|
|
|
141
142
|
vimeo: { byline: false, portrait: false, title: false },
|
|
142
143
|
});
|
|
143
144
|
this.bindProgressEvents();
|
|
144
|
-
this.loadSource(this.videoRef.nativeElement).then(() =>
|
|
145
|
+
this.loadSource(this.videoRef.nativeElement).then(() => {
|
|
146
|
+
this.setupStartTime();
|
|
147
|
+
});
|
|
148
|
+
// Dispara o evento ready quando o player estiver pronto
|
|
149
|
+
this.plyr.on("ready", () => {
|
|
150
|
+
this.ready.emit();
|
|
151
|
+
});
|
|
145
152
|
}
|
|
146
153
|
setupStartTime() {
|
|
147
154
|
const apply = () => {
|
|
@@ -276,10 +283,10 @@ ${allPairs.map(([n, v]) => ` ${n}: ${v};`).join('\n')}
|
|
|
276
283
|
else if (this.config.video_host === "hls") {
|
|
277
284
|
let sourceX = "";
|
|
278
285
|
try {
|
|
279
|
-
sourceX = atob(this.config.video_id);
|
|
286
|
+
sourceX = atob(this.config.video_id || '');
|
|
280
287
|
}
|
|
281
288
|
catch (e) {
|
|
282
|
-
sourceX = this.config.video_id;
|
|
289
|
+
sourceX = this.config.video_id || '';
|
|
283
290
|
}
|
|
284
291
|
const canNative = video.canPlayType("application/vnd.apple.mpegurl");
|
|
285
292
|
if (canNative) {
|
|
@@ -404,7 +411,7 @@ ${allPairs.map(([n, v]) => ` ${n}: ${v};`).join('\n')}
|
|
|
404
411
|
this.plyr?.destroy();
|
|
405
412
|
}
|
|
406
413
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PlyrPlayerComponent, deps: [{ token: WebplayerProgressService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
|
|
407
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: PlyrPlayerComponent, isStandalone: true, selector: "app-plyr-player", inputs: { config: "config" }, viewQueries: [{ propertyName: "videoRef", first: true, predicate: ["video"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: `<video #video playsinline></video>`, isInline: true, styles: [":host{display:block;width:100%;height:100%;position:relative;--plyr-color-main: var(--theme-alert, #19a6d9);--plyr-color-hover: var(--theme-alert, #2dbbff);--plyr-progress-buffer-background: var(--theme-progress-view-off, rgba(255, 255, 255, .25));--plyr-control-background: var(--theme-bg, rgba(0, 0, 0, .8));--plyr-control-color: var(--theme-text-color, #fff);--plyr-control-button-color: var(--theme-font-bt, #fff)}:host ::ng-deep .plyr__controls{background:var(--plyr-control-background)!important;color:var(--plyr-control-color)!important}:host ::ng-deep .plyr__controls button{color:var(--plyr-control-color)!important}:host ::ng-deep .plyr__progress__buffer{background-color:var(--plyr-progress-buffer-background)!important}:host ::ng-deep .plyr,:host ::ng-deep .plyr__video-wrapper,:host ::ng-deep .plyr__video-embed,:host ::ng-deep .plyr__video-embed>iframe,:host ::ng-deep video{width:100%!important;height:100%!important;aspect-ratio:auto!important;top:0!important;left:0!important}:host ::ng-deep .mirror{transform:scaleX(-1)!important;-webkit-transform:scaleX(-1)!important}:host ::ng-deep .plyr--video .plyr__control.plyr__tab-focus,:host ::ng-deep .plyr--video .plyr__control:hover,:host ::ng-deep .plyr--video .plyr__control[aria-expanded=true]{background:var(--plyr-color-hover)!important;color:var(--plyr-control-button-color)!important}:host ::ng-deep .plyr--full-ui input[type=range]{color:var(--plyr-color-main)!important}:host ::ng-deep .plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]:before{background:var(--plyr-color-main)!important}:host ::ng-deep .plyr__menu__container{background:var(--plyr-control-background)!important}:host ::ng-deep .ytp-more-videos-view .ytp-suggestions{pointer-events:none!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
414
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: PlyrPlayerComponent, isStandalone: true, selector: "app-plyr-player", inputs: { config: "config" }, outputs: { ready: "ready" }, viewQueries: [{ propertyName: "videoRef", first: true, predicate: ["video"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: `<video #video playsinline></video>`, isInline: true, styles: [":host{display:block;width:100%;height:100%;position:relative;--plyr-color-main: var(--theme-alert, #19a6d9);--plyr-color-hover: var(--theme-alert, #2dbbff);--plyr-progress-buffer-background: var(--theme-progress-view-off, rgba(255, 255, 255, .25));--plyr-control-background: var(--theme-bg, rgba(0, 0, 0, .8));--plyr-control-color: var(--theme-text-color, #fff);--plyr-control-button-color: var(--theme-font-bt, #fff)}:host ::ng-deep .plyr__controls{background:var(--plyr-control-background)!important;color:var(--plyr-control-color)!important}:host ::ng-deep .plyr__controls button{color:var(--plyr-control-color)!important}:host ::ng-deep .plyr__progress__buffer{background-color:var(--plyr-progress-buffer-background)!important}:host ::ng-deep .plyr,:host ::ng-deep .plyr__video-wrapper,:host ::ng-deep .plyr__video-embed,:host ::ng-deep .plyr__video-embed>iframe,:host ::ng-deep video{width:100%!important;height:100%!important;aspect-ratio:auto!important;top:0!important;left:0!important}:host ::ng-deep .mirror{transform:scaleX(-1)!important;-webkit-transform:scaleX(-1)!important}:host ::ng-deep .plyr--video .plyr__control.plyr__tab-focus,:host ::ng-deep .plyr--video .plyr__control:hover,:host ::ng-deep .plyr--video .plyr__control[aria-expanded=true]{background:var(--plyr-color-hover)!important;color:var(--plyr-control-button-color)!important}:host ::ng-deep .plyr--full-ui input[type=range]{color:var(--plyr-color-main)!important}:host ::ng-deep .plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]:before{background:var(--plyr-color-main)!important}:host ::ng-deep .plyr__menu__container{background:var(--plyr-control-background)!important}:host ::ng-deep .ytp-more-videos-view .ytp-suggestions{pointer-events:none!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
408
415
|
}
|
|
409
416
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PlyrPlayerComponent, decorators: [{
|
|
410
417
|
type: Component,
|
|
@@ -417,12 +424,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
417
424
|
args: ["video", { static: true }]
|
|
418
425
|
}], config: [{
|
|
419
426
|
type: Input
|
|
427
|
+
}], ready: [{
|
|
428
|
+
type: Output
|
|
420
429
|
}] } });
|
|
421
430
|
|
|
422
431
|
class PandaPlayerComponent {
|
|
423
432
|
elementRef;
|
|
424
433
|
progressService;
|
|
425
434
|
config;
|
|
435
|
+
ready = new EventEmitter();
|
|
426
436
|
pandaPlayer;
|
|
427
437
|
pandaContainer;
|
|
428
438
|
pandaProgressThrottle = 0;
|
|
@@ -456,6 +466,7 @@ class PandaPlayerComponent {
|
|
|
456
466
|
}
|
|
457
467
|
this.ensurePandaScript().then(() => {
|
|
458
468
|
const host = this.elementRef.nativeElement;
|
|
469
|
+
console.log('Panda Player Config:', this.config, host);
|
|
459
470
|
if (!this.pandaContainer) {
|
|
460
471
|
this.pandaContainer = document.createElement("div");
|
|
461
472
|
this.pandaContainer.style.width = "100%";
|
|
@@ -467,8 +478,8 @@ class PandaPlayerComponent {
|
|
|
467
478
|
this.pandaPlayer?.destroy?.();
|
|
468
479
|
}
|
|
469
480
|
catch { }
|
|
470
|
-
const videoId = this.config.
|
|
471
|
-
const libraryId =
|
|
481
|
+
const videoId = this.config.video_external_id || (this.config.embed ? this.extractPandaVideoId(this.config.embed) : undefined);
|
|
482
|
+
const libraryId = (this.config.embed ? this.extractPandaLibraryId(this.config.embed) : undefined);
|
|
472
483
|
window.pandascripttag = window.pandascripttag || [];
|
|
473
484
|
window.pandascripttag.push(() => {
|
|
474
485
|
this.pandaPlayer = new window.PandaPlayer(this.pandaContainer.id, {
|
|
@@ -655,19 +666,22 @@ class PandaPlayerComponent {
|
|
|
655
666
|
return 0;
|
|
656
667
|
}
|
|
657
668
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PandaPlayerComponent, deps: [{ token: i0.ElementRef }, { token: WebplayerProgressService }], target: i0.ɵɵFactoryTarget.Component });
|
|
658
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: PandaPlayerComponent, isStandalone: true, selector: "app-panda-player", inputs: { config: "config" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true, styles: [":host{display:block;width:100%;height:100%;position:relative}:host ::ng-deep .panda-player,:host ::ng-deep iframe[src*=\"pandavideo.com.br\"]{position:absolute!important;top:0!important;left:0!important;width:100%!important;height:100%!important;border:none!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
669
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: PandaPlayerComponent, isStandalone: true, selector: "app-panda-player", inputs: { config: "config" }, outputs: { ready: "ready" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true, styles: [":host{display:block;width:100%;height:100%;position:relative}:host ::ng-deep .panda-player,:host ::ng-deep iframe[src*=\"pandavideo.com.br\"]{position:absolute!important;top:0!important;left:0!important;width:100%!important;height:100%!important;border:none!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
659
670
|
}
|
|
660
671
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PandaPlayerComponent, decorators: [{
|
|
661
672
|
type: Component,
|
|
662
673
|
args: [{ selector: 'app-panda-player', template: '', standalone: true, imports: [CommonModule], styles: [":host{display:block;width:100%;height:100%;position:relative}:host ::ng-deep .panda-player,:host ::ng-deep iframe[src*=\"pandavideo.com.br\"]{position:absolute!important;top:0!important;left:0!important;width:100%!important;height:100%!important;border:none!important}\n"] }]
|
|
663
674
|
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: WebplayerProgressService }], propDecorators: { config: [{
|
|
664
675
|
type: Input
|
|
676
|
+
}], ready: [{
|
|
677
|
+
type: Output
|
|
665
678
|
}] } });
|
|
666
679
|
|
|
667
680
|
class ScaleupPlayerComponent {
|
|
668
681
|
elementRef;
|
|
669
682
|
progressService;
|
|
670
683
|
config;
|
|
684
|
+
ready = new EventEmitter();
|
|
671
685
|
scaleupIframe;
|
|
672
686
|
scaleupMessageHandler;
|
|
673
687
|
scaleupProgressThrottle = 0;
|
|
@@ -773,83 +787,111 @@ class ScaleupPlayerComponent {
|
|
|
773
787
|
}
|
|
774
788
|
}
|
|
775
789
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ScaleupPlayerComponent, deps: [{ token: i0.ElementRef }, { token: WebplayerProgressService }], target: i0.ɵɵFactoryTarget.Component });
|
|
776
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: ScaleupPlayerComponent, isStandalone: true, selector: "app-scaleup-player", inputs: { config: "config" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true, styles: [":host{display:block;width:100%;height:100%;position:relative}:host ::ng-deep iframe[src*=\"scaleup.com.br\"]{position:absolute!important;top:0!important;left:0!important;width:100%!important;height:100%!important;border:none!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
790
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: ScaleupPlayerComponent, isStandalone: true, selector: "app-scaleup-player", inputs: { config: "config" }, outputs: { ready: "ready" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true, styles: [":host{display:block;width:100%;height:100%;position:relative}:host ::ng-deep iframe[src*=\"scaleup.com.br\"]{position:absolute!important;top:0!important;left:0!important;width:100%!important;height:100%!important;border:none!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
777
791
|
}
|
|
778
792
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ScaleupPlayerComponent, decorators: [{
|
|
779
793
|
type: Component,
|
|
780
794
|
args: [{ selector: 'app-scaleup-player', template: '', standalone: true, imports: [CommonModule], styles: [":host{display:block;width:100%;height:100%;position:relative}:host ::ng-deep iframe[src*=\"scaleup.com.br\"]{position:absolute!important;top:0!important;left:0!important;width:100%!important;height:100%!important;border:none!important}\n"] }]
|
|
781
795
|
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: WebplayerProgressService }], propDecorators: { config: [{
|
|
782
796
|
type: Input
|
|
797
|
+
}], ready: [{
|
|
798
|
+
type: Output
|
|
783
799
|
}] } });
|
|
784
800
|
|
|
785
801
|
class PlayerLoaderComponent {
|
|
786
802
|
config;
|
|
803
|
+
isLoading = true;
|
|
804
|
+
onPlayerReady() {
|
|
805
|
+
this.isLoading = false;
|
|
806
|
+
}
|
|
787
807
|
ngOnInit() {
|
|
788
808
|
console.log(this.config);
|
|
789
809
|
}
|
|
790
810
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PlayerLoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
791
811
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: PlayerLoaderComponent, isStandalone: true, selector: "app-player-loader", inputs: { config: "config" }, ngImport: i0, template: `
|
|
792
|
-
<div
|
|
793
|
-
<
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
812
|
+
<div style="width: 100%; height: 100%;">
|
|
813
|
+
<div *ngIf="isLoading" class="loading-spinner">
|
|
814
|
+
<div class="spinner"></div>
|
|
815
|
+
</div>
|
|
816
|
+
<div [ngSwitch]="config?.video_host" style="width: 100%; height: 100%;">
|
|
817
|
+
<app-plyr-player
|
|
818
|
+
*ngSwitchCase="'hls'"
|
|
819
|
+
[config]="config"
|
|
820
|
+
(ready)="onPlayerReady()"
|
|
821
|
+
></app-plyr-player>
|
|
822
|
+
<app-plyr-player
|
|
823
|
+
*ngSwitchCase="'mp4'"
|
|
824
|
+
[config]="config"
|
|
825
|
+
(ready)="onPlayerReady()"
|
|
826
|
+
></app-plyr-player>
|
|
827
|
+
<app-plyr-player
|
|
828
|
+
*ngSwitchCase="'youtube'"
|
|
829
|
+
[config]="config"
|
|
830
|
+
(ready)="onPlayerReady()"
|
|
831
|
+
></app-plyr-player>
|
|
832
|
+
<app-plyr-player
|
|
833
|
+
*ngSwitchCase="'vimeo'"
|
|
834
|
+
[config]="config"
|
|
835
|
+
(ready)="onPlayerReady()"
|
|
836
|
+
></app-plyr-player>
|
|
837
|
+
<app-panda-player
|
|
838
|
+
*ngSwitchCase="'panda'"
|
|
839
|
+
[config]="config"
|
|
840
|
+
(ready)="onPlayerReady()"
|
|
841
|
+
></app-panda-player>
|
|
842
|
+
<app-scaleup-player
|
|
843
|
+
*ngSwitchCase="'scaleup'"
|
|
844
|
+
[config]="config"
|
|
845
|
+
(ready)="onPlayerReady()"
|
|
846
|
+
></app-scaleup-player>
|
|
847
|
+
<div *ngSwitchDefault>
|
|
848
|
+
<p>Player não suportado ou configuração não fornecida.</p>
|
|
849
|
+
</div>
|
|
819
850
|
</div>
|
|
820
851
|
</div>
|
|
821
|
-
`, isInline: true, styles: [":host{display:block;width:100%;height:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: PlyrPlayerComponent, selector: "app-plyr-player", inputs: ["config"] }, { kind: "component", type: PandaPlayerComponent, selector: "app-panda-player", inputs: ["config"] }, { kind: "component", type: ScaleupPlayerComponent, selector: "app-scaleup-player", inputs: ["config"] }] });
|
|
852
|
+
`, isInline: true, styles: [":host{display:block;width:100%;height:100%}.loading-spinner{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#000000d9;z-index:10;color:#e3fb63;font-size:1.2rem}.spinner{border:6px solid #e3fb63;border-top:6px solid #000;border-radius:50%;width:48px;height:48px;animation:spin 1s linear infinite;margin-bottom:16px}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: PlyrPlayerComponent, selector: "app-plyr-player", inputs: ["config"], outputs: ["ready"] }, { kind: "component", type: PandaPlayerComponent, selector: "app-panda-player", inputs: ["config"], outputs: ["ready"] }, { kind: "component", type: ScaleupPlayerComponent, selector: "app-scaleup-player", inputs: ["config"], outputs: ["ready"] }] });
|
|
822
853
|
}
|
|
823
854
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PlayerLoaderComponent, decorators: [{
|
|
824
855
|
type: Component,
|
|
825
856
|
args: [{ selector: 'app-player-loader', template: `
|
|
826
|
-
<div
|
|
827
|
-
<
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
857
|
+
<div style="width: 100%; height: 100%;">
|
|
858
|
+
<div *ngIf="isLoading" class="loading-spinner">
|
|
859
|
+
<div class="spinner"></div>
|
|
860
|
+
</div>
|
|
861
|
+
<div [ngSwitch]="config?.video_host" style="width: 100%; height: 100%;">
|
|
862
|
+
<app-plyr-player
|
|
863
|
+
*ngSwitchCase="'hls'"
|
|
864
|
+
[config]="config"
|
|
865
|
+
(ready)="onPlayerReady()"
|
|
866
|
+
></app-plyr-player>
|
|
867
|
+
<app-plyr-player
|
|
868
|
+
*ngSwitchCase="'mp4'"
|
|
869
|
+
[config]="config"
|
|
870
|
+
(ready)="onPlayerReady()"
|
|
871
|
+
></app-plyr-player>
|
|
872
|
+
<app-plyr-player
|
|
873
|
+
*ngSwitchCase="'youtube'"
|
|
874
|
+
[config]="config"
|
|
875
|
+
(ready)="onPlayerReady()"
|
|
876
|
+
></app-plyr-player>
|
|
877
|
+
<app-plyr-player
|
|
878
|
+
*ngSwitchCase="'vimeo'"
|
|
879
|
+
[config]="config"
|
|
880
|
+
(ready)="onPlayerReady()"
|
|
881
|
+
></app-plyr-player>
|
|
882
|
+
<app-panda-player
|
|
883
|
+
*ngSwitchCase="'panda'"
|
|
884
|
+
[config]="config"
|
|
885
|
+
(ready)="onPlayerReady()"
|
|
886
|
+
></app-panda-player>
|
|
887
|
+
<app-scaleup-player
|
|
888
|
+
*ngSwitchCase="'scaleup'"
|
|
889
|
+
[config]="config"
|
|
890
|
+
(ready)="onPlayerReady()"
|
|
891
|
+
></app-scaleup-player>
|
|
892
|
+
<div *ngSwitchDefault>
|
|
893
|
+
<p>Player não suportado ou configuração não fornecida.</p>
|
|
894
|
+
</div>
|
|
853
895
|
</div>
|
|
854
896
|
</div>
|
|
855
897
|
`, standalone: true, imports: [
|
|
@@ -857,7 +899,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
857
899
|
PlyrPlayerComponent,
|
|
858
900
|
PandaPlayerComponent,
|
|
859
901
|
ScaleupPlayerComponent,
|
|
860
|
-
], styles: [":host{display:block;width:100%;height:100%}\n"] }]
|
|
902
|
+
], styles: [":host{display:block;width:100%;height:100%}.loading-spinner{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#000000d9;z-index:10;color:#e3fb63;font-size:1.2rem}.spinner{border:6px solid #e3fb63;border-top:6px solid #000;border-radius:50%;width:48px;height:48px;animation:spin 1s linear infinite;margin-bottom:16px}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] }]
|
|
861
903
|
}], propDecorators: { config: [{
|
|
862
904
|
type: Input
|
|
863
905
|
}] } });
|
|
@@ -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/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;\n library_id?: number | null;\n video_external_id?: 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 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');","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} 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 background: var(--plyr-control-background) !important;\n color: var(--plyr-control-color) !important;\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 }\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\n private plyr!: any;\n private hls?: Hls;\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 ngAfterViewInit() {\n this.setupPlayer();\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 setupPlayer() {\n if (!this.videoRef) return;\n\n this.hls?.destroy();\n this.plyr?.destroy();\n\n this.plyr = new (Plyr as any).default(this.videoRef.nativeElement, {\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: { rel: 0, modestbranding: 1, noCookie: true },\n vimeo: { byline: false, portrait: false, title: false },\n });\n\n this.bindProgressEvents();\n this.loadSource(this.videoRef.nativeElement).then(() =>\n this.setupStartTime()\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 };\n\n this.plyr?.on?.(\"timeupdate\", onTimeUpdate);\n this.plyr?.on?.(\"pause\", emitProgress);\n this.plyr?.on?.(\"ended\", () => {\n emitProgress();\n this.progressService.ended$.next();\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 loadSource(\n video: HTMLVideoElement,\n ): Promise<void> {\n\n const setDisabledTopPageClick = () => {\n setTimeout(() => {\n const wrapper = document.querySelector(\n \".plyr__video-wrapper\"\n ) as HTMLElement;\n if (wrapper) {\n const blocker = document.createElement(\"div\");\n blocker.style.position = \"absolute\";\n blocker.style.top = \"0\";\n blocker.style.left = \"0\";\n blocker.style.width = \"100%\";\n blocker.style.height = \"200px\";\n blocker.style.zIndex = \"5\";\n blocker.style.background = \"transparent\";\n blocker.style.pointerEvents = \"auto\";\n wrapper.appendChild(blocker);\n\n const blocker2 = document.createElement(\"div\");\n blocker2.style.position = \"absolute\";\n blocker2.style.bottom = \"80px\";\n blocker2.style.left = \"0\";\n blocker2.style.width = \"100%\";\n blocker2.style.height = \"100px\";\n blocker2.style.zIndex = \"5\";\n blocker2.style.background = \"transparent\";\n blocker2.style.pointerEvents = \"auto\";\n wrapper.appendChild(blocker2);\n }\n\n }, 2500);\n };\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 setDisabledTopPageClick();\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) {\n setTimeout(() => {\n this.plyr.play();\n }, 1000);\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 ngOnDestroy() {\n this.hls?.destroy();\n this.plyr?.destroy();\n }\n}\n","import { Component, ElementRef, Input, OnDestroy, OnInit, OnChanges, SimpleChanges } 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\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 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_id || (this.config.embed ? this.extractPandaVideoId(this.config.embed) : undefined);\n const libraryId = this.config.library_id || (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 },\n playerConfigs: {\n autoplay: !!this.config.autoPlay,\n smartAutoplay: !!this.config.autoPlay,\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_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 }\n\n if (type === \"panda_ended\") {\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.progressService.ended$.next();\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","import { Component, ElementRef, Input, OnDestroy, OnInit, OnChanges, SimpleChanges } 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\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 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 { Component, Input, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { WebplayerConfig } from '../webplayer.types';\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@Component({\n selector: 'app-player-loader',\n template: `\n <div [ngSwitch]=\"config?.video_host\" style=\"width: 100%; height: 100%;\">\n <app-plyr-player\n *ngSwitchCase=\"'hls'\"\n [config]=\"config\"\n ></app-plyr-player>\n <app-plyr-player\n *ngSwitchCase=\"'mp4'\"\n [config]=\"config\"\n ></app-plyr-player>\n <app-plyr-player\n *ngSwitchCase=\"'youtube'\"\n [config]=\"config\"\n ></app-plyr-player>\n <app-plyr-player\n *ngSwitchCase=\"'vimeo'\"\n [config]=\"config\"\n ></app-plyr-player>\n <app-panda-player\n *ngSwitchCase=\"'panda'\"\n [config]=\"config\"\n ></app-panda-player>\n <app-scaleup-player\n *ngSwitchCase=\"'scaleup'\"\n [config]=\"config\"\n ></app-scaleup-player>\n <div *ngSwitchDefault>\n <p>Player not supported or config not provided.</p>\n </div>\n </div>\n `,\n styles: [`\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n `],\n standalone: true,\n imports: [\n CommonModule,\n PlyrPlayerComponent,\n PandaPlayerComponent,\n ScaleupPlayerComponent,\n ],\n})\nexport class PlayerLoaderComponent implements OnInit{\n @Input() config!: WebplayerConfig;\n\n ngOnInit(): void {\n console.log(this.config);\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.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/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 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 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');","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 background: var(--plyr-control-background) !important;\n color: var(--plyr-control-color) !important;\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 }\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\n @Output() ready = new EventEmitter<void>();\n\n private plyr!: any;\n private hls?: Hls;\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 ngAfterViewInit() {\n this.setupPlayer();\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 setupPlayer() {\n if (!this.videoRef) return;\n\n this.hls?.destroy();\n this.plyr?.destroy();\n\n this.plyr = new (Plyr as any).default(this.videoRef.nativeElement, {\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: { rel: 0, modestbranding: 1, noCookie: true },\n vimeo: { byline: false, portrait: false, title: false },\n });\n\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 };\n\n this.plyr?.on?.(\"timeupdate\", onTimeUpdate);\n this.plyr?.on?.(\"pause\", emitProgress);\n this.plyr?.on?.(\"ended\", () => {\n emitProgress();\n this.progressService.ended$.next();\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 loadSource(\n video: HTMLVideoElement,\n ): Promise<void> {\n\n const setDisabledTopPageClick = () => {\n setTimeout(() => {\n const wrapper = document.querySelector(\n \".plyr__video-wrapper\"\n ) as HTMLElement;\n if (wrapper) {\n const blocker = document.createElement(\"div\");\n blocker.style.position = \"absolute\";\n blocker.style.top = \"0\";\n blocker.style.left = \"0\";\n blocker.style.width = \"100%\";\n blocker.style.height = \"200px\";\n blocker.style.zIndex = \"5\";\n blocker.style.background = \"transparent\";\n blocker.style.pointerEvents = \"auto\";\n wrapper.appendChild(blocker);\n\n const blocker2 = document.createElement(\"div\");\n blocker2.style.position = \"absolute\";\n blocker2.style.bottom = \"80px\";\n blocker2.style.left = \"0\";\n blocker2.style.width = \"100%\";\n blocker2.style.height = \"100px\";\n blocker2.style.zIndex = \"5\";\n blocker2.style.background = \"transparent\";\n blocker2.style.pointerEvents = \"auto\";\n wrapper.appendChild(blocker2);\n }\n\n }, 2500);\n };\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 setDisabledTopPageClick();\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) {\n setTimeout(() => {\n this.plyr.play();\n }, 1000);\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 ngOnDestroy() {\n this.hls?.destroy();\n this.plyr?.destroy();\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 },\n playerConfigs: {\n autoplay: !!this.config.autoPlay,\n smartAutoplay: !!this.config.autoPlay,\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_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 }\n\n if (type === \"panda_ended\") {\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.progressService.ended$.next();\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","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 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 { Component, Input, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { WebplayerConfig } from '../webplayer.types';\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@Component({\n selector: 'app-player-loader',\n template: `\n <div style=\"width: 100%; height: 100%;\">\n <div *ngIf=\"isLoading\" class=\"loading-spinner\">\n <div class=\"spinner\"></div>\n </div>\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 :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n .loading-spinner {\n position: absolute;\n top: 0; left: 0; right: 0; bottom: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n background: rgba(0,0,0,0.85);\n z-index: 10;\n color: #e3fb63;\n font-size: 1.2rem;\n }\n .spinner {\n border: 6px solid #e3fb63;\n border-top: 6px solid #000;\n border-radius: 50%;\n width: 48px;\n height: 48px;\n animation: spin 1s linear infinite;\n margin-bottom: 16px;\n }\n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n `],\n standalone: true,\n imports: [\n CommonModule,\n PlyrPlayerComponent,\n PandaPlayerComponent,\n ScaleupPlayerComponent,\n ],\n})\nexport class PlayerLoaderComponent implements OnInit{\n @Input() config!: WebplayerConfig;\n\n isLoading = true;\n\n onPlayerReady() {\n this.isLoading = false;\n }\n\n ngOnInit(): void {\n console.log(this.config);\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.WebplayerConfigService","i2.WebplayerProgressService"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -3,6 +3,8 @@ import { WebplayerConfig } from '../webplayer.types';
|
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export declare class PlayerLoaderComponent implements OnInit {
|
|
5
5
|
config: WebplayerConfig;
|
|
6
|
+
isLoading: boolean;
|
|
7
|
+
onPlayerReady(): void;
|
|
6
8
|
ngOnInit(): void;
|
|
7
9
|
static ɵfac: i0.ɵɵFactoryDeclaration<PlayerLoaderComponent, never>;
|
|
8
10
|
static ɵcmp: i0.ɵɵComponentDeclaration<PlayerLoaderComponent, "app-player-loader", never, { "config": { "alias": "config"; "required": false; }; }, {}, never, never, true, never>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ElementRef, OnDestroy, OnInit, OnChanges, SimpleChanges } from '@angular/core';
|
|
1
|
+
import { ElementRef, OnDestroy, OnInit, OnChanges, SimpleChanges, EventEmitter } from '@angular/core';
|
|
2
2
|
import { WebplayerConfig } from '../../webplayer.types';
|
|
3
3
|
import { WebplayerProgressService } from '../../progress.service';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
@@ -12,6 +12,7 @@ export declare class PandaPlayerComponent implements OnInit, OnDestroy, OnChange
|
|
|
12
12
|
private elementRef;
|
|
13
13
|
private progressService;
|
|
14
14
|
config: WebplayerConfig;
|
|
15
|
+
ready: EventEmitter<void>;
|
|
15
16
|
private pandaPlayer?;
|
|
16
17
|
private pandaContainer?;
|
|
17
18
|
private pandaProgressThrottle;
|
|
@@ -29,5 +30,5 @@ export declare class PandaPlayerComponent implements OnInit, OnDestroy, OnChange
|
|
|
29
30
|
private handlePandaEvent;
|
|
30
31
|
private resolveStartTime;
|
|
31
32
|
static ɵfac: i0.ɵɵFactoryDeclaration<PandaPlayerComponent, never>;
|
|
32
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<PandaPlayerComponent, "app-panda-player", never, { "config": { "alias": "config"; "required": false; }; }, {}, never, never, true, never>;
|
|
33
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PandaPlayerComponent, "app-panda-player", never, { "config": { "alias": "config"; "required": false; }; }, { "ready": "ready"; }, never, never, true, never>;
|
|
33
34
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AfterViewInit, ElementRef, OnChanges, OnDestroy, OnInit, SimpleChanges } from "@angular/core";
|
|
1
|
+
import { AfterViewInit, ElementRef, OnChanges, OnDestroy, OnInit, SimpleChanges, EventEmitter } from "@angular/core";
|
|
2
2
|
import "plyr/dist/plyr.css";
|
|
3
3
|
import { WebplayerConfig } from "../../webplayer.types";
|
|
4
4
|
import { WebplayerProgressService } from "../../progress.service";
|
|
@@ -8,6 +8,7 @@ export declare class PlyrPlayerComponent implements AfterViewInit, OnDestroy, On
|
|
|
8
8
|
private document;
|
|
9
9
|
videoRef: ElementRef<HTMLVideoElement>;
|
|
10
10
|
config: WebplayerConfig;
|
|
11
|
+
ready: EventEmitter<void>;
|
|
11
12
|
private plyr;
|
|
12
13
|
private hls?;
|
|
13
14
|
constructor(progressService: WebplayerProgressService, document: Document);
|
|
@@ -23,5 +24,5 @@ export declare class PlyrPlayerComponent implements AfterViewInit, OnDestroy, On
|
|
|
23
24
|
private resolveStartTime;
|
|
24
25
|
ngOnDestroy(): void;
|
|
25
26
|
static ɵfac: i0.ɵɵFactoryDeclaration<PlyrPlayerComponent, never>;
|
|
26
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<PlyrPlayerComponent, "app-plyr-player", never, { "config": { "alias": "config"; "required": false; }; }, {}, never, never, true, never>;
|
|
27
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PlyrPlayerComponent, "app-plyr-player", never, { "config": { "alias": "config"; "required": false; }; }, { "ready": "ready"; }, never, never, true, never>;
|
|
27
28
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ElementRef, OnDestroy, OnInit, OnChanges, SimpleChanges } from '@angular/core';
|
|
1
|
+
import { ElementRef, OnDestroy, OnInit, OnChanges, SimpleChanges, EventEmitter } from '@angular/core';
|
|
2
2
|
import { WebplayerConfig } from '../../webplayer.types';
|
|
3
3
|
import { WebplayerProgressService } from '../../progress.service';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
@@ -6,6 +6,7 @@ export declare class ScaleupPlayerComponent implements OnInit, OnDestroy, OnChan
|
|
|
6
6
|
private elementRef;
|
|
7
7
|
private progressService;
|
|
8
8
|
config: WebplayerConfig;
|
|
9
|
+
ready: EventEmitter<void>;
|
|
9
10
|
private scaleupIframe?;
|
|
10
11
|
private scaleupMessageHandler?;
|
|
11
12
|
private scaleupProgressThrottle;
|
|
@@ -15,5 +16,5 @@ export declare class ScaleupPlayerComponent implements OnInit, OnDestroy, OnChan
|
|
|
15
16
|
private loadScaleupPlayer;
|
|
16
17
|
ngOnDestroy(): void;
|
|
17
18
|
static ɵfac: i0.ɵɵFactoryDeclaration<ScaleupPlayerComponent, never>;
|
|
18
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ScaleupPlayerComponent, "app-scaleup-player", never, { "config": { "alias": "config"; "required": false; }; }, {}, never, never, true, never>;
|
|
19
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ScaleupPlayerComponent, "app-scaleup-player", never, { "config": { "alias": "config"; "required": false; }; }, { "ready": "ready"; }, never, never, true, never>;
|
|
19
20
|
}
|
package/webplayer.types.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { InjectionToken } from '@angular/core';
|
|
2
2
|
export interface WebplayerConfig {
|
|
3
3
|
video_host: 'youtube' | 'vimeo' | 'mp4' | 'hls' | 'panda' | 'scaleup';
|
|
4
|
-
video_id: string;
|
|
5
|
-
library_id?: number | null;
|
|
4
|
+
video_id: string | null;
|
|
5
|
+
library_id?: string | number | null;
|
|
6
6
|
video_external_id?: string | null;
|
|
7
7
|
last_time?: number | null;
|
|
8
8
|
last_percent?: number;
|