@glitchlab/react-video-player 1.2.0 → 1.3.0
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 +12 -2
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +6 -5
- package/dist/index.mjs +130 -129
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsxs as v, jsx as t } from "react/jsx-runtime";
|
|
3
|
-
import
|
|
3
|
+
import he, { useState as k, useRef as V, useCallback as S, useEffect as x, useImperativeHandle as me, useMemo as U } from "react";
|
|
4
4
|
import $ from "hls.js";
|
|
5
5
|
function Q(e) {
|
|
6
6
|
var n, s, r = "";
|
|
7
7
|
if (typeof e == "string" || typeof e == "number") r += e;
|
|
8
8
|
else if (typeof e == "object") if (Array.isArray(e)) {
|
|
9
|
-
var
|
|
10
|
-
for (n = 0; n <
|
|
9
|
+
var l = e.length;
|
|
10
|
+
for (n = 0; n < l; n++) e[n] && (s = Q(e[n])) && (r && (r += " "), r += s);
|
|
11
11
|
} else for (s in e) e[s] && (r && (r += " "), r += s);
|
|
12
12
|
return r;
|
|
13
13
|
}
|
|
14
14
|
function H() {
|
|
15
|
-
for (var e, n, s = 0, r = "",
|
|
15
|
+
for (var e, n, s = 0, r = "", l = arguments.length; s < l; s++) (e = arguments[s]) && (n = Q(e)) && (r && (r += " "), r += n);
|
|
16
16
|
return r;
|
|
17
17
|
}
|
|
18
18
|
const K = "gvp-icon", L = (e) => e ? `${K} ${e}` : K, fe = ({ className: e }) => /* @__PURE__ */ v(
|
|
@@ -455,20 +455,20 @@ const X = (() => {
|
|
|
455
455
|
container: s,
|
|
456
456
|
onTogglePlay: r
|
|
457
457
|
}) => {
|
|
458
|
-
const [
|
|
458
|
+
const [l, u] = k(!0), c = V(null), a = S(() => {
|
|
459
459
|
c.current !== null && (clearTimeout(c.current), c.current = null);
|
|
460
|
-
}, []),
|
|
460
|
+
}, []), i = S(() => {
|
|
461
461
|
a(), n && (c.current = setTimeout(() => u(!1), Se));
|
|
462
462
|
}, [a, n]), m = S(() => {
|
|
463
|
-
u(!0),
|
|
464
|
-
}, [
|
|
463
|
+
u(!0), i();
|
|
464
|
+
}, [i]);
|
|
465
465
|
return x(() => {
|
|
466
466
|
if (!n) {
|
|
467
467
|
a(), u(!0);
|
|
468
468
|
return;
|
|
469
469
|
}
|
|
470
|
-
return
|
|
471
|
-
}, [n,
|
|
470
|
+
return i(), a;
|
|
471
|
+
}, [n, i, a]), x(() => {
|
|
472
472
|
if (!s) return;
|
|
473
473
|
const f = () => m();
|
|
474
474
|
return s.addEventListener("mousemove", f), s.addEventListener("touchstart", f), s.addEventListener("focusin", f), () => {
|
|
@@ -516,9 +516,9 @@ const X = (() => {
|
|
|
516
516
|
{
|
|
517
517
|
role: "toolbar",
|
|
518
518
|
"aria-label": "Video controls",
|
|
519
|
-
className: H("gvp-controls", !
|
|
519
|
+
className: H("gvp-controls", !l && "is-hidden"),
|
|
520
520
|
onMouseEnter: a,
|
|
521
|
-
onMouseLeave:
|
|
521
|
+
onMouseLeave: i,
|
|
522
522
|
children: /* @__PURE__ */ v("div", { className: "gvp-controls-row", children: [
|
|
523
523
|
/* @__PURE__ */ t(Ve, { isPlaying: n, onToggle: r }),
|
|
524
524
|
/* @__PURE__ */ t(Be, { video: e }),
|
|
@@ -545,10 +545,10 @@ const X = (() => {
|
|
|
545
545
|
children: e ? /* @__PURE__ */ t(Ce, {}) : /* @__PURE__ */ t(be, {})
|
|
546
546
|
}
|
|
547
547
|
), Be = ({ video: e }) => {
|
|
548
|
-
const [n, s] = k(0), [r,
|
|
548
|
+
const [n, s] = k(0), [r, l] = k(0), [u, c] = k(0);
|
|
549
549
|
x(() => {
|
|
550
550
|
if (!e) return;
|
|
551
|
-
const o = () => s(e.currentTime),
|
|
551
|
+
const o = () => s(e.currentTime), h = () => l(Number.isFinite(e.duration) ? e.duration : 0), g = () => {
|
|
552
552
|
const d = e.buffered;
|
|
553
553
|
if (!d || d.length === 0) {
|
|
554
554
|
c(0);
|
|
@@ -562,14 +562,14 @@ const X = (() => {
|
|
|
562
562
|
}
|
|
563
563
|
c(w);
|
|
564
564
|
};
|
|
565
|
-
return o(),
|
|
566
|
-
e.removeEventListener("timeupdate", o), e.removeEventListener("durationchange",
|
|
565
|
+
return o(), h(), g(), e.addEventListener("timeupdate", o), e.addEventListener("durationchange", h), e.addEventListener("loadedmetadata", h), e.addEventListener("progress", g), e.addEventListener("timeupdate", g), () => {
|
|
566
|
+
e.removeEventListener("timeupdate", o), e.removeEventListener("durationchange", h), e.removeEventListener("loadedmetadata", h), e.removeEventListener("progress", g), e.removeEventListener("timeupdate", g);
|
|
567
567
|
};
|
|
568
568
|
}, [e]);
|
|
569
|
-
const a = r > 0,
|
|
569
|
+
const a = r > 0, i = a ? n / r * 100 : 0, m = a ? u / r * 100 : 0, f = (o) => {
|
|
570
570
|
if (!e || !a) return;
|
|
571
|
-
const
|
|
572
|
-
e.currentTime =
|
|
571
|
+
const h = Number(o.target.value) / 100 * r;
|
|
572
|
+
e.currentTime = h, s(h);
|
|
573
573
|
};
|
|
574
574
|
return /* @__PURE__ */ v("div", { className: "gvp-seek", children: [
|
|
575
575
|
/* @__PURE__ */ v("div", { className: "gvp-seek-track", children: [
|
|
@@ -584,7 +584,7 @@ const X = (() => {
|
|
|
584
584
|
"div",
|
|
585
585
|
{
|
|
586
586
|
className: "gvp-seek-progress",
|
|
587
|
-
style: { width: `${
|
|
587
|
+
style: { width: `${i}%` }
|
|
588
588
|
}
|
|
589
589
|
)
|
|
590
590
|
] }),
|
|
@@ -596,7 +596,7 @@ const X = (() => {
|
|
|
596
596
|
min: 0,
|
|
597
597
|
max: 100,
|
|
598
598
|
step: 0.1,
|
|
599
|
-
value:
|
|
599
|
+
value: i,
|
|
600
600
|
onChange: f,
|
|
601
601
|
disabled: !a,
|
|
602
602
|
"aria-label": "Seek",
|
|
@@ -607,10 +607,10 @@ const X = (() => {
|
|
|
607
607
|
)
|
|
608
608
|
] });
|
|
609
609
|
}, De = ({ video: e }) => {
|
|
610
|
-
const [n, s] = k(0), [r,
|
|
610
|
+
const [n, s] = k(0), [r, l] = k(0);
|
|
611
611
|
return x(() => {
|
|
612
612
|
if (!e) return;
|
|
613
|
-
const u = () => s(e.currentTime), c = () =>
|
|
613
|
+
const u = () => s(e.currentTime), c = () => l(Number.isFinite(e.duration) ? e.duration : 0);
|
|
614
614
|
return u(), c(), e.addEventListener("timeupdate", u), e.addEventListener("durationchange", c), e.addEventListener("loadedmetadata", c), () => {
|
|
615
615
|
e.removeEventListener("timeupdate", u), e.removeEventListener("durationchange", c), e.removeEventListener("loadedmetadata", c);
|
|
616
616
|
};
|
|
@@ -620,11 +620,11 @@ const X = (() => {
|
|
|
620
620
|
J(r)
|
|
621
621
|
] });
|
|
622
622
|
}, Ae = ({ video: e }) => {
|
|
623
|
-
const [n, s] = k(1), [r,
|
|
623
|
+
const [n, s] = k(1), [r, l] = k(!1);
|
|
624
624
|
x(() => {
|
|
625
625
|
if (!e) return;
|
|
626
626
|
const m = () => {
|
|
627
|
-
s(e.volume),
|
|
627
|
+
s(e.volume), l(e.muted);
|
|
628
628
|
};
|
|
629
629
|
return m(), e.addEventListener("volumechange", m), () => e.removeEventListener("volumechange", m);
|
|
630
630
|
}, [e]);
|
|
@@ -637,7 +637,7 @@ const X = (() => {
|
|
|
637
637
|
};
|
|
638
638
|
let a = Le;
|
|
639
639
|
r || n === 0 ? a = ye : n < 0.5 && (a = Ee);
|
|
640
|
-
const
|
|
640
|
+
const i = r ? 0 : Math.round(n * 100);
|
|
641
641
|
return /* @__PURE__ */ v("div", { className: H("gvp-volume", !X && "is-expandable"), children: [
|
|
642
642
|
/* @__PURE__ */ t(
|
|
643
643
|
"button",
|
|
@@ -655,7 +655,7 @@ const X = (() => {
|
|
|
655
655
|
"div",
|
|
656
656
|
{
|
|
657
657
|
className: "gvp-volume-fill",
|
|
658
|
-
style: { width: `${
|
|
658
|
+
style: { width: `${i}%` }
|
|
659
659
|
}
|
|
660
660
|
) }),
|
|
661
661
|
/* @__PURE__ */ t(
|
|
@@ -666,35 +666,35 @@ const X = (() => {
|
|
|
666
666
|
min: 0,
|
|
667
667
|
max: 100,
|
|
668
668
|
step: 1,
|
|
669
|
-
value:
|
|
669
|
+
value: i,
|
|
670
670
|
onChange: c,
|
|
671
671
|
"aria-label": "Volume",
|
|
672
672
|
"aria-valuemin": 0,
|
|
673
673
|
"aria-valuemax": 100,
|
|
674
|
-
"aria-valuenow":
|
|
674
|
+
"aria-valuenow": i
|
|
675
675
|
}
|
|
676
676
|
)
|
|
677
677
|
] })
|
|
678
678
|
] });
|
|
679
679
|
}, $e = [0.5, 0.75, 1, 1.25, 1.5, 2], Re = ({ video: e }) => {
|
|
680
|
-
const [n, s] = k(1), [r,
|
|
680
|
+
const [n, s] = k(1), [r, l] = k(!1), u = V(null);
|
|
681
681
|
x(() => {
|
|
682
682
|
if (!e) return;
|
|
683
|
-
const
|
|
684
|
-
return
|
|
683
|
+
const i = () => s(e.playbackRate);
|
|
684
|
+
return i(), e.addEventListener("ratechange", i), () => e.removeEventListener("ratechange", i);
|
|
685
685
|
}, [e]), x(() => {
|
|
686
686
|
if (!r) return;
|
|
687
|
-
const
|
|
688
|
-
u.current && !u.current.contains(f.target) &&
|
|
687
|
+
const i = (f) => {
|
|
688
|
+
u.current && !u.current.contains(f.target) && l(!1);
|
|
689
689
|
}, m = (f) => {
|
|
690
|
-
f.key === "Escape" &&
|
|
690
|
+
f.key === "Escape" && l(!1);
|
|
691
691
|
};
|
|
692
|
-
return document.addEventListener("mousedown",
|
|
693
|
-
document.removeEventListener("mousedown",
|
|
692
|
+
return document.addEventListener("mousedown", i), document.addEventListener("keydown", m), () => {
|
|
693
|
+
document.removeEventListener("mousedown", i), document.removeEventListener("keydown", m);
|
|
694
694
|
};
|
|
695
695
|
}, [r]);
|
|
696
|
-
const c = (
|
|
697
|
-
e && (e.playbackRate =
|
|
696
|
+
const c = (i) => {
|
|
697
|
+
e && (e.playbackRate = i), s(i), l(!1);
|
|
698
698
|
}, a = n === 1 ? "1×" : `${n}×`;
|
|
699
699
|
return /* @__PURE__ */ v("div", { className: "gvp-speed", ref: u, children: [
|
|
700
700
|
/* @__PURE__ */ v(
|
|
@@ -705,7 +705,7 @@ const X = (() => {
|
|
|
705
705
|
"aria-haspopup": "listbox",
|
|
706
706
|
"aria-expanded": r,
|
|
707
707
|
"aria-label": `Playback speed: ${a}`,
|
|
708
|
-
onClick: () =>
|
|
708
|
+
onClick: () => l((i) => !i),
|
|
709
709
|
children: [
|
|
710
710
|
/* @__PURE__ */ t(Te, {}),
|
|
711
711
|
/* @__PURE__ */ t("span", { className: "gvp-speed-label", children: a })
|
|
@@ -713,67 +713,68 @@ const X = (() => {
|
|
|
713
713
|
}
|
|
714
714
|
),
|
|
715
715
|
r && // NOSONAR: typescript:S6819
|
|
716
|
-
/* @__PURE__ */ t("ul", { className: "gvp-speed-menu", role: "listbox", "aria-label": "Playback speed", children: $e.map((
|
|
716
|
+
/* @__PURE__ */ t("ul", { className: "gvp-speed-menu", role: "listbox", "aria-label": "Playback speed", children: $e.map((i) => /* @__PURE__ */ t("li", { children: /* @__PURE__ */ t(
|
|
717
717
|
"button",
|
|
718
718
|
{
|
|
719
719
|
type: "button",
|
|
720
720
|
role: "option",
|
|
721
|
-
"aria-selected":
|
|
722
|
-
className: H("gvp-speed-menu-item",
|
|
723
|
-
onClick: () => c(
|
|
724
|
-
children:
|
|
721
|
+
"aria-selected": i === n,
|
|
722
|
+
className: H("gvp-speed-menu-item", i === n && "is-active"),
|
|
723
|
+
onClick: () => c(i),
|
|
724
|
+
children: i === 1 ? "Normal" : `${i}×`
|
|
725
725
|
}
|
|
726
|
-
) },
|
|
726
|
+
) }, i)) })
|
|
727
727
|
] });
|
|
728
728
|
}, We = ({ video: e }) => {
|
|
729
|
-
const [n, s] = k([]), [r,
|
|
730
|
-
const
|
|
729
|
+
const [n, s] = k([]), [r, l] = k(-1), [u, c] = k(!1), a = V(null), i = S((o) => {
|
|
730
|
+
const h = [];
|
|
731
731
|
for (let d = 0; d < o.length; d++) {
|
|
732
732
|
const w = o[d];
|
|
733
|
-
(w.kind === "subtitles" || w.kind === "captions") &&
|
|
733
|
+
(w.kind === "subtitles" || w.kind === "captions") && h.push({ index: d, label: w.label || w.language || `Track ${d + 1}`, language: w.language });
|
|
734
734
|
}
|
|
735
|
-
s(
|
|
735
|
+
s(h);
|
|
736
736
|
let g = -1;
|
|
737
737
|
for (let d = 0; d < o.length; d++)
|
|
738
738
|
if (o[d].mode === "showing") {
|
|
739
739
|
g = d;
|
|
740
740
|
break;
|
|
741
741
|
}
|
|
742
|
-
|
|
742
|
+
l(g);
|
|
743
743
|
}, []);
|
|
744
744
|
x(() => {
|
|
745
745
|
if (!e) {
|
|
746
|
-
s([]),
|
|
746
|
+
s([]), l(-1);
|
|
747
747
|
return;
|
|
748
748
|
}
|
|
749
749
|
const o = e.textTracks;
|
|
750
|
-
|
|
751
|
-
const
|
|
752
|
-
|
|
753
|
-
o.
|
|
754
|
-
|
|
755
|
-
|
|
750
|
+
i(o);
|
|
751
|
+
const h = () => i(o);
|
|
752
|
+
if (typeof o.addEventListener == "function")
|
|
753
|
+
return o.addEventListener("addtrack", h), o.addEventListener("removetrack", h), o.addEventListener("change", h), () => {
|
|
754
|
+
o.removeEventListener("addtrack", h), o.removeEventListener("removetrack", h), o.removeEventListener("change", h);
|
|
755
|
+
};
|
|
756
|
+
}, [e, i]), x(() => {
|
|
756
757
|
if (!u) return;
|
|
757
758
|
const o = (g) => {
|
|
758
759
|
a.current && !a.current.contains(g.target) && c(!1);
|
|
759
|
-
},
|
|
760
|
+
}, h = (g) => {
|
|
760
761
|
g.key === "Escape" && c(!1);
|
|
761
762
|
};
|
|
762
|
-
return document.addEventListener("mousedown", o), document.addEventListener("keydown",
|
|
763
|
-
document.removeEventListener("mousedown", o), document.removeEventListener("keydown",
|
|
763
|
+
return document.addEventListener("mousedown", o), document.addEventListener("keydown", h), () => {
|
|
764
|
+
document.removeEventListener("mousedown", o), document.removeEventListener("keydown", h);
|
|
764
765
|
};
|
|
765
766
|
}, [u]);
|
|
766
767
|
const m = (o) => {
|
|
767
768
|
if (!e) return;
|
|
768
|
-
const
|
|
769
|
-
for (let g = 0; g <
|
|
770
|
-
|
|
771
|
-
|
|
769
|
+
const h = e.textTracks;
|
|
770
|
+
for (let g = 0; g < h.length; g++)
|
|
771
|
+
h[g].mode = g === o ? "showing" : "hidden";
|
|
772
|
+
l(o), c(!1);
|
|
772
773
|
}, f = () => {
|
|
773
774
|
if (!e) return;
|
|
774
775
|
const o = e.textTracks;
|
|
775
|
-
for (let
|
|
776
|
-
|
|
776
|
+
for (let h = 0; h < o.length; h++) o[h].mode = "hidden";
|
|
777
|
+
l(-1), c(!1);
|
|
777
778
|
};
|
|
778
779
|
return n.length === 0 ? null : /* @__PURE__ */ v("div", { className: "gvp-captions", ref: a, children: [
|
|
779
780
|
/* @__PURE__ */ t(
|
|
@@ -819,9 +820,9 @@ const X = (() => {
|
|
|
819
820
|
const [n, s] = k(!1);
|
|
820
821
|
if (x(() => {
|
|
821
822
|
if (!e) return;
|
|
822
|
-
const
|
|
823
|
-
return e.addEventListener("enterpictureinpicture",
|
|
824
|
-
e.removeEventListener("enterpictureinpicture",
|
|
823
|
+
const l = () => s(!0), u = () => s(!1);
|
|
824
|
+
return e.addEventListener("enterpictureinpicture", l), e.addEventListener("leavepictureinpicture", u), () => {
|
|
825
|
+
e.removeEventListener("enterpictureinpicture", l), e.removeEventListener("leavepictureinpicture", u);
|
|
825
826
|
};
|
|
826
827
|
}, [e]), !document.pictureInPictureEnabled) return null;
|
|
827
828
|
const r = () => {
|
|
@@ -844,8 +845,8 @@ const X = (() => {
|
|
|
844
845
|
const [s, r] = k(!1);
|
|
845
846
|
return x(() => {
|
|
846
847
|
if (q) return;
|
|
847
|
-
const
|
|
848
|
-
return
|
|
848
|
+
const i = () => r(B.element() === e);
|
|
849
|
+
return i(), B.onChange(i);
|
|
849
850
|
}, [e]), B.isSupported() || q && n !== null && typeof n.webkitEnterFullscreen == "function" ? /* @__PURE__ */ t(
|
|
850
851
|
"button",
|
|
851
852
|
{
|
|
@@ -854,9 +855,9 @@ const X = (() => {
|
|
|
854
855
|
"aria-label": s ? "Exit fullscreen" : "Enter fullscreen",
|
|
855
856
|
"aria-pressed": s,
|
|
856
857
|
onClick: () => {
|
|
857
|
-
var
|
|
858
|
+
var i;
|
|
858
859
|
if (q) {
|
|
859
|
-
(
|
|
860
|
+
(i = n == null ? void 0 : n.webkitEnterFullscreen) == null || i.call(n);
|
|
860
861
|
return;
|
|
861
862
|
}
|
|
862
863
|
s ? B.exit().catch(() => {
|
|
@@ -880,28 +881,28 @@ function G(e, n, s) {
|
|
|
880
881
|
}
|
|
881
882
|
return `Audio ${s + 1}`;
|
|
882
883
|
}
|
|
883
|
-
const ee =
|
|
884
|
+
const ee = he.forwardRef(
|
|
884
885
|
({
|
|
885
886
|
src: e,
|
|
886
887
|
hlsConfig: n,
|
|
887
888
|
isHls: s,
|
|
888
889
|
autoPlay: r,
|
|
889
|
-
children:
|
|
890
|
+
children: l,
|
|
890
891
|
onAudioTracks: u,
|
|
891
892
|
audioTrackIndex: c,
|
|
892
893
|
...a
|
|
893
|
-
},
|
|
894
|
+
}, i) => {
|
|
894
895
|
const m = V(null), f = V(null), o = V(u);
|
|
895
|
-
o.current = u, me(
|
|
896
|
-
const
|
|
896
|
+
o.current = u, me(i, () => m.current);
|
|
897
|
+
const h = globalThis.window !== void 0 && $.isSupported(), g = !!s || h && typeof e == "string" && e.endsWith(".m3u8");
|
|
897
898
|
return x(() => {
|
|
898
899
|
var P, R, D;
|
|
899
900
|
if (!e) return;
|
|
900
901
|
const d = m.current;
|
|
901
902
|
if (!d) return;
|
|
902
|
-
const w = (
|
|
903
|
+
const w = (p) => {
|
|
903
904
|
var E;
|
|
904
|
-
(E = o.current) == null || E.call(o,
|
|
905
|
+
(E = o.current) == null || E.call(o, p);
|
|
905
906
|
}, C = () => {
|
|
906
907
|
r && d.play().catch(() => {
|
|
907
908
|
});
|
|
@@ -910,27 +911,27 @@ const ee = pe.forwardRef(
|
|
|
910
911
|
w([]);
|
|
911
912
|
let N;
|
|
912
913
|
if (g) {
|
|
913
|
-
const
|
|
914
|
-
f.current =
|
|
914
|
+
const p = new $(n);
|
|
915
|
+
f.current = p;
|
|
915
916
|
const E = () => {
|
|
916
|
-
const M =
|
|
917
|
+
const M = p.audioTracks.map((b, T) => ({
|
|
917
918
|
index: T,
|
|
918
919
|
label: G(b.name, b.lang, T),
|
|
919
920
|
lang: b.lang || void 0
|
|
920
921
|
}));
|
|
921
922
|
w(M);
|
|
922
923
|
};
|
|
923
|
-
|
|
924
|
-
b.fatal && (
|
|
925
|
-
}),
|
|
924
|
+
p.on($.Events.MANIFEST_PARSED, C), p.on($.Events.AUDIO_TRACKS_UPDATED, E), p.on($.Events.AUDIO_TRACK_SWITCHED, E), p.on($.Events.ERROR, (M, b) => {
|
|
925
|
+
b.fatal && (p.destroy(), f.current = null);
|
|
926
|
+
}), p.attachMedia(d), p.loadSource(e);
|
|
926
927
|
} else {
|
|
927
928
|
d.src = e, d.load(), d.addEventListener("loadedmetadata", C, { once: !0 });
|
|
928
|
-
const
|
|
929
|
-
if (
|
|
929
|
+
const p = d.audioTracks;
|
|
930
|
+
if (p) {
|
|
930
931
|
const E = () => {
|
|
931
932
|
const M = [];
|
|
932
|
-
for (let b = 0; b <
|
|
933
|
-
const T =
|
|
933
|
+
for (let b = 0; b < p.length; b++) {
|
|
934
|
+
const T = p[b];
|
|
934
935
|
M.push({
|
|
935
936
|
index: b,
|
|
936
937
|
label: G(T.label, T.language, b),
|
|
@@ -939,9 +940,9 @@ const ee = pe.forwardRef(
|
|
|
939
940
|
}
|
|
940
941
|
w(M);
|
|
941
942
|
};
|
|
942
|
-
(P =
|
|
943
|
+
(P = p.addEventListener) == null || P.call(p, "addtrack", E), (R = p.addEventListener) == null || R.call(p, "removetrack", E), (D = p.addEventListener) == null || D.call(p, "change", E), p.length > 0 && E(), N = () => {
|
|
943
944
|
var M, b, T;
|
|
944
|
-
(M =
|
|
945
|
+
(M = p.removeEventListener) == null || M.call(p, "addtrack", E), (b = p.removeEventListener) == null || b.call(p, "removetrack", E), (T = p.removeEventListener) == null || T.call(p, "change", E);
|
|
945
946
|
};
|
|
946
947
|
}
|
|
947
948
|
}
|
|
@@ -963,7 +964,7 @@ const ee = pe.forwardRef(
|
|
|
963
964
|
w[N].enabled = N === c;
|
|
964
965
|
}, [c]), // Captions are the consumer's responsibility — pass <track> elements as children.
|
|
965
966
|
// NOSONAR: typescript:S4084
|
|
966
|
-
/* @__PURE__ */ t("video", { ref: m, ...a, children:
|
|
967
|
+
/* @__PURE__ */ t("video", { ref: m, ...a, children: l });
|
|
967
968
|
}
|
|
968
969
|
);
|
|
969
970
|
ee.displayName = "HLSPlayer";
|
|
@@ -984,10 +985,10 @@ function Ue(e) {
|
|
|
984
985
|
if (s === "youtube.com" || s === "m.youtube.com" || s === "music.youtube.com" || s === "youtube-nocookie.com") {
|
|
985
986
|
const r = n.searchParams.get("v");
|
|
986
987
|
if (r && /^[A-Za-z0-9_-]{11}$/.test(r)) return r;
|
|
987
|
-
const
|
|
988
|
+
const l = /^\/(?:embed|shorts|v|live)\/([A-Za-z0-9_-]{11})/.exec(
|
|
988
989
|
n.pathname
|
|
989
990
|
);
|
|
990
|
-
if (
|
|
991
|
+
if (l) return l[1];
|
|
991
992
|
}
|
|
992
993
|
return null;
|
|
993
994
|
}
|
|
@@ -998,7 +999,7 @@ function _e(e) {
|
|
|
998
999
|
if (/^\d+s?$/.test(s)) return Number.parseInt(s, 10);
|
|
999
1000
|
const r = /^(?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s)?$/.exec(s);
|
|
1000
1001
|
if (r) {
|
|
1001
|
-
const
|
|
1002
|
+
const l = Number.parseInt(r[1] ?? "0", 10), u = Number.parseInt(r[2] ?? "0", 10), c = Number.parseInt(r[3] ?? "0", 10), a = l * 3600 + u * 60 + c;
|
|
1002
1003
|
return a > 0 ? a : null;
|
|
1003
1004
|
}
|
|
1004
1005
|
} catch {
|
|
@@ -1006,29 +1007,29 @@ function _e(e) {
|
|
|
1006
1007
|
return null;
|
|
1007
1008
|
}
|
|
1008
1009
|
function Oe(e, n = {}) {
|
|
1009
|
-
const { autoPlay: s = !1, muted: r = !0, loop:
|
|
1010
|
+
const { autoPlay: s = !1, muted: r = !0, loop: l = !1, controls: u = !0, startSeconds: c } = n, a = new URLSearchParams({
|
|
1010
1011
|
rel: "0",
|
|
1011
1012
|
modestbranding: "1",
|
|
1012
1013
|
playsinline: "1",
|
|
1013
1014
|
controls: u ? "1" : "0"
|
|
1014
1015
|
});
|
|
1015
|
-
return s ? (a.set("autoplay", "1"), a.set("mute", "1")) : r && a.set("mute", "1"),
|
|
1016
|
+
return s ? (a.set("autoplay", "1"), a.set("mute", "1")) : r && a.set("mute", "1"), l && (a.set("loop", "1"), a.set("playlist", e)), c && c > 0 && a.set("start", String(c)), `https://www.youtube-nocookie.com/embed/${e}?${a.toString()}`;
|
|
1016
1017
|
}
|
|
1017
1018
|
const Fe = ({
|
|
1018
1019
|
tracks: e,
|
|
1019
1020
|
activeIndex: n,
|
|
1020
1021
|
onSelect: s
|
|
1021
1022
|
}) => {
|
|
1022
|
-
const [r,
|
|
1023
|
+
const [r, l] = k(!1), u = V(null);
|
|
1023
1024
|
x(() => {
|
|
1024
1025
|
if (!r) return;
|
|
1025
1026
|
const a = (m) => {
|
|
1026
|
-
u.current && !u.current.contains(m.target) &&
|
|
1027
|
-
},
|
|
1028
|
-
m.key === "Escape" &&
|
|
1027
|
+
u.current && !u.current.contains(m.target) && l(!1);
|
|
1028
|
+
}, i = (m) => {
|
|
1029
|
+
m.key === "Escape" && l(!1);
|
|
1029
1030
|
};
|
|
1030
|
-
return document.addEventListener("mousedown", a), document.addEventListener("keydown",
|
|
1031
|
-
document.removeEventListener("mousedown", a), document.removeEventListener("keydown",
|
|
1031
|
+
return document.addEventListener("mousedown", a), document.addEventListener("keydown", i), () => {
|
|
1032
|
+
document.removeEventListener("mousedown", a), document.removeEventListener("keydown", i);
|
|
1032
1033
|
};
|
|
1033
1034
|
}, [r]);
|
|
1034
1035
|
const c = e.find((a) => a.index === n) ?? e[0];
|
|
@@ -1041,7 +1042,7 @@ const Fe = ({
|
|
|
1041
1042
|
"aria-haspopup": "listbox",
|
|
1042
1043
|
"aria-expanded": r,
|
|
1043
1044
|
"aria-label": "Audio track",
|
|
1044
|
-
onClick: () =>
|
|
1045
|
+
onClick: () => l((a) => !a),
|
|
1045
1046
|
children: [
|
|
1046
1047
|
/* @__PURE__ */ t(we, {}),
|
|
1047
1048
|
/* @__PURE__ */ t("span", { className: "gvp-audio-label", children: c == null ? void 0 : c.label }),
|
|
@@ -1064,7 +1065,7 @@ const Fe = ({
|
|
|
1064
1065
|
a.index === n && "is-active"
|
|
1065
1066
|
),
|
|
1066
1067
|
onClick: () => {
|
|
1067
|
-
s(a.index),
|
|
1068
|
+
s(a.index), l(!1);
|
|
1068
1069
|
},
|
|
1069
1070
|
children: a.label
|
|
1070
1071
|
}
|
|
@@ -1075,32 +1076,32 @@ const Fe = ({
|
|
|
1075
1076
|
poster: n,
|
|
1076
1077
|
showDeviceToggle: s = !0,
|
|
1077
1078
|
defaultDevice: r = "desktop",
|
|
1078
|
-
hoverPlay:
|
|
1079
|
+
hoverPlay: l = !1,
|
|
1079
1080
|
tooltipText: u,
|
|
1080
1081
|
onClose: c,
|
|
1081
1082
|
className: a = "",
|
|
1082
|
-
muted:
|
|
1083
|
+
muted: i = !0,
|
|
1083
1084
|
loop: m = !1,
|
|
1084
|
-
controls: f = !
|
|
1085
|
+
controls: f = !0,
|
|
1085
1086
|
autoPlay: o = !1,
|
|
1086
|
-
frameMaxWidth:
|
|
1087
|
+
frameMaxWidth: h,
|
|
1087
1088
|
aspectRatio: g,
|
|
1088
1089
|
hlsConfig: d,
|
|
1089
1090
|
children: w
|
|
1090
1091
|
}) => {
|
|
1091
|
-
const C = V(null), N = V(null), [P, R] = k(r), [D,
|
|
1092
|
+
const C = V(null), N = V(null), [P, R] = k(r), [D, p] = k(!1), [E, M] = k(!1), [b, T] = k([]), [_, z] = k(-1), [te, ne] = k(null), [re, se] = k(null), oe = S((y) => {
|
|
1092
1093
|
C.current = y, se(y);
|
|
1093
|
-
}, []), A = f === "custom", O = f ===
|
|
1094
|
+
}, []), A = f === !0 || f === "custom", O = f === "native", W = U(() => Ue(e), [e]), I = W !== null, ae = U(() => P === "mobile" ? (g == null ? void 0 : g.mobile) ?? "9/16" : (g == null ? void 0 : g.desktop) ?? "16/9", [P, g]), ie = U(() => P === "mobile" ? (h == null ? void 0 : h.mobile) ?? "420px" : (h == null ? void 0 : h.desktop) ?? "960px", [P, h]), le = U(
|
|
1094
1095
|
() => W ? Oe(W, {
|
|
1095
1096
|
autoPlay: o,
|
|
1096
|
-
muted:
|
|
1097
|
+
muted: i,
|
|
1097
1098
|
loop: m,
|
|
1098
1099
|
// Custom controls can't drive an iframe, so YouTube falls
|
|
1099
1100
|
// back to its own controls in that mode.
|
|
1100
1101
|
controls: A ? !0 : O,
|
|
1101
1102
|
startSeconds: _e(e)
|
|
1102
1103
|
}) : null,
|
|
1103
|
-
[W, e, o,
|
|
1104
|
+
[W, e, o, i, m, A, O]
|
|
1104
1105
|
), ce = S((y) => {
|
|
1105
1106
|
T(y), z(-1);
|
|
1106
1107
|
}, []), j = S(async () => {
|
|
@@ -1119,20 +1120,20 @@ const Fe = ({
|
|
|
1119
1120
|
try {
|
|
1120
1121
|
y.readyState < 2 && y.load();
|
|
1121
1122
|
const Y = y.play();
|
|
1122
|
-
N.current = Y, await Y,
|
|
1123
|
+
N.current = Y, await Y, p(!0);
|
|
1123
1124
|
} catch {
|
|
1124
|
-
|
|
1125
|
+
p(!1);
|
|
1125
1126
|
} finally {
|
|
1126
1127
|
N.current = null;
|
|
1127
1128
|
}
|
|
1128
1129
|
}, []), ue = S(() => {
|
|
1129
|
-
!
|
|
1130
|
-
}, [
|
|
1131
|
-
!
|
|
1132
|
-
}, [
|
|
1130
|
+
!l || I || Z();
|
|
1131
|
+
}, [l, I, Z]), de = S(() => {
|
|
1132
|
+
!l || I || j().then(() => p(!1));
|
|
1133
|
+
}, [l, I, j]), F = S(async () => {
|
|
1133
1134
|
const y = C.current;
|
|
1134
|
-
y && (y.paused ? await Z() : (await j(),
|
|
1135
|
-
}, [Z, j]),
|
|
1135
|
+
y && (y.paused ? await Z() : (await j(), p(!1)));
|
|
1136
|
+
}, [Z, j]), pe = !I && b.length > 1;
|
|
1136
1137
|
return (
|
|
1137
1138
|
// The mouse handlers are a progressive enhancement (hoverPlay + tooltip).
|
|
1138
1139
|
// Keyboard/click users reach the same actions via the inner <button> elements,
|
|
@@ -1143,7 +1144,7 @@ const Fe = ({
|
|
|
1143
1144
|
{
|
|
1144
1145
|
ref: ne,
|
|
1145
1146
|
className: H("gvp-root", a),
|
|
1146
|
-
style: { width:
|
|
1147
|
+
style: { width: ie, aspectRatio: ae },
|
|
1147
1148
|
onMouseEnter: () => {
|
|
1148
1149
|
M(!0), ue();
|
|
1149
1150
|
},
|
|
@@ -1155,7 +1156,7 @@ const Fe = ({
|
|
|
1155
1156
|
"iframe",
|
|
1156
1157
|
{
|
|
1157
1158
|
className: "gvp-video gvp-youtube",
|
|
1158
|
-
src:
|
|
1159
|
+
src: le ?? void 0,
|
|
1159
1160
|
title: "YouTube video player",
|
|
1160
1161
|
allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",
|
|
1161
1162
|
allowFullScreen: !0,
|
|
@@ -1167,7 +1168,7 @@ const Fe = ({
|
|
|
1167
1168
|
ref: oe,
|
|
1168
1169
|
src: e,
|
|
1169
1170
|
poster: n,
|
|
1170
|
-
muted:
|
|
1171
|
+
muted: i,
|
|
1171
1172
|
loop: m,
|
|
1172
1173
|
playsInline: !0,
|
|
1173
1174
|
preload: "metadata",
|
|
@@ -1175,8 +1176,8 @@ const Fe = ({
|
|
|
1175
1176
|
autoPlay: o,
|
|
1176
1177
|
hlsConfig: d,
|
|
1177
1178
|
className: "gvp-video",
|
|
1178
|
-
onPlay: () =>
|
|
1179
|
-
onPause: () =>
|
|
1179
|
+
onPlay: () => p(!0),
|
|
1180
|
+
onPause: () => p(!1),
|
|
1180
1181
|
onAudioTracks: ce,
|
|
1181
1182
|
audioTrackIndex: _,
|
|
1182
1183
|
children: w
|
|
@@ -1224,7 +1225,7 @@ const Fe = ({
|
|
|
1224
1225
|
children: /* @__PURE__ */ t(ve, {})
|
|
1225
1226
|
}
|
|
1226
1227
|
),
|
|
1227
|
-
|
|
1228
|
+
pe && /* @__PURE__ */ t(
|
|
1228
1229
|
Fe,
|
|
1229
1230
|
{
|
|
1230
1231
|
tracks: b,
|