suada-components 1.2.0 → 1.2.1
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/{DailyMotion-BM__Vhyo.js → DailyMotion-C87ZJeRt.js} +1 -1
- package/dist/components/{DailyMotion-CxLlr0cR.esm.js → DailyMotion-DbDeP0dq.esm.js} +1 -1
- package/dist/components/{Facebook-DjA6gknl.esm.js → Facebook-B1XpGyBt.esm.js} +1 -1
- package/dist/components/{Facebook-Zkq5Dmij.js → Facebook-DigX8u_u.js} +1 -1
- package/dist/components/{FilePlayer-C-z4wNAs.esm.js → FilePlayer-BSL_U8r8.esm.js} +1 -1
- package/dist/components/{FilePlayer-PgJJpyg0.js → FilePlayer-BTuFK59w.js} +1 -1
- package/dist/components/{Kaltura-Btu7etAO.js → Kaltura-CKV92aVd.js} +1 -1
- package/dist/components/{Kaltura-B50rwAlx.esm.js → Kaltura-DAkp5nY0.esm.js} +1 -1
- package/dist/components/{Mixcloud-CpyWM87F.js → Mixcloud-CAgtZPq5.js} +1 -1
- package/dist/components/{Mixcloud-DCuoGh8X.esm.js → Mixcloud-CtWhrXiZ.esm.js} +1 -1
- package/dist/components/{Mux-DQjOzSHN.js → Mux-BRYGMFV_.js} +1 -1
- package/dist/components/{Mux-Bj4ELcFh.esm.js → Mux-C0xOzOps.esm.js} +1 -1
- package/dist/components/{Preview-Cgl2b2Yo.esm.js → Preview-Crcz-S0c.esm.js} +1 -1
- package/dist/components/{Preview-M0CQw6-7.js → Preview-DSBoVsm9.js} +1 -1
- package/dist/components/{SoundCloud-D8ulCoOA.js → SoundCloud-1V8ahw7A.js} +1 -1
- package/dist/components/{SoundCloud-BQ1Bv-Ms.esm.js → SoundCloud-BC8iiobM.esm.js} +1 -1
- package/dist/components/{Streamable-C_gvjkdy.js → Streamable-BhhnBO_c.js} +1 -1
- package/dist/components/{Streamable-DTv6vm7m.esm.js → Streamable-CGxErYVF.esm.js} +1 -1
- package/dist/components/{Twitch-BrQFLQcf.esm.js → Twitch-8quL43Fw.esm.js} +1 -1
- package/dist/components/{Twitch-RxI4d-d5.js → Twitch-E9YQS4X8.js} +1 -1
- package/dist/components/VideoPlayer/Player.d.ts +1 -0
- package/dist/components/VideoPlayer/Player.interface.d.ts +2 -1
- package/dist/components/VideoPlayer/Player.js +44 -23
- package/dist/components/VideoPlayer/Player.js.map +1 -1
- package/dist/components/VideoPlayer/Player.styles.d.ts +2 -0
- package/dist/components/VideoPlayer/Player.styles.js +21 -0
- package/dist/components/VideoPlayer/Player.styles.js.map +1 -1
- package/dist/components/VideoPlayer/useHlsSubtitles.d.ts +12 -0
- package/dist/components/VideoPlayer/useHlsSubtitles.js +73 -0
- package/dist/components/VideoPlayer/useHlsSubtitles.js.map +1 -0
- package/dist/components/VideoPlayer/usePlayerControls.js +52 -41
- package/dist/components/VideoPlayer/usePlayerControls.js.map +1 -1
- package/dist/components/{Vidyard-uAwNCpw7.js → Vidyard-B3v7M2i3.js} +1 -1
- package/dist/components/{Vidyard-BCPvgfz4.esm.js → Vidyard-DsG0WHnh.esm.js} +1 -1
- package/dist/components/{Vimeo-Ocs8S_PZ.esm.js → Vimeo-CXKbdxkV.esm.js} +1 -1
- package/dist/components/{Vimeo-BfnFWKlr.js → Vimeo-ddQ8CMRR.js} +1 -1
- package/dist/components/{Wistia-DU_Kavg4.js → Wistia-B93lpDSs.js} +1 -1
- package/dist/components/{Wistia-CjqtkoU1.esm.js → Wistia-CJDzE0TP.esm.js} +1 -1
- package/dist/components/{YouTube-uIBmVRVn.js → YouTube-631v_AIH.js} +1 -1
- package/dist/components/{YouTube-CBwRsGZb.esm.js → YouTube-CdjuPIIO.esm.js} +1 -1
- package/dist/components/components/VideoPlayer/Player.d.ts +1 -0
- package/dist/components/components/VideoPlayer/Player.interface.d.ts +2 -1
- package/dist/components/components/VideoPlayer/Player.styles.d.ts +2 -0
- package/dist/components/components/VideoPlayer/useHlsSubtitles.d.ts +12 -0
- package/dist/components/{index-Dwz3FwAA.js → index-Ciqeqnts.js} +233 -111
- package/dist/components/{index-KXbxnyZn.esm.js → index-CyUx723z.esm.js} +233 -111
- package/dist/components/index.esm.js +1 -1
- package/dist/icons/components/VideoPlayer/Player.d.ts +1 -0
- package/dist/icons/components/VideoPlayer/Player.interface.d.ts +2 -1
- package/dist/icons/components/VideoPlayer/Player.styles.d.ts +2 -0
- package/dist/icons/components/VideoPlayer/useHlsSubtitles.d.ts +12 -0
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as requireUtils, a as requirePatterns, g as getDefaultExportFromCjs } from './index-
|
|
1
|
+
import { r as requireUtils, a as requirePatterns, g as getDefaultExportFromCjs } from './index-CyUx723z.esm.js';
|
|
2
2
|
import React__default from 'react';
|
|
3
3
|
|
|
4
4
|
function _mergeNamespaces(n, m) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as requireUtils, a as requirePatterns, g as getDefaultExportFromCjs } from './index-
|
|
1
|
+
import { r as requireUtils, a as requirePatterns, g as getDefaultExportFromCjs } from './index-CyUx723z.esm.js';
|
|
2
2
|
import React__default from 'react';
|
|
3
3
|
|
|
4
4
|
function _mergeNamespaces(n, m) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as requireUtils, a as requirePatterns, g as getDefaultExportFromCjs } from './index-
|
|
1
|
+
import { r as requireUtils, a as requirePatterns, g as getDefaultExportFromCjs } from './index-CyUx723z.esm.js';
|
|
2
2
|
import React__default from 'react';
|
|
3
3
|
|
|
4
4
|
function _mergeNamespaces(n, m) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as requireUtils, a as requirePatterns, g as getDefaultExportFromCjs } from './index-
|
|
1
|
+
import { r as requireUtils, a as requirePatterns, g as getDefaultExportFromCjs } from './index-CyUx723z.esm.js';
|
|
2
2
|
import React__default from 'react';
|
|
3
3
|
|
|
4
4
|
function _mergeNamespaces(n, m) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as requireUtils, a as requirePatterns, g as getDefaultExportFromCjs } from './index-
|
|
1
|
+
import { r as requireUtils, a as requirePatterns, g as getDefaultExportFromCjs } from './index-CyUx723z.esm.js';
|
|
2
2
|
import React__default from 'react';
|
|
3
3
|
|
|
4
4
|
function _mergeNamespaces(n, m) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as requireUtils, a as requirePatterns, g as getDefaultExportFromCjs } from './index-
|
|
1
|
+
import { r as requireUtils, a as requirePatterns, g as getDefaultExportFromCjs } from './index-CyUx723z.esm.js';
|
|
2
2
|
import React__default from 'react';
|
|
3
3
|
|
|
4
4
|
function _mergeNamespaces(n, m) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as requireUtils, a as requirePatterns, g as getDefaultExportFromCjs } from './index-
|
|
1
|
+
import { r as requireUtils, a as requirePatterns, g as getDefaultExportFromCjs } from './index-CyUx723z.esm.js';
|
|
2
2
|
import React__default from 'react';
|
|
3
3
|
|
|
4
4
|
function _mergeNamespaces(n, m) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as requireUtils, a as requirePatterns, g as getDefaultExportFromCjs } from './index-
|
|
1
|
+
import { r as requireUtils, a as requirePatterns, g as getDefaultExportFromCjs } from './index-CyUx723z.esm.js';
|
|
2
2
|
import React__default from 'react';
|
|
3
3
|
|
|
4
4
|
function _mergeNamespaces(n, m) {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { ReactElement } from 'react';
|
|
2
2
|
import { PlayerProps } from './Player.interface';
|
|
3
3
|
export declare const VideoPlayer: ({ customStyles, startTime, loading, setLoading, handleTrackProgress, url, subtitle: subtitleUrl, handleNextVideo, handlePreviousVideo, isNextVideo, isPreviousVideo, isPlaying, setIsPlaying, shouldPlayerBeFocusedOnSpaceClick, showFavorite, isFavorite, toggleFavorite, }: PlayerProps) => ReactElement;
|
|
4
|
+
export default VideoPlayer;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { RefObject } from 'react';
|
|
1
|
+
import React, { Dispatch, RefObject, SetStateAction } from 'react';
|
|
2
2
|
import ReactPlayer from 'react-player';
|
|
3
3
|
import { ControlsProps } from './Controls/Controls.interface';
|
|
4
4
|
export interface VideoState {
|
|
@@ -59,5 +59,6 @@ export interface UsePlayerControlsState extends Omit<ControlsProps, 'isFavorite'
|
|
|
59
59
|
isFullscreen: boolean;
|
|
60
60
|
isControlsActive: boolean;
|
|
61
61
|
currentSubtitle: string;
|
|
62
|
+
setCurrentSubtitle: Dispatch<SetStateAction<string>>;
|
|
62
63
|
}
|
|
63
64
|
export {};
|
|
@@ -46,15 +46,19 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
46
46
|
}
|
|
47
47
|
};
|
|
48
48
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
49
|
+
import { useEffect, useRef } from 'react';
|
|
49
50
|
import ReactPlayer from 'react-player';
|
|
50
|
-
import { StyledWrapper, StyledPlayerLoader, StyledControlsContainer, StyledVideoPlayerWrapper, StyledLoader, StyledSubtitles, } from './Player.styles';
|
|
51
|
+
import { StyledWrapper, StyledPlayerLoader, StyledControlsContainer, StyledVideoPlayerWrapper, StyledLoader, StyledSubtitles, injectHLSSubtitleStyles, } from './Player.styles';
|
|
51
52
|
import Controls from './Controls';
|
|
52
53
|
import usePlayerControls from './usePlayerControls';
|
|
54
|
+
import { useHLSSubtitles } from 'src/components/VideoPlayer/useHlsSubtitles';
|
|
53
55
|
export var VideoPlayer = function (_a) {
|
|
54
|
-
var
|
|
56
|
+
var _b, _c, _d;
|
|
57
|
+
var customStyles = _a.customStyles, _e = _a.startTime, startTime = _e === void 0 ? 0 : _e, loading = _a.loading, setLoading = _a.setLoading, handleTrackProgress = _a.handleTrackProgress, url = _a.url, subtitleUrl = _a.subtitle, handleNextVideo = _a.handleNextVideo, handlePreviousVideo = _a.handlePreviousVideo, isNextVideo = _a.isNextVideo, isPreviousVideo = _a.isPreviousVideo, isPlaying = _a.isPlaying, setIsPlaying = _a.setIsPlaying, _f = _a.shouldPlayerBeFocusedOnSpaceClick, shouldPlayerBeFocusedOnSpaceClick = _f === void 0 ? false : _f, showFavorite = _a.showFavorite, _g = _a.isFavorite, isFavorite = _g === void 0 ? false : _g, _h = _a.toggleFavorite, toggleFavorite = _h === void 0 ? function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
55
58
|
return [2 /*return*/];
|
|
56
|
-
}); }); } :
|
|
57
|
-
var
|
|
59
|
+
}); }); } : _h;
|
|
60
|
+
var videoRef = useRef(null);
|
|
61
|
+
var _j = usePlayerControls({
|
|
58
62
|
startTime: startTime,
|
|
59
63
|
setLoading: setLoading,
|
|
60
64
|
handleTrackProgress: handleTrackProgress,
|
|
@@ -63,25 +67,42 @@ export var VideoPlayer = function (_a) {
|
|
|
63
67
|
isPlaying: isPlaying,
|
|
64
68
|
setIsPlaying: setIsPlaying,
|
|
65
69
|
shouldPlayerBeFocusedOnSpaceClick: shouldPlayerBeFocusedOnSpaceClick,
|
|
66
|
-
}), mouseMoveHandler =
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
70
|
+
}), mouseMoveHandler = _j.mouseMoveHandler, playerContainerRef = _j.playerContainerRef, playPauseHandler = _j.playPauseHandler, handleFullScreen = _j.handleFullScreen, videoPlayerRef = _j.videoPlayerRef, playing = _j.playing, volume = _j.volume, muted = _j.muted, progressHandler = _j.progressHandler, bufferStartHandler = _j.bufferStartHandler, bufferEndHandler = _j.bufferEndHandler, onPlayerStart = _j.onPlayerStart, setVideoState = _j.setVideoState, playbackRate = _j.playbackRate, controlRef = _j.controlRef, rewindHandler = _j.rewindHandler, handleFastForward = _j.handleFastForward, formatCurrentTime = _j.formatCurrentTime, played = _j.played, onSeekMouseDownHandler = _j.onSeekMouseDownHandler, seekHandler = _j.seekHandler, seekMouseUpHandler = _j.seekMouseUpHandler, muteHandler = _j.muteHandler, volumeChangeHandler = _j.volumeChangeHandler, formatDuration = _j.formatDuration, isSubtitlesChecked = _j.isSubtitlesChecked, toggleSubtitlesCheck = _j.toggleSubtitlesCheck, isFullscreen = _j.isFullscreen, isControlsActive = _j.isControlsActive, currentSubtitle = _j.currentSubtitle, setCurrentSubtitle = _j.setCurrentSubtitle;
|
|
71
|
+
var setupHLSSubtitleTracking = useHLSSubtitles({
|
|
72
|
+
videoPlayerRef: videoPlayerRef,
|
|
73
|
+
isSubtitlesChecked: isSubtitlesChecked,
|
|
74
|
+
setCurrentSubtitle: setCurrentSubtitle,
|
|
75
|
+
}).setupHLSSubtitleTracking;
|
|
76
|
+
useEffect(function () {
|
|
77
|
+
var cleanup = injectHLSSubtitleStyles();
|
|
78
|
+
return cleanup;
|
|
79
|
+
}, []);
|
|
80
|
+
var handlePlayerReady = function () {
|
|
81
|
+
var _a;
|
|
82
|
+
onPlayerStart();
|
|
83
|
+
setupHLSSubtitleTracking();
|
|
84
|
+
var videoElement = (_a = videoPlayerRef.current) === null || _a === void 0 ? void 0 : _a.getInternalPlayer();
|
|
85
|
+
if (videoElement && videoElement instanceof HTMLVideoElement) {
|
|
86
|
+
videoRef.current = videoElement;
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
return (_jsxs(StyledWrapper, { tabIndex: 0, onMouseMove: mouseMoveHandler, ref: playerContainerRef, style: customStyles, onClick: function (e) { return e.stopPropagation(); }, children: [_jsxs(StyledVideoPlayerWrapper, { onClick: playPauseHandler, onDoubleClick: handleFullScreen, children: [_jsx(ReactPlayer, { url: url, ref: videoPlayerRef, className: 'react-player', width: '100%', height: '100%', playing: isPlaying, volume: volume, muted: muted, onProgress: progressHandler, onBuffer: bufferStartHandler, onBufferEnd: bufferEndHandler, onReady: handlePlayerReady, onPlay: function () { return setIsPlaying(true); }, onPause: function () { return setIsPlaying(false); }, onEnded: function () {
|
|
90
|
+
var _a;
|
|
91
|
+
var totalDuration = (_a = videoPlayerRef.current) === null || _a === void 0 ? void 0 : _a.getDuration();
|
|
92
|
+
if (totalDuration) {
|
|
93
|
+
handleTrackProgress(totalDuration);
|
|
94
|
+
}
|
|
95
|
+
setVideoState(function (prev) { return (__assign(__assign({}, prev), { playing: false })); });
|
|
96
|
+
if (handleNextVideo)
|
|
97
|
+
handleNextVideo();
|
|
98
|
+
}, controls: false, pip: true, playbackRate: playbackRate, preload: 'metadata', config: {
|
|
99
|
+
file: {
|
|
100
|
+
hlsOptions: {
|
|
101
|
+
autoStartLoad: true,
|
|
102
|
+
renderTextTracksNatively: true,
|
|
103
|
+
},
|
|
83
104
|
},
|
|
84
|
-
},
|
|
85
|
-
} }, validUrl) }), loading && (_jsx(StyledPlayerLoader, { children: _jsx(StyledLoader, {}) })), _jsx(StyledControlsContainer, { ref: controlRef, children: _jsx(Controls, { setVideoState: setVideoState, playbackRate: playbackRate, rewindHandler: rewindHandler, playPauseHandler: playPauseHandler, handleFastForward: handleFastForward, formatCurrentTime: formatCurrentTime, played: played, onSeekMouseDownHandler: onSeekMouseDownHandler, seekHandler: seekHandler, seekMouseUpHandler: seekMouseUpHandler, volume: volume, muted: muted, muteHandler: muteHandler, volumeChangeHandler: volumeChangeHandler, formatDuration: formatDuration, handleFullScreen: handleFullScreen, playing: playing, isSubtitlesChecked: isSubtitlesChecked, toggleSubtitlesCheck: toggleSubtitlesCheck, isFavorite: isFavorite, toggleIsFavorite: toggleFavorite, isFullscreen: isFullscreen, subtitle: !!subtitleUrl, handleSkipBackward: handlePreviousVideo, handleSkipForward: handleNextVideo, isNextVideo: isNextVideo, isPreviousVideo: isPreviousVideo, showFavorite: showFavorite }) }), isSubtitlesChecked && currentSubtitle && (_jsx(StyledSubtitles, { "$controls": isControlsActive, children: currentSubtitle }))] }));
|
|
105
|
+
} }, url), loading && (_jsx(StyledPlayerLoader, { children: _jsx(StyledLoader, {}) })), isSubtitlesChecked && currentSubtitle && (_jsx(StyledSubtitles, { "$controls": isControlsActive, children: currentSubtitle }))] }), _jsx(StyledControlsContainer, { ref: controlRef, children: _jsx(Controls, { setVideoState: setVideoState, playbackRate: playbackRate, rewindHandler: rewindHandler, playPauseHandler: playPauseHandler, handleFastForward: handleFastForward, formatCurrentTime: formatCurrentTime, played: played, onSeekMouseDownHandler: onSeekMouseDownHandler, seekHandler: seekHandler, seekMouseUpHandler: seekMouseUpHandler, volume: volume, muted: muted, muteHandler: muteHandler, volumeChangeHandler: volumeChangeHandler, formatDuration: formatDuration, handleFullScreen: handleFullScreen, playing: playing, isSubtitlesChecked: isSubtitlesChecked, toggleSubtitlesCheck: toggleSubtitlesCheck, isFavorite: isFavorite, toggleIsFavorite: toggleFavorite, isFullscreen: isFullscreen, subtitle: !!subtitleUrl || ((_d = (_c = (_b = videoPlayerRef.current) === null || _b === void 0 ? void 0 : _b.getInternalPlayer()) === null || _c === void 0 ? void 0 : _c.textTracks) === null || _d === void 0 ? void 0 : _d.length) > 0, handleSkipBackward: handlePreviousVideo, handleSkipForward: handleNextVideo, isNextVideo: isNextVideo, isPreviousVideo: isPreviousVideo, showFavorite: showFavorite }) })] }));
|
|
86
106
|
};
|
|
107
|
+
export default VideoPlayer;
|
|
87
108
|
//# sourceMappingURL=Player.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Player.js","sourceRoot":"","sources":["../../../src/components/VideoPlayer/Player.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"Player.js","sourceRoot":"","sources":["../../../src/components/VideoPlayer/Player.tsx"],"names":[],"mappings":"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"}
|
|
@@ -6,3 +6,5 @@ export declare const StyledControlsContainer: import("styled-components/dist/typ
|
|
|
6
6
|
export declare const StyledSubtitles: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
|
|
7
7
|
$controls: boolean;
|
|
8
8
|
}>> & string;
|
|
9
|
+
export declare const HLS_SUBTITLE_STYLES = "\n /* Hide native HLS subtitles completely - comprehensive approach */\n video::cue {\n display: none !important;\n visibility: hidden !important;\n opacity: 0 !important;\n }\n \n video::-webkit-media-text-track-display {\n display: none !important;\n visibility: hidden !important;\n opacity: 0 !important;\n }\n \n video::cue-region {\n display: none !important;\n visibility: hidden !important;\n opacity: 0 !important;\n }\n \n video::-webkit-media-text-track-container {\n display: none !important;\n visibility: hidden !important;\n opacity: 0 !important;\n }\n \n /* Target ReactPlayer specifically */\n .react-player video::cue {\n display: none !important;\n visibility: hidden !important;\n opacity: 0 !important;\n }\n \n .react-player video::-webkit-media-text-track-display {\n display: none !important;\n visibility: hidden !important;\n opacity: 0 !important;\n }\n \n .react-player video::cue-region {\n display: none !important;\n visibility: hidden !important;\n opacity: 0 !important;\n }\n \n .react-player video::-webkit-media-text-track-container {\n display: none !important;\n visibility: hidden !important;\n opacity: 0 !important;\n }\n \n /* Additional selectors for different browsers */\n video::-moz-media-text-track-display {\n display: none !important;\n visibility: hidden !important;\n opacity: 0 !important;\n }\n \n video::-ms-media-text-track-display {\n display: none !important;\n visibility: hidden !important;\n opacity: 0 !important;\n }\n \n /* Hide any subtitle overlays */\n .react-player video + div[style*=\"position: absolute\"] {\n display: none !important;\n }\n \n /* Target HLS video player specifically */\n .hls-video-player::cue {\n display: none !important;\n visibility: hidden !important;\n opacity: 0 !important;\n }\n \n .hls-video-player::-webkit-media-text-track-display {\n display: none !important;\n visibility: hidden !important;\n opacity: 0 !important;\n }\n \n .hls-video-player::-webkit-media-text-track-container {\n display: none !important;\n visibility: hidden !important;\n opacity: 0 !important;\n }\n \n .hls-video-player::cue-region {\n display: none !important;\n visibility: hidden !important;\n opacity: 0 !important;\n }\n";
|
|
10
|
+
export declare const injectHLSSubtitleStyles: () => (() => void);
|
|
@@ -13,5 +13,26 @@ export var StyledSubtitles = styled.div(templateObject_7 || (templateObject_7 =
|
|
|
13
13
|
var $controls = _a.$controls;
|
|
14
14
|
return ($controls ? '60px' : '10px');
|
|
15
15
|
});
|
|
16
|
+
export var HLS_SUBTITLE_STYLES = "\n /* Hide native HLS subtitles completely - comprehensive approach */\n video::cue {\n display: none !important;\n visibility: hidden !important;\n opacity: 0 !important;\n }\n \n video::-webkit-media-text-track-display {\n display: none !important;\n visibility: hidden !important;\n opacity: 0 !important;\n }\n \n video::cue-region {\n display: none !important;\n visibility: hidden !important;\n opacity: 0 !important;\n }\n \n video::-webkit-media-text-track-container {\n display: none !important;\n visibility: hidden !important;\n opacity: 0 !important;\n }\n \n /* Target ReactPlayer specifically */\n .react-player video::cue {\n display: none !important;\n visibility: hidden !important;\n opacity: 0 !important;\n }\n \n .react-player video::-webkit-media-text-track-display {\n display: none !important;\n visibility: hidden !important;\n opacity: 0 !important;\n }\n \n .react-player video::cue-region {\n display: none !important;\n visibility: hidden !important;\n opacity: 0 !important;\n }\n \n .react-player video::-webkit-media-text-track-container {\n display: none !important;\n visibility: hidden !important;\n opacity: 0 !important;\n }\n \n /* Additional selectors for different browsers */\n video::-moz-media-text-track-display {\n display: none !important;\n visibility: hidden !important;\n opacity: 0 !important;\n }\n \n video::-ms-media-text-track-display {\n display: none !important;\n visibility: hidden !important;\n opacity: 0 !important;\n }\n \n /* Hide any subtitle overlays */\n .react-player video + div[style*=\"position: absolute\"] {\n display: none !important;\n }\n \n /* Target HLS video player specifically */\n .hls-video-player::cue {\n display: none !important;\n visibility: hidden !important;\n opacity: 0 !important;\n }\n \n .hls-video-player::-webkit-media-text-track-display {\n display: none !important;\n visibility: hidden !important;\n opacity: 0 !important;\n }\n \n .hls-video-player::-webkit-media-text-track-container {\n display: none !important;\n visibility: hidden !important;\n opacity: 0 !important;\n }\n \n .hls-video-player::cue-region {\n display: none !important;\n visibility: hidden !important;\n opacity: 0 !important;\n }\n";
|
|
17
|
+
export var injectHLSSubtitleStyles = function () {
|
|
18
|
+
var addSubtitleStyles = function () {
|
|
19
|
+
var existingStyle = document.getElementById('hls-subtitle-styles');
|
|
20
|
+
if (existingStyle) {
|
|
21
|
+
existingStyle.remove();
|
|
22
|
+
}
|
|
23
|
+
var style = document.createElement('style');
|
|
24
|
+
style.id = 'hls-subtitle-styles';
|
|
25
|
+
style.textContent = HLS_SUBTITLE_STYLES;
|
|
26
|
+
document.head.appendChild(style);
|
|
27
|
+
};
|
|
28
|
+
addSubtitleStyles();
|
|
29
|
+
// Return cleanup function
|
|
30
|
+
return function () {
|
|
31
|
+
var existingStyle = document.getElementById('hls-subtitle-styles');
|
|
32
|
+
if (existingStyle) {
|
|
33
|
+
existingStyle.remove();
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
};
|
|
16
37
|
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7;
|
|
17
38
|
//# sourceMappingURL=Player.styles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Player.styles.js","sourceRoot":"","sources":["../../../src/components/VideoPlayer/Player.styles.tsx"],"names":[],"mappings":";;;;AAAA,OAAO,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAErD,MAAM,CAAC,IAAM,wBAAwB,GAAG,MAAM,CAAC,GAAG,ghBAAA,6cAwBjD,IAAA,CAAA;AAED,MAAM,CAAC,IAAM,aAAa,GAAG,MAAM,CAAC,GAAG,wWAAA,qMAa/B,EAAwB,8FAO/B,KAPO,wBAAwB,CAO/B,CAAA;AAED,MAAM,CAAC,IAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,sVAAA,mRAc3C,IAAA,CAAA;AAED,IAAM,MAAM,GAAG,SAAS,iKAAA,8FAOvB,IAAA,CAAA;AAED,MAAM,CAAC,IAAM,YAAY,GAAG,MAAM,CAAC,GAAG,8kBAAA,qWAUvB,EAAM,oKAUpB,KAVc,MAAM,CAUpB,CAAA;AAED,MAAM,CAAC,IAAM,uBAAuB,GAAG,MAAM,CAAC,GAAG,sPAAA,mLAUhD,IAAA,CAAA;AAED,MAAM,CAAC,IAAM,eAAe,GAAG,MAAM,CAAC,GAAG,wbAAwB,iQAWrD,EAAwD,kHAOnE,KAPW,UAAC,EAAa;QAAX,SAAS,eAAA;IAAe,OAAA,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;AAA7B,CAA6B,CAOnE,CAAA"}
|
|
1
|
+
{"version":3,"file":"Player.styles.js","sourceRoot":"","sources":["../../../src/components/VideoPlayer/Player.styles.tsx"],"names":[],"mappings":";;;;AAAA,OAAO,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAErD,MAAM,CAAC,IAAM,wBAAwB,GAAG,MAAM,CAAC,GAAG,ghBAAA,6cAwBjD,IAAA,CAAA;AAED,MAAM,CAAC,IAAM,aAAa,GAAG,MAAM,CAAC,GAAG,wWAAA,qMAa/B,EAAwB,8FAO/B,KAPO,wBAAwB,CAO/B,CAAA;AAED,MAAM,CAAC,IAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,sVAAA,mRAc3C,IAAA,CAAA;AAED,IAAM,MAAM,GAAG,SAAS,iKAAA,8FAOvB,IAAA,CAAA;AAED,MAAM,CAAC,IAAM,YAAY,GAAG,MAAM,CAAC,GAAG,8kBAAA,qWAUvB,EAAM,oKAUpB,KAVc,MAAM,CAUpB,CAAA;AAED,MAAM,CAAC,IAAM,uBAAuB,GAAG,MAAM,CAAC,GAAG,sPAAA,mLAUhD,IAAA,CAAA;AAED,MAAM,CAAC,IAAM,eAAe,GAAG,MAAM,CAAC,GAAG,wbAAwB,iQAWrD,EAAwD,kHAOnE,KAPW,UAAC,EAAa;QAAX,SAAS,eAAA;IAAe,OAAA,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;AAA7B,CAA6B,CAOnE,CAAA;AAED,MAAM,CAAC,IAAM,mBAAmB,GAAG,i1EA6FlC,CAAA;AAED,MAAM,CAAC,IAAM,uBAAuB,GAAG;IACrC,IAAM,iBAAiB,GAAG;QACxB,IAAM,aAAa,GAAG,QAAQ,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAA;QACpE,IAAI,aAAa,EAAE,CAAC;YAClB,aAAa,CAAC,MAAM,EAAE,CAAA;QACxB,CAAC;QAED,IAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QAC7C,KAAK,CAAC,EAAE,GAAG,qBAAqB,CAAA;QAChC,KAAK,CAAC,WAAW,GAAG,mBAAmB,CAAA;QACvC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;IAClC,CAAC,CAAA;IAED,iBAAiB,EAAE,CAAA;IAEnB,0BAA0B;IAC1B,OAAO;QACL,IAAM,aAAa,GAAG,QAAQ,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAA;QACpE,IAAI,aAAa,EAAE,CAAC;YAClB,aAAa,CAAC,MAAM,EAAE,CAAA;QACxB,CAAC;IACH,CAAC,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import ReactPlayer from 'react-player';
|
|
2
|
+
interface UseHLSSubtitlesProps {
|
|
3
|
+
videoPlayerRef: React.RefObject<ReactPlayer | null>;
|
|
4
|
+
isSubtitlesChecked: boolean;
|
|
5
|
+
setCurrentSubtitle: (subtitle: string) => void;
|
|
6
|
+
}
|
|
7
|
+
interface UseHLSSubtitlesReturn {
|
|
8
|
+
extractHLSSubtitleText: () => void;
|
|
9
|
+
setupHLSSubtitleTracking: () => void;
|
|
10
|
+
}
|
|
11
|
+
export declare const useHLSSubtitles: ({ videoPlayerRef, isSubtitlesChecked, setCurrentSubtitle, }: UseHLSSubtitlesProps) => UseHLSSubtitlesReturn;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef } from 'react';
|
|
2
|
+
export var useHLSSubtitles = function (_a) {
|
|
3
|
+
var videoPlayerRef = _a.videoPlayerRef, isSubtitlesChecked = _a.isSubtitlesChecked, setCurrentSubtitle = _a.setCurrentSubtitle;
|
|
4
|
+
var hlsSubtitleTrackRef = useRef(null);
|
|
5
|
+
var extractHLSSubtitleText = useCallback(function () {
|
|
6
|
+
var _a;
|
|
7
|
+
var videoElement = (_a = videoPlayerRef.current) === null || _a === void 0 ? void 0 : _a.getInternalPlayer();
|
|
8
|
+
if (!videoElement || !videoElement.textTracks)
|
|
9
|
+
return;
|
|
10
|
+
var _loop_1 = function (i) {
|
|
11
|
+
var track = videoElement.textTracks[i];
|
|
12
|
+
if (track.kind === 'subtitles' || track.kind === 'captions') {
|
|
13
|
+
hlsSubtitleTrackRef.current = track;
|
|
14
|
+
var handleCueChange = function () {
|
|
15
|
+
if (isSubtitlesChecked && track.activeCues && track.activeCues.length > 0) {
|
|
16
|
+
var currentCue = track.activeCues[0];
|
|
17
|
+
if (currentCue && currentCue.text) {
|
|
18
|
+
setCurrentSubtitle(currentCue.text);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
else if (isSubtitlesChecked) {
|
|
22
|
+
setCurrentSubtitle('');
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
track.removeEventListener('cuechange', handleCueChange);
|
|
26
|
+
track.addEventListener('cuechange', handleCueChange);
|
|
27
|
+
track.mode = isSubtitlesChecked ? 'showing' : 'hidden';
|
|
28
|
+
return "break";
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
for (var i = 0; i < videoElement.textTracks.length; i++) {
|
|
32
|
+
var state_1 = _loop_1(i);
|
|
33
|
+
if (state_1 === "break")
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
}, [isSubtitlesChecked, setCurrentSubtitle, videoPlayerRef]);
|
|
37
|
+
var setupHLSSubtitleTracking = useCallback(function () {
|
|
38
|
+
var _a;
|
|
39
|
+
var videoElement = (_a = videoPlayerRef.current) === null || _a === void 0 ? void 0 : _a.getInternalPlayer();
|
|
40
|
+
if (!videoElement)
|
|
41
|
+
return;
|
|
42
|
+
videoElement.classList.add('hls-video-player');
|
|
43
|
+
var checkTextTracks = function (attempt) {
|
|
44
|
+
if (attempt === void 0) { attempt = 0; }
|
|
45
|
+
var textTracks = videoElement.textTracks;
|
|
46
|
+
if (textTracks && textTracks.length > 0) {
|
|
47
|
+
extractHLSSubtitleText();
|
|
48
|
+
}
|
|
49
|
+
else if (attempt < 5) {
|
|
50
|
+
setTimeout(function () { return checkTextTracks(attempt + 1); }, 300 * (attempt + 1));
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
checkTextTracks();
|
|
54
|
+
videoElement.addEventListener('loadedmetadata', function () {
|
|
55
|
+
checkTextTracks();
|
|
56
|
+
});
|
|
57
|
+
}, [extractHLSSubtitleText, videoPlayerRef]);
|
|
58
|
+
useEffect(function () {
|
|
59
|
+
extractHLSSubtitleText();
|
|
60
|
+
}, [isSubtitlesChecked, extractHLSSubtitleText]);
|
|
61
|
+
useEffect(function () {
|
|
62
|
+
var _a;
|
|
63
|
+
var videoElement = (_a = videoPlayerRef.current) === null || _a === void 0 ? void 0 : _a.getInternalPlayer();
|
|
64
|
+
if (videoElement && videoElement.textTracks && videoElement.textTracks.length > 0) {
|
|
65
|
+
extractHLSSubtitleText();
|
|
66
|
+
}
|
|
67
|
+
}, [videoPlayerRef.current, extractHLSSubtitleText]);
|
|
68
|
+
return {
|
|
69
|
+
extractHLSSubtitleText: extractHLSSubtitleText,
|
|
70
|
+
setupHLSSubtitleTracking: setupHLSSubtitleTracking,
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
//# sourceMappingURL=useHlsSubtitles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useHlsSubtitles.js","sourceRoot":"","sources":["../../../src/components/VideoPlayer/useHlsSubtitles.ts"],"names":[],"mappings":"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"}
|
|
@@ -80,13 +80,19 @@ function usePlayerControls(_a) {
|
|
|
80
80
|
var duration = videoPlayerRef.current ? videoPlayerRef.current.getDuration() : 0;
|
|
81
81
|
var formatCurrentTime = FormatSecondsToTimeString(currentTime);
|
|
82
82
|
var formatDuration = FormatSecondsToTimeString(duration);
|
|
83
|
+
// Using previous method for old videos(we used to parse subtitles via link)
|
|
83
84
|
useEffect(function () {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
85
|
+
if (subtitleUrl) {
|
|
86
|
+
fetch(subtitleUrl)
|
|
87
|
+
.then(function (response) { return response.text(); })
|
|
88
|
+
.then(function (content) {
|
|
89
|
+
var parsedSubtitles = parseVTT(content);
|
|
90
|
+
setSubtitles(parsedSubtitles);
|
|
91
|
+
})
|
|
92
|
+
.catch(function (error) {
|
|
93
|
+
console.error('Error fetching external subtitles:', error);
|
|
94
|
+
});
|
|
95
|
+
}
|
|
90
96
|
}, [subtitleUrl]);
|
|
91
97
|
useEffect(function () {
|
|
92
98
|
var handleFullscreenChange = function () {
|
|
@@ -114,8 +120,9 @@ function usePlayerControls(_a) {
|
|
|
114
120
|
}
|
|
115
121
|
}, [videoPlayerRef]);
|
|
116
122
|
var progressHandler = useCallback(function (state) { return __awaiter(_this, void 0, void 0, function () {
|
|
117
|
-
var currentSubtitleEntry, i, sub, i, sub, currentTime_1, now;
|
|
118
|
-
|
|
123
|
+
var videoElement, hasHLSSubtitles, currentSubtitleEntry, i, sub, i, sub, currentTime_1, now;
|
|
124
|
+
var _a, _b;
|
|
125
|
+
return __generator(this, function (_c) {
|
|
119
126
|
if (count > 2) {
|
|
120
127
|
if (controlRef.current) {
|
|
121
128
|
controlRef.current.style.visibility = 'hidden';
|
|
@@ -127,43 +134,46 @@ function usePlayerControls(_a) {
|
|
|
127
134
|
isControlsActive) {
|
|
128
135
|
count += 1;
|
|
129
136
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
137
|
+
videoElement = (_a = videoPlayerRef.current) === null || _a === void 0 ? void 0 : _a.getInternalPlayer();
|
|
138
|
+
hasHLSSubtitles = ((_b = videoElement === null || videoElement === void 0 ? void 0 : videoElement.textTracks) === null || _b === void 0 ? void 0 : _b.length) > 0;
|
|
139
|
+
if (subtitles.length > 0 && !hasHLSSubtitles && isSubtitlesChecked) {
|
|
140
|
+
currentSubtitleEntry = void 0;
|
|
141
|
+
if (lastSubtitleIndexRef.current !== null) {
|
|
142
|
+
if (state.playedSeconds > lastPlaybackTimeRef.current) {
|
|
143
|
+
for (i = lastSubtitleIndexRef.current; i < subtitles.length; i++) {
|
|
144
|
+
sub = subtitles[i];
|
|
145
|
+
if (state.playedSeconds >= sub.start && state.playedSeconds <= sub.end) {
|
|
146
|
+
currentSubtitleEntry = sub;
|
|
147
|
+
lastSubtitleIndexRef.current = i;
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
139
150
|
}
|
|
140
151
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
break;
|
|
152
|
+
else {
|
|
153
|
+
for (i = lastSubtitleIndexRef.current; i >= 0; i--) {
|
|
154
|
+
sub = subtitles[i];
|
|
155
|
+
if (state.playedSeconds >= sub.start && state.playedSeconds <= sub.end) {
|
|
156
|
+
currentSubtitleEntry = sub;
|
|
157
|
+
lastSubtitleIndexRef.current = i;
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
150
160
|
}
|
|
151
161
|
}
|
|
152
162
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
163
|
+
if (!currentSubtitleEntry) {
|
|
164
|
+
currentSubtitleEntry = subtitles.find(function (sub) { return state.playedSeconds >= sub.start && state.playedSeconds <= sub.end; });
|
|
165
|
+
if (currentSubtitleEntry) {
|
|
166
|
+
lastSubtitleIndexRef.current = subtitles.indexOf(currentSubtitleEntry);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
lastPlaybackTimeRef.current = state.playedSeconds;
|
|
156
170
|
if (currentSubtitleEntry) {
|
|
157
|
-
|
|
171
|
+
setCurrentSubtitle(currentSubtitleEntry.text);
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
setCurrentSubtitle(''); // Clear subtitle if none should be displayed
|
|
175
|
+
lastSubtitleIndexRef.current = null;
|
|
158
176
|
}
|
|
159
|
-
}
|
|
160
|
-
lastPlaybackTimeRef.current = state.playedSeconds;
|
|
161
|
-
if (currentSubtitleEntry) {
|
|
162
|
-
setCurrentSubtitle(currentSubtitleEntry.text);
|
|
163
|
-
}
|
|
164
|
-
else {
|
|
165
|
-
setCurrentSubtitle(''); // Clear subtitle if none should be displayed
|
|
166
|
-
lastSubtitleIndexRef.current = null;
|
|
167
177
|
}
|
|
168
178
|
if (!seeking) {
|
|
169
179
|
setVideoState(function (prev) { return (__assign(__assign({}, prev), state)); });
|
|
@@ -177,7 +187,7 @@ function usePlayerControls(_a) {
|
|
|
177
187
|
}
|
|
178
188
|
return [2 /*return*/];
|
|
179
189
|
});
|
|
180
|
-
}); }, [seeking, handleTrackProgress, isControlsActive, subtitles]);
|
|
190
|
+
}); }, [seeking, handleTrackProgress, isControlsActive, subtitles, isSubtitlesChecked]);
|
|
181
191
|
var seekHandler = function (e) {
|
|
182
192
|
var v = parseFloat(e.target.value) / 100;
|
|
183
193
|
setVideoState(function (prev) { return (__assign(__assign({}, prev), { played: v })); });
|
|
@@ -185,7 +195,7 @@ function usePlayerControls(_a) {
|
|
|
185
195
|
videoPlayerRef.current.seekTo(v);
|
|
186
196
|
}
|
|
187
197
|
};
|
|
188
|
-
var seekMouseUpHandler = function (
|
|
198
|
+
var seekMouseUpHandler = function () {
|
|
189
199
|
setVideoState(function (prev) { return (__assign(__assign({}, prev), { seeking: false })); });
|
|
190
200
|
if (videoPlayerRef.current) {
|
|
191
201
|
videoPlayerRef.current.seekTo(videoState.played);
|
|
@@ -204,7 +214,7 @@ function usePlayerControls(_a) {
|
|
|
204
214
|
setVideoState(function (prev) { return (__assign(__assign({}, prev), { muted: true, prevVolume: volume, volume: 0 })); });
|
|
205
215
|
}
|
|
206
216
|
};
|
|
207
|
-
var onSeekMouseDownHandler = function (
|
|
217
|
+
var onSeekMouseDownHandler = function () {
|
|
208
218
|
setVideoState(function (prev) { return (__assign(__assign({}, prev), { seeking: true })); });
|
|
209
219
|
};
|
|
210
220
|
var mouseMoveHandler = function () {
|
|
@@ -323,6 +333,7 @@ function usePlayerControls(_a) {
|
|
|
323
333
|
isFullscreen: isFullscreen,
|
|
324
334
|
isControlsActive: isControlsActive,
|
|
325
335
|
currentSubtitle: currentSubtitle,
|
|
336
|
+
setCurrentSubtitle: setCurrentSubtitle,
|
|
326
337
|
playing: isPlaying,
|
|
327
338
|
};
|
|
328
339
|
}
|