softbuilders-react-video-player 1.0.6 → 1.0.7
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/BigPlayButton/index.d.ts +1 -1
- package/dist/components/BigPlayButton/index.js +2 -3
- package/dist/components/BigPlayButton/index.js.map +1 -1
- package/dist/components/BigPlayButton/index.tsx +31 -0
- package/dist/components/BufferTracker/index.d.ts +1 -2
- package/dist/components/BufferTracker/index.js +3 -2
- package/dist/components/BufferTracker/index.js.map +1 -1
- package/dist/components/BufferTracker/index.tsx +19 -0
- package/dist/components/ChapterTooltip/index.d.ts +1 -2
- package/dist/components/ChapterTooltip/index.js +4 -13
- package/dist/components/ChapterTooltip/index.js.map +1 -1
- package/dist/components/ChapterTooltip/index.tsx +65 -0
- package/dist/components/ChaptersPanal/index.d.ts +1 -2
- package/dist/components/ChaptersPanal/index.js +3 -2
- package/dist/components/ChaptersPanal/index.js.map +1 -1
- package/dist/components/ChaptersPanal/index.tsx +40 -0
- package/dist/components/ControlBar/index.d.ts +1 -1
- package/dist/components/ControlBar/index.js +14 -31
- package/dist/components/ControlBar/index.js.map +1 -1
- package/dist/components/ControlBar/index.tsx +127 -0
- package/dist/components/CreateNoteMenu/index.d.ts +1 -2
- package/dist/components/CreateNoteMenu/index.js +3 -9
- package/dist/components/CreateNoteMenu/index.js.map +1 -1
- package/dist/components/CreateNoteMenu/index.tsx +61 -0
- package/dist/components/CurrentTimeLabel/index.d.ts +1 -2
- package/dist/components/CurrentTimeLabel/index.js +2 -2
- package/dist/components/CurrentTimeLabel/index.js.map +1 -1
- package/dist/components/CurrentTimeLabel/index.tsx +13 -0
- package/dist/components/CurrentTimeTracker/index.d.ts +1 -2
- package/dist/components/CurrentTimeTracker/index.js +3 -2
- package/dist/components/CurrentTimeTracker/index.js.map +1 -1
- package/dist/components/CurrentTimeTracker/index.tsx +18 -0
- package/dist/components/Menu/index.d.ts +1 -2
- package/dist/components/Menu/index.js +2 -7
- package/dist/components/Menu/index.js.map +1 -1
- package/dist/components/Menu/index.tsx +49 -0
- package/dist/components/MenuButton/index.d.ts +1 -1
- package/dist/components/MenuButton/index.js +3 -4
- package/dist/components/MenuButton/index.js.map +1 -1
- package/dist/components/MenuButton/index.tsx +67 -0
- package/dist/components/NoteTooltip/index.d.ts +1 -2
- package/dist/components/NoteTooltip/index.js +3 -7
- package/dist/components/NoteTooltip/index.js.map +1 -1
- package/dist/components/NoteTooltip/index.tsx +46 -0
- package/dist/components/NotesPanal/index.d.ts +1 -2
- package/dist/components/NotesPanal/index.js +3 -2
- package/dist/components/NotesPanal/index.js.map +1 -1
- package/dist/components/NotesPanal/index.tsx +34 -0
- package/dist/components/QualityMenu/index.d.ts +1 -2
- package/dist/components/QualityMenu/index.js +19 -28
- package/dist/components/QualityMenu/index.js.map +1 -1
- package/dist/components/QualityMenu/index.tsx +122 -0
- package/dist/components/Slider/index.d.ts +1 -1
- package/dist/components/Slider/index.js +2 -2
- package/dist/components/Slider/index.js.map +1 -1
- package/dist/components/Slider/index.tsx +37 -0
- package/dist/components/SoftBuildersVideoPlayer/index.d.ts +1 -1
- package/dist/components/SoftBuildersVideoPlayer/index.js +3 -2
- package/dist/components/SoftBuildersVideoPlayer/index.js.map +1 -1
- package/dist/components/SoftBuildersVideoPlayer/index.tsx +108 -0
- package/dist/components/SubtitleMenu/index.d.ts +1 -2
- package/dist/components/SubtitleMenu/index.js +12 -21
- package/dist/components/SubtitleMenu/index.js.map +1 -1
- package/dist/components/SubtitleMenu/index.tsx +108 -0
- package/dist/components/TimeSlider/index.d.ts +1 -2
- package/dist/components/TimeSlider/index.js +10 -12
- package/dist/components/TimeSlider/index.js.map +1 -1
- package/dist/components/TimeSlider/index.tsx +107 -0
- package/dist/components/TimeSliderContainer/index.d.ts +1 -2
- package/dist/components/TimeSliderContainer/index.js +2 -7
- package/dist/components/TimeSliderContainer/index.js.map +1 -1
- package/dist/components/TimeSliderContainer/index.tsx +35 -0
- package/dist/components/Tooltip/index.d.ts +1 -1
- package/dist/components/Tooltip/index.js +2 -2
- package/dist/components/Tooltip/index.js.map +1 -1
- package/dist/components/Tooltip/index.tsx +16 -0
- package/dist/components/VideoPlayerComponent/index.d.ts +1 -2
- package/dist/components/VideoPlayerComponent/index.js +5 -7
- package/dist/components/VideoPlayerComponent/index.js.map +1 -1
- package/dist/components/VideoPlayerComponent/index.tsx +244 -0
- package/dist/components/VideoPlayerComponent/provider.d.ts +1 -1
- package/dist/components/VideoPlayerComponent/provider.js +4 -3
- package/dist/components/VideoPlayerComponent/provider.js.map +1 -1
- package/dist/components/VideoPlayerComponent/provider.tsx +82 -0
- package/dist/components/VolumeSlider/index.d.ts +1 -2
- package/dist/components/VolumeSlider/index.js +3 -4
- package/dist/components/VolumeSlider/index.js.map +1 -1
- package/dist/components/VolumeSlider/index.tsx +52 -0
- package/dist/components/icons/BackwardIcon.d.ts +3 -0
- package/dist/components/icons/BackwardIcon.js +4 -0
- package/dist/components/icons/BackwardIcon.js.map +1 -0
- package/dist/components/icons/BackwardIcon.tsx +20 -0
- package/dist/components/icons/CheckedIcon.d.ts +3 -0
- package/dist/components/icons/CheckedIcon.js +4 -0
- package/dist/components/icons/CheckedIcon.js.map +1 -0
- package/dist/components/icons/CheckedIcon.tsx +20 -0
- package/dist/components/icons/ClosedNoteIcon.d.ts +3 -0
- package/dist/components/icons/ClosedNoteIcon.js +4 -0
- package/dist/components/icons/ClosedNoteIcon.js.map +1 -0
- package/dist/components/icons/ClosedNoteIcon.tsx +17 -0
- package/dist/components/icons/ForwardIcon.d.ts +3 -0
- package/dist/components/icons/ForwardIcon.js +4 -0
- package/dist/components/icons/ForwardIcon.js.map +1 -0
- package/dist/components/icons/ForwardIcon.tsx +20 -0
- package/dist/components/icons/FullScreenIcon.d.ts +3 -0
- package/dist/components/icons/FullScreenIcon.js +4 -0
- package/dist/components/icons/FullScreenIcon.js.map +1 -0
- package/dist/components/icons/FullScreenIcon.tsx +20 -0
- package/dist/components/icons/LeftArrowIcon.d.ts +3 -0
- package/dist/components/icons/LeftArrowIcon.js +4 -0
- package/dist/components/icons/LeftArrowIcon.js.map +1 -0
- package/dist/components/icons/LeftArrowIcon.tsx +20 -0
- package/dist/components/icons/MuteIcon.d.ts +3 -0
- package/dist/components/icons/MuteIcon.js +4 -0
- package/dist/components/icons/MuteIcon.js.map +1 -0
- package/dist/components/icons/MuteIcon.tsx +21 -0
- package/dist/components/icons/NoteIcon.d.ts +3 -0
- package/dist/components/icons/NoteIcon.js +4 -0
- package/dist/components/icons/NoteIcon.js.map +1 -0
- package/dist/components/icons/NoteIcon.tsx +17 -0
- package/dist/components/icons/OpenNoteIcon.d.ts +3 -0
- package/dist/components/icons/OpenNoteIcon.js +4 -0
- package/dist/components/icons/OpenNoteIcon.js.map +1 -0
- package/dist/components/icons/OpenNoteIcon.tsx +17 -0
- package/dist/components/icons/PauseIcon.d.ts +3 -0
- package/dist/components/icons/PauseIcon.js +4 -0
- package/dist/components/icons/PauseIcon.js.map +1 -0
- package/dist/components/icons/PauseIcon.tsx +14 -0
- package/dist/components/icons/PlayIcon.d.ts +3 -0
- package/dist/components/icons/PlayIcon.js +4 -0
- package/dist/components/icons/PlayIcon.js.map +1 -0
- package/dist/components/icons/PlayIcon.tsx +20 -0
- package/dist/components/icons/SettingsIcon.d.ts +3 -0
- package/dist/components/icons/SettingsIcon.js +4 -0
- package/dist/components/icons/SettingsIcon.js.map +1 -0
- package/dist/components/icons/SettingsIcon.tsx +17 -0
- package/dist/components/icons/SubtitlesIcon.d.ts +3 -0
- package/dist/components/icons/SubtitlesIcon.js +4 -0
- package/dist/components/icons/SubtitlesIcon.js.map +1 -0
- package/dist/components/icons/SubtitlesIcon.tsx +14 -0
- package/dist/components/icons/UnmuteIcon.d.ts +3 -0
- package/dist/components/icons/UnmuteIcon.js +4 -0
- package/dist/components/icons/UnmuteIcon.js.map +1 -0
- package/dist/components/icons/UnmuteIcon.tsx +17 -0
- package/dist/components/icons/index.d.ts +14 -0
- package/dist/components/icons/index.js +15 -0
- package/dist/components/icons/index.js.map +1 -0
- package/dist/components/icons/index.ts +14 -0
- package/dist/images/index.d.ts +14 -14
- package/dist/images/index.js +14 -14
- package/dist/images/index.js.map +1 -1
- package/dist/index.css +663 -0
- package/dist/index.d.mts +49 -0
- package/dist/index.mjs +1383 -0
- package/package.json +9 -4
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,1383 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __spreadValues = (a, b) => {
|
|
9
|
+
for (var prop in b || (b = {}))
|
|
10
|
+
if (__hasOwnProp.call(b, prop))
|
|
11
|
+
__defNormalProp(a, prop, b[prop]);
|
|
12
|
+
if (__getOwnPropSymbols)
|
|
13
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
+
if (__propIsEnum.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
18
|
+
};
|
|
19
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
+
var __objRest = (source, exclude) => {
|
|
21
|
+
var target = {};
|
|
22
|
+
for (var prop in source)
|
|
23
|
+
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
24
|
+
target[prop] = source[prop];
|
|
25
|
+
if (source != null && __getOwnPropSymbols)
|
|
26
|
+
for (var prop of __getOwnPropSymbols(source)) {
|
|
27
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
|
28
|
+
target[prop] = source[prop];
|
|
29
|
+
}
|
|
30
|
+
return target;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
// src/components/SoftBuildersVideoPlayer/index.tsx
|
|
34
|
+
import { memo, useEffect as useEffect15, useState as useState13 } from "react";
|
|
35
|
+
|
|
36
|
+
// src/components/VideoPlayerComponent/index.tsx
|
|
37
|
+
import { useEffect as useEffect14, useRef as useRef2, useState as useState12 } from "react";
|
|
38
|
+
import ReactDOM from "react-dom/client";
|
|
39
|
+
import videojs from "video.js";
|
|
40
|
+
import "video.js/dist/video-js.css";
|
|
41
|
+
|
|
42
|
+
// src/components/ControlBar/index.tsx
|
|
43
|
+
import { useEffect as useEffect13 } from "react";
|
|
44
|
+
|
|
45
|
+
// src/utils/index.ts
|
|
46
|
+
var durationFormater = (seconds) => {
|
|
47
|
+
seconds = Math.floor(seconds);
|
|
48
|
+
const hours = Math.floor(seconds / 3600);
|
|
49
|
+
const minutes = Math.floor(seconds % 3600 / 60);
|
|
50
|
+
const secs = seconds % 60;
|
|
51
|
+
if (hours > 0) {
|
|
52
|
+
return `${String(hours).padStart(2, "0")}:${String(minutes).padStart(
|
|
53
|
+
2,
|
|
54
|
+
"0"
|
|
55
|
+
)}:${String(secs).padStart(2, "0")}`;
|
|
56
|
+
} else {
|
|
57
|
+
return `${String(minutes).padStart(2, "0")}:${String(secs).padStart(
|
|
58
|
+
2,
|
|
59
|
+
"0"
|
|
60
|
+
)}`;
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
var SRTtoVTT = (srt) => {
|
|
64
|
+
const lines = srt.split(/\r?\n/).filter((line) => line.trim() !== "");
|
|
65
|
+
let vttContent = "WEBVTT\n\n";
|
|
66
|
+
let currentEntry = "";
|
|
67
|
+
lines.forEach((line) => {
|
|
68
|
+
if (/^\d+$/.test(line)) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const timestampMatch = line.match(
|
|
72
|
+
/(\d{2}:\d{2}:\d{2}),(\d{3}) --> (\d{2}:\d{2}:\d{2}),(\d{3})/
|
|
73
|
+
);
|
|
74
|
+
if (timestampMatch) {
|
|
75
|
+
if (currentEntry) {
|
|
76
|
+
vttContent += currentEntry.trim() + "\n\n";
|
|
77
|
+
}
|
|
78
|
+
currentEntry = `${timestampMatch[1]}.${timestampMatch[2]} --> ${timestampMatch[3]}.${timestampMatch[4]}
|
|
79
|
+
`;
|
|
80
|
+
} else if (currentEntry) {
|
|
81
|
+
currentEntry += line + "\n";
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
if (currentEntry) {
|
|
85
|
+
vttContent += currentEntry.trim();
|
|
86
|
+
}
|
|
87
|
+
return vttContent.trim();
|
|
88
|
+
};
|
|
89
|
+
var convertSRTtoVTT = async (srtLink) => {
|
|
90
|
+
const response = await fetch(srtLink);
|
|
91
|
+
const srtText = await response.text();
|
|
92
|
+
const vttText = SRTtoVTT(srtText);
|
|
93
|
+
const blob = new Blob([vttText], { type: "text/vtt" });
|
|
94
|
+
const vttUrl = URL.createObjectURL(blob);
|
|
95
|
+
return vttUrl;
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
// src/components/VideoPlayerComponent/provider.tsx
|
|
99
|
+
import {
|
|
100
|
+
createContext,
|
|
101
|
+
useContext,
|
|
102
|
+
useState,
|
|
103
|
+
useEffect
|
|
104
|
+
} from "react";
|
|
105
|
+
import { jsx } from "react/jsx-runtime";
|
|
106
|
+
var SoftBuildersVideoPlayerContext = createContext(void 0);
|
|
107
|
+
var SoftBuildersVideoPlayerProvider = ({
|
|
108
|
+
children
|
|
109
|
+
}) => {
|
|
110
|
+
const [player, setPlayer] = useState(void 0);
|
|
111
|
+
const [currentTime, setCurrentTime] = useState(0);
|
|
112
|
+
const [duration, setDuration] = useState(1);
|
|
113
|
+
const [downloadedBufferTime, setDownloadedBufferTimeufferTime] = useState(0);
|
|
114
|
+
const [downloadedBufferPercentage, setDownloadedBufferPercentage] = useState(0);
|
|
115
|
+
useEffect(() => {
|
|
116
|
+
setDownloadedBufferPercentage(downloadedBufferTime * 100 / duration);
|
|
117
|
+
}, [downloadedBufferTime]);
|
|
118
|
+
return /* @__PURE__ */ jsx(
|
|
119
|
+
SoftBuildersVideoPlayerContext.Provider,
|
|
120
|
+
{
|
|
121
|
+
value: {
|
|
122
|
+
player,
|
|
123
|
+
setPlayer,
|
|
124
|
+
duration,
|
|
125
|
+
setDuration,
|
|
126
|
+
currentTime,
|
|
127
|
+
setCurrentTime: (value) => setCurrentTime(Math.floor(value)),
|
|
128
|
+
// isPaused,
|
|
129
|
+
// setIsPaused,
|
|
130
|
+
downloadedBufferTime,
|
|
131
|
+
setDownloadedBufferTimeufferTime,
|
|
132
|
+
downloadedBufferPercentage
|
|
133
|
+
},
|
|
134
|
+
children
|
|
135
|
+
}
|
|
136
|
+
);
|
|
137
|
+
};
|
|
138
|
+
var useSoftBuildersVideoPlayerContext = () => {
|
|
139
|
+
const context = useContext(SoftBuildersVideoPlayerContext);
|
|
140
|
+
if (!context) {
|
|
141
|
+
throw new Error(
|
|
142
|
+
"useSoftBuildersVideoPlayerContext must be used within an SoftBuildersVideoPlayerProvider"
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
return context;
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
// src/components/CurrentTimeLabel/index.tsx
|
|
149
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
150
|
+
var CurrentTimeLabel = ({}) => {
|
|
151
|
+
const { currentTime } = useSoftBuildersVideoPlayerContext();
|
|
152
|
+
return /* @__PURE__ */ jsx2("p", { children: durationFormater(currentTime) });
|
|
153
|
+
};
|
|
154
|
+
var CurrentTimeLabel_default = CurrentTimeLabel;
|
|
155
|
+
|
|
156
|
+
// src/components/VolumeSlider/index.tsx
|
|
157
|
+
import { useEffect as useEffect2, useState as useState2 } from "react";
|
|
158
|
+
|
|
159
|
+
// src/components/Slider/index.tsx
|
|
160
|
+
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
161
|
+
var Slider = (_a) => {
|
|
162
|
+
var _b = _a, {
|
|
163
|
+
value,
|
|
164
|
+
handleValueChange,
|
|
165
|
+
min = 0,
|
|
166
|
+
max = 100
|
|
167
|
+
} = _b, rest = __objRest(_b, [
|
|
168
|
+
"value",
|
|
169
|
+
"handleValueChange",
|
|
170
|
+
"min",
|
|
171
|
+
"max"
|
|
172
|
+
]);
|
|
173
|
+
return /* @__PURE__ */ jsx3(
|
|
174
|
+
"input",
|
|
175
|
+
__spreadValues({
|
|
176
|
+
type: "range",
|
|
177
|
+
min,
|
|
178
|
+
max,
|
|
179
|
+
value,
|
|
180
|
+
onChange: handleValueChange,
|
|
181
|
+
className: "sb-w-full sb-h-2 sb-bg-transparent sb-bg-opacity-50 sb-rounded-lg sb-appearance-none sb-cursor-pointer sb-range-slider sb-slider-thumb " + rest.className,
|
|
182
|
+
style: {
|
|
183
|
+
background: `linear-gradient(to right, #f97316 ${value}%, #30303070 ${value}%)`
|
|
184
|
+
}
|
|
185
|
+
}, rest)
|
|
186
|
+
);
|
|
187
|
+
};
|
|
188
|
+
var Slider_default = Slider;
|
|
189
|
+
|
|
190
|
+
// src/components/icons/BackwardIcon.tsx
|
|
191
|
+
import { jsx as jsx4 } from "react/jsx-runtime";
|
|
192
|
+
var SvgBackwardIcon = (props) => /* @__PURE__ */ jsx4(
|
|
193
|
+
"svg",
|
|
194
|
+
__spreadProps(__spreadValues({
|
|
195
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
196
|
+
width: "1em",
|
|
197
|
+
height: "1em",
|
|
198
|
+
fill: "none",
|
|
199
|
+
viewBox: "0 0 16 15"
|
|
200
|
+
}, props), {
|
|
201
|
+
children: /* @__PURE__ */ jsx4(
|
|
202
|
+
"path",
|
|
203
|
+
{
|
|
204
|
+
stroke: "#fff",
|
|
205
|
+
strokeLinecap: "round",
|
|
206
|
+
strokeLinejoin: "round",
|
|
207
|
+
strokeWidth: 2,
|
|
208
|
+
d: "M1 2.16v4m0 0h4m-4 0 3.093-2.906a6 6 0 1 1-1.42 6.24"
|
|
209
|
+
}
|
|
210
|
+
)
|
|
211
|
+
})
|
|
212
|
+
);
|
|
213
|
+
var BackwardIcon_default = SvgBackwardIcon;
|
|
214
|
+
|
|
215
|
+
// src/components/icons/CheckedIcon.tsx
|
|
216
|
+
import { jsx as jsx5 } from "react/jsx-runtime";
|
|
217
|
+
var SvgCheckedIcon = (props) => /* @__PURE__ */ jsx5(
|
|
218
|
+
"svg",
|
|
219
|
+
__spreadProps(__spreadValues({
|
|
220
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
221
|
+
width: "1em",
|
|
222
|
+
height: "1em",
|
|
223
|
+
fill: "none",
|
|
224
|
+
viewBox: "0 0 12 10"
|
|
225
|
+
}, props), {
|
|
226
|
+
children: /* @__PURE__ */ jsx5(
|
|
227
|
+
"path",
|
|
228
|
+
{
|
|
229
|
+
stroke: "#FFF",
|
|
230
|
+
strokeLinecap: "round",
|
|
231
|
+
strokeLinejoin: "round",
|
|
232
|
+
strokeWidth: 1.5,
|
|
233
|
+
d: "M1 5.8 3.857 9 11 1"
|
|
234
|
+
}
|
|
235
|
+
)
|
|
236
|
+
})
|
|
237
|
+
);
|
|
238
|
+
var CheckedIcon_default = SvgCheckedIcon;
|
|
239
|
+
|
|
240
|
+
// src/components/icons/ClosedNoteIcon.tsx
|
|
241
|
+
import { jsx as jsx6 } from "react/jsx-runtime";
|
|
242
|
+
var SvgClosedNoteIcon = (props) => /* @__PURE__ */ jsx6(
|
|
243
|
+
"svg",
|
|
244
|
+
__spreadProps(__spreadValues({
|
|
245
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
246
|
+
width: "1em",
|
|
247
|
+
height: "1em",
|
|
248
|
+
fill: "none",
|
|
249
|
+
viewBox: "0 0 13 12"
|
|
250
|
+
}, props), {
|
|
251
|
+
children: /* @__PURE__ */ jsx6(
|
|
252
|
+
"path",
|
|
253
|
+
{
|
|
254
|
+
fill: "#fff",
|
|
255
|
+
d: "M12.428 9a2.5 2.5 0 0 1-.657 1.053l-1.27 1.214a2.6 2.6 0 0 1-1.1.63V9.5c0-.276.235-.5.523-.5zm.108-6.5V8H9.924c-.864 0-1.567.673-1.567 1.5V12H2.612C1.172 12 0 10.879 0 9.5v-7C0 1.122 1.172 0 2.612 0h7.312c1.44 0 2.612 1.122 2.612 2.5m-8.88 6.25c0-.414-.35-.75-.783-.75s-.784.336-.784.75.351.75.784.75c.432 0 .783-.336.783-.75m0-2.75c0-.414-.35-.75-.783-.75s-.784.336-.784.75.351.75.784.75c.432 0 .783-.336.783-.75m0-2.75c0-.414-.35-.75-.783-.75s-.784.336-.784.75.351.75.784.75c.432 0 .783-.336.783-.75"
|
|
256
|
+
}
|
|
257
|
+
)
|
|
258
|
+
})
|
|
259
|
+
);
|
|
260
|
+
var ClosedNoteIcon_default = SvgClosedNoteIcon;
|
|
261
|
+
|
|
262
|
+
// src/components/icons/ForwardIcon.tsx
|
|
263
|
+
import { jsx as jsx7 } from "react/jsx-runtime";
|
|
264
|
+
var SvgForwardIcon = (props) => /* @__PURE__ */ jsx7(
|
|
265
|
+
"svg",
|
|
266
|
+
__spreadProps(__spreadValues({
|
|
267
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
268
|
+
width: "1em",
|
|
269
|
+
height: "1em",
|
|
270
|
+
fill: "none",
|
|
271
|
+
viewBox: "0 0 16 15"
|
|
272
|
+
}, props), {
|
|
273
|
+
children: /* @__PURE__ */ jsx7(
|
|
274
|
+
"path",
|
|
275
|
+
{
|
|
276
|
+
stroke: "#fff",
|
|
277
|
+
strokeLinecap: "round",
|
|
278
|
+
strokeLinejoin: "round",
|
|
279
|
+
strokeWidth: 2,
|
|
280
|
+
d: "M14.85 2.165v4m0 0h-4m4 0L11.764 3.26a6 6 0 1 0 1.413 6.24"
|
|
281
|
+
}
|
|
282
|
+
)
|
|
283
|
+
})
|
|
284
|
+
);
|
|
285
|
+
var ForwardIcon_default = SvgForwardIcon;
|
|
286
|
+
|
|
287
|
+
// src/components/icons/FullScreenIcon.tsx
|
|
288
|
+
import { jsx as jsx8 } from "react/jsx-runtime";
|
|
289
|
+
var SvgFullScreenIcon = (props) => /* @__PURE__ */ jsx8(
|
|
290
|
+
"svg",
|
|
291
|
+
__spreadProps(__spreadValues({
|
|
292
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
293
|
+
width: "1em",
|
|
294
|
+
height: "1em",
|
|
295
|
+
fill: "none",
|
|
296
|
+
viewBox: "0 0 11 11"
|
|
297
|
+
}, props), {
|
|
298
|
+
children: /* @__PURE__ */ jsx8(
|
|
299
|
+
"path",
|
|
300
|
+
{
|
|
301
|
+
stroke: "#FFF",
|
|
302
|
+
strokeLinecap: "round",
|
|
303
|
+
strokeLinejoin: "round",
|
|
304
|
+
strokeWidth: 2,
|
|
305
|
+
d: "M7 1h3m0 0v3m0-3L6.5 4.5M4 10H1m0 0V7m0 3 3.5-3.5"
|
|
306
|
+
}
|
|
307
|
+
)
|
|
308
|
+
})
|
|
309
|
+
);
|
|
310
|
+
var FullScreenIcon_default = SvgFullScreenIcon;
|
|
311
|
+
|
|
312
|
+
// src/components/icons/LeftArrowIcon.tsx
|
|
313
|
+
import { jsx as jsx9 } from "react/jsx-runtime";
|
|
314
|
+
var SvgLeftArrowIcon = (props) => /* @__PURE__ */ jsx9(
|
|
315
|
+
"svg",
|
|
316
|
+
__spreadProps(__spreadValues({
|
|
317
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
318
|
+
width: "1em",
|
|
319
|
+
height: "1em",
|
|
320
|
+
fill: "none",
|
|
321
|
+
viewBox: "0 0 6 11"
|
|
322
|
+
}, props), {
|
|
323
|
+
children: /* @__PURE__ */ jsx9(
|
|
324
|
+
"path",
|
|
325
|
+
{
|
|
326
|
+
stroke: "#FFF",
|
|
327
|
+
strokeLinecap: "round",
|
|
328
|
+
strokeLinejoin: "round",
|
|
329
|
+
strokeWidth: 2,
|
|
330
|
+
d: "m5 9.97-4-4 4-4"
|
|
331
|
+
}
|
|
332
|
+
)
|
|
333
|
+
})
|
|
334
|
+
);
|
|
335
|
+
var LeftArrowIcon_default = SvgLeftArrowIcon;
|
|
336
|
+
|
|
337
|
+
// src/components/icons/MuteIcon.tsx
|
|
338
|
+
import { jsx as jsx10, jsxs } from "react/jsx-runtime";
|
|
339
|
+
var SvgMuteIcon = (props) => /* @__PURE__ */ jsxs(
|
|
340
|
+
"svg",
|
|
341
|
+
__spreadProps(__spreadValues({
|
|
342
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
343
|
+
width: "1em",
|
|
344
|
+
height: "1em",
|
|
345
|
+
fill: "none",
|
|
346
|
+
viewBox: "0 0 17 13"
|
|
347
|
+
}, props), {
|
|
348
|
+
children: [
|
|
349
|
+
/* @__PURE__ */ jsx10("path", { fill: "#FFF", d: "M7.925 1.5 4.59 4.357H1.925v4.286H4.59L7.925 11.5z" }),
|
|
350
|
+
/* @__PURE__ */ jsx10(
|
|
351
|
+
"path",
|
|
352
|
+
{
|
|
353
|
+
stroke: "#E5E7EB",
|
|
354
|
+
strokeLinecap: "round",
|
|
355
|
+
strokeLinejoin: "round",
|
|
356
|
+
strokeWidth: 2,
|
|
357
|
+
d: "m15.925 4.357-4 4.286m0-4.286 4 4.286m-8-7.143L4.59 4.357H1.925v4.286H4.59L7.925 11.5z"
|
|
358
|
+
}
|
|
359
|
+
)
|
|
360
|
+
]
|
|
361
|
+
})
|
|
362
|
+
);
|
|
363
|
+
var MuteIcon_default = SvgMuteIcon;
|
|
364
|
+
|
|
365
|
+
// src/components/icons/NoteIcon.tsx
|
|
366
|
+
import { jsx as jsx11 } from "react/jsx-runtime";
|
|
367
|
+
|
|
368
|
+
// src/components/icons/OpenNoteIcon.tsx
|
|
369
|
+
import { jsx as jsx12 } from "react/jsx-runtime";
|
|
370
|
+
|
|
371
|
+
// src/components/icons/PauseIcon.tsx
|
|
372
|
+
import { jsx as jsx13 } from "react/jsx-runtime";
|
|
373
|
+
var SvgPauseIcon = (props) => /* @__PURE__ */ jsx13(
|
|
374
|
+
"svg",
|
|
375
|
+
__spreadProps(__spreadValues({
|
|
376
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
377
|
+
width: "1em",
|
|
378
|
+
height: "1em",
|
|
379
|
+
fill: "none",
|
|
380
|
+
viewBox: "0 0 9 14"
|
|
381
|
+
}, props), {
|
|
382
|
+
children: /* @__PURE__ */ jsx13("path", { fill: "#fff", d: "M2.89 0H0v13.333h2.89zM8.78 0H5.89v13.333h2.89z" })
|
|
383
|
+
})
|
|
384
|
+
);
|
|
385
|
+
var PauseIcon_default = SvgPauseIcon;
|
|
386
|
+
|
|
387
|
+
// src/components/icons/PlayIcon.tsx
|
|
388
|
+
import { jsx as jsx14 } from "react/jsx-runtime";
|
|
389
|
+
var SvgPlayIcon = (props) => /* @__PURE__ */ jsx14(
|
|
390
|
+
"svg",
|
|
391
|
+
__spreadProps(__spreadValues({
|
|
392
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
393
|
+
width: "1em",
|
|
394
|
+
height: "1em",
|
|
395
|
+
fill: "none",
|
|
396
|
+
viewBox: "0 0 13 15"
|
|
397
|
+
}, props), {
|
|
398
|
+
children: /* @__PURE__ */ jsx14(
|
|
399
|
+
"path",
|
|
400
|
+
{
|
|
401
|
+
stroke: "#fff",
|
|
402
|
+
strokeLinecap: "round",
|
|
403
|
+
strokeLinejoin: "round",
|
|
404
|
+
strokeWidth: 2,
|
|
405
|
+
d: "m1.37 1 10.11 6.5L1.37 14z"
|
|
406
|
+
}
|
|
407
|
+
)
|
|
408
|
+
})
|
|
409
|
+
);
|
|
410
|
+
var PlayIcon_default = SvgPlayIcon;
|
|
411
|
+
|
|
412
|
+
// src/components/icons/SettingsIcon.tsx
|
|
413
|
+
import { jsx as jsx15 } from "react/jsx-runtime";
|
|
414
|
+
var SvgSettingsIcon = (props) => /* @__PURE__ */ jsx15(
|
|
415
|
+
"svg",
|
|
416
|
+
__spreadProps(__spreadValues({
|
|
417
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
418
|
+
width: "1em",
|
|
419
|
+
height: "1em",
|
|
420
|
+
fill: "none",
|
|
421
|
+
viewBox: "0 0 13 13"
|
|
422
|
+
}, props), {
|
|
423
|
+
children: /* @__PURE__ */ jsx15(
|
|
424
|
+
"path",
|
|
425
|
+
{
|
|
426
|
+
fill: "#FFF",
|
|
427
|
+
d: "m12.507 8.062-1.117-.645a5 5 0 0 0 0-1.84l1.117-.644a.32.32 0 0 0 .144-.367 6.5 6.5 0 0 0-1.434-2.48.315.315 0 0 0-.388-.06l-1.116.645a5 5 0 0 0-1.594-.92V.464a.314.314 0 0 0-.246-.307 6.6 6.6 0 0 0-2.862 0 .314.314 0 0 0-.247.307v1.29a5.1 5.1 0 0 0-1.593.92l-1.114-.645a.31.31 0 0 0-.388.06 6.5 6.5 0 0 0-1.434 2.48.314.314 0 0 0 .144.366l1.117.645a5 5 0 0 0 0 1.84l-1.117.645a.32.32 0 0 0-.144.367c.291.933.787 1.777 1.434 2.48.1.106.262.133.388.06l1.116-.645c.47.403 1.01.715 1.594.92v1.29c0 .146.102.274.246.306a6.6 6.6 0 0 0 2.862 0 .314.314 0 0 0 .247-.307v-1.29a5.1 5.1 0 0 0 1.593-.92l1.117.645c.128.074.288.05.388-.06a6.5 6.5 0 0 0 1.433-2.48.324.324 0 0 0-.146-.369m-6.065.532a2.1 2.1 0 0 1-2.097-2.097 2.1 2.1 0 0 1 2.097-2.096 2.1 2.1 0 0 1 2.096 2.096 2.1 2.1 0 0 1-2.096 2.097"
|
|
428
|
+
}
|
|
429
|
+
)
|
|
430
|
+
})
|
|
431
|
+
);
|
|
432
|
+
var SettingsIcon_default = SvgSettingsIcon;
|
|
433
|
+
|
|
434
|
+
// src/components/icons/UnmuteIcon.tsx
|
|
435
|
+
import { jsx as jsx16 } from "react/jsx-runtime";
|
|
436
|
+
var SvgUnmuteIcon = (props) => /* @__PURE__ */ jsx16(
|
|
437
|
+
"svg",
|
|
438
|
+
__spreadProps(__spreadValues({
|
|
439
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
440
|
+
width: "1em",
|
|
441
|
+
height: "1em",
|
|
442
|
+
fill: "none",
|
|
443
|
+
viewBox: "0 0 8 15"
|
|
444
|
+
}, props), {
|
|
445
|
+
children: /* @__PURE__ */ jsx16(
|
|
446
|
+
"path",
|
|
447
|
+
{
|
|
448
|
+
fill: "#FFF",
|
|
449
|
+
d: "M7.659 14.275h-.001l-3.979-3.251a.16.16 0 0 0-.104-.035H2.252A1.33 1.33 0 0 1 .924 9.66V5.32A1.33 1.33 0 0 1 2.252 3.99h1.323a.16.16 0 0 0 .101-.035L7.66.725a.163.163 0 0 1 .265.126v13.297a.162.162 0 0 1-.264.127z"
|
|
450
|
+
}
|
|
451
|
+
)
|
|
452
|
+
})
|
|
453
|
+
);
|
|
454
|
+
var UnmuteIcon_default = SvgUnmuteIcon;
|
|
455
|
+
|
|
456
|
+
// src/components/icons/SubtitlesIcon.tsx
|
|
457
|
+
import { jsx as jsx17, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
458
|
+
var SvgSubtitlesIcon = (props) => /* @__PURE__ */ jsxs2("svg", __spreadProps(__spreadValues({ xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em" }, props), { children: [
|
|
459
|
+
/* @__PURE__ */ jsx17(
|
|
460
|
+
"path",
|
|
461
|
+
{
|
|
462
|
+
fill: "#FFF",
|
|
463
|
+
d: "m78.649 64.733 4.772-.014c4.355-.012 8.711-.012 13.067-.01 4.703 0 9.407-.01 14.11-.02q13.815-.023 27.629-.023 11.23-.001 22.463-.012 31.861-.026 63.724-.025h6.94c18.57.001 37.138-.018 55.707-.046q28.618-.043 57.235-.04c10.706 0 21.413-.006 32.119-.027q13.673-.028 27.347-.009c4.647.006 9.295.007 13.943-.01q6.39-.024 12.783.004 2.303.005 4.605-.012c17.985-.122 33.209 4.858 46.137 17.55 8.927 9.239 14.882 21.979 14.901 34.934l.012 2.976-.003 3.246.01 3.467q.01 5.763.011 11.526l.015 8.254q.02 11.222.024 22.445l.012 14.022q.019 19.423.026 38.845v5.027l.002 5.048v2.53q.009 20.274.046 40.55.035 20.83.037 41.661-.001 11.69.025 23.38.023 9.956.012 19.913-.006 5.075.011 10.15c.013 3.677.007 7.353-.004 11.03l.025 3.206c-.1 15.234-5.618 28.587-16.181 39.571L478 426l-1.71 1.742c-12.91 12.154-30.359 13.722-47.23 13.639q-2.341.005-4.684.014c-4.25.013-8.502.007-12.753-.003-4.6-.007-9.2.004-13.8.012-8.996.013-17.991.01-26.987.002a15973 15973 0 0 0-25.105-.003q-3.18 0-6.358.003c-19.85.008-39.7-.002-59.55-.018a31884 31884 0 0 0-51.037.003 46445 46445 0 0 1-65.678.01l-3.148-.001q-10.951-.003-21.904.009-13.356.013-26.712-.01c-4.539-.008-9.077-.011-13.616-.001q-6.243.013-12.487-.012a631 631 0 0 0-4.493.006c-19.337.087-36.076-3.874-50.342-17.72-11.99-13.314-15.732-28.763-15.667-46.265l-.011-3.376c-.01-3.706-.007-7.412-.003-11.118q-.007-4.003-.015-8.006-.018-9.72-.012-19.439.002-7.905-.005-15.812l-.001-2.28-.004-4.584q-.014-21.467-.003-42.935c.006-13.068-.006-26.137-.025-39.205q-.03-20.168-.024-40.336.005-11.307-.014-22.614-.019-9.625-.002-19.252.01-4.903-.005-9.806c-.063-21.392.482-40.17 16.182-56.468L33 80l1.64-1.707C46.883 66.577 62.55 64.697 78.65 64.733M57 111c-3.615 5.55-3.427 10.594-3.394 16.994l-.019 3.364c-.017 3.722-.012 7.443-.007 11.165q-.01 4.002-.026 8.003c-.02 6.495-.025 12.99-.023 19.485a9577 9577 0 0 1-.017 20.405l-.003 2.295c-.019 14.32-.018 28.641-.01 42.961.005 13.096-.016 26.191-.05 39.287q-.05 20.178-.043 40.355c.002 7.55-.003 15.1-.028 22.65q-.033 9.641-.006 19.283.016 4.917-.01 9.834c-.019 3.558-.006 7.114.015 10.671l-.038 3.124c.093 7.623 1.84 12.297 7.234 17.703 6.322 4.896 14.068 4.11 21.659 4.042q2.337.007 4.673.02c4.269.017 8.537.003 12.806-.017 4.608-.015 9.216-.002 13.824.008 9.023.015 18.044.002 27.067-.02 10.505-.023 21.01-.021 31.516-.019 18.742.004 37.484-.017 56.226-.051q27.285-.05 54.569-.041 29.71.012 59.42-.015l3.173-.004 6.31-.006q10.986-.009 21.973-.006 13.386.003 26.77-.032c4.554-.012 9.107-.019 13.66-.013q6.252.006 12.502-.023 2.264-.008 4.526.001c2.05.007 4.098-.004 6.147-.02l3.45-.005c6.13-.735 10.246-3.731 14.154-8.378 3.27-6.025 3.426-11.188 3.381-17.962l.014-3.318c.012-3.663.003-7.326-.007-10.99q.007-3.942.016-7.885c.013-6.395.01-12.79.002-19.185a8074 8074 0 0 1-.003-17.841q0-2.258.003-4.514c.008-14.102-.002-28.204-.018-42.306q-.018-18.139.003-36.278a23436 23436 0 0 0 .01-46.65l-.001-2.235q-.003-7.785.009-15.572.014-10.484-.015-20.972-.006-3.847.004-7.696c.008-3.502-.002-7.004-.017-10.507l.02-3.075c-.055-6.664-.708-12.636-5.014-18.037l-1.7-1.352-1.675-1.398c-4.658-2.84-9.18-3.477-14.556-3.481-1.96-.01-1.96-.01-3.96-.018l-4.33.011-4.617-.011c-4.226-.01-8.452-.008-12.677-.004-4.559.002-9.117-.007-13.675-.014q-13.395-.018-26.788-.012a26146 26146 0 0 1-31.19-.01q-29.507-.013-59.014-.003c-18.001.006-36.002-.006-54.003-.025q-27.72-.03-55.438-.024c-10.376.002-20.753 0-31.13-.014q-13.248-.019-26.498-.002-6.76.011-13.521-.005-6.189-.015-12.378.007-2.239.004-4.478-.008c-10.356-.052-17.722-.02-24.759 8.386"
|
|
464
|
+
}
|
|
465
|
+
),
|
|
466
|
+
/* @__PURE__ */ jsx17(
|
|
467
|
+
"path",
|
|
468
|
+
{
|
|
469
|
+
fill: "#FFF",
|
|
470
|
+
d: "M211.594 166.027C225.564 177.95 232.89 192.341 237 210v15h-38l-2-12c-3.428-9.924-9.002-16.527-18.25-21.375-8.317-3.952-19.394-4.22-28.062-1.187C141.226 194.932 134.624 202.24 131 212c-1.17 3.683-1.154 7.207-1.193 11.057l-.025 2.13q-.035 3.484-.055 6.97l-.017 2.417q-.039 6.342-.06 12.685-.02 5.22-.082 10.44c-.05 4.218-.074 8.437-.081 12.657a438 438 0 0 1-.046 4.793c-.172 12.03 1.188 23.276 9.907 32.394 7.225 6.372 16.431 10.19 26.16 9.809 8.312-1.173 15.45-3.473 21.492-9.352h2l.75-1.625c1.25-2.375 1.25-2.375 3.188-5 4.139-6.774 5.081-13.528 6.062-21.375h38c0 21.963-4.801 38.798-20.363 54.422L214 337l-1.918 2.016c-13.517 13.248-32.973 17.296-51.127 17.296-18.978-.262-36.43-7.932-49.955-21.312-16.343-18.293-21.143-37.855-21.203-61.969l-.009-2.324q-.022-6.097-.028-12.193c-.006-4.15-.03-8.301-.058-12.451a1811 1811 0 0 1-.026-9.7q-.004-2.29-.024-4.582c-.185-22.871 5.05-43.382 21.063-60.465 27.59-27.967 70.078-29.363 100.879-5.289M391 162.5a300 300 0 0 1 4 3.5l2 1.54c13.042 10.34 22.013 28.145 24 44.46v13h-38l-3-14c-4.092-9.822-9.492-15.253-19-20-8.913-3.553-18.759-3.316-27.625.25-9.012 4.09-14.51 10.719-18.187 19.813-2.989 7.986-2.348 17.084-2.356 25.457l-.01 3.922q-.009 4.095-.007 8.192c0 3.47-.014 6.939-.031 10.408-.014 3.347-.013 6.693-.014 10.04l-.022 3.729c.035 13.571 1.681 25.006 11.057 35.294 7.318 6.316 16.193 9.264 25.738 9.106 9.753-.837 18.156-5.38 24.77-12.524 5.983-7.59 7.067-14.967 8.687-24.687h38c0 20.87-4.852 37.261-19 53l-1.57 1.852c-10.837 11.926-28.103 20.027-44.063 21.37-21.875.91-40.916-3.117-57.91-17.921-13.741-12.868-23.846-30.701-24.597-49.89a557 557 0 0 1-.021-4.03l-.015-2.24q-.021-3.648-.027-7.297l-.009-2.538q-.022-6.658-.028-13.315c-.006-4.547-.03-9.095-.058-13.642a2163 2163 0 0 1-.026-10.584q-.004-2.512-.024-5.023c-.175-23.795 5.888-42.815 22.536-60.43C321.02 145.335 363.02 141.156 391 162.5"
|
|
471
|
+
}
|
|
472
|
+
)
|
|
473
|
+
] }));
|
|
474
|
+
var SubtitlesIcon_default = SvgSubtitlesIcon;
|
|
475
|
+
|
|
476
|
+
// src/components/VolumeSlider/index.tsx
|
|
477
|
+
import { jsx as jsx18, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
478
|
+
var MIN = 0;
|
|
479
|
+
var MAX = 100;
|
|
480
|
+
var VolumeSlider = ({}) => {
|
|
481
|
+
const { player } = useSoftBuildersVideoPlayerContext();
|
|
482
|
+
const [volume, setVolume] = useState2(0);
|
|
483
|
+
useEffect2(() => {
|
|
484
|
+
setVolume((player == null ? void 0 : player.muted()) ? 0 : Number(player == null ? void 0 : player.volume()) * 100 || 0);
|
|
485
|
+
}, [player]);
|
|
486
|
+
const handleValueChange = (e) => {
|
|
487
|
+
const newVolume = Number(e.target.value);
|
|
488
|
+
setVolume(newVolume);
|
|
489
|
+
player == null ? void 0 : player.volume(newVolume / 100);
|
|
490
|
+
if (newVolume === 0) {
|
|
491
|
+
player == null ? void 0 : player.muted(true);
|
|
492
|
+
} else {
|
|
493
|
+
player == null ? void 0 : player.muted(false);
|
|
494
|
+
}
|
|
495
|
+
};
|
|
496
|
+
return /* @__PURE__ */ jsxs3("div", { className: "sb-flex sb-items-center sb-gap-2", children: [
|
|
497
|
+
volume === 0 || (player == null ? void 0 : player.muted()) ? /* @__PURE__ */ jsx18(MuteIcon_default, { className: "sb-w-3 sb-h-3" }) : /* @__PURE__ */ jsx18(UnmuteIcon_default, { className: "sb-w-3 sb-h-3" }),
|
|
498
|
+
/* @__PURE__ */ jsx18(
|
|
499
|
+
Slider_default,
|
|
500
|
+
{
|
|
501
|
+
value: volume,
|
|
502
|
+
handleValueChange,
|
|
503
|
+
min: MIN,
|
|
504
|
+
max: MAX
|
|
505
|
+
}
|
|
506
|
+
)
|
|
507
|
+
] });
|
|
508
|
+
};
|
|
509
|
+
var VolumeSlider_default = VolumeSlider;
|
|
510
|
+
|
|
511
|
+
// src/components/QualityMenu/index.tsx
|
|
512
|
+
import { useEffect as useEffect4, useState as useState4 } from "react";
|
|
513
|
+
|
|
514
|
+
// src/components/MenuButton/index.tsx
|
|
515
|
+
import { useCallback, useEffect as useEffect3, useRef, useState as useState3 } from "react";
|
|
516
|
+
import { jsx as jsx19, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
517
|
+
var MenuButton = ({ buttonContent, menuContent, close }) => {
|
|
518
|
+
const [isOpen, setIsOpen] = useState3(false);
|
|
519
|
+
const buttonRef = useRef(null);
|
|
520
|
+
const menuRef = useRef(null);
|
|
521
|
+
const toggleMenu = () => setIsOpen((prev) => !prev);
|
|
522
|
+
const closeMenu = useCallback(() => {
|
|
523
|
+
setIsOpen(false);
|
|
524
|
+
}, []);
|
|
525
|
+
useEffect3(() => {
|
|
526
|
+
const handleClickOutside = (event) => {
|
|
527
|
+
if (buttonRef.current && !buttonRef.current.contains(event.target) && menuRef.current && !menuRef.current.contains(event.target)) {
|
|
528
|
+
setIsOpen(false);
|
|
529
|
+
}
|
|
530
|
+
};
|
|
531
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
532
|
+
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
533
|
+
}, []);
|
|
534
|
+
useEffect3(() => {
|
|
535
|
+
if (close) close(closeMenu);
|
|
536
|
+
}, [close, closeMenu]);
|
|
537
|
+
return /* @__PURE__ */ jsxs4("div", { className: "sb-relative", children: [
|
|
538
|
+
/* @__PURE__ */ jsx19(
|
|
539
|
+
"button",
|
|
540
|
+
{
|
|
541
|
+
ref: buttonRef,
|
|
542
|
+
onClick: toggleMenu,
|
|
543
|
+
"aria-haspopup": "true",
|
|
544
|
+
"aria-expanded": isOpen,
|
|
545
|
+
"aria-label": "Open menu",
|
|
546
|
+
children: buttonContent
|
|
547
|
+
}
|
|
548
|
+
),
|
|
549
|
+
isOpen && /* @__PURE__ */ jsx19(
|
|
550
|
+
"div",
|
|
551
|
+
{
|
|
552
|
+
ref: menuRef,
|
|
553
|
+
role: "menu",
|
|
554
|
+
"aria-orientation": "vertical",
|
|
555
|
+
"aria-labelledby": "Open menu",
|
|
556
|
+
className: "sb-absolute sb-shadow-lg sb-right-0 sb-bottom-10",
|
|
557
|
+
children: menuContent
|
|
558
|
+
}
|
|
559
|
+
)
|
|
560
|
+
] });
|
|
561
|
+
};
|
|
562
|
+
var MenuButton_default = MenuButton;
|
|
563
|
+
|
|
564
|
+
// src/components/QualityMenu/index.tsx
|
|
565
|
+
import { jsx as jsx20, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
566
|
+
var QualityOption = ({
|
|
567
|
+
isSelected,
|
|
568
|
+
quality,
|
|
569
|
+
onClick
|
|
570
|
+
}) => {
|
|
571
|
+
return /* @__PURE__ */ jsx20("button", { className: "hover:sb-text-orange-500 sb-p-2", onClick, children: /* @__PURE__ */ jsxs5("div", { className: "sb-grid sb-grid-cols-12 sb-items-center sb-gap-2", children: [
|
|
572
|
+
/* @__PURE__ */ jsx20("div", { className: "sb-col-span-3", children: isSelected ? /* @__PURE__ */ jsx20(CheckedIcon_default, { className: "sb-w-5 sb-h-5" }) : /* @__PURE__ */ jsx20("div", {}) }),
|
|
573
|
+
/* @__PURE__ */ jsx20("p", { className: "sb-text-left sb-col-span-9", children: quality.label })
|
|
574
|
+
] }) });
|
|
575
|
+
};
|
|
576
|
+
var QualityMenu = ({}) => {
|
|
577
|
+
const { player } = useSoftBuildersVideoPlayerContext();
|
|
578
|
+
const [closeMenuFunction, setCloseMenuFunction] = useState4(void 0);
|
|
579
|
+
const [qualities, setQualities] = useState4(
|
|
580
|
+
[]
|
|
581
|
+
);
|
|
582
|
+
const [currentQualitySrc, setCurrentQualitySrc] = useState4(void 0);
|
|
583
|
+
useEffect4(() => {
|
|
584
|
+
if (player) {
|
|
585
|
+
const sources = player.currentSources();
|
|
586
|
+
const qs = JSON.parse(
|
|
587
|
+
JSON.stringify(sources)
|
|
588
|
+
);
|
|
589
|
+
setQualities(qs);
|
|
590
|
+
const source = player.currentSource();
|
|
591
|
+
const quality = JSON.parse(
|
|
592
|
+
JSON.stringify(source)
|
|
593
|
+
);
|
|
594
|
+
setCurrentQualitySrc(quality.src);
|
|
595
|
+
}
|
|
596
|
+
}, [player]);
|
|
597
|
+
return /* @__PURE__ */ jsx20(
|
|
598
|
+
MenuButton_default,
|
|
599
|
+
{
|
|
600
|
+
buttonContent: /* @__PURE__ */ jsx20(SettingsIcon_default, { className: "sb-w-3 sb-h-3" }),
|
|
601
|
+
menuContent: /* @__PURE__ */ jsx20("div", { className: "sb-rounded-md sb-bg-[#303030] sb-bg-opacity-50 sb-py-5 sb-w-[150px]", children: /* @__PURE__ */ jsxs5("div", { className: "sb-flex sb-flex-col sb-gap-3", children: [
|
|
602
|
+
/* @__PURE__ */ jsxs5("div", { className: "sb-px-5 sb-flex sb-flex-row sb-gap-3 sb-items-start", children: [
|
|
603
|
+
/* @__PURE__ */ jsx20(
|
|
604
|
+
"button",
|
|
605
|
+
{
|
|
606
|
+
onClick: () => {
|
|
607
|
+
if (closeMenuFunction) {
|
|
608
|
+
closeMenuFunction();
|
|
609
|
+
}
|
|
610
|
+
},
|
|
611
|
+
className: "hover:sb-scale-150",
|
|
612
|
+
children: /* @__PURE__ */ jsx20(LeftArrowIcon_default, { className: "sb-w-3 sb-h-3" })
|
|
613
|
+
}
|
|
614
|
+
),
|
|
615
|
+
/* @__PURE__ */ jsx20("h3", { children: "Quality" })
|
|
616
|
+
] }),
|
|
617
|
+
/* @__PURE__ */ jsx20("div", { className: "sb-w-full sb-h-[.1px] sb-bg-[#AAAAAA] sb-bg-opacity-70" }),
|
|
618
|
+
/* @__PURE__ */ jsx20("div", { className: "sb-px-5 sb-flex sb-flex-col sb-gap-3 sb-items-start", children: qualities.map((q, i) => {
|
|
619
|
+
return /* @__PURE__ */ jsx20(
|
|
620
|
+
QualityOption,
|
|
621
|
+
{
|
|
622
|
+
isSelected: currentQualitySrc === q.src,
|
|
623
|
+
quality: q,
|
|
624
|
+
onClick: () => {
|
|
625
|
+
const source = qualities.find(
|
|
626
|
+
(_q) => q.label == _q.label
|
|
627
|
+
);
|
|
628
|
+
if (source && source.src != currentQualitySrc) {
|
|
629
|
+
player == null ? void 0 : player.src(source.src);
|
|
630
|
+
const currentTime = player == null ? void 0 : player.currentTime();
|
|
631
|
+
setCurrentQualitySrc(source.src);
|
|
632
|
+
player == null ? void 0 : player.currentTime(currentTime);
|
|
633
|
+
player == null ? void 0 : player.play();
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
},
|
|
637
|
+
`quality-${q.label}-${i}`
|
|
638
|
+
);
|
|
639
|
+
}) })
|
|
640
|
+
] }) }),
|
|
641
|
+
close: (fn) => {
|
|
642
|
+
setCloseMenuFunction(() => fn);
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
);
|
|
646
|
+
};
|
|
647
|
+
var QualityMenu_default = QualityMenu;
|
|
648
|
+
|
|
649
|
+
// src/components/CreateNoteMenu/index.tsx
|
|
650
|
+
import { useState as useState5 } from "react";
|
|
651
|
+
import { jsx as jsx21, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
652
|
+
var CreateNoteMenu = ({ handleSaveNoteAction }) => {
|
|
653
|
+
const { player } = useSoftBuildersVideoPlayerContext();
|
|
654
|
+
const [note, setNote] = useState5("");
|
|
655
|
+
const handleSaveNote = () => {
|
|
656
|
+
if (handleSaveNoteAction) {
|
|
657
|
+
const time = (player == null ? void 0 : player.currentTime()) || 0;
|
|
658
|
+
handleSaveNoteAction(time, note).then((response) => {
|
|
659
|
+
setNote("");
|
|
660
|
+
});
|
|
661
|
+
} else {
|
|
662
|
+
window.alert(
|
|
663
|
+
"Video Player, there is no implementation for the handleSaveNoteAction function"
|
|
664
|
+
);
|
|
665
|
+
}
|
|
666
|
+
};
|
|
667
|
+
return /* @__PURE__ */ jsx21(
|
|
668
|
+
MenuButton_default,
|
|
669
|
+
{
|
|
670
|
+
buttonContent: /* @__PURE__ */ jsx21(ClosedNoteIcon_default, { className: "sb-w-3 sb-h-3" }),
|
|
671
|
+
menuContent: /* @__PURE__ */ jsx21("div", { className: "sb-rounded-md sb-bg-[#303030] sb-bg-opacity-50 sb-py-5 sb-w-[220px]", children: /* @__PURE__ */ jsxs6("div", { className: "sb-flex sb-flex-col sb-gap-3", children: [
|
|
672
|
+
/* @__PURE__ */ jsx21("h3", { className: "sb-px-5", children: "Add Note" }),
|
|
673
|
+
/* @__PURE__ */ jsx21("div", { className: "sb-w-full sb-h-[.1px] sb-bg-[#AAAAAA] sb-bg-opacity-70" }),
|
|
674
|
+
/* @__PURE__ */ jsxs6("div", { className: "sb-px-5 sb-flex sb-flex-col sb-gap-4 sb-items-start", children: [
|
|
675
|
+
/* @__PURE__ */ jsx21(
|
|
676
|
+
"input",
|
|
677
|
+
{
|
|
678
|
+
name: "note",
|
|
679
|
+
type: "text",
|
|
680
|
+
placeholder: "Add a note",
|
|
681
|
+
value: note,
|
|
682
|
+
onChange: (e) => setNote(e.target.value),
|
|
683
|
+
required: true,
|
|
684
|
+
className: "sb-text-white placeholder:sb-text-white sb-w-full sb-bg-transparent sb-px-4 sb-py-3 sb-border sb-border-[#AAAAAA] sb-rounded-md"
|
|
685
|
+
}
|
|
686
|
+
),
|
|
687
|
+
/* @__PURE__ */ jsx21("button", { className: "sb-w-full", onClick: handleSaveNote, children: /* @__PURE__ */ jsx21("div", { className: "sb-px-4 sb-py-3 sb-text-center sb-font-bold sb-bg-orange-500 sb-rounded-md", children: "Save" }) })
|
|
688
|
+
] })
|
|
689
|
+
] }) })
|
|
690
|
+
}
|
|
691
|
+
);
|
|
692
|
+
};
|
|
693
|
+
var CreateNoteMenu_default = CreateNoteMenu;
|
|
694
|
+
|
|
695
|
+
// src/components/NotesPanal/index.tsx
|
|
696
|
+
import { useEffect as useEffect6, useState as useState7 } from "react";
|
|
697
|
+
|
|
698
|
+
// src/components/NoteTooltip/index.tsx
|
|
699
|
+
import { useEffect as useEffect5, useState as useState6 } from "react";
|
|
700
|
+
|
|
701
|
+
// src/components/Tooltip/index.tsx
|
|
702
|
+
import { jsx as jsx22 } from "react/jsx-runtime";
|
|
703
|
+
var Tooltip = ({ open, children }) => {
|
|
704
|
+
if (!open) return null;
|
|
705
|
+
return /* @__PURE__ */ jsx22("div", { className: "sb-absolute sb-bottom-full sb-mb-2 sb-left-1/2 sb-transform sb--translate-x-1/2 sb-z-10 sb-whitespace-nowrap", children });
|
|
706
|
+
};
|
|
707
|
+
var Tooltip_default = Tooltip;
|
|
708
|
+
|
|
709
|
+
// src/components/NoteTooltip/index.tsx
|
|
710
|
+
import { jsx as jsx23, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
711
|
+
var NoteTooltip = ({ note }) => {
|
|
712
|
+
const [open, setOpen] = useState6(false);
|
|
713
|
+
const { currentTime } = useSoftBuildersVideoPlayerContext();
|
|
714
|
+
useEffect5(() => {
|
|
715
|
+
if (currentTime === Math.floor(note.time)) {
|
|
716
|
+
setOpen(true);
|
|
717
|
+
setTimeout(() => {
|
|
718
|
+
setOpen(false);
|
|
719
|
+
}, 5e3);
|
|
720
|
+
}
|
|
721
|
+
}, [currentTime, note.time]);
|
|
722
|
+
return /* @__PURE__ */ jsx23(
|
|
723
|
+
"div",
|
|
724
|
+
{
|
|
725
|
+
className: "sb-w-1 sb-h-1 sb-rounded-full sb-bg-white sb-absolute sb-z-30",
|
|
726
|
+
style: { left: `${note.percentage}%` },
|
|
727
|
+
onMouseEnter: () => setOpen(true),
|
|
728
|
+
onMouseLeave: () => setOpen(false),
|
|
729
|
+
children: /* @__PURE__ */ jsx23("div", { className: "sb-relative", children: /* @__PURE__ */ jsx23(Tooltip_default, { open, children: /* @__PURE__ */ jsxs7("div", { className: "sb-flex sb-flex-col sb-gap-2 sb-items-center", children: [
|
|
730
|
+
/* @__PURE__ */ jsx23("p", { children: note.label }),
|
|
731
|
+
/* @__PURE__ */ jsx23("p", { className: "sb-p-2 sb-bg-[#303030] sb-bg-opacity-50 sb-rounded-md", children: durationFormater(note.time) })
|
|
732
|
+
] }) }) })
|
|
733
|
+
}
|
|
734
|
+
);
|
|
735
|
+
};
|
|
736
|
+
var NoteTooltip_default = NoteTooltip;
|
|
737
|
+
|
|
738
|
+
// src/components/NotesPanal/index.tsx
|
|
739
|
+
import { jsx as jsx24 } from "react/jsx-runtime";
|
|
740
|
+
var NotesPanal = ({ notes }) => {
|
|
741
|
+
const [ns, setNs] = useState7([]);
|
|
742
|
+
const { duration } = useSoftBuildersVideoPlayerContext();
|
|
743
|
+
useEffect6(() => {
|
|
744
|
+
const newNs = notes.map((n) => {
|
|
745
|
+
const percentage = Math.floor(n.time * 100 / duration);
|
|
746
|
+
return __spreadProps(__spreadValues({}, n), {
|
|
747
|
+
percentage
|
|
748
|
+
});
|
|
749
|
+
});
|
|
750
|
+
setNs(newNs);
|
|
751
|
+
}, [notes, duration]);
|
|
752
|
+
return /* @__PURE__ */ jsx24("div", { id: "notes-panal", className: "sb-w-full sb-h-full sb-relative ", children: ns.map((n, i) => /* @__PURE__ */ jsx24(NoteTooltip_default, { note: n }, `note-${i}-${n.time}`)) });
|
|
753
|
+
};
|
|
754
|
+
var NotesPanal_default = NotesPanal;
|
|
755
|
+
|
|
756
|
+
// src/components/ChaptersPanal/index.tsx
|
|
757
|
+
import { useEffect as useEffect8, useState as useState9 } from "react";
|
|
758
|
+
|
|
759
|
+
// src/components/ChapterTooltip/index.tsx
|
|
760
|
+
import { useEffect as useEffect7, useState as useState8 } from "react";
|
|
761
|
+
import { jsx as jsx25, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
762
|
+
var ChapterTooltip = ({ chapter }) => {
|
|
763
|
+
const { player } = useSoftBuildersVideoPlayerContext();
|
|
764
|
+
const [open, setOpen] = useState8(false);
|
|
765
|
+
const { currentTime } = useSoftBuildersVideoPlayerContext();
|
|
766
|
+
useEffect7(() => {
|
|
767
|
+
if (currentTime === Math.floor(chapter.startTime)) {
|
|
768
|
+
setOpen(true);
|
|
769
|
+
setTimeout(() => {
|
|
770
|
+
setOpen(false);
|
|
771
|
+
}, 5e3);
|
|
772
|
+
}
|
|
773
|
+
}, [currentTime, chapter.startTime]);
|
|
774
|
+
const handleClickChapter = () => {
|
|
775
|
+
player == null ? void 0 : player.currentTime(chapter.startTime);
|
|
776
|
+
};
|
|
777
|
+
return /* @__PURE__ */ jsx25(
|
|
778
|
+
"div",
|
|
779
|
+
{
|
|
780
|
+
id: `ii-section-${chapter.title}`,
|
|
781
|
+
className: "sb-flex sb-items-center sb-w-full sb-h-full sb-absolute sb-z-20",
|
|
782
|
+
style: {
|
|
783
|
+
left: `${chapter.startPercentage}%`,
|
|
784
|
+
width: `${chapter.endPercentage - chapter.startPercentage}%`
|
|
785
|
+
},
|
|
786
|
+
onMouseEnter: () => setOpen(true),
|
|
787
|
+
onMouseLeave: () => setOpen(false),
|
|
788
|
+
children: /* @__PURE__ */ jsx25(
|
|
789
|
+
"button",
|
|
790
|
+
{
|
|
791
|
+
id: `section-${chapter.title}`,
|
|
792
|
+
className: "sb-h-full sb-w-full",
|
|
793
|
+
onClick: handleClickChapter,
|
|
794
|
+
children: /* @__PURE__ */ jsx25("div", { className: "sb-relative sb-flex sb-h-full sb-w-full sb-justify-between sb-items-center", children: /* @__PURE__ */ jsx25(Tooltip_default, { open, children: /* @__PURE__ */ jsxs8("div", { className: "sb-flex sb-flex-col sb-gap-2 sb-items-center", children: [
|
|
795
|
+
/* @__PURE__ */ jsx25("p", { children: chapter.title }),
|
|
796
|
+
/* @__PURE__ */ jsxs8("p", { className: "sb-p-2 sb-bg-[#303030] sb-bg-opacity-50 sb-rounded-md", children: [
|
|
797
|
+
durationFormater(chapter.startTime),
|
|
798
|
+
" -",
|
|
799
|
+
" ",
|
|
800
|
+
durationFormater(chapter.endTime)
|
|
801
|
+
] })
|
|
802
|
+
] }) }) })
|
|
803
|
+
}
|
|
804
|
+
)
|
|
805
|
+
}
|
|
806
|
+
);
|
|
807
|
+
};
|
|
808
|
+
var ChapterTooltip_default = ChapterTooltip;
|
|
809
|
+
|
|
810
|
+
// src/components/ChaptersPanal/index.tsx
|
|
811
|
+
import { jsx as jsx26 } from "react/jsx-runtime";
|
|
812
|
+
var ChaptersPanal = ({ chapters }) => {
|
|
813
|
+
const [cs, setCs] = useState9([]);
|
|
814
|
+
const { duration } = useSoftBuildersVideoPlayerContext();
|
|
815
|
+
useEffect8(() => {
|
|
816
|
+
const newCs = chapters.map((c) => {
|
|
817
|
+
const startPercentage = Math.floor(c.startTime * 100 / duration);
|
|
818
|
+
const endPercentage = Math.floor(c.endTime * 100 / duration);
|
|
819
|
+
return __spreadProps(__spreadValues({}, c), {
|
|
820
|
+
startPercentage,
|
|
821
|
+
endPercentage
|
|
822
|
+
});
|
|
823
|
+
});
|
|
824
|
+
setCs(newCs);
|
|
825
|
+
}, [chapters, duration]);
|
|
826
|
+
return /* @__PURE__ */ jsx26("div", { id: "chapters-panal", className: "sb-w-full sb-h-full sb-relative ", children: cs.map((c, i) => /* @__PURE__ */ jsx26(ChapterTooltip_default, { chapter: c }, `chapter-${i}-${c.startTime}`)) });
|
|
827
|
+
};
|
|
828
|
+
var ChaptersPanal_default = ChaptersPanal;
|
|
829
|
+
|
|
830
|
+
// src/components/TimeSlider/index.tsx
|
|
831
|
+
import { useEffect as useEffect9, useState as useState10 } from "react";
|
|
832
|
+
import { jsx as jsx27, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
833
|
+
var MIN2 = 0;
|
|
834
|
+
var MAX2 = 100;
|
|
835
|
+
var DEFERENCE = Math.abs(MAX2 - MIN2);
|
|
836
|
+
var BAR_PERCENTAGE_WIDTH = 0.5;
|
|
837
|
+
var TimeSlider = ({ chapters }) => {
|
|
838
|
+
const [timeSlider, setTimeSlider] = useState10(0);
|
|
839
|
+
const { player, duration, downloadedBufferPercentage } = useSoftBuildersVideoPlayerContext();
|
|
840
|
+
const handleValueChange = (e) => {
|
|
841
|
+
const newTimeSlider = Number(e.target.value);
|
|
842
|
+
setTimeSlider(newTimeSlider);
|
|
843
|
+
const time = newTimeSlider * duration / DEFERENCE;
|
|
844
|
+
player == null ? void 0 : player.currentTime(time);
|
|
845
|
+
};
|
|
846
|
+
useEffect9(() => {
|
|
847
|
+
const intervalId = setInterval(() => {
|
|
848
|
+
const currentTime = (player == null ? void 0 : player.currentTime()) || 0;
|
|
849
|
+
const time = currentTime * DEFERENCE / duration;
|
|
850
|
+
setTimeSlider(time);
|
|
851
|
+
}, 1e3);
|
|
852
|
+
return () => clearInterval(intervalId);
|
|
853
|
+
}, [player, duration]);
|
|
854
|
+
const [maskCuttes, setMaskCuttes] = useState10("");
|
|
855
|
+
useEffect9(() => {
|
|
856
|
+
const arr = ["black 0%"];
|
|
857
|
+
chapters.forEach((c) => {
|
|
858
|
+
const startPercentage = Math.floor(c.startTime * 100 / duration);
|
|
859
|
+
const endPercentage = Math.floor(c.endTime * 100 / duration);
|
|
860
|
+
arr.push(`black ${startPercentage}%`);
|
|
861
|
+
arr.push(`transparent ${startPercentage}%`);
|
|
862
|
+
arr.push(`transparent ${startPercentage + BAR_PERCENTAGE_WIDTH}%`);
|
|
863
|
+
arr.push(`black ${startPercentage + BAR_PERCENTAGE_WIDTH}%`);
|
|
864
|
+
arr.push(`black ${endPercentage}%`);
|
|
865
|
+
arr.push(`transparent ${endPercentage}%`);
|
|
866
|
+
arr.push(`transparent ${endPercentage + BAR_PERCENTAGE_WIDTH}%`);
|
|
867
|
+
arr.push(`black ${endPercentage + BAR_PERCENTAGE_WIDTH}%`);
|
|
868
|
+
});
|
|
869
|
+
arr.push(`black 100%`);
|
|
870
|
+
setMaskCuttes(arr.toString());
|
|
871
|
+
}, [chapters, duration]);
|
|
872
|
+
return /* @__PURE__ */ jsxs9("div", { className: " sb-w-full sb-h-2 sb-flex sb-items-center sb-justify-center", children: [
|
|
873
|
+
/* @__PURE__ */ jsx27("div", { className: "sb-absolute sb-top-0 sb-left-0 sb-w-full sb-z-10", children: /* @__PURE__ */ jsx27(
|
|
874
|
+
Slider_default,
|
|
875
|
+
{
|
|
876
|
+
value: timeSlider,
|
|
877
|
+
handleValueChange,
|
|
878
|
+
min: MIN2,
|
|
879
|
+
max: MAX2,
|
|
880
|
+
style: {
|
|
881
|
+
background: "transparent"
|
|
882
|
+
}
|
|
883
|
+
}
|
|
884
|
+
) }),
|
|
885
|
+
/* @__PURE__ */ jsx27(
|
|
886
|
+
"div",
|
|
887
|
+
{
|
|
888
|
+
className: "sb-absolute sb-top-0 sb-left-0 sb-w-full sb-h-2 sb-bg-slate-400 sb-rounded-md",
|
|
889
|
+
style: {
|
|
890
|
+
background: `
|
|
891
|
+
linear-gradient(to right,
|
|
892
|
+
#f97316 0%,
|
|
893
|
+
#f97316 ${timeSlider}%,
|
|
894
|
+
#f9731640 ${timeSlider}%,
|
|
895
|
+
#f9731640 ${downloadedBufferPercentage}%,
|
|
896
|
+
#30303030 ${timeSlider}%,
|
|
897
|
+
#30303030 100%
|
|
898
|
+
)
|
|
899
|
+
`,
|
|
900
|
+
maskImage: `
|
|
901
|
+
linear-gradient(to right,
|
|
902
|
+
${maskCuttes}
|
|
903
|
+
)
|
|
904
|
+
`,
|
|
905
|
+
maskSize: "100% 100%",
|
|
906
|
+
maskRepeat: "no-repeat"
|
|
907
|
+
}
|
|
908
|
+
}
|
|
909
|
+
)
|
|
910
|
+
] });
|
|
911
|
+
};
|
|
912
|
+
var TimeSlider_default = TimeSlider;
|
|
913
|
+
|
|
914
|
+
// src/components/TimeSliderContainer/index.tsx
|
|
915
|
+
import { jsx as jsx28, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
916
|
+
var TimeSliderContainer = ({ notes, chapters }) => {
|
|
917
|
+
return /* @__PURE__ */ jsxs10(
|
|
918
|
+
"div",
|
|
919
|
+
{
|
|
920
|
+
id: "time-slider-container",
|
|
921
|
+
className: "sb-w-full sb-relative sb-flex sb-items-center sb-justify-center",
|
|
922
|
+
children: [
|
|
923
|
+
/* @__PURE__ */ jsx28(
|
|
924
|
+
"div",
|
|
925
|
+
{
|
|
926
|
+
id: "notes-panal",
|
|
927
|
+
className: "sb-absolute sb-w-full sb-h-full sb-top-[27%] sb-left-0",
|
|
928
|
+
children: /* @__PURE__ */ jsx28(NotesPanal_default, { notes })
|
|
929
|
+
}
|
|
930
|
+
),
|
|
931
|
+
/* @__PURE__ */ jsx28("div", { className: "sb-absolute sb-w-full sb-h-full sb-top-0 sb-left-0", children: /* @__PURE__ */ jsx28(ChaptersPanal_default, { chapters }) }),
|
|
932
|
+
/* @__PURE__ */ jsx28(TimeSlider_default, { chapters })
|
|
933
|
+
]
|
|
934
|
+
}
|
|
935
|
+
);
|
|
936
|
+
};
|
|
937
|
+
var TimeSliderContainer_default = TimeSliderContainer;
|
|
938
|
+
|
|
939
|
+
// src/components/BufferTracker/index.tsx
|
|
940
|
+
import { useEffect as useEffect10 } from "react";
|
|
941
|
+
import { Fragment, jsx as jsx29 } from "react/jsx-runtime";
|
|
942
|
+
var BufferTracker = () => {
|
|
943
|
+
const { player, setDownloadedBufferTimeufferTime } = useSoftBuildersVideoPlayerContext();
|
|
944
|
+
useEffect10(() => {
|
|
945
|
+
const intervalId = setInterval(() => {
|
|
946
|
+
if (player) setDownloadedBufferTimeufferTime(player.bufferedEnd());
|
|
947
|
+
}, 1e3);
|
|
948
|
+
return () => clearInterval(intervalId);
|
|
949
|
+
}, [player]);
|
|
950
|
+
return /* @__PURE__ */ jsx29(Fragment, {});
|
|
951
|
+
};
|
|
952
|
+
var BufferTracker_default = BufferTracker;
|
|
953
|
+
|
|
954
|
+
// src/components/CurrentTimeTracker/index.tsx
|
|
955
|
+
import { useEffect as useEffect11 } from "react";
|
|
956
|
+
import { Fragment as Fragment2, jsx as jsx30 } from "react/jsx-runtime";
|
|
957
|
+
var CurrentTimeTracker = () => {
|
|
958
|
+
const { setCurrentTime, player } = useSoftBuildersVideoPlayerContext();
|
|
959
|
+
useEffect11(() => {
|
|
960
|
+
const intervalId = setInterval(() => {
|
|
961
|
+
setCurrentTime((player == null ? void 0 : player.currentTime()) || 0);
|
|
962
|
+
}, 500);
|
|
963
|
+
return () => clearInterval(intervalId);
|
|
964
|
+
}, [player]);
|
|
965
|
+
return /* @__PURE__ */ jsx30(Fragment2, {});
|
|
966
|
+
};
|
|
967
|
+
var CurrentTimeTracker_default = CurrentTimeTracker;
|
|
968
|
+
|
|
969
|
+
// src/components/SubtitleMenu/index.tsx
|
|
970
|
+
import { useEffect as useEffect12, useState as useState11 } from "react";
|
|
971
|
+
import { jsx as jsx31, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
972
|
+
var SubtitleOption = ({
|
|
973
|
+
isSelected,
|
|
974
|
+
subtitle,
|
|
975
|
+
onClick
|
|
976
|
+
}) => {
|
|
977
|
+
return /* @__PURE__ */ jsx31("button", { className: "hover:sb-text-orange-500 sb-p-2", onClick, children: /* @__PURE__ */ jsxs11("div", { className: "sb-grid sb-grid-cols-12 sb-items-center sb-gap-2", children: [
|
|
978
|
+
/* @__PURE__ */ jsx31("div", { className: "sb-col-span-3", children: isSelected ? /* @__PURE__ */ jsx31(CheckedIcon_default, { className: "sb-w-5 sb-h-5" }) : /* @__PURE__ */ jsx31("div", {}) }),
|
|
979
|
+
/* @__PURE__ */ jsx31("p", { className: "sb-text-left sb-col-span-9", children: subtitle.label })
|
|
980
|
+
] }) });
|
|
981
|
+
};
|
|
982
|
+
var SubtitleMenu = ({}) => {
|
|
983
|
+
const { player } = useSoftBuildersVideoPlayerContext();
|
|
984
|
+
const [closeMenuFunction, setCloseMenuFunction] = useState11(void 0);
|
|
985
|
+
const [subtitles, setSubtitles] = useState11([]);
|
|
986
|
+
const handleSelectSubtitle = (textTrack) => {
|
|
987
|
+
const newSubtitles = subtitles.map((s) => {
|
|
988
|
+
if (s.label === textTrack.label) {
|
|
989
|
+
s.mode = "showing";
|
|
990
|
+
} else {
|
|
991
|
+
s.mode = "disabled";
|
|
992
|
+
}
|
|
993
|
+
return s;
|
|
994
|
+
});
|
|
995
|
+
setSubtitles(newSubtitles);
|
|
996
|
+
};
|
|
997
|
+
useEffect12(() => {
|
|
998
|
+
var _a;
|
|
999
|
+
if (player) {
|
|
1000
|
+
const textTracks = (_a = player.textTracks()) == null ? void 0 : _a.tracks_;
|
|
1001
|
+
setSubtitles(textTracks);
|
|
1002
|
+
}
|
|
1003
|
+
}, [player]);
|
|
1004
|
+
return /* @__PURE__ */ jsx31(
|
|
1005
|
+
MenuButton_default,
|
|
1006
|
+
{
|
|
1007
|
+
buttonContent: /* @__PURE__ */ jsx31(SubtitlesIcon_default, { className: "sb-w-3 sb-h-3" }),
|
|
1008
|
+
menuContent: /* @__PURE__ */ jsx31("div", { className: "sb-rounded-md sb-bg-[#303030] sb-bg-opacity-50 sb-py-5 sb-w-[150px]", children: /* @__PURE__ */ jsxs11("div", { className: "sb-flex sb-flex-col sb-gap-3", children: [
|
|
1009
|
+
/* @__PURE__ */ jsxs11("div", { className: "sb-px-5 sb-flex sb-flex-row sb-gap-3 sb-items-start", children: [
|
|
1010
|
+
/* @__PURE__ */ jsx31(
|
|
1011
|
+
"button",
|
|
1012
|
+
{
|
|
1013
|
+
onClick: () => {
|
|
1014
|
+
if (closeMenuFunction) {
|
|
1015
|
+
closeMenuFunction();
|
|
1016
|
+
}
|
|
1017
|
+
},
|
|
1018
|
+
className: "hover:sb-scale-150",
|
|
1019
|
+
children: /* @__PURE__ */ jsx31(LeftArrowIcon_default, { className: "sb-w-3 sb-h-3" })
|
|
1020
|
+
}
|
|
1021
|
+
),
|
|
1022
|
+
/* @__PURE__ */ jsx31("h3", { children: "Subtitle" })
|
|
1023
|
+
] }),
|
|
1024
|
+
/* @__PURE__ */ jsx31("div", { className: "sb-w-full sb-h-[.1px] sb-bg-[#AAAAAA] sb-bg-opacity-70" }),
|
|
1025
|
+
/* @__PURE__ */ jsx31("div", { className: "sb-px-5 sb-flex sb-flex-col sb-gap-3 sb-items-start", children: subtitles.map((q, i) => {
|
|
1026
|
+
return /* @__PURE__ */ jsx31(
|
|
1027
|
+
SubtitleOption,
|
|
1028
|
+
{
|
|
1029
|
+
isSelected: q.mode === "showing",
|
|
1030
|
+
subtitle: q,
|
|
1031
|
+
onClick: () => {
|
|
1032
|
+
handleSelectSubtitle(q);
|
|
1033
|
+
}
|
|
1034
|
+
},
|
|
1035
|
+
`subtitle-${q.label}-${i}`
|
|
1036
|
+
);
|
|
1037
|
+
}) })
|
|
1038
|
+
] }) }),
|
|
1039
|
+
close: (fn) => {
|
|
1040
|
+
setCloseMenuFunction(() => fn);
|
|
1041
|
+
}
|
|
1042
|
+
}
|
|
1043
|
+
);
|
|
1044
|
+
};
|
|
1045
|
+
var SubtitleMenu_default = SubtitleMenu;
|
|
1046
|
+
|
|
1047
|
+
// src/components/ControlBar/index.tsx
|
|
1048
|
+
import { jsx as jsx32, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
1049
|
+
var ControlBar = ({
|
|
1050
|
+
player,
|
|
1051
|
+
isPaused,
|
|
1052
|
+
setIsPaused,
|
|
1053
|
+
duration,
|
|
1054
|
+
notes,
|
|
1055
|
+
chapters,
|
|
1056
|
+
seekStep = 5,
|
|
1057
|
+
handleSaveNoteAction
|
|
1058
|
+
}) => {
|
|
1059
|
+
const { setPlayer, setDuration } = useSoftBuildersVideoPlayerContext();
|
|
1060
|
+
const seek = (duration2) => {
|
|
1061
|
+
const currentTime = Number((player == null ? void 0 : player.currentTime()) || 0);
|
|
1062
|
+
player == null ? void 0 : player.currentTime(currentTime + duration2);
|
|
1063
|
+
};
|
|
1064
|
+
const togglePlay = () => {
|
|
1065
|
+
if (isPaused) player == null ? void 0 : player.play();
|
|
1066
|
+
else player == null ? void 0 : player.pause();
|
|
1067
|
+
setIsPaused(!isPaused);
|
|
1068
|
+
};
|
|
1069
|
+
useEffect13(() => {
|
|
1070
|
+
setPlayer(player);
|
|
1071
|
+
}, [player]);
|
|
1072
|
+
useEffect13(() => {
|
|
1073
|
+
setDuration(duration);
|
|
1074
|
+
}, [duration]);
|
|
1075
|
+
return /* @__PURE__ */ jsxs12("div", { className: "sb-flex sb-items-center sb-justify-center sb-gap-3 sb-w-full", children: [
|
|
1076
|
+
/* @__PURE__ */ jsx32(BufferTracker_default, {}),
|
|
1077
|
+
/* @__PURE__ */ jsx32(CurrentTimeTracker_default, {}),
|
|
1078
|
+
/* @__PURE__ */ jsx32(
|
|
1079
|
+
"button",
|
|
1080
|
+
{
|
|
1081
|
+
onClick: () => {
|
|
1082
|
+
seek(-seekStep);
|
|
1083
|
+
},
|
|
1084
|
+
children: /* @__PURE__ */ jsx32(BackwardIcon_default, { className: "sb-w-3 sb-h-3" })
|
|
1085
|
+
}
|
|
1086
|
+
),
|
|
1087
|
+
/* @__PURE__ */ jsx32("button", { onClick: togglePlay, children: isPaused ? /* @__PURE__ */ jsx32(PlayIcon_default, { className: "sb-w-3 sb-h-3" }) : /* @__PURE__ */ jsx32(PauseIcon_default, { className: "sb-w-3 sb-h-3" }) }),
|
|
1088
|
+
/* @__PURE__ */ jsx32(
|
|
1089
|
+
"button",
|
|
1090
|
+
{
|
|
1091
|
+
onClick: () => {
|
|
1092
|
+
seek(seekStep);
|
|
1093
|
+
},
|
|
1094
|
+
children: /* @__PURE__ */ jsx32(ForwardIcon_default, { className: "sb-w-3 sb-h-3" })
|
|
1095
|
+
}
|
|
1096
|
+
),
|
|
1097
|
+
/* @__PURE__ */ jsx32(CurrentTimeLabel_default, {}),
|
|
1098
|
+
/* @__PURE__ */ jsx32("div", { className: "sb-w-[30%] hover:sb-w-[45%] sb-transition-all sb-ease-in-out sb-duration-500", children: /* @__PURE__ */ jsx32(TimeSliderContainer_default, { chapters, notes }) }),
|
|
1099
|
+
/* @__PURE__ */ jsx32("p", { children: durationFormater(duration) }),
|
|
1100
|
+
/* @__PURE__ */ jsx32("div", { className: "sb-w-[10%]", children: /* @__PURE__ */ jsx32(VolumeSlider_default, {}) }),
|
|
1101
|
+
/* @__PURE__ */ jsx32(QualityMenu_default, {}),
|
|
1102
|
+
/* @__PURE__ */ jsx32(
|
|
1103
|
+
"button",
|
|
1104
|
+
{
|
|
1105
|
+
onClick: () => {
|
|
1106
|
+
if (player == null ? void 0 : player.isFullscreen()) {
|
|
1107
|
+
player == null ? void 0 : player.exitFullscreen();
|
|
1108
|
+
} else {
|
|
1109
|
+
player == null ? void 0 : player.requestFullscreen();
|
|
1110
|
+
}
|
|
1111
|
+
},
|
|
1112
|
+
children: /* @__PURE__ */ jsx32(FullScreenIcon_default, { className: "sb-w-3 sb-h-3" })
|
|
1113
|
+
}
|
|
1114
|
+
),
|
|
1115
|
+
handleSaveNoteAction && /* @__PURE__ */ jsx32(CreateNoteMenu_default, { handleSaveNoteAction }),
|
|
1116
|
+
/* @__PURE__ */ jsx32(SubtitleMenu_default, {})
|
|
1117
|
+
] });
|
|
1118
|
+
};
|
|
1119
|
+
var ControlBar_default = ControlBar;
|
|
1120
|
+
|
|
1121
|
+
// src/components/BigPlayButton/index.tsx
|
|
1122
|
+
import { jsx as jsx33 } from "react/jsx-runtime";
|
|
1123
|
+
var BigPlayButton = ({ player, isPaused, setIsPaused }) => {
|
|
1124
|
+
const togglePlay = () => {
|
|
1125
|
+
if (isPaused) player == null ? void 0 : player.play();
|
|
1126
|
+
else player == null ? void 0 : player.pause();
|
|
1127
|
+
setIsPaused(!isPaused);
|
|
1128
|
+
};
|
|
1129
|
+
return /* @__PURE__ */ jsx33("button", { onClick: togglePlay, children: /* @__PURE__ */ jsx33("div", { className: "sb-w-16 sb-h-16 sb-rounded-full sb-bg-white/30 sb-backdrop-blur-lg sb-flex sb-items-center sb-justify-center ", children: isPaused ? /* @__PURE__ */ jsx33(PlayIcon_default, { className: "sb-w-4 sb-h-4" }) : /* @__PURE__ */ jsx33(PauseIcon_default, { className: "sb-w-4 sb-h-4" }) }) });
|
|
1130
|
+
};
|
|
1131
|
+
var BigPlayButton_default = BigPlayButton;
|
|
1132
|
+
|
|
1133
|
+
// src/components/VideoPlayerComponent/index.tsx
|
|
1134
|
+
import { jsx as jsx34 } from "react/jsx-runtime";
|
|
1135
|
+
var bigPlayButtonRoot = {};
|
|
1136
|
+
var renderBigPlayButton = (id, player, isPaused, setIsPaused) => {
|
|
1137
|
+
const container = document.getElementById(`video-container-${id}`);
|
|
1138
|
+
if (container) {
|
|
1139
|
+
const element = container.querySelector(".vjs-big-play-button");
|
|
1140
|
+
if (element) {
|
|
1141
|
+
if (!bigPlayButtonRoot[id]) {
|
|
1142
|
+
bigPlayButtonRoot[id] = ReactDOM.createRoot(element);
|
|
1143
|
+
}
|
|
1144
|
+
bigPlayButtonRoot[id].render(
|
|
1145
|
+
/* @__PURE__ */ jsx34(
|
|
1146
|
+
BigPlayButton_default,
|
|
1147
|
+
{
|
|
1148
|
+
player,
|
|
1149
|
+
isPaused,
|
|
1150
|
+
setIsPaused
|
|
1151
|
+
}
|
|
1152
|
+
)
|
|
1153
|
+
);
|
|
1154
|
+
}
|
|
1155
|
+
}
|
|
1156
|
+
};
|
|
1157
|
+
var controlBarRoot = {};
|
|
1158
|
+
var renderControlBar = (id, player, isPaused, setIsPaused, duration, notes, chapters, seekStep = 5, handleSaveNoteAction) => {
|
|
1159
|
+
const container = document.getElementById(`video-container-${id}`);
|
|
1160
|
+
if (container) {
|
|
1161
|
+
const element = container.querySelector(".vjs-control-bar");
|
|
1162
|
+
if (element) {
|
|
1163
|
+
if (!controlBarRoot[id]) {
|
|
1164
|
+
controlBarRoot[id] = ReactDOM.createRoot(element);
|
|
1165
|
+
}
|
|
1166
|
+
element.style.display = "block";
|
|
1167
|
+
controlBarRoot[id].render(
|
|
1168
|
+
/* @__PURE__ */ jsx34(SoftBuildersVideoPlayerProvider, { children: /* @__PURE__ */ jsx34(
|
|
1169
|
+
ControlBar_default,
|
|
1170
|
+
{
|
|
1171
|
+
player,
|
|
1172
|
+
isPaused,
|
|
1173
|
+
setIsPaused,
|
|
1174
|
+
duration,
|
|
1175
|
+
notes,
|
|
1176
|
+
chapters,
|
|
1177
|
+
seekStep,
|
|
1178
|
+
handleSaveNoteAction
|
|
1179
|
+
}
|
|
1180
|
+
) })
|
|
1181
|
+
);
|
|
1182
|
+
}
|
|
1183
|
+
}
|
|
1184
|
+
};
|
|
1185
|
+
var VideoPlayerComponent = ({
|
|
1186
|
+
id,
|
|
1187
|
+
options,
|
|
1188
|
+
notes,
|
|
1189
|
+
chapters,
|
|
1190
|
+
startTime = 0,
|
|
1191
|
+
handleSaveNoteAction,
|
|
1192
|
+
onPlay,
|
|
1193
|
+
onPause
|
|
1194
|
+
}) => {
|
|
1195
|
+
const videoRef = useRef2(void 0);
|
|
1196
|
+
const playerRef = useRef2(void 0);
|
|
1197
|
+
const [isReady, setIsReady] = useState12(false);
|
|
1198
|
+
const [isPaused, setIsPaused] = useState12(!options.autoplay);
|
|
1199
|
+
const [duration, setDuratoin] = useState12(1);
|
|
1200
|
+
const onReady = (player) => {
|
|
1201
|
+
playerRef.current = player;
|
|
1202
|
+
setIsReady(true);
|
|
1203
|
+
player.currentTime(startTime);
|
|
1204
|
+
player.on("waiting", () => {
|
|
1205
|
+
});
|
|
1206
|
+
player.on("dispose", () => {
|
|
1207
|
+
videojs.log("player will dispose");
|
|
1208
|
+
setIsReady(false);
|
|
1209
|
+
});
|
|
1210
|
+
player.on("loadedmetadata", () => {
|
|
1211
|
+
const d = player.duration();
|
|
1212
|
+
setDuratoin(d);
|
|
1213
|
+
});
|
|
1214
|
+
};
|
|
1215
|
+
useEffect14(() => {
|
|
1216
|
+
if (!playerRef.current) {
|
|
1217
|
+
const videoElement = document.createElement("video-js");
|
|
1218
|
+
videoElement.classList.add("vjs-big-play-centered");
|
|
1219
|
+
videoRef.current.appendChild(videoElement);
|
|
1220
|
+
playerRef.current = videojs(videoElement, options, () => {
|
|
1221
|
+
onReady(playerRef.current);
|
|
1222
|
+
});
|
|
1223
|
+
}
|
|
1224
|
+
return () => {
|
|
1225
|
+
if (playerRef.current) {
|
|
1226
|
+
playerRef.current.dispose();
|
|
1227
|
+
playerRef.current = void 0;
|
|
1228
|
+
setTimeout(() => {
|
|
1229
|
+
if (bigPlayButtonRoot[id]) {
|
|
1230
|
+
bigPlayButtonRoot[id].unmount();
|
|
1231
|
+
bigPlayButtonRoot[id] = void 0;
|
|
1232
|
+
}
|
|
1233
|
+
if (controlBarRoot[id]) {
|
|
1234
|
+
controlBarRoot[id].unmount();
|
|
1235
|
+
controlBarRoot[id] = void 0;
|
|
1236
|
+
}
|
|
1237
|
+
}, 0);
|
|
1238
|
+
}
|
|
1239
|
+
};
|
|
1240
|
+
}, [options]);
|
|
1241
|
+
useEffect14(() => {
|
|
1242
|
+
if (playerRef && (playerRef == null ? void 0 : playerRef.current) && isReady) {
|
|
1243
|
+
const currentTime = playerRef.current.currentTime() || 0;
|
|
1244
|
+
if (isPaused) {
|
|
1245
|
+
if (onPause) onPause(currentTime);
|
|
1246
|
+
} else {
|
|
1247
|
+
if (onPlay) onPlay(currentTime);
|
|
1248
|
+
}
|
|
1249
|
+
}
|
|
1250
|
+
}, [isPaused, isReady]);
|
|
1251
|
+
useEffect14(() => {
|
|
1252
|
+
if (isReady) {
|
|
1253
|
+
const controlBarTimeout = setTimeout(() => {
|
|
1254
|
+
renderControlBar(
|
|
1255
|
+
id,
|
|
1256
|
+
playerRef.current,
|
|
1257
|
+
isPaused,
|
|
1258
|
+
setIsPaused,
|
|
1259
|
+
duration,
|
|
1260
|
+
notes,
|
|
1261
|
+
chapters,
|
|
1262
|
+
5,
|
|
1263
|
+
handleSaveNoteAction
|
|
1264
|
+
);
|
|
1265
|
+
}, 500);
|
|
1266
|
+
return () => clearTimeout(controlBarTimeout);
|
|
1267
|
+
}
|
|
1268
|
+
}, [
|
|
1269
|
+
id,
|
|
1270
|
+
playerRef,
|
|
1271
|
+
isPaused,
|
|
1272
|
+
setIsPaused,
|
|
1273
|
+
notes,
|
|
1274
|
+
chapters,
|
|
1275
|
+
isReady,
|
|
1276
|
+
handleSaveNoteAction,
|
|
1277
|
+
duration
|
|
1278
|
+
]);
|
|
1279
|
+
useEffect14(() => {
|
|
1280
|
+
if (isReady) {
|
|
1281
|
+
const playButtonTimeout = setTimeout(() => {
|
|
1282
|
+
renderBigPlayButton(id, playerRef.current, isPaused, setIsPaused);
|
|
1283
|
+
}, 500);
|
|
1284
|
+
return () => clearTimeout(playButtonTimeout);
|
|
1285
|
+
}
|
|
1286
|
+
}, [id, isPaused, isReady]);
|
|
1287
|
+
useEffect14(() => {
|
|
1288
|
+
if (playerRef.current) {
|
|
1289
|
+
const intervalId = setInterval(() => {
|
|
1290
|
+
setIsPaused(playerRef.current.paused());
|
|
1291
|
+
}, 500);
|
|
1292
|
+
return () => clearInterval(intervalId);
|
|
1293
|
+
}
|
|
1294
|
+
}, []);
|
|
1295
|
+
return /* @__PURE__ */ jsx34(
|
|
1296
|
+
"div",
|
|
1297
|
+
{
|
|
1298
|
+
id: `video-container-${id}`,
|
|
1299
|
+
className: "sb-relative sb-rounded-md sb-overflow-hidden",
|
|
1300
|
+
children: /* @__PURE__ */ jsx34("div", { "data-vjs-player": true, children: /* @__PURE__ */ jsx34("div", { ref: videoRef }) })
|
|
1301
|
+
}
|
|
1302
|
+
);
|
|
1303
|
+
};
|
|
1304
|
+
var VideoPlayerComponent_default = VideoPlayerComponent;
|
|
1305
|
+
|
|
1306
|
+
// src/components/SoftBuildersVideoPlayer/index.tsx
|
|
1307
|
+
import { jsx as jsx35 } from "react/jsx-runtime";
|
|
1308
|
+
var DEFAULT_OPTIONS = {
|
|
1309
|
+
autoplay: false,
|
|
1310
|
+
controls: true,
|
|
1311
|
+
fluid: true,
|
|
1312
|
+
muted: true,
|
|
1313
|
+
height: 420,
|
|
1314
|
+
width: 720,
|
|
1315
|
+
sources: [],
|
|
1316
|
+
tracks: []
|
|
1317
|
+
};
|
|
1318
|
+
var Component = ({
|
|
1319
|
+
options,
|
|
1320
|
+
notes,
|
|
1321
|
+
chapters,
|
|
1322
|
+
startTime = 0,
|
|
1323
|
+
handleSaveNoteAction,
|
|
1324
|
+
onPlay,
|
|
1325
|
+
onPause
|
|
1326
|
+
}) => {
|
|
1327
|
+
options = __spreadProps(__spreadValues({}, options), {
|
|
1328
|
+
responsive: true,
|
|
1329
|
+
inactivityTimeout: 0,
|
|
1330
|
+
fullscreen: {
|
|
1331
|
+
navigationUI: "hide"
|
|
1332
|
+
}
|
|
1333
|
+
});
|
|
1334
|
+
if (options.autoplay === void 0)
|
|
1335
|
+
options.autoplay = DEFAULT_OPTIONS.autoplay;
|
|
1336
|
+
if (options.controls === void 0)
|
|
1337
|
+
options.controls = DEFAULT_OPTIONS.controls;
|
|
1338
|
+
if (options.fluid === void 0) options.fluid = DEFAULT_OPTIONS.fluid;
|
|
1339
|
+
if (options.muted === void 0) options.muted = DEFAULT_OPTIONS.muted;
|
|
1340
|
+
if (options.height === void 0) options.height = DEFAULT_OPTIONS.height;
|
|
1341
|
+
if (options.width === void 0) options.width = DEFAULT_OPTIONS.width;
|
|
1342
|
+
const [tracks, setTracks] = useState13([]);
|
|
1343
|
+
useEffect15(() => {
|
|
1344
|
+
const getTracks = async () => {
|
|
1345
|
+
const newTracks = [];
|
|
1346
|
+
for (const [i, s] of options.tracks.entries()) {
|
|
1347
|
+
let src = s.src;
|
|
1348
|
+
if (s.memeType == "text/srt") {
|
|
1349
|
+
src = await convertSRTtoVTT(s.src);
|
|
1350
|
+
}
|
|
1351
|
+
newTracks.push(__spreadProps(__spreadValues({}, s), {
|
|
1352
|
+
src
|
|
1353
|
+
}));
|
|
1354
|
+
}
|
|
1355
|
+
setTracks(newTracks);
|
|
1356
|
+
};
|
|
1357
|
+
getTracks();
|
|
1358
|
+
}, [options.tracks]);
|
|
1359
|
+
const id = (Date.now() + Math.random() * 100).toString();
|
|
1360
|
+
return /* @__PURE__ */ jsx35(
|
|
1361
|
+
VideoPlayerComponent_default,
|
|
1362
|
+
{
|
|
1363
|
+
id,
|
|
1364
|
+
chapters,
|
|
1365
|
+
options: __spreadProps(__spreadValues({}, options), { tracks }),
|
|
1366
|
+
notes,
|
|
1367
|
+
startTime,
|
|
1368
|
+
handleSaveNoteAction,
|
|
1369
|
+
onPause,
|
|
1370
|
+
onPlay
|
|
1371
|
+
}
|
|
1372
|
+
);
|
|
1373
|
+
};
|
|
1374
|
+
var SoftBuildersVideoPlayer = memo(Component, (prevProps, nextProps) => {
|
|
1375
|
+
return prevProps.options === nextProps.options && prevProps.notes === nextProps.notes && prevProps.chapters === nextProps.chapters && prevProps.startTime === nextProps.startTime;
|
|
1376
|
+
});
|
|
1377
|
+
var SoftBuildersVideoPlayer_default = SoftBuildersVideoPlayer;
|
|
1378
|
+
|
|
1379
|
+
// src/index.ts
|
|
1380
|
+
var src_default = SoftBuildersVideoPlayer_default;
|
|
1381
|
+
export {
|
|
1382
|
+
src_default as default
|
|
1383
|
+
};
|