softbuilders-react-video-player 1.1.55 → 1.1.57
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/components/ControlBar/index.d.ts +2 -1
- package/dist/components/ControlBar/index.js +2 -2
- package/dist/components/ControlBar/index.js.map +1 -1
- package/dist/components/ControlBar/index.tsx +3 -0
- package/dist/components/CreateNoteMenu/index.d.ts +3 -1
- package/dist/components/CreateNoteMenu/index.js +2 -2
- package/dist/components/CreateNoteMenu/index.js.map +1 -1
- package/dist/components/CreateNoteMenu/index.tsx +7 -1
- package/dist/components/MenuButton/index.d.ts +2 -1
- package/dist/components/MenuButton/index.js +4 -1
- package/dist/components/MenuButton/index.js.map +1 -1
- package/dist/components/MenuButton/index.tsx +5 -1
- package/dist/components/SoftBuildersVideoPlayer/index.d.ts +2 -1
- package/dist/components/SoftBuildersVideoPlayer/index.js +4 -4
- package/dist/components/SoftBuildersVideoPlayer/index.js.map +1 -1
- package/dist/components/SoftBuildersVideoPlayer/index.tsx +69 -64
- package/dist/components/VideoPlayerComponent/index.d.ts +3 -1
- package/dist/components/VideoPlayerComponent/index.js +23 -6
- package/dist/components/VideoPlayerComponent/index.js.map +1 -1
- package/dist/components/VideoPlayerComponent/index.tsx +285 -260
- package/dist/index.d.mts +4 -3
- package/dist/index.mjs +373 -336
- package/dist/types.d.ts +1 -0
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
@@ -31,10 +31,10 @@ var __objRest = (source, exclude) => {
|
|
31
31
|
};
|
32
32
|
|
33
33
|
// src/components/SoftBuildersVideoPlayer/index.tsx
|
34
|
-
import { memo, useEffect as useEffect15, useState as useState14 } from "react";
|
34
|
+
import { forwardRef as forwardRef2, memo, useEffect as useEffect15, useState as useState14 } from "react";
|
35
35
|
|
36
36
|
// src/components/VideoPlayerComponent/index.tsx
|
37
|
-
import { useEffect as useEffect14, useRef as useRef2, useState as useState13 } from "react";
|
37
|
+
import { forwardRef, useEffect as useEffect14, useRef as useRef2, useState as useState13 } from "react";
|
38
38
|
import ReactDOM from "react-dom/client";
|
39
39
|
import videojs from "video.js";
|
40
40
|
import "video.js/dist/video-js.css";
|
@@ -607,7 +607,8 @@ var MenuButton = ({
|
|
607
607
|
menuContent,
|
608
608
|
close,
|
609
609
|
classContainer,
|
610
|
-
onClick
|
610
|
+
onClick,
|
611
|
+
setNoteOpen
|
611
612
|
}) => {
|
612
613
|
const [isOpen, setIsOpen] = useState3(false);
|
613
614
|
const buttonRef = useRef(null);
|
@@ -628,6 +629,9 @@ var MenuButton = ({
|
|
628
629
|
useEffect3(() => {
|
629
630
|
if (close) close(closeMenu);
|
630
631
|
}, [close, closeMenu]);
|
632
|
+
useEffect3(() => {
|
633
|
+
setNoteOpen(isOpen);
|
634
|
+
}, [isOpen]);
|
631
635
|
return /* @__PURE__ */ jsxs5("div", { className: "sb-relative sb-flex sb-items-end", children: [
|
632
636
|
/* @__PURE__ */ jsx20(
|
633
637
|
"button",
|
@@ -780,7 +784,11 @@ var QualityMenu_default = QualityMenu;
|
|
780
784
|
// src/components/CreateNoteMenu/index.tsx
|
781
785
|
import { useState as useState5 } from "react";
|
782
786
|
import { jsx as jsx22, jsxs as jsxs7 } from "react/jsx-runtime";
|
783
|
-
var CreateNoteMenu = ({
|
787
|
+
var CreateNoteMenu = ({
|
788
|
+
handleSaveNoteAction,
|
789
|
+
width,
|
790
|
+
setNoteOpen
|
791
|
+
}) => {
|
784
792
|
const { player } = useSoftBuildersVideoPlayerContext();
|
785
793
|
const [note, setNote] = useState5("");
|
786
794
|
const handleSaveNote = () => {
|
@@ -798,6 +806,7 @@ var CreateNoteMenu = ({ handleSaveNoteAction, width }) => {
|
|
798
806
|
return /* @__PURE__ */ jsx22(
|
799
807
|
MenuButton_default,
|
800
808
|
{
|
809
|
+
setNoteOpen,
|
801
810
|
classContainer: `${width < 400 ? "!sb-top-8 -sb-left-[9.75rem]" : ""}`,
|
802
811
|
buttonContent: /* @__PURE__ */ jsx22(ClosedNoteIcon_default, { className: "sb-w-3 sb-h-3" }),
|
803
812
|
menuContent: /* @__PURE__ */ jsx22(
|
@@ -1225,6 +1234,7 @@ var ControlBar = ({
|
|
1225
1234
|
handleControlDisplayTimer,
|
1226
1235
|
setIsQualityMenuOpen,
|
1227
1236
|
setIsSubtitleMenuOpen,
|
1237
|
+
setNoteOpen,
|
1228
1238
|
disableNote
|
1229
1239
|
}) => {
|
1230
1240
|
const { setPlayer, setDuration } = useSoftBuildersVideoPlayerContext();
|
@@ -1333,7 +1343,8 @@ var ControlBar = ({
|
|
1333
1343
|
CreateNoteMenu_default,
|
1334
1344
|
{
|
1335
1345
|
handleSaveNoteAction,
|
1336
|
-
width
|
1346
|
+
width,
|
1347
|
+
setNoteOpen
|
1337
1348
|
}
|
1338
1349
|
),
|
1339
1350
|
/* @__PURE__ */ jsx33(
|
@@ -1414,7 +1425,7 @@ var renderBigPlayButton = (id, player, isPaused, setIsPaused, opacity = "100") =
|
|
1414
1425
|
};
|
1415
1426
|
var controlBarRoot = {};
|
1416
1427
|
var renderControlBar = (id, player, isPaused, setIsPaused, duration, notes, chapters, seekStep = 5, handleSaveNoteAction, opacity = "0", handleControlDisplayTimer = () => {
|
1417
|
-
}, bgColor = "transparent", setIsQualityMenuOpen, setIsSubtitleMenuOpen, disableNote) => {
|
1428
|
+
}, bgColor = "transparent", setIsQualityMenuOpen, setIsSubtitleMenuOpen, disableNote, setNoteOpen) => {
|
1418
1429
|
const container = document.getElementById(`video-container-${id}`);
|
1419
1430
|
if (container) {
|
1420
1431
|
container.style.height = "100%";
|
@@ -1445,75 +1456,165 @@ var renderControlBar = (id, player, isPaused, setIsPaused, duration, notes, chap
|
|
1445
1456
|
handleControlDisplayTimer,
|
1446
1457
|
setIsSubtitleMenuOpen,
|
1447
1458
|
setIsQualityMenuOpen,
|
1448
|
-
disableNote
|
1459
|
+
disableNote,
|
1460
|
+
setNoteOpen
|
1449
1461
|
}
|
1450
1462
|
) })
|
1451
1463
|
);
|
1452
1464
|
}
|
1453
1465
|
}
|
1454
1466
|
};
|
1455
|
-
var VideoPlayerComponent = (
|
1456
|
-
|
1457
|
-
|
1458
|
-
|
1459
|
-
|
1460
|
-
|
1461
|
-
|
1462
|
-
|
1463
|
-
|
1464
|
-
|
1465
|
-
|
1466
|
-
|
1467
|
-
|
1468
|
-
|
1469
|
-
|
1470
|
-
|
1471
|
-
|
1472
|
-
|
1473
|
-
|
1474
|
-
|
1475
|
-
|
1476
|
-
|
1477
|
-
|
1478
|
-
|
1479
|
-
|
1480
|
-
|
1481
|
-
|
1482
|
-
|
1483
|
-
|
1484
|
-
|
1485
|
-
|
1486
|
-
|
1487
|
-
|
1488
|
-
|
1489
|
-
|
1490
|
-
|
1491
|
-
|
1492
|
-
|
1493
|
-
|
1494
|
-
|
1495
|
-
|
1496
|
-
|
1497
|
-
if (!playerRef.current) {
|
1498
|
-
const videoElement = document.createElement("video-js");
|
1499
|
-
videoElement.setAttribute("playsinline", "true");
|
1500
|
-
videoElement.classList.add("vjs-big-play-centered");
|
1501
|
-
if (poster) {
|
1502
|
-
videoElement.setAttribute("poster", poster);
|
1467
|
+
var VideoPlayerComponent = forwardRef(
|
1468
|
+
({
|
1469
|
+
id,
|
1470
|
+
options,
|
1471
|
+
notes,
|
1472
|
+
chapters,
|
1473
|
+
startTime = 0,
|
1474
|
+
handleSaveNoteAction,
|
1475
|
+
poster,
|
1476
|
+
onPlay,
|
1477
|
+
onPause,
|
1478
|
+
disableNote,
|
1479
|
+
childRef
|
1480
|
+
}) => {
|
1481
|
+
var _a;
|
1482
|
+
const videoRef = useRef2(void 0);
|
1483
|
+
const playerRef = useRef2(void 0);
|
1484
|
+
const [isReady, setIsReady] = useState13(false);
|
1485
|
+
const [isPaused, setIsPaused] = useState13(!options.autoplay);
|
1486
|
+
const [duration, setDuration] = useState13(1);
|
1487
|
+
const [opacity, setOpacity] = useState13("0");
|
1488
|
+
const [isControlBarPresent, setIsControlBarPresent] = useState13(true);
|
1489
|
+
const [bgColor, setBgColor] = useState13("transparent");
|
1490
|
+
const [isQualityMenuOpen, setIsQualityMenuOpen] = useState13(false);
|
1491
|
+
const [isSubtitleMenuOpen, setIsSubtitleMenuOpen] = useState13(false);
|
1492
|
+
const [isHovered, setIsHovered] = useState13(false);
|
1493
|
+
const [isNoteOpen, setNoteOpen] = useState13(false);
|
1494
|
+
const onReady = (player) => {
|
1495
|
+
if (playerRef) {
|
1496
|
+
playerRef.current = player;
|
1497
|
+
setIsReady(true);
|
1498
|
+
player == null ? void 0 : player.currentTime(startTime);
|
1499
|
+
player.on("waiting", () => {
|
1500
|
+
});
|
1501
|
+
player.on("dispose", () => {
|
1502
|
+
videojs.log("player will dispose");
|
1503
|
+
setIsReady(false);
|
1504
|
+
});
|
1505
|
+
player.on("loadedmetadata", () => {
|
1506
|
+
const d = player.duration() || 0;
|
1507
|
+
setDuration(d);
|
1508
|
+
});
|
1503
1509
|
}
|
1504
|
-
|
1505
|
-
|
1506
|
-
|
1507
|
-
|
1508
|
-
|
1509
|
-
|
1510
|
-
|
1511
|
-
|
1512
|
-
|
1510
|
+
};
|
1511
|
+
useEffect14(() => {
|
1512
|
+
if (!playerRef.current) {
|
1513
|
+
const videoElement = document.createElement("video-js");
|
1514
|
+
videoElement.setAttribute("playsinline", "true");
|
1515
|
+
videoElement.classList.add("vjs-big-play-centered");
|
1516
|
+
if (poster) {
|
1517
|
+
videoElement.setAttribute("poster", poster);
|
1518
|
+
}
|
1519
|
+
videoRef.current.appendChild(videoElement);
|
1520
|
+
videoElement.style.width = "100%";
|
1521
|
+
videoElement.style.height = "100%";
|
1522
|
+
videoElement.style.objectFit = "cover";
|
1523
|
+
playerRef.current = videojs(videoElement, options, () => {
|
1524
|
+
onReady(playerRef.current);
|
1525
|
+
});
|
1526
|
+
}
|
1527
|
+
return () => {
|
1528
|
+
if (playerRef.current) {
|
1529
|
+
playerRef.current.dispose();
|
1530
|
+
playerRef.current = void 0;
|
1531
|
+
setTimeout(() => {
|
1532
|
+
if (bigPlayButtonRoot[id]) {
|
1533
|
+
bigPlayButtonRoot[id].unmount();
|
1534
|
+
bigPlayButtonRoot[id] = void 0;
|
1535
|
+
}
|
1536
|
+
if (controlBarRoot[id]) {
|
1537
|
+
controlBarRoot[id].unmount();
|
1538
|
+
controlBarRoot[id] = void 0;
|
1539
|
+
}
|
1540
|
+
}, 0);
|
1541
|
+
}
|
1542
|
+
};
|
1543
|
+
}, [options, poster]);
|
1544
|
+
useEffect14(() => {
|
1545
|
+
if (playerRef.current && isReady) {
|
1546
|
+
const currentTime = playerRef.current.currentTime() || 0;
|
1547
|
+
if (isPaused) {
|
1548
|
+
if (onPause) onPause(currentTime);
|
1549
|
+
} else {
|
1550
|
+
if (onPlay) onPlay(currentTime);
|
1551
|
+
}
|
1552
|
+
}
|
1553
|
+
}, [isPaused, isReady]);
|
1554
|
+
useEffect14(() => {
|
1555
|
+
if (isReady) {
|
1556
|
+
const controlBarTimeout = setTimeout(() => {
|
1557
|
+
renderControlBar(
|
1558
|
+
id,
|
1559
|
+
playerRef.current,
|
1560
|
+
isPaused,
|
1561
|
+
setIsPaused,
|
1562
|
+
duration,
|
1563
|
+
notes,
|
1564
|
+
chapters,
|
1565
|
+
5,
|
1566
|
+
handleSaveNoteAction,
|
1567
|
+
opacity,
|
1568
|
+
(e) => {
|
1569
|
+
handlePlayerClick(e, true);
|
1570
|
+
},
|
1571
|
+
bgColor,
|
1572
|
+
setIsQualityMenuOpen,
|
1573
|
+
setIsSubtitleMenuOpen,
|
1574
|
+
disableNote
|
1575
|
+
);
|
1576
|
+
}, 500);
|
1577
|
+
return () => clearTimeout(controlBarTimeout);
|
1578
|
+
}
|
1579
|
+
}, [
|
1580
|
+
id,
|
1581
|
+
playerRef,
|
1582
|
+
isPaused,
|
1583
|
+
setIsPaused,
|
1584
|
+
notes,
|
1585
|
+
chapters,
|
1586
|
+
isReady,
|
1587
|
+
handleSaveNoteAction,
|
1588
|
+
duration,
|
1589
|
+
opacity
|
1590
|
+
]);
|
1591
|
+
useEffect14(() => {
|
1592
|
+
if (isReady) {
|
1593
|
+
const playButtonTimeout = setTimeout(() => {
|
1594
|
+
renderBigPlayButton(
|
1595
|
+
id,
|
1596
|
+
playerRef.current,
|
1597
|
+
isPaused,
|
1598
|
+
setIsPaused,
|
1599
|
+
opacity
|
1600
|
+
);
|
1601
|
+
}, 500);
|
1602
|
+
return () => clearTimeout(playButtonTimeout);
|
1603
|
+
}
|
1604
|
+
}, [id, isPaused, isReady, opacity]);
|
1605
|
+
useEffect14(() => {
|
1513
1606
|
if (playerRef.current) {
|
1514
|
-
|
1515
|
-
|
1516
|
-
|
1607
|
+
const intervalId = setInterval(() => {
|
1608
|
+
if (playerRef.current) setIsPaused(playerRef.current.paused());
|
1609
|
+
}, 500);
|
1610
|
+
return () => clearInterval(intervalId);
|
1611
|
+
}
|
1612
|
+
}, []);
|
1613
|
+
useEffect14(() => {
|
1614
|
+
return () => {
|
1615
|
+
if (playerRef.current) {
|
1616
|
+
playerRef.current.dispose();
|
1617
|
+
playerRef.current = void 0;
|
1517
1618
|
if (bigPlayButtonRoot[id]) {
|
1518
1619
|
bigPlayButtonRoot[id].unmount();
|
1519
1620
|
bigPlayButtonRoot[id] = void 0;
|
@@ -1522,234 +1623,166 @@ var VideoPlayerComponent = ({
|
|
1522
1623
|
controlBarRoot[id].unmount();
|
1523
1624
|
controlBarRoot[id] = void 0;
|
1524
1625
|
}
|
1525
|
-
}
|
1526
|
-
}
|
1527
|
-
};
|
1528
|
-
|
1529
|
-
|
1530
|
-
|
1531
|
-
|
1532
|
-
|
1533
|
-
|
1626
|
+
}
|
1627
|
+
};
|
1628
|
+
}, []);
|
1629
|
+
const timeoutRef = useRef2(null);
|
1630
|
+
useEffect14(() => {
|
1631
|
+
if (isQualityMenuOpen || isSubtitleMenuOpen) {
|
1632
|
+
if (timeoutRef.current) {
|
1633
|
+
clearTimeout(timeoutRef.current);
|
1634
|
+
}
|
1635
|
+
setOpacity("100");
|
1534
1636
|
} else {
|
1535
|
-
if (
|
1637
|
+
if (timeoutRef.current) {
|
1638
|
+
clearTimeout(timeoutRef.current);
|
1639
|
+
}
|
1640
|
+
setOpacity("0");
|
1641
|
+
timeoutRef.current = setTimeout(() => {
|
1642
|
+
setIsControlBarPresent(false);
|
1643
|
+
}, 3e3);
|
1536
1644
|
}
|
1537
|
-
}
|
1538
|
-
|
1539
|
-
|
1540
|
-
|
1541
|
-
|
1542
|
-
renderControlBar(
|
1543
|
-
id,
|
1544
|
-
playerRef.current,
|
1545
|
-
isPaused,
|
1546
|
-
setIsPaused,
|
1547
|
-
duration,
|
1548
|
-
notes,
|
1549
|
-
chapters,
|
1550
|
-
5,
|
1551
|
-
handleSaveNoteAction,
|
1552
|
-
opacity,
|
1553
|
-
(e) => {
|
1554
|
-
handlePlayerClick(e, true);
|
1555
|
-
},
|
1556
|
-
bgColor,
|
1557
|
-
setIsQualityMenuOpen,
|
1558
|
-
setIsSubtitleMenuOpen,
|
1559
|
-
disableNote
|
1560
|
-
);
|
1561
|
-
}, 500);
|
1562
|
-
return () => clearTimeout(controlBarTimeout);
|
1563
|
-
}
|
1564
|
-
}, [
|
1565
|
-
id,
|
1566
|
-
playerRef,
|
1567
|
-
isPaused,
|
1568
|
-
setIsPaused,
|
1569
|
-
notes,
|
1570
|
-
chapters,
|
1571
|
-
isReady,
|
1572
|
-
handleSaveNoteAction,
|
1573
|
-
duration,
|
1574
|
-
opacity
|
1575
|
-
]);
|
1576
|
-
useEffect14(() => {
|
1577
|
-
if (isReady) {
|
1578
|
-
const playButtonTimeout = setTimeout(() => {
|
1579
|
-
renderBigPlayButton(
|
1580
|
-
id,
|
1581
|
-
playerRef.current,
|
1582
|
-
isPaused,
|
1583
|
-
setIsPaused,
|
1584
|
-
opacity
|
1585
|
-
);
|
1586
|
-
}, 500);
|
1587
|
-
return () => clearTimeout(playButtonTimeout);
|
1588
|
-
}
|
1589
|
-
}, [id, isPaused, isReady, opacity]);
|
1590
|
-
useEffect14(() => {
|
1591
|
-
if (playerRef.current) {
|
1592
|
-
const intervalId = setInterval(() => {
|
1593
|
-
if (playerRef.current) setIsPaused(playerRef.current.paused());
|
1594
|
-
}, 500);
|
1595
|
-
return () => clearInterval(intervalId);
|
1596
|
-
}
|
1597
|
-
}, []);
|
1598
|
-
useEffect14(() => {
|
1599
|
-
return () => {
|
1600
|
-
if (playerRef.current) {
|
1601
|
-
playerRef.current.dispose();
|
1602
|
-
playerRef.current = void 0;
|
1603
|
-
if (bigPlayButtonRoot[id]) {
|
1604
|
-
bigPlayButtonRoot[id].unmount();
|
1605
|
-
bigPlayButtonRoot[id] = void 0;
|
1645
|
+
}, [isQualityMenuOpen, isSubtitleMenuOpen]);
|
1646
|
+
useEffect14(() => {
|
1647
|
+
if (isNoteOpen) {
|
1648
|
+
if (timeoutRef.current) {
|
1649
|
+
clearTimeout(timeoutRef.current);
|
1606
1650
|
}
|
1607
|
-
|
1608
|
-
|
1609
|
-
|
1651
|
+
} else {
|
1652
|
+
if (timeoutRef.current) {
|
1653
|
+
clearTimeout(timeoutRef.current);
|
1610
1654
|
}
|
1655
|
+
setOpacity("0");
|
1656
|
+
timeoutRef.current = setTimeout(() => {
|
1657
|
+
setIsControlBarPresent(false);
|
1658
|
+
}, 3e3);
|
1611
1659
|
}
|
1612
|
-
};
|
1613
|
-
|
1614
|
-
|
1615
|
-
useEffect14(() => {
|
1616
|
-
if (isQualityMenuOpen || isSubtitleMenuOpen) {
|
1660
|
+
}, [isNoteOpen]);
|
1661
|
+
const handlePlayerClick = async (e, isTimerOnly = false) => {
|
1662
|
+
e.preventDefault();
|
1617
1663
|
if (timeoutRef.current) {
|
1618
1664
|
clearTimeout(timeoutRef.current);
|
1619
1665
|
}
|
1620
1666
|
setOpacity("100");
|
1621
|
-
|
1622
|
-
if (timeoutRef.current) {
|
1623
|
-
clearTimeout(timeoutRef.current);
|
1624
|
-
}
|
1625
|
-
setOpacity("0");
|
1667
|
+
setIsControlBarPresent(true);
|
1626
1668
|
timeoutRef.current = setTimeout(() => {
|
1669
|
+
setOpacity("0");
|
1670
|
+
setBgColor("transparent");
|
1627
1671
|
setIsControlBarPresent(false);
|
1628
1672
|
}, 3e3);
|
1629
|
-
|
1630
|
-
|
1631
|
-
const handlePlayerClick = async (e, isTimerOnly = false) => {
|
1632
|
-
e.preventDefault();
|
1633
|
-
if (timeoutRef.current) {
|
1634
|
-
clearTimeout(timeoutRef.current);
|
1635
|
-
}
|
1636
|
-
setOpacity("100");
|
1637
|
-
setIsControlBarPresent(true);
|
1638
|
-
timeoutRef.current = setTimeout(() => {
|
1639
|
-
setOpacity("0");
|
1640
|
-
setBgColor("transparent");
|
1641
|
-
setIsControlBarPresent(false);
|
1642
|
-
}, 3e3);
|
1643
|
-
if (isTimerOnly) {
|
1644
|
-
return;
|
1645
|
-
}
|
1646
|
-
if (!isControlBarPresent) {
|
1647
|
-
return;
|
1648
|
-
}
|
1649
|
-
if (playerRef.current) {
|
1650
|
-
if (playerRef.current.paused()) {
|
1651
|
-
try {
|
1652
|
-
await playerRef.current.play();
|
1653
|
-
setIsPaused(false);
|
1654
|
-
} catch (error) {
|
1655
|
-
console.error("Failed to play video:", error);
|
1656
|
-
}
|
1657
|
-
} else {
|
1658
|
-
playerRef.current.pause();
|
1659
|
-
setIsPaused(true);
|
1660
|
-
if (onPause) onPause(playerRef.current.currentTime() || 0);
|
1673
|
+
if (isTimerOnly) {
|
1674
|
+
return;
|
1661
1675
|
}
|
1662
|
-
|
1663
|
-
|
1664
|
-
const videoRefs = useRef2(null);
|
1665
|
-
useEffect14(() => {
|
1666
|
-
const observer = new IntersectionObserver(
|
1667
|
-
(entries) => {
|
1668
|
-
entries.forEach((entry) => {
|
1669
|
-
var _a2, _b;
|
1670
|
-
if (entry.isIntersecting === false) {
|
1671
|
-
if (((_a2 = playerRef == null ? void 0 : playerRef.current) == null ? void 0 : _a2.paused()) === false) {
|
1672
|
-
try {
|
1673
|
-
(_b = playerRef == null ? void 0 : playerRef.current) == null ? void 0 : _b.pause();
|
1674
|
-
setIsPaused(true);
|
1675
|
-
} catch (error) {
|
1676
|
-
console.error("Failed to play video:", error);
|
1677
|
-
}
|
1678
|
-
}
|
1679
|
-
}
|
1680
|
-
});
|
1681
|
-
},
|
1682
|
-
{
|
1683
|
-
threshold: 0.1
|
1684
|
-
// The amount of the component that must be visible (0.1 means 10% visible)
|
1676
|
+
if (!isControlBarPresent) {
|
1677
|
+
return;
|
1685
1678
|
}
|
1686
|
-
|
1687
|
-
|
1688
|
-
|
1689
|
-
|
1690
|
-
|
1691
|
-
|
1692
|
-
|
1693
|
-
|
1694
|
-
};
|
1695
|
-
}, []);
|
1696
|
-
const [timeSeeker, setTimeSeeker] = useState13("0");
|
1697
|
-
useEffect14(() => {
|
1698
|
-
const updateTimeSeeker = () => {
|
1699
|
-
var _a2, _b, _c, _d;
|
1700
|
-
if (playerRef == null ? void 0 : playerRef.current) {
|
1701
|
-
const currentTime = (_b = (_a2 = playerRef.current) == null ? void 0 : _a2.currentTime) == null ? void 0 : _b.call(_a2);
|
1702
|
-
const duration2 = (_d = (_c = playerRef.current) == null ? void 0 : _c.duration) == null ? void 0 : _d.call(_c);
|
1703
|
-
if (duration2 && currentTime !== void 0) {
|
1704
|
-
const value = `${currentTime / duration2 * 100}%`;
|
1705
|
-
setTimeSeeker(value);
|
1679
|
+
if (playerRef.current) {
|
1680
|
+
if (playerRef.current.paused()) {
|
1681
|
+
try {
|
1682
|
+
await playerRef.current.play();
|
1683
|
+
setIsPaused(false);
|
1684
|
+
} catch (error) {
|
1685
|
+
console.error("Failed to play video:", error);
|
1686
|
+
}
|
1706
1687
|
} else {
|
1707
|
-
|
1688
|
+
playerRef.current.pause();
|
1689
|
+
setIsPaused(true);
|
1690
|
+
if (onPause) onPause(playerRef.current.currentTime() || 0);
|
1708
1691
|
}
|
1709
1692
|
}
|
1710
1693
|
};
|
1711
|
-
|
1712
|
-
|
1713
|
-
|
1714
|
-
|
1715
|
-
|
1716
|
-
|
1717
|
-
|
1718
|
-
|
1719
|
-
|
1720
|
-
|
1721
|
-
|
1722
|
-
|
1723
|
-
|
1724
|
-
|
1725
|
-
|
1726
|
-
"div",
|
1727
|
-
{
|
1728
|
-
className: `sb-h-[3px] sb-transition-opacity sb-duration-500 sb-delay-400 sb-z-10 ease-in-out sb-border-spacing-x-2 sb-absolute sb-bg-[red] sb-bottom-0 ${opacity == "100" ? "sb-opacity-0" : "sb-opacity-100"}`,
|
1729
|
-
style: {
|
1730
|
-
width: timeSeeker
|
1694
|
+
const videoRefs = useRef2(null);
|
1695
|
+
useEffect14(() => {
|
1696
|
+
const observer = new IntersectionObserver(
|
1697
|
+
(entries) => {
|
1698
|
+
entries.forEach((entry) => {
|
1699
|
+
var _a2, _b;
|
1700
|
+
if (entry.isIntersecting === false) {
|
1701
|
+
if (((_a2 = playerRef == null ? void 0 : playerRef.current) == null ? void 0 : _a2.paused()) === false) {
|
1702
|
+
try {
|
1703
|
+
(_b = playerRef == null ? void 0 : playerRef.current) == null ? void 0 : _b.pause();
|
1704
|
+
setIsPaused(true);
|
1705
|
+
} catch (error) {
|
1706
|
+
console.error("Failed to play video:", error);
|
1707
|
+
}
|
1708
|
+
}
|
1731
1709
|
}
|
1710
|
+
});
|
1711
|
+
},
|
1712
|
+
{
|
1713
|
+
threshold: 0.1
|
1714
|
+
// The amount of the component that must be visible (0.1 means 10% visible)
|
1715
|
+
}
|
1716
|
+
);
|
1717
|
+
if (videoRefs.current) {
|
1718
|
+
observer.observe(videoRefs.current);
|
1719
|
+
}
|
1720
|
+
return () => {
|
1721
|
+
if (videoRefs.current) {
|
1722
|
+
observer.unobserve(videoRef.current);
|
1723
|
+
}
|
1724
|
+
};
|
1725
|
+
}, []);
|
1726
|
+
const [timeSeeker, setTimeSeeker] = useState13("0");
|
1727
|
+
useEffect14(() => {
|
1728
|
+
const updateTimeSeeker = () => {
|
1729
|
+
var _a2, _b, _c, _d;
|
1730
|
+
if (playerRef == null ? void 0 : playerRef.current) {
|
1731
|
+
const currentTime = (_b = (_a2 = playerRef.current) == null ? void 0 : _a2.currentTime) == null ? void 0 : _b.call(_a2);
|
1732
|
+
const duration2 = (_d = (_c = playerRef.current) == null ? void 0 : _c.duration) == null ? void 0 : _d.call(_c);
|
1733
|
+
if (duration2 && currentTime !== void 0) {
|
1734
|
+
const value = `${currentTime / duration2 * 100}%`;
|
1735
|
+
setTimeSeeker(value);
|
1736
|
+
} else {
|
1737
|
+
setTimeSeeker("0");
|
1732
1738
|
}
|
1733
|
-
|
1734
|
-
|
1735
|
-
|
1736
|
-
|
1737
|
-
|
1738
|
-
|
1739
|
-
|
1740
|
-
|
1741
|
-
|
1742
|
-
|
1743
|
-
|
1744
|
-
|
1739
|
+
}
|
1740
|
+
};
|
1741
|
+
updateTimeSeeker();
|
1742
|
+
}, [(_a = playerRef == null ? void 0 : playerRef.current) == null ? void 0 : _a.currentTime()]);
|
1743
|
+
return /* @__PURE__ */ jsxs14(
|
1744
|
+
"div",
|
1745
|
+
{
|
1746
|
+
ref: videoRefs,
|
1747
|
+
id: `video-container-${id}`,
|
1748
|
+
onMouseMove: () => {
|
1749
|
+
handlePlayerClick(event, true);
|
1750
|
+
},
|
1751
|
+
className: "sb-relative sb-rounded-md sb-overflow-hidden sb-w-full sb-h-full sb-bottom-2 ",
|
1752
|
+
onMouseEnter: () => setIsHovered(true),
|
1753
|
+
onMouseLeave: () => setIsHovered(false),
|
1754
|
+
children: [
|
1755
|
+
/* @__PURE__ */ jsx35(
|
1756
|
+
"div",
|
1757
|
+
{
|
1758
|
+
ref: childRef,
|
1759
|
+
onClick: handlePlayerClick,
|
1760
|
+
className: `sb-h-[3px] sb-transition-opacity sb-duration-500 sb-delay-400 sb-z-10 ease-in-out sb-border-spacing-x-2 sb-absolute sb-bg-[red] sb-bottom-0 ${opacity == "100" ? "sb-opacity-0" : "sb-opacity-100"}`,
|
1761
|
+
style: {
|
1762
|
+
width: timeSeeker
|
1745
1763
|
}
|
1746
|
-
|
1747
|
-
|
1748
|
-
|
1749
|
-
|
1750
|
-
|
1751
|
-
|
1752
|
-
|
1764
|
+
}
|
1765
|
+
),
|
1766
|
+
/* @__PURE__ */ jsx35(
|
1767
|
+
"div",
|
1768
|
+
{
|
1769
|
+
className: "hover:sb-cursor-pointer sb-w-full sb-h-full",
|
1770
|
+
"data-vjs-player": true,
|
1771
|
+
children: /* @__PURE__ */ jsx35(
|
1772
|
+
"div",
|
1773
|
+
{
|
1774
|
+
onClick: handlePlayerClick,
|
1775
|
+
ref: videoRef,
|
1776
|
+
className: "sb-h-full sb-w-full sb-relative"
|
1777
|
+
}
|
1778
|
+
)
|
1779
|
+
}
|
1780
|
+
)
|
1781
|
+
]
|
1782
|
+
}
|
1783
|
+
);
|
1784
|
+
}
|
1785
|
+
);
|
1753
1786
|
var VideoPlayerComponent_default = VideoPlayerComponent;
|
1754
1787
|
|
1755
1788
|
// src/components/SoftBuildersVideoPlayer/index.tsx
|
@@ -1764,69 +1797,73 @@ var DEFAULT_OPTIONS = {
|
|
1764
1797
|
sources: [],
|
1765
1798
|
tracks: []
|
1766
1799
|
};
|
1767
|
-
var Component = (
|
1768
|
-
|
1769
|
-
|
1770
|
-
|
1771
|
-
|
1772
|
-
|
1773
|
-
|
1774
|
-
|
1775
|
-
|
1776
|
-
|
1777
|
-
|
1778
|
-
|
1779
|
-
|
1780
|
-
|
1781
|
-
|
1782
|
-
|
1783
|
-
|
1784
|
-
|
1785
|
-
|
1786
|
-
|
1787
|
-
|
1788
|
-
|
1789
|
-
|
1790
|
-
|
1791
|
-
|
1792
|
-
|
1793
|
-
|
1794
|
-
|
1795
|
-
|
1796
|
-
|
1797
|
-
|
1798
|
-
|
1799
|
-
|
1800
|
-
|
1801
|
-
|
1802
|
-
|
1803
|
-
src =
|
1800
|
+
var Component = forwardRef2(
|
1801
|
+
({
|
1802
|
+
options,
|
1803
|
+
notes,
|
1804
|
+
chapters,
|
1805
|
+
startTime = 0,
|
1806
|
+
handleSaveNoteAction,
|
1807
|
+
onPlay,
|
1808
|
+
onPause,
|
1809
|
+
isFocused = true,
|
1810
|
+
disableNote,
|
1811
|
+
childRef
|
1812
|
+
}) => {
|
1813
|
+
options = __spreadProps(__spreadValues({}, options), {
|
1814
|
+
responsive: true,
|
1815
|
+
inactivityTimeout: 0,
|
1816
|
+
fullscreen: {
|
1817
|
+
navigationUI: "hide"
|
1818
|
+
}
|
1819
|
+
});
|
1820
|
+
if (options.autoplay === void 0)
|
1821
|
+
options.autoplay = DEFAULT_OPTIONS.autoplay;
|
1822
|
+
if (options.controls === void 0)
|
1823
|
+
options.controls = DEFAULT_OPTIONS.controls;
|
1824
|
+
if (options.fluid === void 0) options.fluid = DEFAULT_OPTIONS.fluid;
|
1825
|
+
if ((options == null ? void 0 : options.muted) === void 0) options.muted = DEFAULT_OPTIONS == null ? void 0 : DEFAULT_OPTIONS.muted;
|
1826
|
+
if (options.height === void 0) options.height = DEFAULT_OPTIONS.height;
|
1827
|
+
if (options.width === void 0) options.width = DEFAULT_OPTIONS.width;
|
1828
|
+
const [tracks, setTracks] = useState14([]);
|
1829
|
+
useEffect15(() => {
|
1830
|
+
}, [isFocused]);
|
1831
|
+
useEffect15(() => {
|
1832
|
+
const getTracks = async () => {
|
1833
|
+
const newTracks = [];
|
1834
|
+
if (Array.isArray(options == null ? void 0 : options.tracks))
|
1835
|
+
for (const [i, s] of options == null ? void 0 : options.tracks.entries()) {
|
1836
|
+
let src = s.src;
|
1837
|
+
if (s.memeType == "text/srt") {
|
1838
|
+
src = await convertSRTtoVTT(s.src);
|
1839
|
+
}
|
1840
|
+
newTracks.push(__spreadProps(__spreadValues({}, s), {
|
1841
|
+
src
|
1842
|
+
}));
|
1804
1843
|
}
|
1805
|
-
|
1806
|
-
|
1807
|
-
|
1808
|
-
|
1809
|
-
|
1810
|
-
|
1811
|
-
|
1812
|
-
|
1813
|
-
|
1814
|
-
|
1815
|
-
|
1816
|
-
|
1817
|
-
|
1818
|
-
|
1819
|
-
|
1820
|
-
|
1821
|
-
|
1822
|
-
|
1823
|
-
|
1824
|
-
|
1825
|
-
|
1826
|
-
|
1827
|
-
|
1828
|
-
);
|
1829
|
-
};
|
1844
|
+
setTracks(newTracks);
|
1845
|
+
};
|
1846
|
+
getTracks();
|
1847
|
+
}, [options == null ? void 0 : options.tracks]);
|
1848
|
+
const id = (Date.now() + Math.random() * 100).toString();
|
1849
|
+
return /* @__PURE__ */ jsx36(
|
1850
|
+
VideoPlayerComponent_default,
|
1851
|
+
{
|
1852
|
+
id,
|
1853
|
+
chapters,
|
1854
|
+
options: __spreadProps(__spreadValues({}, options), { tracks }),
|
1855
|
+
notes,
|
1856
|
+
poster: "",
|
1857
|
+
startTime,
|
1858
|
+
handleSaveNoteAction,
|
1859
|
+
disableNote,
|
1860
|
+
onPause,
|
1861
|
+
onPlay,
|
1862
|
+
childRef
|
1863
|
+
}
|
1864
|
+
);
|
1865
|
+
}
|
1866
|
+
);
|
1830
1867
|
var SoftBuildersVideoPlayer = memo(Component, (prevProps, nextProps) => {
|
1831
1868
|
return prevProps.options === nextProps.options && prevProps.notes === nextProps.notes && prevProps.chapters === nextProps.chapters && prevProps.startTime === nextProps.startTime;
|
1832
1869
|
});
|