@obipascal/player 1.0.3 → 1.0.5
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/README.md +69 -0
- package/dist/src/player.d.ts +3 -1
- package/dist/src/ui-controller.d.ts +0 -6
- package/dist/wontum-player.cjs.js +100 -114
- package/dist/wontum-player.esm.js +308 -574
- package/package.json +1 -1
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var o = (
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
|
|
1
|
+
var V = Object.defineProperty;
|
|
2
|
+
var N = (l, t, e) => t in l ? V(l, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : l[t] = e;
|
|
3
|
+
var o = (l, t, e) => N(l, typeof t != "symbol" ? t + "" : t, e);
|
|
4
|
+
import p from "hls.js";
|
|
5
|
+
import { jsx as B } from "react/jsx-runtime";
|
|
6
|
+
import * as $ from "react";
|
|
7
|
+
import { useRef as w, useEffect as f, useState as b } from "react";
|
|
8
|
+
class _ {
|
|
8
9
|
constructor(t) {
|
|
9
10
|
o(this, "config");
|
|
10
11
|
o(this, "sessionId");
|
|
@@ -20,9 +21,9 @@ class ut {
|
|
|
20
21
|
this.config = t, this.sessionId = (t == null ? void 0 : t.sessionId) || this.generateSessionId(), this.sessionStartTime = Date.now(), (e = this.config) != null && e.enabled && this.trackEvent("session_start", this.getSessionData());
|
|
21
22
|
}
|
|
22
23
|
trackEvent(t, e = {}) {
|
|
23
|
-
var
|
|
24
|
-
if (!((
|
|
25
|
-
const
|
|
24
|
+
var i;
|
|
25
|
+
if (!((i = this.config) != null && i.enabled)) return;
|
|
26
|
+
const n = {
|
|
26
27
|
eventType: t,
|
|
27
28
|
timestamp: Date.now(),
|
|
28
29
|
sessionId: this.sessionId,
|
|
@@ -33,7 +34,7 @@ class ut {
|
|
|
33
34
|
...this.getQoEMetrics()
|
|
34
35
|
}
|
|
35
36
|
};
|
|
36
|
-
this.events.push(
|
|
37
|
+
this.events.push(n), this.updateMetrics(t, e), this.config.endpoint && this.sendEvent(n), process.env.NODE_ENV === "development" && console.log("[Analytics]", t, n.data);
|
|
37
38
|
}
|
|
38
39
|
updateMetrics(t, e) {
|
|
39
40
|
switch (t) {
|
|
@@ -96,8 +97,8 @@ class ut {
|
|
|
96
97
|
},
|
|
97
98
|
body: JSON.stringify(t)
|
|
98
99
|
});
|
|
99
|
-
} catch (
|
|
100
|
-
console.error("Failed to send analytics event:",
|
|
100
|
+
} catch (n) {
|
|
101
|
+
console.error("Failed to send analytics event:", n);
|
|
101
102
|
}
|
|
102
103
|
}
|
|
103
104
|
generateSessionId() {
|
|
@@ -118,7 +119,7 @@ class ut {
|
|
|
118
119
|
(t = this.config) != null && t.enabled && this.trackEvent("session_end", this.getSessionData()), this.events = [];
|
|
119
120
|
}
|
|
120
121
|
}
|
|
121
|
-
class
|
|
122
|
+
class Q {
|
|
122
123
|
constructor(t, e) {
|
|
123
124
|
o(this, "container");
|
|
124
125
|
o(this, "player");
|
|
@@ -130,9 +131,6 @@ class dt {
|
|
|
130
131
|
o(this, "skipForwardButton");
|
|
131
132
|
o(this, "volumeButton");
|
|
132
133
|
o(this, "fullscreenButton");
|
|
133
|
-
o(this, "qualityButton");
|
|
134
|
-
o(this, "subtitleButton");
|
|
135
|
-
o(this, "speedButton");
|
|
136
134
|
o(this, "settingsButton");
|
|
137
135
|
// private timeDisplay: HTMLElement
|
|
138
136
|
o(this, "volumeSlider");
|
|
@@ -140,24 +138,24 @@ class dt {
|
|
|
140
138
|
// private controlsVisible = true
|
|
141
139
|
o(this, "hideControlsTimeout", null);
|
|
142
140
|
o(this, "stickyControls", !1);
|
|
143
|
-
this.container = t, this.player = e, this.injectStyles(), this.createProgressBar(), this.controlsContainer = this.createControls(), this.container.appendChild(this.controlsContainer), this.playButton = this.controlsContainer.querySelector(".wontum-play-btn"), this.skipBackwardButton = this.controlsContainer.querySelector(".wontum-skip-backward-btn"), this.skipForwardButton = this.controlsContainer.querySelector(".wontum-skip-forward-btn"), this.volumeButton = this.controlsContainer.querySelector(".wontum-volume-btn"), this.fullscreenButton = this.controlsContainer.querySelector(".wontum-fullscreen-btn"), this.
|
|
141
|
+
this.container = t, this.player = e, this.injectStyles(), this.createProgressBar(), this.controlsContainer = this.createControls(), this.container.appendChild(this.controlsContainer), this.playButton = this.controlsContainer.querySelector(".wontum-play-btn"), this.skipBackwardButton = this.controlsContainer.querySelector(".wontum-skip-backward-btn"), this.skipForwardButton = this.controlsContainer.querySelector(".wontum-skip-forward-btn"), this.volumeButton = this.controlsContainer.querySelector(".wontum-volume-btn"), this.fullscreenButton = this.controlsContainer.querySelector(".wontum-fullscreen-btn"), this.settingsButton = this.controlsContainer.querySelector(".wontum-settings-btn"), this.volumeSlider = this.controlsContainer.querySelector(".wontum-volume-slider"), this.progressInput = this.container.querySelector(".wontum-progress-input"), this.progressBar = this.container.querySelector(".wontum-progress-filled"), this.stickyControls = this.player.config.stickyControls || !1, this.stickyControls && this.controlsContainer.classList.add("sticky"), this.setupEventListeners(), this.setupPlayerEventListeners();
|
|
144
142
|
}
|
|
145
143
|
injectStyles() {
|
|
146
144
|
const t = "wontum-player-styles";
|
|
147
145
|
if (document.getElementById(t)) return;
|
|
148
|
-
const e = this.player.config.theme || {},
|
|
149
|
-
|
|
146
|
+
const e = this.player.config.theme || {}, n = e.primaryColor || "#3b82f6", i = e.accentColor || "#2563eb", s = e.fontFamily || "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif", a = e.controlsBackground || "linear-gradient(to top, rgba(0,0,0,0.8), transparent)", r = e.buttonHoverBg || "rgba(255, 255, 255, 0.1)", c = e.progressHeight || "6px", u = e.borderRadius || "4px", m = document.createElement("style");
|
|
147
|
+
m.id = t, m.textContent = `
|
|
150
148
|
.wontum-player-container {
|
|
151
149
|
position: relative;
|
|
152
150
|
background: #000;
|
|
153
|
-
font-family: ${
|
|
151
|
+
font-family: ${s};
|
|
154
152
|
overflow: hidden;
|
|
155
|
-
--primary-color: ${
|
|
156
|
-
--accent-color: ${
|
|
157
|
-
--controls-bg: ${
|
|
158
|
-
--button-hover: ${
|
|
159
|
-
--progress-height: ${
|
|
160
|
-
--border-radius: ${
|
|
153
|
+
--primary-color: ${n};
|
|
154
|
+
--accent-color: ${i};
|
|
155
|
+
--controls-bg: ${a};
|
|
156
|
+
--button-hover: ${r};
|
|
157
|
+
--progress-height: ${c};
|
|
158
|
+
--border-radius: ${u};
|
|
161
159
|
}
|
|
162
160
|
|
|
163
161
|
.wontum-player-video {
|
|
@@ -426,21 +424,7 @@ class dt {
|
|
|
426
424
|
}
|
|
427
425
|
|
|
428
426
|
.wontum-quality-menu {
|
|
429
|
-
position: absolute;
|
|
430
|
-
bottom: 100%;
|
|
431
|
-
right: 0;
|
|
432
|
-
background: rgba(20, 20, 20, 0.95);
|
|
433
|
-
backdrop-filter: blur(10px);
|
|
434
|
-
border-radius: 6px;
|
|
435
427
|
padding: 6px 0;
|
|
436
|
-
margin-bottom: 8px;
|
|
437
|
-
display: none;
|
|
438
|
-
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
|
|
439
|
-
min-width: 120px;
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
.wontum-quality-menu.active {
|
|
443
|
-
display: block;
|
|
444
428
|
}
|
|
445
429
|
|
|
446
430
|
.wontum-quality-option {
|
|
@@ -463,21 +447,7 @@ class dt {
|
|
|
463
447
|
}
|
|
464
448
|
|
|
465
449
|
.wontum-speed-menu {
|
|
466
|
-
position: absolute;
|
|
467
|
-
bottom: 100%;
|
|
468
|
-
right: 0;
|
|
469
|
-
background: rgba(20, 20, 20, 0.95);
|
|
470
|
-
backdrop-filter: blur(10px);
|
|
471
|
-
border-radius: 6px;
|
|
472
450
|
padding: 6px 0;
|
|
473
|
-
margin-bottom: 8px;
|
|
474
|
-
display: none;
|
|
475
|
-
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
|
|
476
|
-
min-width: 120px;
|
|
477
|
-
}
|
|
478
|
-
|
|
479
|
-
.wontum-speed-menu.active {
|
|
480
|
-
display: block;
|
|
481
451
|
}
|
|
482
452
|
|
|
483
453
|
.wontum-speed-option {
|
|
@@ -499,24 +469,73 @@ class dt {
|
|
|
499
469
|
background: rgba(255, 255, 255, 0.05);
|
|
500
470
|
}
|
|
501
471
|
|
|
502
|
-
.wontum-settings-
|
|
472
|
+
.wontum-settings-panel {
|
|
503
473
|
position: absolute;
|
|
504
474
|
bottom: 100%;
|
|
505
475
|
right: 0;
|
|
506
476
|
background: rgba(20, 20, 20, 0.95);
|
|
507
477
|
backdrop-filter: blur(10px);
|
|
508
|
-
border-radius:
|
|
509
|
-
padding: 6px 0;
|
|
478
|
+
border-radius: 8px;
|
|
510
479
|
margin-bottom: 8px;
|
|
511
|
-
min-width:
|
|
480
|
+
min-width: 320px;
|
|
512
481
|
display: none;
|
|
513
|
-
box-shadow: 0 4px
|
|
482
|
+
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
|
|
483
|
+
overflow: hidden;
|
|
514
484
|
}
|
|
515
485
|
|
|
516
|
-
.wontum-settings-
|
|
486
|
+
.wontum-settings-panel.active {
|
|
487
|
+
display: flex;
|
|
488
|
+
flex-direction: column;
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
.wontum-settings-tabs {
|
|
492
|
+
display: flex;
|
|
493
|
+
background: rgba(0, 0, 0, 0.3);
|
|
494
|
+
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
.wontum-tab {
|
|
498
|
+
flex: 1;
|
|
499
|
+
padding: 10px 12px;
|
|
500
|
+
background: none;
|
|
501
|
+
border: none;
|
|
502
|
+
color: rgba(255, 255, 255, 0.7);
|
|
503
|
+
font-size: 12px;
|
|
504
|
+
cursor: pointer;
|
|
505
|
+
transition: all 0.2s ease;
|
|
506
|
+
border-bottom: 2px solid transparent;
|
|
507
|
+
font-family: inherit;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
.wontum-tab:hover {
|
|
511
|
+
background: rgba(255, 255, 255, 0.05);
|
|
512
|
+
color: rgba(255, 255, 255, 0.9);
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
.wontum-tab.active {
|
|
516
|
+
color: var(--primary-color);
|
|
517
|
+
border-bottom-color: var(--primary-color);
|
|
518
|
+
background: rgba(59, 130, 246, 0.1);
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
.wontum-settings-content {
|
|
522
|
+
min-height: 120px;
|
|
523
|
+
max-height: 300px;
|
|
524
|
+
overflow-y: auto;
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
.wontum-tab-panel {
|
|
528
|
+
display: none;
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
.wontum-tab-panel.active {
|
|
517
532
|
display: block;
|
|
518
533
|
}
|
|
519
534
|
|
|
535
|
+
.wontum-settings-menu {
|
|
536
|
+
padding: 6px 0;
|
|
537
|
+
}
|
|
538
|
+
|
|
520
539
|
.wontum-settings-option {
|
|
521
540
|
padding: 12px 16px;
|
|
522
541
|
cursor: pointer;
|
|
@@ -564,21 +583,7 @@ class dt {
|
|
|
564
583
|
}
|
|
565
584
|
|
|
566
585
|
.wontum-subtitle-menu {
|
|
567
|
-
position: absolute;
|
|
568
|
-
bottom: 100%;
|
|
569
|
-
right: 0;
|
|
570
|
-
background: rgba(20, 20, 20, 0.95);
|
|
571
|
-
backdrop-filter: blur(10px);
|
|
572
|
-
border-radius: 6px;
|
|
573
586
|
padding: 6px 0;
|
|
574
|
-
margin-bottom: 8px;
|
|
575
|
-
display: none;
|
|
576
|
-
min-width: 150px;
|
|
577
|
-
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
|
|
578
|
-
}
|
|
579
|
-
|
|
580
|
-
.wontum-subtitle-menu.active {
|
|
581
|
-
display: block;
|
|
582
587
|
}
|
|
583
588
|
|
|
584
589
|
.wontum-subtitle-option {
|
|
@@ -611,7 +616,7 @@ class dt {
|
|
|
611
616
|
transform: translateY(0) !important;
|
|
612
617
|
pointer-events: all !important;
|
|
613
618
|
}
|
|
614
|
-
`, document.head.appendChild(
|
|
619
|
+
`, document.head.appendChild(m), this.container.classList.add("wontum-player-container");
|
|
615
620
|
}
|
|
616
621
|
createProgressBar() {
|
|
617
622
|
const t = document.createElement("div");
|
|
@@ -655,32 +660,32 @@ class dt {
|
|
|
655
660
|
|
|
656
661
|
<div class="wontum-spacer"></div>
|
|
657
662
|
|
|
658
|
-
<div class="wontum-subtitle-container" style="position: relative;">
|
|
659
|
-
<button class="wontum-btn wontum-subtitle-btn" aria-label="Subtitles">
|
|
660
|
-
${this.getSubtitleIcon()}
|
|
661
|
-
</button>
|
|
662
|
-
<div class="wontum-subtitle-menu"></div>
|
|
663
|
-
</div>
|
|
664
|
-
|
|
665
|
-
<div class="wontum-speed-container" style="position: relative;">
|
|
666
|
-
<button class="wontum-btn wontum-speed-btn" aria-label="Playback Speed">
|
|
667
|
-
${this.getSpeedIcon()}
|
|
668
|
-
</button>
|
|
669
|
-
<div class="wontum-speed-menu"></div>
|
|
670
|
-
</div>
|
|
671
|
-
|
|
672
|
-
<div class="wontum-quality-container" style="position: relative;">
|
|
673
|
-
<button class="wontum-btn wontum-quality-btn" aria-label="Quality">
|
|
674
|
-
${this.getQualityIcon()}
|
|
675
|
-
</button>
|
|
676
|
-
<div class="wontum-quality-menu"></div>
|
|
677
|
-
</div>
|
|
678
|
-
|
|
679
663
|
<div class="wontum-settings-container" style="position: relative;">
|
|
680
664
|
<button class="wontum-btn wontum-settings-btn" aria-label="Settings">
|
|
681
665
|
${this.getSettingsIcon()}
|
|
682
666
|
</button>
|
|
683
|
-
<div class="wontum-settings-
|
|
667
|
+
<div class="wontum-settings-panel">
|
|
668
|
+
<div class="wontum-settings-tabs">
|
|
669
|
+
<button class="wontum-tab active" data-tab="general">General</button>
|
|
670
|
+
<button class="wontum-tab" data-tab="quality">Quality</button>
|
|
671
|
+
<button class="wontum-tab" data-tab="speed">Speed</button>
|
|
672
|
+
<button class="wontum-tab" data-tab="subtitles">Subtitles</button>
|
|
673
|
+
</div>
|
|
674
|
+
<div class="wontum-settings-content">
|
|
675
|
+
<div class="wontum-tab-panel active" data-panel="general">
|
|
676
|
+
<div class="wontum-settings-menu"></div>
|
|
677
|
+
</div>
|
|
678
|
+
<div class="wontum-tab-panel" data-panel="quality">
|
|
679
|
+
<div class="wontum-quality-menu"></div>
|
|
680
|
+
</div>
|
|
681
|
+
<div class="wontum-tab-panel" data-panel="speed">
|
|
682
|
+
<div class="wontum-speed-menu"></div>
|
|
683
|
+
</div>
|
|
684
|
+
<div class="wontum-tab-panel" data-panel="subtitles">
|
|
685
|
+
<div class="wontum-subtitle-menu"></div>
|
|
686
|
+
</div>
|
|
687
|
+
</div>
|
|
688
|
+
</div>
|
|
684
689
|
</div>
|
|
685
690
|
|
|
686
691
|
<button class="wontum-btn wontum-fullscreen-btn" aria-label="Fullscreen">
|
|
@@ -700,28 +705,28 @@ class dt {
|
|
|
700
705
|
this.player.skipBackward(10);
|
|
701
706
|
}), this.skipForwardButton.addEventListener("click", () => {
|
|
702
707
|
this.player.skipForward(10);
|
|
703
|
-
}), this.progressInput.addEventListener("input", (
|
|
704
|
-
const
|
|
705
|
-
this.player.seek(
|
|
706
|
-
}), this.volumeSlider.addEventListener("input", (
|
|
707
|
-
const
|
|
708
|
-
this.player.setVolume(
|
|
708
|
+
}), this.progressInput.addEventListener("input", (n) => {
|
|
709
|
+
const i = n.target, s = parseFloat(i.value), a = this.player.getState(), r = s / 100 * a.duration;
|
|
710
|
+
this.player.seek(r);
|
|
711
|
+
}), this.volumeSlider.addEventListener("input", (n) => {
|
|
712
|
+
const i = n.target, s = parseFloat(i.value) / 100;
|
|
713
|
+
this.player.setVolume(s);
|
|
709
714
|
}), this.volumeButton.addEventListener("click", () => {
|
|
710
715
|
this.player.getState().muted ? this.player.unmute() : this.player.mute();
|
|
711
716
|
}), this.fullscreenButton.addEventListener("click", () => {
|
|
712
717
|
this.player.getState().fullscreen ? this.player.exitFullscreen() : this.player.enterFullscreen();
|
|
713
|
-
}), this.qualityButton.addEventListener("click", () => {
|
|
714
|
-
var s, r, i;
|
|
715
|
-
this.controlsContainer.querySelector(".wontum-quality-menu").classList.toggle("active"), (s = this.controlsContainer.querySelector(".wontum-settings-menu")) == null || s.classList.remove("active"), (r = this.controlsContainer.querySelector(".wontum-subtitle-menu")) == null || r.classList.remove("active"), (i = this.controlsContainer.querySelector(".wontum-speed-menu")) == null || i.classList.remove("active");
|
|
716
|
-
}), this.subtitleButton.addEventListener("click", () => {
|
|
717
|
-
var s, r, i;
|
|
718
|
-
this.controlsContainer.querySelector(".wontum-subtitle-menu").classList.toggle("active"), (s = this.controlsContainer.querySelector(".wontum-settings-menu")) == null || s.classList.remove("active"), (r = this.controlsContainer.querySelector(".wontum-quality-menu")) == null || r.classList.remove("active"), (i = this.controlsContainer.querySelector(".wontum-speed-menu")) == null || i.classList.remove("active"), this.updateSubtitleMenu();
|
|
719
|
-
}), this.speedButton.addEventListener("click", () => {
|
|
720
|
-
var s, r, i;
|
|
721
|
-
this.controlsContainer.querySelector(".wontum-speed-menu").classList.toggle("active"), (s = this.controlsContainer.querySelector(".wontum-settings-menu")) == null || s.classList.remove("active"), (r = this.controlsContainer.querySelector(".wontum-quality-menu")) == null || r.classList.remove("active"), (i = this.controlsContainer.querySelector(".wontum-subtitle-menu")) == null || i.classList.remove("active"), this.updateSpeedMenu();
|
|
722
718
|
}), this.settingsButton.addEventListener("click", () => {
|
|
723
|
-
|
|
724
|
-
|
|
719
|
+
const n = this.controlsContainer.querySelector(".wontum-settings-panel");
|
|
720
|
+
n.classList.toggle("active"), n.classList.contains("active") && (this.updateSettingsMenu(), this.updateQualityMenu(), this.updateSpeedMenu(), this.updateSubtitleMenu());
|
|
721
|
+
});
|
|
722
|
+
const t = this.controlsContainer.querySelectorAll(".wontum-tab");
|
|
723
|
+
t.forEach((n) => {
|
|
724
|
+
n.addEventListener("click", (i) => {
|
|
725
|
+
const s = i.currentTarget, a = s.getAttribute("data-tab");
|
|
726
|
+
t.forEach((u) => u.classList.remove("active")), s.classList.add("active"), this.controlsContainer.querySelectorAll(".wontum-tab-panel").forEach((u) => u.classList.remove("active"));
|
|
727
|
+
const c = this.controlsContainer.querySelector(`[data-panel="${a}"]`);
|
|
728
|
+
c == null || c.classList.add("active");
|
|
729
|
+
});
|
|
725
730
|
}), this.player.getVideoElement().addEventListener("click", () => {
|
|
726
731
|
this.player.getState().playing ? this.player.pause() : this.player.play();
|
|
727
732
|
}), this.container.addEventListener("mousemove", () => {
|
|
@@ -736,19 +741,19 @@ class dt {
|
|
|
736
741
|
}), this.player.on("pause", () => {
|
|
737
742
|
this.playButton.innerHTML = this.getPlayIcon();
|
|
738
743
|
}), this.player.on("timeupdate", (t) => {
|
|
739
|
-
const { currentTime: e } = t.data,
|
|
740
|
-
if (
|
|
741
|
-
const
|
|
742
|
-
this.progressBar.style.width = `${
|
|
744
|
+
const { currentTime: e } = t.data, n = this.player.getState();
|
|
745
|
+
if (n.duration > 0) {
|
|
746
|
+
const s = e / n.duration * 100;
|
|
747
|
+
this.progressBar.style.width = `${s}%`, this.progressInput.value = s.toString();
|
|
743
748
|
}
|
|
744
|
-
const
|
|
745
|
-
|
|
749
|
+
const i = this.controlsContainer.querySelector(".wontum-current-time");
|
|
750
|
+
i.textContent = this.formatTime(e);
|
|
746
751
|
}), this.player.on("loadedmetadata", (t) => {
|
|
747
|
-
const { duration: e } = t.data,
|
|
748
|
-
|
|
752
|
+
const { duration: e } = t.data, n = this.controlsContainer.querySelector(".wontum-duration");
|
|
753
|
+
n.textContent = this.formatTime(e), t.data.qualities && this.updateQualityMenu(t.data.qualities);
|
|
749
754
|
}), this.player.on("volumechange", (t) => {
|
|
750
|
-
const { volume: e, muted:
|
|
751
|
-
this.volumeSlider.value = (e * 100).toString(), this.volumeButton.innerHTML =
|
|
755
|
+
const { volume: e, muted: n } = t.data;
|
|
756
|
+
this.volumeSlider.value = (e * 100).toString(), this.volumeButton.innerHTML = n ? this.getMutedIcon() : this.getVolumeIcon();
|
|
752
757
|
}), this.player.on("waiting", () => {
|
|
753
758
|
const t = this.controlsContainer.querySelector(".wontum-loading");
|
|
754
759
|
t.style.display = "block";
|
|
@@ -763,35 +768,35 @@ class dt {
|
|
|
763
768
|
t.innerHTML = '<div class="wontum-subtitle-option">No subtitles available</div>';
|
|
764
769
|
return;
|
|
765
770
|
}
|
|
766
|
-
const
|
|
771
|
+
const n = e.findIndex((i) => i.mode === "showing");
|
|
767
772
|
t.innerHTML = `
|
|
768
|
-
<div class="wontum-subtitle-option ${
|
|
773
|
+
<div class="wontum-subtitle-option ${n === -1 ? "active" : ""}" data-track="-1">Off</div>
|
|
769
774
|
${e.map(
|
|
770
|
-
(
|
|
771
|
-
<div class="wontum-subtitle-option ${
|
|
772
|
-
${
|
|
775
|
+
(i, s) => `
|
|
776
|
+
<div class="wontum-subtitle-option ${s === n ? "active" : ""}" data-track="${s}">
|
|
777
|
+
${i.label || i.language || `Track ${s + 1}`}
|
|
773
778
|
</div>
|
|
774
779
|
`
|
|
775
780
|
).join("")}
|
|
776
|
-
`, t.querySelectorAll(".wontum-subtitle-option").forEach((
|
|
777
|
-
|
|
778
|
-
const
|
|
779
|
-
|
|
781
|
+
`, t.querySelectorAll(".wontum-subtitle-option").forEach((i) => {
|
|
782
|
+
i.addEventListener("click", (s) => {
|
|
783
|
+
const a = s.target, r = parseInt(a.dataset.track || "-1");
|
|
784
|
+
r === -1 ? this.player.disableSubtitles() : this.player.enableSubtitles(r), t.querySelectorAll(".wontum-subtitle-option").forEach((c) => c.classList.remove("active")), a.classList.add("active");
|
|
780
785
|
});
|
|
781
786
|
});
|
|
782
787
|
}
|
|
783
788
|
updateSpeedMenu() {
|
|
784
|
-
const t = this.controlsContainer.querySelector(".wontum-speed-menu"),
|
|
785
|
-
t.innerHTML =
|
|
786
|
-
(
|
|
787
|
-
<div class="wontum-speed-option ${
|
|
788
|
-
${
|
|
789
|
+
const t = this.controlsContainer.querySelector(".wontum-speed-menu"), n = this.player.getState().playbackRate || 1, i = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];
|
|
790
|
+
t.innerHTML = i.map(
|
|
791
|
+
(s) => `
|
|
792
|
+
<div class="wontum-speed-option ${n === s ? "active" : ""}" data-speed="${s}">
|
|
793
|
+
${s === 1 ? "Normal" : s + "x"}
|
|
789
794
|
</div>
|
|
790
795
|
`
|
|
791
|
-
).join(""), t.querySelectorAll(".wontum-speed-option").forEach((
|
|
792
|
-
|
|
793
|
-
const
|
|
794
|
-
this.player.setPlaybackRate(
|
|
796
|
+
).join(""), t.querySelectorAll(".wontum-speed-option").forEach((s) => {
|
|
797
|
+
s.addEventListener("click", (a) => {
|
|
798
|
+
const r = a.target, c = parseFloat(r.dataset.speed || "1");
|
|
799
|
+
this.player.setPlaybackRate(c), t.querySelectorAll(".wontum-speed-option").forEach((u) => u.classList.remove("active")), r.classList.add("active");
|
|
795
800
|
});
|
|
796
801
|
});
|
|
797
802
|
}
|
|
@@ -809,18 +814,22 @@ class dt {
|
|
|
809
814
|
});
|
|
810
815
|
}
|
|
811
816
|
updateQualityMenu(t) {
|
|
812
|
-
const e = this.controlsContainer.querySelector(".wontum-quality-menu");
|
|
817
|
+
const e = this.controlsContainer.querySelector(".wontum-quality-menu"), n = t || this.player.getQualities();
|
|
818
|
+
if (!n || n.length === 0) {
|
|
819
|
+
e.innerHTML = '<div class="wontum-quality-option">No qualities available</div>';
|
|
820
|
+
return;
|
|
821
|
+
}
|
|
813
822
|
e.innerHTML = `
|
|
814
823
|
<div class="wontum-quality-option active" data-quality="-1">Auto</div>
|
|
815
|
-
${
|
|
816
|
-
(
|
|
817
|
-
<div class="wontum-quality-option" data-quality="${
|
|
824
|
+
${n.map(
|
|
825
|
+
(i, s) => `
|
|
826
|
+
<div class="wontum-quality-option" data-quality="${s}">${i.name}</div>
|
|
818
827
|
`
|
|
819
828
|
).join("")}
|
|
820
|
-
`, e.querySelectorAll(".wontum-quality-option").forEach((
|
|
821
|
-
|
|
822
|
-
const
|
|
823
|
-
this.player.setQuality(
|
|
829
|
+
`, e.querySelectorAll(".wontum-quality-option").forEach((i) => {
|
|
830
|
+
i.addEventListener("click", (s) => {
|
|
831
|
+
const a = s.target, r = parseInt(a.dataset.quality || "-1");
|
|
832
|
+
this.player.setQuality(r), e.querySelectorAll(".wontum-quality-option").forEach((c) => c.classList.remove("active")), a.classList.add("active");
|
|
824
833
|
});
|
|
825
834
|
});
|
|
826
835
|
}
|
|
@@ -838,8 +847,8 @@ class dt {
|
|
|
838
847
|
}
|
|
839
848
|
formatTime(t) {
|
|
840
849
|
if (isNaN(t)) return "0:00";
|
|
841
|
-
const e = Math.floor(t / 60),
|
|
842
|
-
return `${e}:${
|
|
850
|
+
const e = Math.floor(t / 60), n = Math.floor(t % 60);
|
|
851
|
+
return `${e}:${n.toString().padStart(2, "0")}`;
|
|
843
852
|
}
|
|
844
853
|
// SVG Icons
|
|
845
854
|
getPlayIcon() {
|
|
@@ -857,9 +866,6 @@ class dt {
|
|
|
857
866
|
getFullscreenIcon() {
|
|
858
867
|
return '<svg viewBox="0 0 24 24"><path d="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"/></svg>';
|
|
859
868
|
}
|
|
860
|
-
getQualityIcon() {
|
|
861
|
-
return '<svg viewBox="0 0 24 24"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-8 12H9.5v-2h-2v2H6V9h1.5v2.5h2V9H11v6zm7-1c0 .55-.45 1-1 1h-.75v1.5h-1.5V15H14c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v4zm-3.5-.5h2v-3h-2v3z"/></svg>';
|
|
862
|
-
}
|
|
863
869
|
getSkipBackwardIcon() {
|
|
864
870
|
return `<svg viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
865
871
|
<circle cx="30" cy="30" r="28" stroke="white" stroke-width="2"/>
|
|
@@ -878,12 +884,6 @@ class dt {
|
|
|
878
884
|
<text x="30" y="35" font-family="Arial, sans-serif" font-size="14" font-weight="bold" fill="white" text-anchor="middle">10</text>
|
|
879
885
|
</svg>`;
|
|
880
886
|
}
|
|
881
|
-
getSubtitleIcon() {
|
|
882
|
-
return '<svg viewBox="0 0 24 24"><path d="M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zM4 12h4v2H4v-2zm10 6H4v-2h10v2zm6 0h-4v-2h4v2zm0-4H10v-2h10v2z"/></svg>';
|
|
883
|
-
}
|
|
884
|
-
getSpeedIcon() {
|
|
885
|
-
return '<svg viewBox="0 0 24 24"><path d="M20.38 8.57l-1.23 1.85a8 8 0 0 1-.22 7.58H5.07A8 8 0 0 1 15.58 6.85l1.85-1.23A10 10 0 0 0 3.35 19a2 2 0 0 0 1.72 1h13.85a2 2 0 0 0 1.74-1 10 10 0 0 0-.27-10.44zm-9.79 6.84a2 2 0 0 0 2.83 0l5.66-8.49-8.49 5.66a2 2 0 0 0 0 2.83z"/></svg>';
|
|
886
|
-
}
|
|
887
887
|
getSettingsIcon() {
|
|
888
888
|
return '<svg viewBox="0 0 24 24"><path d="M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"/></svg>';
|
|
889
889
|
}
|
|
@@ -891,7 +891,7 @@ class dt {
|
|
|
891
891
|
this.hideControlsTimeout && clearTimeout(this.hideControlsTimeout), this.controlsContainer.remove();
|
|
892
892
|
}
|
|
893
893
|
}
|
|
894
|
-
class
|
|
894
|
+
class j {
|
|
895
895
|
constructor(t) {
|
|
896
896
|
o(this, "config");
|
|
897
897
|
o(this, "urlCache", /* @__PURE__ */ new Map());
|
|
@@ -912,8 +912,8 @@ class ht {
|
|
|
912
912
|
if (!((e = this.config) != null && e.cloudFrontDomains) || this.config.cloudFrontDomains.length === 0)
|
|
913
913
|
return !1;
|
|
914
914
|
try {
|
|
915
|
-
const
|
|
916
|
-
return this.config.cloudFrontDomains.some((
|
|
915
|
+
const n = new URL(t);
|
|
916
|
+
return this.config.cloudFrontDomains.some((i) => n.hostname.includes(i));
|
|
917
917
|
} catch {
|
|
918
918
|
return !1;
|
|
919
919
|
}
|
|
@@ -928,16 +928,21 @@ class ht {
|
|
|
928
928
|
* Sign CloudFront URL by calling the signing endpoint
|
|
929
929
|
* The endpoint should set signed cookies and return the URL
|
|
930
930
|
*/
|
|
931
|
-
async signCloudFrontUrl(t) {
|
|
932
|
-
var
|
|
931
|
+
async signCloudFrontUrl(t, e = 0) {
|
|
932
|
+
var s, a;
|
|
933
933
|
if (this.signedUrls.has(t))
|
|
934
934
|
return t;
|
|
935
|
-
if ((
|
|
935
|
+
if ((s = this.config) != null && s.signUrl)
|
|
936
936
|
try {
|
|
937
|
-
const
|
|
938
|
-
return this.signedUrls.add(t),
|
|
939
|
-
} catch (
|
|
940
|
-
|
|
937
|
+
const r = await this.config.signUrl(t);
|
|
938
|
+
return this.signedUrls.add(t), r;
|
|
939
|
+
} catch (r) {
|
|
940
|
+
const c = (r == null ? void 0 : r.name) === "AbortError" || ((a = r == null ? void 0 : r.message) == null ? void 0 : a.includes("aborted"));
|
|
941
|
+
if (c && e < 2)
|
|
942
|
+
return console.warn(`Sign URL aborted, retrying (${e + 1}/2)...`), await new Promise((u) => setTimeout(u, 300)), this.signCloudFrontUrl(t, e + 1);
|
|
943
|
+
throw console.error("Failed to sign CloudFront URL:", r), c ? new Error(
|
|
944
|
+
"Failed to sign CloudFront URL: Request was aborted. If using Apollo Client or other GraphQL clients, consider moving the query outside component lifecycle or using useQuery with skip option."
|
|
945
|
+
) : new Error(`Failed to sign CloudFront URL: ${(r == null ? void 0 : r.message) || "Unknown error"}`);
|
|
941
946
|
}
|
|
942
947
|
return console.warn("No signUrl function provided. CloudFront cookies may not be set."), t;
|
|
943
948
|
}
|
|
@@ -950,34 +955,34 @@ class ht {
|
|
|
950
955
|
const e = t.match(/s3[.-]([^.]+)\.amazonaws\.com\/(.+)/);
|
|
951
956
|
if (e)
|
|
952
957
|
return e[2];
|
|
953
|
-
const
|
|
954
|
-
return
|
|
958
|
+
const n = t.match(/([^.]+)\.s3\.amazonaws\.com\/(.+)/);
|
|
959
|
+
return n ? n[2] : t;
|
|
955
960
|
}
|
|
956
961
|
/**
|
|
957
962
|
* Get presigned URL from cache or generate new one
|
|
958
963
|
*/
|
|
959
964
|
async getPresignedUrl(t) {
|
|
960
|
-
var
|
|
961
|
-
const e = this.extractS3Key(t),
|
|
962
|
-
if (
|
|
963
|
-
return
|
|
964
|
-
if ((
|
|
965
|
+
var i;
|
|
966
|
+
const e = this.extractS3Key(t), n = this.urlCache.get(e);
|
|
967
|
+
if (n && n.expiresAt > Date.now())
|
|
968
|
+
return n.url;
|
|
969
|
+
if ((i = this.config) != null && i.getPresignedUrl)
|
|
965
970
|
try {
|
|
966
|
-
const
|
|
971
|
+
const s = await this.config.getPresignedUrl(e);
|
|
967
972
|
return this.urlCache.set(e, {
|
|
968
|
-
url:
|
|
973
|
+
url: s,
|
|
969
974
|
expiresAt: Date.now() + 50 * 60 * 1e3
|
|
970
|
-
}),
|
|
971
|
-
} catch (
|
|
972
|
-
throw console.error("Failed to generate presigned URL:",
|
|
975
|
+
}), s;
|
|
976
|
+
} catch (s) {
|
|
977
|
+
throw console.error("Failed to generate presigned URL:", s), new Error("Failed to generate presigned URL for S3 object");
|
|
973
978
|
}
|
|
974
979
|
return console.warn("No getPresignedUrl function provided. Using direct S3 URL (requires public bucket)"), t;
|
|
975
980
|
}
|
|
976
981
|
/**
|
|
977
982
|
* Helper to construct S3 URL from bucket and key
|
|
978
983
|
*/
|
|
979
|
-
static constructS3Url(t, e,
|
|
980
|
-
return `https://${t}.s3.${
|
|
984
|
+
static constructS3Url(t, e, n = "us-east-1") {
|
|
985
|
+
return `https://${t}.s3.${n}.amazonaws.com/${e}`;
|
|
981
986
|
}
|
|
982
987
|
/**
|
|
983
988
|
* Helper to parse S3 URI (s3://bucket/key)
|
|
@@ -985,8 +990,8 @@ class ht {
|
|
|
985
990
|
static parseS3Uri(t) {
|
|
986
991
|
if (!t.startsWith("s3://"))
|
|
987
992
|
return null;
|
|
988
|
-
const e = t.replace("s3://", "").split("/"),
|
|
989
|
-
return { bucket:
|
|
993
|
+
const e = t.replace("s3://", "").split("/"), n = e[0], i = e.slice(1).join("/");
|
|
994
|
+
return { bucket: n, key: i };
|
|
990
995
|
}
|
|
991
996
|
/**
|
|
992
997
|
* Clear URL cache and signed URLs
|
|
@@ -995,7 +1000,7 @@ class ht {
|
|
|
995
1000
|
this.urlCache.clear(), this.signedUrls.clear();
|
|
996
1001
|
}
|
|
997
1002
|
}
|
|
998
|
-
class
|
|
1003
|
+
class F {
|
|
999
1004
|
constructor(t) {
|
|
1000
1005
|
o(this, "container");
|
|
1001
1006
|
o(this, "videoElement");
|
|
@@ -1005,6 +1010,7 @@ class st {
|
|
|
1005
1010
|
o(this, "analytics");
|
|
1006
1011
|
o(this, "s3Handler");
|
|
1007
1012
|
o(this, "uiController");
|
|
1013
|
+
o(this, "qualities", []);
|
|
1008
1014
|
o(this, "state", {
|
|
1009
1015
|
playing: !1,
|
|
1010
1016
|
paused: !0,
|
|
@@ -1021,12 +1027,12 @@ class st {
|
|
|
1021
1027
|
});
|
|
1022
1028
|
if (this.config = t, this.container = typeof t.container == "string" ? document.querySelector(t.container) : t.container, !this.container)
|
|
1023
1029
|
throw new Error("Container element not found");
|
|
1024
|
-
this.analytics = new
|
|
1030
|
+
this.analytics = new _(t.analytics), this.s3Handler = new j(t.s3Config), this.videoElement = this.createVideoElement(), this.container.appendChild(this.videoElement), this.uiController = new Q(this.container, this), this.setupVideoListeners(), this.loadSource(t.src), t.autoplay && (this.videoElement.autoplay = !0), t.muted && this.mute(), t.poster && (this.videoElement.poster = t.poster), t.preload && (this.videoElement.preload = t.preload), t.subtitles && this.addSubtitleTracks(t.subtitles);
|
|
1025
1031
|
}
|
|
1026
1032
|
addSubtitleTracks(t) {
|
|
1027
1033
|
t.forEach((e) => {
|
|
1028
|
-
const
|
|
1029
|
-
|
|
1034
|
+
const n = document.createElement("track");
|
|
1035
|
+
n.kind = "subtitles", n.label = e.label, n.src = e.src, n.srclang = e.srclang, e.default && (n.default = !0), this.videoElement.appendChild(n);
|
|
1030
1036
|
});
|
|
1031
1037
|
}
|
|
1032
1038
|
createVideoElement() {
|
|
@@ -1089,16 +1095,16 @@ class st {
|
|
|
1089
1095
|
async loadSource(t) {
|
|
1090
1096
|
try {
|
|
1091
1097
|
const e = await this.s3Handler.processUrl(t);
|
|
1092
|
-
if (
|
|
1093
|
-
this.hls = new
|
|
1094
|
-
const
|
|
1095
|
-
this.
|
|
1096
|
-
}), this.hls.on(
|
|
1097
|
-
var
|
|
1098
|
-
const
|
|
1099
|
-
|
|
1100
|
-
}), this.hls.on(
|
|
1101
|
-
|
|
1098
|
+
if (p.isSupported())
|
|
1099
|
+
this.hls = new p(this.config.hlsConfig), this.hls.loadSource(e), this.hls.attachMedia(this.videoElement), this.hls.on(p.Events.MANIFEST_PARSED, (n, i) => {
|
|
1100
|
+
const s = this.extractQualities(i.levels);
|
|
1101
|
+
this.qualities = s;
|
|
1102
|
+
}), this.hls.on(p.Events.LEVEL_SWITCHED, (n, i) => {
|
|
1103
|
+
var a;
|
|
1104
|
+
const s = (a = this.hls) == null ? void 0 : a.levels[i.level];
|
|
1105
|
+
s && (this.state.quality = `${s.height}p`, this.emit("qualitychange", { quality: this.state.quality }));
|
|
1106
|
+
}), this.hls.on(p.Events.ERROR, (n, i) => {
|
|
1107
|
+
i.fatal && this.handleHlsError(i);
|
|
1102
1108
|
});
|
|
1103
1109
|
else if (this.videoElement.canPlayType("application/vnd.apple.mpegurl"))
|
|
1104
1110
|
this.videoElement.src = e;
|
|
@@ -1117,13 +1123,13 @@ class st {
|
|
|
1117
1123
|
}));
|
|
1118
1124
|
}
|
|
1119
1125
|
handleHlsError(t) {
|
|
1120
|
-
var e,
|
|
1126
|
+
var e, n;
|
|
1121
1127
|
switch (t.type) {
|
|
1122
|
-
case
|
|
1128
|
+
case p.ErrorTypes.NETWORK_ERROR:
|
|
1123
1129
|
console.error("Network error occurred"), (e = this.hls) == null || e.startLoad();
|
|
1124
1130
|
break;
|
|
1125
|
-
case
|
|
1126
|
-
console.error("Media error occurred"), (
|
|
1131
|
+
case p.ErrorTypes.MEDIA_ERROR:
|
|
1132
|
+
console.error("Media error occurred"), (n = this.hls) == null || n.recoverMediaError();
|
|
1127
1133
|
break;
|
|
1128
1134
|
default:
|
|
1129
1135
|
console.error("Fatal error occurred:", t), this.destroy();
|
|
@@ -1173,6 +1179,9 @@ class st {
|
|
|
1173
1179
|
setQuality(t) {
|
|
1174
1180
|
this.hls && (this.hls.currentLevel = t);
|
|
1175
1181
|
}
|
|
1182
|
+
getQualities() {
|
|
1183
|
+
return this.qualities;
|
|
1184
|
+
}
|
|
1176
1185
|
enterFullscreen() {
|
|
1177
1186
|
this.container.requestFullscreen && (this.container.requestFullscreen(), this.state.fullscreen = !0, this.emit("fullscreenchange", { fullscreen: !0 }));
|
|
1178
1187
|
}
|
|
@@ -1190,8 +1199,8 @@ class st {
|
|
|
1190
1199
|
*/
|
|
1191
1200
|
enableSubtitles(t) {
|
|
1192
1201
|
const e = this.videoElement.textTracks;
|
|
1193
|
-
for (let
|
|
1194
|
-
e[
|
|
1202
|
+
for (let n = 0; n < e.length; n++)
|
|
1203
|
+
e[n].mode = n === t ? "showing" : "hidden";
|
|
1195
1204
|
}
|
|
1196
1205
|
/**
|
|
1197
1206
|
* Disable all subtitles
|
|
@@ -1206,7 +1215,7 @@ class st {
|
|
|
1206
1215
|
*/
|
|
1207
1216
|
toggleSubtitles() {
|
|
1208
1217
|
const t = this.videoElement.textTracks;
|
|
1209
|
-
return Array.from(t).some((
|
|
1218
|
+
return Array.from(t).some((n) => n.mode === "showing") ? (this.disableSubtitles(), !1) : t.length > 0 ? (this.enableSubtitles(0), !0) : !1;
|
|
1210
1219
|
}
|
|
1211
1220
|
/**
|
|
1212
1221
|
* Get available subtitle tracks
|
|
@@ -1225,407 +1234,132 @@ class st {
|
|
|
1225
1234
|
this.eventListeners.has(t) || this.eventListeners.set(t, /* @__PURE__ */ new Set()), this.eventListeners.get(t).add(e);
|
|
1226
1235
|
}
|
|
1227
1236
|
off(t, e) {
|
|
1228
|
-
var
|
|
1229
|
-
(
|
|
1237
|
+
var n;
|
|
1238
|
+
(n = this.eventListeners.get(t)) == null || n.delete(e);
|
|
1230
1239
|
}
|
|
1231
1240
|
emit(t, e) {
|
|
1232
|
-
var
|
|
1233
|
-
const
|
|
1241
|
+
var i;
|
|
1242
|
+
const n = {
|
|
1234
1243
|
type: t,
|
|
1235
1244
|
data: e,
|
|
1236
1245
|
timestamp: Date.now()
|
|
1237
1246
|
};
|
|
1238
|
-
(
|
|
1239
|
-
|
|
1247
|
+
(i = this.eventListeners.get(t)) == null || i.forEach((s) => {
|
|
1248
|
+
s(n);
|
|
1240
1249
|
});
|
|
1241
1250
|
}
|
|
1242
1251
|
destroy() {
|
|
1243
1252
|
this.hls && (this.hls.destroy(), this.hls = null), this.uiController.destroy(), this.videoElement.remove(), this.eventListeners.clear(), this.analytics.destroy();
|
|
1244
1253
|
}
|
|
1245
1254
|
}
|
|
1246
|
-
|
|
1247
|
-
/**
|
|
1248
|
-
* @license React
|
|
1249
|
-
* react-jsx-runtime.production.js
|
|
1250
|
-
*
|
|
1251
|
-
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
1252
|
-
*
|
|
1253
|
-
* This source code is licensed under the MIT license found in the
|
|
1254
|
-
* LICENSE file in the root directory of this source tree.
|
|
1255
|
-
*/
|
|
1256
|
-
var tt;
|
|
1257
|
-
function mt() {
|
|
1258
|
-
if (tt) return _;
|
|
1259
|
-
tt = 1;
|
|
1260
|
-
var c = Symbol.for("react.transitional.element"), t = Symbol.for("react.fragment");
|
|
1261
|
-
function e(s, r, i) {
|
|
1262
|
-
var l = null;
|
|
1263
|
-
if (i !== void 0 && (l = "" + i), r.key !== void 0 && (l = "" + r.key), "key" in r) {
|
|
1264
|
-
i = {};
|
|
1265
|
-
for (var u in r)
|
|
1266
|
-
u !== "key" && (i[u] = r[u]);
|
|
1267
|
-
} else i = r;
|
|
1268
|
-
return r = i.ref, {
|
|
1269
|
-
$$typeof: c,
|
|
1270
|
-
type: s,
|
|
1271
|
-
key: l,
|
|
1272
|
-
ref: r !== void 0 ? r : null,
|
|
1273
|
-
props: i
|
|
1274
|
-
};
|
|
1275
|
-
}
|
|
1276
|
-
return _.Fragment = t, _.jsx = e, _.jsxs = e, _;
|
|
1277
|
-
}
|
|
1278
|
-
var q = {};
|
|
1279
|
-
/**
|
|
1280
|
-
* @license React
|
|
1281
|
-
* react-jsx-runtime.development.js
|
|
1282
|
-
*
|
|
1283
|
-
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
1284
|
-
*
|
|
1285
|
-
* This source code is licensed under the MIT license found in the
|
|
1286
|
-
* LICENSE file in the root directory of this source tree.
|
|
1287
|
-
*/
|
|
1288
|
-
var et;
|
|
1289
|
-
function pt() {
|
|
1290
|
-
return et || (et = 1, process.env.NODE_ENV !== "production" && function() {
|
|
1291
|
-
function c(n) {
|
|
1292
|
-
if (n == null) return null;
|
|
1293
|
-
if (typeof n == "function")
|
|
1294
|
-
return n.$$typeof === O ? null : n.displayName || n.name || null;
|
|
1295
|
-
if (typeof n == "string") return n;
|
|
1296
|
-
switch (n) {
|
|
1297
|
-
case E:
|
|
1298
|
-
return "Fragment";
|
|
1299
|
-
case B:
|
|
1300
|
-
return "Profiler";
|
|
1301
|
-
case I:
|
|
1302
|
-
return "StrictMode";
|
|
1303
|
-
case D:
|
|
1304
|
-
return "Suspense";
|
|
1305
|
-
case H:
|
|
1306
|
-
return "SuspenseList";
|
|
1307
|
-
case L:
|
|
1308
|
-
return "Activity";
|
|
1309
|
-
}
|
|
1310
|
-
if (typeof n == "object")
|
|
1311
|
-
switch (typeof n.tag == "number" && console.error(
|
|
1312
|
-
"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."
|
|
1313
|
-
), n.$$typeof) {
|
|
1314
|
-
case M:
|
|
1315
|
-
return "Portal";
|
|
1316
|
-
case F:
|
|
1317
|
-
return n.displayName || "Context";
|
|
1318
|
-
case $:
|
|
1319
|
-
return (n._context.displayName || "Context") + ".Consumer";
|
|
1320
|
-
case z:
|
|
1321
|
-
var a = n.render;
|
|
1322
|
-
return n = n.displayName, n || (n = a.displayName || a.name || "", n = n !== "" ? "ForwardRef(" + n + ")" : "ForwardRef"), n;
|
|
1323
|
-
case T:
|
|
1324
|
-
return a = n.displayName || null, a !== null ? a : c(n.type) || "Memo";
|
|
1325
|
-
case w:
|
|
1326
|
-
a = n._payload, n = n._init;
|
|
1327
|
-
try {
|
|
1328
|
-
return c(n(a));
|
|
1329
|
-
} catch {
|
|
1330
|
-
}
|
|
1331
|
-
}
|
|
1332
|
-
return null;
|
|
1333
|
-
}
|
|
1334
|
-
function t(n) {
|
|
1335
|
-
return "" + n;
|
|
1336
|
-
}
|
|
1337
|
-
function e(n) {
|
|
1338
|
-
try {
|
|
1339
|
-
t(n);
|
|
1340
|
-
var a = !1;
|
|
1341
|
-
} catch {
|
|
1342
|
-
a = !0;
|
|
1343
|
-
}
|
|
1344
|
-
if (a) {
|
|
1345
|
-
a = console;
|
|
1346
|
-
var d = a.error, h = typeof Symbol == "function" && Symbol.toStringTag && n[Symbol.toStringTag] || n.constructor.name || "Object";
|
|
1347
|
-
return d.call(
|
|
1348
|
-
a,
|
|
1349
|
-
"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",
|
|
1350
|
-
h
|
|
1351
|
-
), t(n);
|
|
1352
|
-
}
|
|
1353
|
-
}
|
|
1354
|
-
function s(n) {
|
|
1355
|
-
if (n === E) return "<>";
|
|
1356
|
-
if (typeof n == "object" && n !== null && n.$$typeof === w)
|
|
1357
|
-
return "<...>";
|
|
1358
|
-
try {
|
|
1359
|
-
var a = c(n);
|
|
1360
|
-
return a ? "<" + a + ">" : "<...>";
|
|
1361
|
-
} catch {
|
|
1362
|
-
return "<...>";
|
|
1363
|
-
}
|
|
1364
|
-
}
|
|
1365
|
-
function r() {
|
|
1366
|
-
var n = R.A;
|
|
1367
|
-
return n === null ? null : n.getOwner();
|
|
1368
|
-
}
|
|
1369
|
-
function i() {
|
|
1370
|
-
return Error("react-stack-top-frame");
|
|
1371
|
-
}
|
|
1372
|
-
function l(n) {
|
|
1373
|
-
if (p.call(n, "key")) {
|
|
1374
|
-
var a = Object.getOwnPropertyDescriptor(n, "key").get;
|
|
1375
|
-
if (a && a.isReactWarning) return !1;
|
|
1376
|
-
}
|
|
1377
|
-
return n.key !== void 0;
|
|
1378
|
-
}
|
|
1379
|
-
function u(n, a) {
|
|
1380
|
-
function d() {
|
|
1381
|
-
J || (J = !0, console.error(
|
|
1382
|
-
"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",
|
|
1383
|
-
a
|
|
1384
|
-
));
|
|
1385
|
-
}
|
|
1386
|
-
d.isReactWarning = !0, Object.defineProperty(n, "key", {
|
|
1387
|
-
get: d,
|
|
1388
|
-
configurable: !0
|
|
1389
|
-
});
|
|
1390
|
-
}
|
|
1391
|
-
function g() {
|
|
1392
|
-
var n = c(this.type);
|
|
1393
|
-
return X[n] || (X[n] = !0, console.error(
|
|
1394
|
-
"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release."
|
|
1395
|
-
)), n = this.props.ref, n !== void 0 ? n : null;
|
|
1396
|
-
}
|
|
1397
|
-
function y(n, a, d, h, j, N) {
|
|
1398
|
-
var m = d.ref;
|
|
1399
|
-
return n = {
|
|
1400
|
-
$$typeof: C,
|
|
1401
|
-
type: n,
|
|
1402
|
-
key: a,
|
|
1403
|
-
props: d,
|
|
1404
|
-
_owner: h
|
|
1405
|
-
}, (m !== void 0 ? m : null) !== null ? Object.defineProperty(n, "ref", {
|
|
1406
|
-
enumerable: !1,
|
|
1407
|
-
get: g
|
|
1408
|
-
}) : Object.defineProperty(n, "ref", { enumerable: !1, value: null }), n._store = {}, Object.defineProperty(n._store, "validated", {
|
|
1409
|
-
configurable: !1,
|
|
1410
|
-
enumerable: !1,
|
|
1411
|
-
writable: !0,
|
|
1412
|
-
value: 0
|
|
1413
|
-
}), Object.defineProperty(n, "_debugInfo", {
|
|
1414
|
-
configurable: !1,
|
|
1415
|
-
enumerable: !1,
|
|
1416
|
-
writable: !0,
|
|
1417
|
-
value: null
|
|
1418
|
-
}), Object.defineProperty(n, "_debugStack", {
|
|
1419
|
-
configurable: !1,
|
|
1420
|
-
enumerable: !1,
|
|
1421
|
-
writable: !0,
|
|
1422
|
-
value: j
|
|
1423
|
-
}), Object.defineProperty(n, "_debugTask", {
|
|
1424
|
-
configurable: !1,
|
|
1425
|
-
enumerable: !1,
|
|
1426
|
-
writable: !0,
|
|
1427
|
-
value: N
|
|
1428
|
-
}), Object.freeze && (Object.freeze(n.props), Object.freeze(n)), n;
|
|
1429
|
-
}
|
|
1430
|
-
function f(n, a, d, h, j, N) {
|
|
1431
|
-
var m = a.children;
|
|
1432
|
-
if (m !== void 0)
|
|
1433
|
-
if (h)
|
|
1434
|
-
if (v(m)) {
|
|
1435
|
-
for (h = 0; h < m.length; h++)
|
|
1436
|
-
P(m[h]);
|
|
1437
|
-
Object.freeze && Object.freeze(m);
|
|
1438
|
-
} else
|
|
1439
|
-
console.error(
|
|
1440
|
-
"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead."
|
|
1441
|
-
);
|
|
1442
|
-
else P(m);
|
|
1443
|
-
if (p.call(a, "key")) {
|
|
1444
|
-
m = c(n);
|
|
1445
|
-
var S = Object.keys(a).filter(function(ot) {
|
|
1446
|
-
return ot !== "key";
|
|
1447
|
-
});
|
|
1448
|
-
h = 0 < S.length ? "{key: someKey, " + S.join(": ..., ") + ": ...}" : "{key: someKey}", K[m + h] || (S = 0 < S.length ? "{" + S.join(": ..., ") + ": ...}" : "{}", console.error(
|
|
1449
|
-
`A props object containing a "key" prop is being spread into JSX:
|
|
1450
|
-
let props = %s;
|
|
1451
|
-
<%s {...props} />
|
|
1452
|
-
React keys must be passed directly to JSX without using spread:
|
|
1453
|
-
let props = %s;
|
|
1454
|
-
<%s key={someKey} {...props} />`,
|
|
1455
|
-
h,
|
|
1456
|
-
m,
|
|
1457
|
-
S,
|
|
1458
|
-
m
|
|
1459
|
-
), K[m + h] = !0);
|
|
1460
|
-
}
|
|
1461
|
-
if (m = null, d !== void 0 && (e(d), m = "" + d), l(a) && (e(a.key), m = "" + a.key), "key" in a) {
|
|
1462
|
-
d = {};
|
|
1463
|
-
for (var U in a)
|
|
1464
|
-
U !== "key" && (d[U] = a[U]);
|
|
1465
|
-
} else d = a;
|
|
1466
|
-
return m && u(
|
|
1467
|
-
d,
|
|
1468
|
-
typeof n == "function" ? n.displayName || n.name || "Unknown" : n
|
|
1469
|
-
), y(
|
|
1470
|
-
n,
|
|
1471
|
-
m,
|
|
1472
|
-
d,
|
|
1473
|
-
r(),
|
|
1474
|
-
j,
|
|
1475
|
-
N
|
|
1476
|
-
);
|
|
1477
|
-
}
|
|
1478
|
-
function P(n) {
|
|
1479
|
-
A(n) ? n._store && (n._store.validated = 1) : typeof n == "object" && n !== null && n.$$typeof === w && (n._payload.status === "fulfilled" ? A(n._payload.value) && n._payload.value._store && (n._payload.value._store.validated = 1) : n._store && (n._store.validated = 1));
|
|
1480
|
-
}
|
|
1481
|
-
function A(n) {
|
|
1482
|
-
return typeof n == "object" && n !== null && n.$$typeof === C;
|
|
1483
|
-
}
|
|
1484
|
-
var b = ct, C = Symbol.for("react.transitional.element"), M = Symbol.for("react.portal"), E = Symbol.for("react.fragment"), I = Symbol.for("react.strict_mode"), B = Symbol.for("react.profiler"), $ = Symbol.for("react.consumer"), F = Symbol.for("react.context"), z = Symbol.for("react.forward_ref"), D = Symbol.for("react.suspense"), H = Symbol.for("react.suspense_list"), T = Symbol.for("react.memo"), w = Symbol.for("react.lazy"), L = Symbol.for("react.activity"), O = Symbol.for("react.client.reference"), R = b.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, p = Object.prototype.hasOwnProperty, v = Array.isArray, x = console.createTask ? console.createTask : function() {
|
|
1485
|
-
return null;
|
|
1486
|
-
};
|
|
1487
|
-
b = {
|
|
1488
|
-
react_stack_bottom_frame: function(n) {
|
|
1489
|
-
return n();
|
|
1490
|
-
}
|
|
1491
|
-
};
|
|
1492
|
-
var J, X = {}, G = b.react_stack_bottom_frame.bind(
|
|
1493
|
-
b,
|
|
1494
|
-
i
|
|
1495
|
-
)(), Z = x(s(i)), K = {};
|
|
1496
|
-
q.Fragment = E, q.jsx = function(n, a, d) {
|
|
1497
|
-
var h = 1e4 > R.recentlyCreatedOwnerStacks++;
|
|
1498
|
-
return f(
|
|
1499
|
-
n,
|
|
1500
|
-
a,
|
|
1501
|
-
d,
|
|
1502
|
-
!1,
|
|
1503
|
-
h ? Error("react-stack-top-frame") : G,
|
|
1504
|
-
h ? x(s(n)) : Z
|
|
1505
|
-
);
|
|
1506
|
-
}, q.jsxs = function(n, a, d) {
|
|
1507
|
-
var h = 1e4 > R.recentlyCreatedOwnerStacks++;
|
|
1508
|
-
return f(
|
|
1509
|
-
n,
|
|
1510
|
-
a,
|
|
1511
|
-
d,
|
|
1512
|
-
!0,
|
|
1513
|
-
h ? Error("react-stack-top-frame") : G,
|
|
1514
|
-
h ? x(s(n)) : Z
|
|
1515
|
-
);
|
|
1516
|
-
};
|
|
1517
|
-
}()), q;
|
|
1518
|
-
}
|
|
1519
|
-
process.env.NODE_ENV === "production" ? Y.exports = mt() : Y.exports = pt();
|
|
1520
|
-
var rt = Y.exports;
|
|
1521
|
-
const yt = (c) => {
|
|
1255
|
+
const K = (l) => {
|
|
1522
1256
|
const {
|
|
1523
1257
|
src: t,
|
|
1524
1258
|
autoplay: e,
|
|
1525
|
-
muted:
|
|
1526
|
-
controls:
|
|
1527
|
-
poster:
|
|
1528
|
-
preload:
|
|
1529
|
-
theme:
|
|
1530
|
-
s3Config:
|
|
1531
|
-
analytics:
|
|
1532
|
-
hlsConfig:
|
|
1259
|
+
muted: n,
|
|
1260
|
+
controls: i = !0,
|
|
1261
|
+
poster: s,
|
|
1262
|
+
preload: a,
|
|
1263
|
+
theme: r,
|
|
1264
|
+
s3Config: c,
|
|
1265
|
+
analytics: u,
|
|
1266
|
+
hlsConfig: m,
|
|
1533
1267
|
subtitles: P,
|
|
1534
|
-
stickyControls:
|
|
1535
|
-
onReady:
|
|
1536
|
-
onPlay:
|
|
1537
|
-
onPause:
|
|
1538
|
-
onEnded:
|
|
1539
|
-
onTimeUpdate:
|
|
1540
|
-
onVolumeChange:
|
|
1541
|
-
onError:
|
|
1542
|
-
onLoadedMetadata:
|
|
1543
|
-
onQualityChange:
|
|
1544
|
-
style:
|
|
1545
|
-
className:
|
|
1546
|
-
width:
|
|
1547
|
-
height:
|
|
1548
|
-
} =
|
|
1549
|
-
return
|
|
1550
|
-
if (!
|
|
1551
|
-
const
|
|
1268
|
+
stickyControls: U,
|
|
1269
|
+
onReady: k,
|
|
1270
|
+
onPlay: E,
|
|
1271
|
+
onPause: x,
|
|
1272
|
+
onEnded: S,
|
|
1273
|
+
onTimeUpdate: C,
|
|
1274
|
+
onVolumeChange: L,
|
|
1275
|
+
onError: T,
|
|
1276
|
+
onLoadedMetadata: q,
|
|
1277
|
+
onQualityChange: M,
|
|
1278
|
+
style: z,
|
|
1279
|
+
className: D,
|
|
1280
|
+
width: g = "100%",
|
|
1281
|
+
height: v = "500px"
|
|
1282
|
+
} = l, y = w(null), R = w(null);
|
|
1283
|
+
return f(() => {
|
|
1284
|
+
if (!y.current) return;
|
|
1285
|
+
const H = {
|
|
1552
1286
|
src: t,
|
|
1553
|
-
container:
|
|
1287
|
+
container: y.current,
|
|
1554
1288
|
autoplay: e,
|
|
1555
|
-
muted:
|
|
1556
|
-
controls:
|
|
1557
|
-
poster:
|
|
1558
|
-
preload:
|
|
1559
|
-
theme:
|
|
1560
|
-
s3Config:
|
|
1561
|
-
analytics:
|
|
1562
|
-
hlsConfig:
|
|
1289
|
+
muted: n,
|
|
1290
|
+
controls: i,
|
|
1291
|
+
poster: s,
|
|
1292
|
+
preload: a,
|
|
1293
|
+
theme: r,
|
|
1294
|
+
s3Config: c,
|
|
1295
|
+
analytics: u,
|
|
1296
|
+
hlsConfig: m,
|
|
1563
1297
|
subtitles: P,
|
|
1564
|
-
stickyControls:
|
|
1565
|
-
},
|
|
1566
|
-
return
|
|
1567
|
-
var
|
|
1568
|
-
return
|
|
1569
|
-
}),
|
|
1570
|
-
|
|
1298
|
+
stickyControls: U
|
|
1299
|
+
}, d = new F(H);
|
|
1300
|
+
return R.current = d, E && d.on("play", E), x && d.on("pause", x), S && d.on("ended", S), T && d.on("error", (h) => {
|
|
1301
|
+
var I;
|
|
1302
|
+
return T((I = h.data) == null ? void 0 : I.error);
|
|
1303
|
+
}), q && d.on("loadedmetadata", q), M && d.on("qualitychange", (h) => M(h.data.level)), C && d.on("timeupdate", (h) => C(h.data.currentTime)), L && d.on("volumechange", (h) => L(h.data.volume, h.data.muted)), k && k(d), () => {
|
|
1304
|
+
d.destroy(), R.current = null;
|
|
1571
1305
|
};
|
|
1572
|
-
}, [t]), /* @__PURE__ */
|
|
1306
|
+
}, [t]), /* @__PURE__ */ B(
|
|
1573
1307
|
"div",
|
|
1574
1308
|
{
|
|
1575
|
-
ref:
|
|
1576
|
-
className:
|
|
1309
|
+
ref: y,
|
|
1310
|
+
className: D,
|
|
1577
1311
|
style: {
|
|
1578
|
-
width: typeof
|
|
1579
|
-
height: typeof
|
|
1580
|
-
...
|
|
1312
|
+
width: typeof g == "number" ? `${g}px` : g,
|
|
1313
|
+
height: typeof v == "number" ? `${v}px` : v,
|
|
1314
|
+
...z
|
|
1581
1315
|
}
|
|
1582
1316
|
}
|
|
1583
1317
|
);
|
|
1584
|
-
},
|
|
1585
|
-
const [t, e] =
|
|
1586
|
-
return
|
|
1587
|
-
if (!
|
|
1588
|
-
const
|
|
1589
|
-
...
|
|
1590
|
-
container:
|
|
1318
|
+
}, G = (l) => {
|
|
1319
|
+
const [t, e] = b(null), [n, i] = b(null), s = w(null);
|
|
1320
|
+
return f(() => {
|
|
1321
|
+
if (!s.current) return;
|
|
1322
|
+
const a = new F({
|
|
1323
|
+
...l,
|
|
1324
|
+
container: s.current
|
|
1591
1325
|
});
|
|
1592
|
-
e(
|
|
1593
|
-
const
|
|
1594
|
-
|
|
1326
|
+
e(a);
|
|
1327
|
+
const r = () => {
|
|
1328
|
+
i(a.getState());
|
|
1595
1329
|
};
|
|
1596
|
-
return
|
|
1597
|
-
|
|
1330
|
+
return a.on("play", r), a.on("pause", r), a.on("timeupdate", r), a.on("volumechange", r), a.on("loadedmetadata", r), () => {
|
|
1331
|
+
a.destroy();
|
|
1598
1332
|
};
|
|
1599
|
-
}, [
|
|
1600
|
-
containerRef:
|
|
1333
|
+
}, [l.src]), {
|
|
1334
|
+
containerRef: s,
|
|
1601
1335
|
player: t,
|
|
1602
|
-
state:
|
|
1336
|
+
state: n
|
|
1603
1337
|
};
|
|
1604
|
-
},
|
|
1338
|
+
}, A = $.createContext({
|
|
1605
1339
|
player: null,
|
|
1606
1340
|
state: null
|
|
1607
|
-
}),
|
|
1608
|
-
const { player: t, children: e } =
|
|
1609
|
-
return
|
|
1610
|
-
const
|
|
1611
|
-
|
|
1341
|
+
}), J = (l) => {
|
|
1342
|
+
const { player: t, children: e } = l, [n, i] = b(t.getState());
|
|
1343
|
+
return f(() => {
|
|
1344
|
+
const s = () => {
|
|
1345
|
+
i(t.getState());
|
|
1612
1346
|
};
|
|
1613
|
-
return t.on("play",
|
|
1347
|
+
return t.on("play", s), t.on("pause", s), t.on("timeupdate", s), t.on("volumechange", s), t.on("loadedmetadata", s), () => {
|
|
1614
1348
|
};
|
|
1615
|
-
}, [t]), /* @__PURE__ */
|
|
1616
|
-
},
|
|
1617
|
-
const
|
|
1618
|
-
if (!
|
|
1349
|
+
}, [t]), /* @__PURE__ */ B(A.Provider, { value: { player: t, state: n }, children: e });
|
|
1350
|
+
}, Z = () => {
|
|
1351
|
+
const l = $.useContext(A);
|
|
1352
|
+
if (!l.player)
|
|
1619
1353
|
throw new Error("useWontumPlayerContext must be used within WontumPlayerProvider");
|
|
1620
|
-
return
|
|
1354
|
+
return l;
|
|
1621
1355
|
};
|
|
1622
1356
|
export {
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1357
|
+
_ as Analytics,
|
|
1358
|
+
j as S3Handler,
|
|
1359
|
+
Q as UIController,
|
|
1360
|
+
F as WontumPlayer,
|
|
1361
|
+
J as WontumPlayerProvider,
|
|
1362
|
+
K as WontumPlayerReact,
|
|
1363
|
+
G as useWontumPlayer,
|
|
1364
|
+
Z as useWontumPlayerContext
|
|
1631
1365
|
};
|