@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/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 pe, { useState as k, useRef as V, useCallback as S, useEffect as x, useImperativeHandle as me, useMemo as U } from "react";
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 i = e.length;
10
- for (n = 0; n < i; n++) e[n] && (s = Q(e[n])) && (r && (r += " "), r += s);
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 = "", i = arguments.length; s < i; s++) (e = arguments[s]) && (n = Q(e)) && (r && (r += " "), r += n);
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 [i, u] = k(!0), c = V(null), a = S(() => {
458
+ const [l, u] = k(!0), c = V(null), a = S(() => {
459
459
  c.current !== null && (clearTimeout(c.current), c.current = null);
460
- }, []), l = S(() => {
460
+ }, []), i = S(() => {
461
461
  a(), n && (c.current = setTimeout(() => u(!1), Se));
462
462
  }, [a, n]), m = S(() => {
463
- u(!0), l();
464
- }, [l]);
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 l(), a;
471
- }, [n, l, a]), x(() => {
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", !i && "is-hidden"),
519
+ className: H("gvp-controls", !l && "is-hidden"),
520
520
  onMouseEnter: a,
521
- onMouseLeave: l,
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, i] = k(0), [u, c] = k(0);
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), p = () => i(Number.isFinite(e.duration) ? e.duration : 0), g = () => {
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(), p(), g(), e.addEventListener("timeupdate", o), e.addEventListener("durationchange", p), e.addEventListener("loadedmetadata", p), e.addEventListener("progress", g), e.addEventListener("timeupdate", g), () => {
566
- e.removeEventListener("timeupdate", o), e.removeEventListener("durationchange", p), e.removeEventListener("loadedmetadata", p), e.removeEventListener("progress", g), e.removeEventListener("timeupdate", g);
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, l = a ? n / r * 100 : 0, m = a ? u / r * 100 : 0, f = (o) => {
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 p = Number(o.target.value) / 100 * r;
572
- e.currentTime = p, s(p);
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: `${l}%` }
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: l,
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, i] = k(0);
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 = () => i(Number.isFinite(e.duration) ? e.duration : 0);
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, i] = k(!1);
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), i(e.muted);
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 l = r ? 0 : Math.round(n * 100);
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: `${l}%` }
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: l,
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": l
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, i] = k(!1), u = V(null);
680
+ const [n, s] = k(1), [r, l] = k(!1), u = V(null);
681
681
  x(() => {
682
682
  if (!e) return;
683
- const l = () => s(e.playbackRate);
684
- return l(), e.addEventListener("ratechange", l), () => e.removeEventListener("ratechange", l);
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 l = (f) => {
688
- u.current && !u.current.contains(f.target) && i(!1);
687
+ const i = (f) => {
688
+ u.current && !u.current.contains(f.target) && l(!1);
689
689
  }, m = (f) => {
690
- f.key === "Escape" && i(!1);
690
+ f.key === "Escape" && l(!1);
691
691
  };
692
- return document.addEventListener("mousedown", l), document.addEventListener("keydown", m), () => {
693
- document.removeEventListener("mousedown", l), document.removeEventListener("keydown", m);
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 = (l) => {
697
- e && (e.playbackRate = l), s(l), i(!1);
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: () => i((l) => !l),
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((l) => /* @__PURE__ */ t("li", { children: /* @__PURE__ */ t(
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": l === n,
722
- className: H("gvp-speed-menu-item", l === n && "is-active"),
723
- onClick: () => c(l),
724
- children: l === 1 ? "Normal" : `${l}×`
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
- ) }, l)) })
726
+ ) }, i)) })
727
727
  ] });
728
728
  }, We = ({ video: e }) => {
729
- const [n, s] = k([]), [r, i] = k(-1), [u, c] = k(!1), a = V(null), l = S((o) => {
730
- const p = [];
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") && p.push({ index: d, label: w.label || w.language || `Track ${d + 1}`, language: w.language });
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(p);
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
- i(g);
742
+ l(g);
743
743
  }, []);
744
744
  x(() => {
745
745
  if (!e) {
746
- s([]), i(-1);
746
+ s([]), l(-1);
747
747
  return;
748
748
  }
749
749
  const o = e.textTracks;
750
- l(o);
751
- const p = () => l(o);
752
- return o.addEventListener("addtrack", p), o.addEventListener("removetrack", p), o.addEventListener("change", p), () => {
753
- o.removeEventListener("addtrack", p), o.removeEventListener("removetrack", p), o.removeEventListener("change", p);
754
- };
755
- }, [e, l]), x(() => {
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
- }, p = (g) => {
760
+ }, h = (g) => {
760
761
  g.key === "Escape" && c(!1);
761
762
  };
762
- return document.addEventListener("mousedown", o), document.addEventListener("keydown", p), () => {
763
- document.removeEventListener("mousedown", o), document.removeEventListener("keydown", p);
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 p = e.textTracks;
769
- for (let g = 0; g < p.length; g++)
770
- p[g].mode = g === o ? "showing" : "hidden";
771
- i(o), c(!1);
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 p = 0; p < o.length; p++) o[p].mode = "hidden";
776
- i(-1), c(!1);
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 i = () => s(!0), u = () => s(!1);
823
- return e.addEventListener("enterpictureinpicture", i), e.addEventListener("leavepictureinpicture", u), () => {
824
- e.removeEventListener("enterpictureinpicture", i), e.removeEventListener("leavepictureinpicture", u);
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 l = () => r(B.element() === e);
848
- return l(), B.onChange(l);
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 l;
858
+ var i;
858
859
  if (q) {
859
- (l = n == null ? void 0 : n.webkitEnterFullscreen) == null || l.call(n);
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 = pe.forwardRef(
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: i,
890
+ children: l,
890
891
  onAudioTracks: u,
891
892
  audioTrackIndex: c,
892
893
  ...a
893
- }, l) => {
894
+ }, i) => {
894
895
  const m = V(null), f = V(null), o = V(u);
895
- o.current = u, me(l, () => m.current);
896
- const p = globalThis.window !== void 0 && $.isSupported(), g = !!s || p && typeof e == "string" && e.endsWith(".m3u8");
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 = (h) => {
903
+ const w = (p) => {
903
904
  var E;
904
- (E = o.current) == null || E.call(o, h);
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 h = new $(n);
914
- f.current = h;
914
+ const p = new $(n);
915
+ f.current = p;
915
916
  const E = () => {
916
- const M = h.audioTracks.map((b, T) => ({
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
- h.on($.Events.MANIFEST_PARSED, C), h.on($.Events.AUDIO_TRACKS_UPDATED, E), h.on($.Events.AUDIO_TRACK_SWITCHED, E), h.on($.Events.ERROR, (M, b) => {
924
- b.fatal && (h.destroy(), f.current = null);
925
- }), h.attachMedia(d), h.loadSource(e);
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 h = d.audioTracks;
929
- if (h) {
929
+ const p = d.audioTracks;
930
+ if (p) {
930
931
  const E = () => {
931
932
  const M = [];
932
- for (let b = 0; b < h.length; b++) {
933
- const T = h[b];
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 = h.addEventListener) == null || P.call(h, "addtrack", E), (R = h.addEventListener) == null || R.call(h, "removetrack", E), (D = h.addEventListener) == null || D.call(h, "change", E), h.length > 0 && E(), N = () => {
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 = h.removeEventListener) == null || M.call(h, "addtrack", E), (b = h.removeEventListener) == null || b.call(h, "removetrack", E), (T = h.removeEventListener) == null || T.call(h, "change", E);
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: i });
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 i = /^\/(?:embed|shorts|v|live)\/([A-Za-z0-9_-]{11})/.exec(
988
+ const l = /^\/(?:embed|shorts|v|live)\/([A-Za-z0-9_-]{11})/.exec(
988
989
  n.pathname
989
990
  );
990
- if (i) return i[1];
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 i = Number.parseInt(r[1] ?? "0", 10), u = Number.parseInt(r[2] ?? "0", 10), c = Number.parseInt(r[3] ?? "0", 10), a = i * 3600 + u * 60 + c;
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: i = !1, controls: u = !0, startSeconds: c } = n, a = new URLSearchParams({
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"), i && (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
+ 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, i] = k(!1), u = V(null);
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) && i(!1);
1027
- }, l = (m) => {
1028
- m.key === "Escape" && i(!1);
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", l), () => {
1031
- document.removeEventListener("mousedown", a), document.removeEventListener("keydown", l);
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: () => i((a) => !a),
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), i(!1);
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: i = !1,
1079
+ hoverPlay: l = !1,
1079
1080
  tooltipText: u,
1080
1081
  onClose: c,
1081
1082
  className: a = "",
1082
- muted: l = !0,
1083
+ muted: i = !0,
1083
1084
  loop: m = !1,
1084
- controls: f = !1,
1085
+ controls: f = !0,
1085
1086
  autoPlay: o = !1,
1086
- frameMaxWidth: p,
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, h] = k(!1), [E, M] = k(!1), [b, T] = k([]), [_, z] = k(-1), [te, ne] = k(null), [re, se] = k(null), oe = S((y) => {
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 === !0, 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]), le = U(() => P === "mobile" ? (p == null ? void 0 : p.mobile) ?? "420px" : (p == null ? void 0 : p.desktop) ?? "960px", [P, p]), ie = U(
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: l,
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, l, m, A, 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, h(!0);
1123
+ N.current = Y, await Y, p(!0);
1123
1124
  } catch {
1124
- h(!1);
1125
+ p(!1);
1125
1126
  } finally {
1126
1127
  N.current = null;
1127
1128
  }
1128
1129
  }, []), ue = S(() => {
1129
- !i || I || Z();
1130
- }, [i, I, Z]), de = S(() => {
1131
- !i || I || j().then(() => h(!1));
1132
- }, [i, I, j]), F = S(async () => {
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(), h(!1)));
1135
- }, [Z, j]), he = !I && b.length > 1;
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: le, aspectRatio: ae },
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: ie ?? void 0,
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: l,
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: () => h(!0),
1179
- onPause: () => h(!1),
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
- he && /* @__PURE__ */ t(
1228
+ pe && /* @__PURE__ */ t(
1228
1229
  Fe,
1229
1230
  {
1230
1231
  tracks: b,