@zezosoft/react-player 0.0.8 → 0.0.10

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.
Files changed (45) hide show
  1. package/README.md +536 -146
  2. package/dist/VideoPlayer/VideoPlayer.d.ts +1 -0
  3. package/dist/VideoPlayer/components/AdOverlay.d.ts +10 -0
  4. package/dist/VideoPlayer/components/ErrorOverlay.d.ts +8 -0
  5. package/dist/VideoPlayer/components/Overlay.d.ts +4 -0
  6. package/dist/VideoPlayer/components/SubtitleOverlay.d.ts +7 -0
  7. package/dist/VideoPlayer/components/controls/BottomControls.d.ts +5 -0
  8. package/dist/VideoPlayer/components/controls/ControlsHeader.d.ts +5 -0
  9. package/dist/VideoPlayer/components/controls/MiddleControls.d.ts +3 -0
  10. package/dist/VideoPlayer/components/controls/VideoPlayerControls.d.ts +4 -0
  11. package/dist/VideoPlayer/components/controls/index.d.ts +4 -0
  12. package/dist/VideoPlayer/components/time-line/TimeLine.d.ts +21 -0
  13. package/dist/VideoPlayer/components/time-line/components/HoverTimeWithPreview.d.ts +16 -0
  14. package/dist/VideoPlayer/components/time-line/components/Thumb.d.ts +9 -0
  15. package/dist/VideoPlayer/components/time-line/components/TimeCodeItem.d.ts +21 -0
  16. package/dist/VideoPlayer/components/time-line/components/TimeCodes.d.ts +15 -0
  17. package/dist/VideoPlayer/components/time-line/utils/getEndTimeByIndex.d.ts +2 -0
  18. package/dist/VideoPlayer/components/time-line/utils/getHoverTimePosition.d.ts +3 -0
  19. package/dist/VideoPlayer/components/time-line/utils/getPositionPercent.d.ts +1 -0
  20. package/dist/VideoPlayer/components/time-line/utils/getTimeScale.d.ts +1 -0
  21. package/dist/VideoPlayer/components/time-line/utils/isInRange.d.ts +1 -0
  22. package/dist/VideoPlayer/components/time-line/utils/positionToMs.d.ts +1 -0
  23. package/dist/VideoPlayer/components/time-line/utils/secondsToTime.d.ts +6 -0
  24. package/dist/VideoPlayer/components/time-line/utils/timeToTimeString.d.ts +1 -0
  25. package/dist/VideoPlayer/constants.d.ts +3 -0
  26. package/dist/VideoPlayer/hooks/index.d.ts +4 -0
  27. package/dist/VideoPlayer/hooks/useAdManager.d.ts +8 -0
  28. package/dist/VideoPlayer/hooks/useNetworkSpeed.d.ts +7 -0
  29. package/dist/VideoPlayer/hooks/usePrimaryVideoLifecycle.d.ts +17 -0
  30. package/dist/VideoPlayer/hooks/useVideoError.d.ts +7 -0
  31. package/dist/VideoPlayer/hooks/useVideoSource.d.ts +1 -14
  32. package/dist/VideoPlayer/hooks/useVideoTracking.d.ts +2 -2
  33. package/dist/VideoPlayer/types/AdTypes.d.ts +33 -0
  34. package/dist/VideoPlayer/types/VideoPlayerTypes.d.ts +34 -10
  35. package/dist/VideoPlayer/utils/index.d.ts +1 -1
  36. package/dist/VideoPlayer/utils/qualityManager.d.ts +6 -32
  37. package/dist/components/ui/FullScreenToggle.d.ts +1 -1
  38. package/dist/components/ui/PiPictureInPictureToggle.d.ts +1 -1
  39. package/dist/index.d.ts +1 -1
  40. package/dist/index.js +2487 -493
  41. package/dist/store/slices/adsSlice.d.ts +24 -0
  42. package/dist/store/slices/errorSlice.d.ts +5 -0
  43. package/dist/store/slices/index.d.ts +2 -0
  44. package/dist/store/types/StoreTypes.d.ts +41 -9
  45. package/package.json +12 -11
@@ -2,5 +2,6 @@ import React from "react";
2
2
  import { VideoPlayerProps } from "./types/VideoPlayerTypes";
3
3
  import "../index.css";
4
4
  import "./styles/subtitles.css";
5
+ import "./styles/ads.css";
5
6
  declare const VideoPlayer: React.FC<VideoPlayerProps>;
6
7
  export default VideoPlayer;
@@ -0,0 +1,10 @@
1
+ import React from "react";
2
+ import { AdBreak } from "../types/AdTypes";
3
+ import { IPlayerConfig } from "../../types";
4
+ interface AdOverlayProps {
5
+ adBreak: AdBreak;
6
+ onSkip?: () => void;
7
+ config?: IPlayerConfig;
8
+ }
9
+ declare const AdOverlay: React.FC<AdOverlayProps>;
10
+ export default AdOverlay;
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import { VideoError } from "../../store/types/StoreTypes";
3
+ interface ErrorOverlayProps {
4
+ error: VideoError;
5
+ onRetry: () => void;
6
+ }
7
+ declare const ErrorOverlay: React.FC<ErrorOverlayProps>;
8
+ export default ErrorOverlay;
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import { IPlayerConfig } from "../../types";
3
+ declare const Overlay: React.FC<IPlayerConfig>;
4
+ export default Overlay;
@@ -0,0 +1,7 @@
1
+ import React from "react";
2
+ import { SubtitleStyleConfig } from "../hooks/useSubtitleStyling";
3
+ interface SubtitleOverlayProps {
4
+ styleConfig?: SubtitleStyleConfig;
5
+ }
6
+ declare const SubtitleOverlay: React.FC<SubtitleOverlayProps>;
7
+ export default SubtitleOverlay;
@@ -0,0 +1,5 @@
1
+ import React from "react";
2
+ import "../time-line/time-line.css";
3
+ import { IControlsBottomProps } from "../../../types";
4
+ declare const BottomControls: React.FC<IControlsBottomProps>;
5
+ export default BottomControls;
@@ -0,0 +1,5 @@
1
+ import * as React from "react";
2
+ import { IControlsHeaderProps } from "../../../types";
3
+ import "../styles/video-controls.css";
4
+ declare const ControlsHeader: React.FC<IControlsHeaderProps>;
5
+ export default ControlsHeader;
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ declare const MiddleControls: React.FC;
3
+ export default MiddleControls;
@@ -0,0 +1,4 @@
1
+ import * as React from "react";
2
+ import { IPlayerConfig } from "../../../types";
3
+ declare const VideoPlayerControls: React.FC<IPlayerConfig>;
4
+ export default VideoPlayerControls;
@@ -0,0 +1,4 @@
1
+ export { default as BottomControls } from "./BottomControls";
2
+ export { default as ControlsHeader } from "./ControlsHeader";
3
+ export { default as MiddleControls } from "./MiddleControls";
4
+ export { default as VideoPlayerControls } from "./VideoPlayerControls";
@@ -0,0 +1,21 @@
1
+ import React from "react";
2
+ import "./time-line.css";
3
+ export interface TimeCode {
4
+ fromMs: number;
5
+ description: string;
6
+ }
7
+ export interface TimeLineProps {
8
+ max: number;
9
+ currentTime: number;
10
+ bufferTime?: number;
11
+ offset?: number;
12
+ timeCodes?: TimeCode[];
13
+ hideThumbTooltip?: boolean;
14
+ limitTimeTooltipBySides?: boolean;
15
+ secondsPrefix?: string;
16
+ minutesPrefix?: string;
17
+ onChange: (time: number, offsetTime: number) => void;
18
+ getPreviewScreenUrl?: (hoverTimeValue: number) => string;
19
+ trackColor?: string;
20
+ }
21
+ export declare const VideoSeekSlider: React.FC<TimeLineProps>;
@@ -0,0 +1,16 @@
1
+ import React from "react";
2
+ interface HoverTimeWithPreviewProps {
3
+ max: number;
4
+ hoverTimeValue: number;
5
+ trackWidth: number;
6
+ seekHoverPosition: number;
7
+ offset: number;
8
+ isThumbActive: boolean;
9
+ limitTimeTooltipBySides: boolean;
10
+ label: string;
11
+ secondsPrefix?: string;
12
+ minutesPrefix?: string;
13
+ getPreviewScreenUrl?: (hoverTimeValue: number) => string;
14
+ }
15
+ export declare const HoverTimeWithPreview: React.FC<HoverTimeWithPreviewProps>;
16
+ export {};
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ interface ThumbProps {
3
+ max: number;
4
+ currentTime: number;
5
+ isThumbActive: boolean;
6
+ trackColor?: string;
7
+ }
8
+ export declare const Thumb: React.FC<ThumbProps>;
9
+ export {};
@@ -0,0 +1,21 @@
1
+ import React from "react";
2
+ export interface TimeCode {
3
+ fromMs: number;
4
+ description: string;
5
+ }
6
+ export interface TimeCodeItemProps {
7
+ currentTime: number;
8
+ seekHoverTime: number;
9
+ bufferTime: number;
10
+ startTime: number;
11
+ endTime: number;
12
+ maxTime: number;
13
+ label?: string;
14
+ isTimePassed?: boolean;
15
+ isBufferPassed?: boolean;
16
+ isHoverPassed?: boolean;
17
+ onHover?: (label: string) => void;
18
+ withGap?: boolean;
19
+ trackColor?: string;
20
+ }
21
+ export declare const TimeCodeItem: React.FC<TimeCodeItemProps>;
@@ -0,0 +1,15 @@
1
+ import React from "react";
2
+ import { TimeCode } from "./TimeCodeItem";
3
+ export interface TimeCodesProps {
4
+ max: number;
5
+ currentTime: number;
6
+ bufferTime: number;
7
+ seekHoverPosition: number;
8
+ timeCodes: TimeCode[] | undefined;
9
+ trackWidth: number;
10
+ mobileSeeking: boolean;
11
+ label: string;
12
+ setLabel: React.Dispatch<React.SetStateAction<string>>;
13
+ trackColor?: string;
14
+ }
15
+ export declare const TimeCodes: React.FC<TimeCodesProps>;
@@ -0,0 +1,2 @@
1
+ import { TimeCode } from "../components/TimeCodeItem";
2
+ export declare const getEndTimeByIndex: (timeCodes: TimeCode[], index: number, max: number) => number;
@@ -0,0 +1,3 @@
1
+ export declare function getHoverTimePosition(seekHoverPosition: number, hoverTimeElement: HTMLDivElement | null, trackWidth: number, limitTimeTooltipBySides: boolean): {
2
+ transform: string;
3
+ };
@@ -0,0 +1 @@
1
+ export declare function getPositionPercent(max: number, current: number): number;
@@ -0,0 +1 @@
1
+ export declare function getTimeScale(currentTime: number, startTime: number, endTime: number, isTimePassed: boolean): number;
@@ -0,0 +1 @@
1
+ export declare const isInRange: (time: number, start: number, end: number) => boolean;
@@ -0,0 +1 @@
1
+ export declare function positionToMs(max: number, position: number, trackWidth: number): number;
@@ -0,0 +1,6 @@
1
+ export interface Time {
2
+ hh: string;
3
+ mm: string;
4
+ ss: string;
5
+ }
6
+ export declare function millisecondsToTime(ms: number, offset?: number): Time;
@@ -0,0 +1 @@
1
+ export declare function timeToTimeString(max: number, seekHoverTime: number, offset?: number, minutesPrefix?: string, secondsPrefix?: string): string;
@@ -0,0 +1,3 @@
1
+ export declare const CONTROL_INTERACTION_EVENT = "video-controls:interaction";
2
+ export declare const CONTROLS_HIDE_DELAY_MS = 3000;
3
+ export declare const SKIP_INTERVAL_SECONDS = 10;
@@ -5,3 +5,7 @@ export { useVideoTracking } from "./useVideoTracking";
5
5
  export { useIntroSkip } from "./useIntroSkip";
6
6
  export { useEpisodes } from "./useEpisodes";
7
7
  export { useVideoEvents } from "./useVideoEvents";
8
+ export { useAdManager } from "./useAdManager";
9
+ export { usePrimaryVideoLifecycle } from "./usePrimaryVideoLifecycle";
10
+ export { useVideoError } from "./useVideoError";
11
+ export { useNetworkSpeed } from "./useNetworkSpeed";
@@ -0,0 +1,8 @@
1
+ import { AdConfig, AdBreak, AdType } from "../types/AdTypes";
2
+ export declare const useAdManager: (adConfig?: AdConfig) => {
3
+ isAdPlaying: boolean;
4
+ currentAd: AdBreak | null;
5
+ adType: AdType | null;
6
+ skipAd: () => void;
7
+ endAd: () => void;
8
+ };
@@ -0,0 +1,7 @@
1
+ interface NetworkSpeedInfo {
2
+ speed: number;
3
+ quality: "slow" | "medium" | "fast" | "unknown";
4
+ message: string;
5
+ }
6
+ export declare const useNetworkSpeed: () => NetworkSpeedInfo | null;
7
+ export {};
@@ -0,0 +1,17 @@
1
+ import { VideoState } from "../../store/types/StoreTypes";
2
+ interface UsePrimaryVideoLifecycleParams {
3
+ hasPreRoll: boolean;
4
+ trackSrc: string;
5
+ }
6
+ interface PrimaryVideoLifecycleResult {
7
+ registerVideoRef: (node: HTMLVideoElement | null) => void;
8
+ videoRef: HTMLVideoElement | null;
9
+ isAdPlaying: boolean;
10
+ currentAd: VideoState["currentAd"];
11
+ adType: VideoState["adType"];
12
+ initialAdFinished: boolean;
13
+ shouldCoverMainVideo: boolean;
14
+ shouldShowPlaceholder: boolean;
15
+ }
16
+ export declare const usePrimaryVideoLifecycle: ({ hasPreRoll, trackSrc, }: UsePrimaryVideoLifecycleParams) => PrimaryVideoLifecycleResult;
17
+ export {};
@@ -0,0 +1,7 @@
1
+ import { VideoError } from "../../store/types/StoreTypes";
2
+ export declare const useVideoError: () => {
3
+ error: VideoError | null;
4
+ handleVideoError: (e: React.SyntheticEvent<HTMLVideoElement, Event>) => void;
5
+ clearError: () => void;
6
+ retry: () => void;
7
+ };
@@ -1,14 +1 @@
1
- /**
2
- * Video Source Hook
3
- *
4
- * Manages video source loading and streaming technology detection
5
- * Supports HLS.js, DASH.js, and native HTML5 video
6
- *
7
- * Features:
8
- * - Automatic stream type detection
9
- * - HLS.js fallback for older browsers
10
- * - DASH.js support with proper initialization
11
- * - Quality level extraction for all stream types
12
- * - Error handling and cleanup
13
- */
14
- export declare const useVideoSource: (trackSrc: string, type?: "hls" | "mp4" | "dash" | "other" | "youtube" | undefined) => void;
1
+ export declare const useVideoSource: (trackSrc: string, type?: "hls" | "dash" | "mp4" | "other" | "youtube" | undefined) => void;
@@ -1,2 +1,2 @@
1
- import { VideoPlayerProps } from "../types/VideoPlayerTypes";
2
- export declare const useVideoTracking: (tracking?: VideoPlayerProps["tracking"], episodeList?: VideoPlayerProps["episodeList"], currentEpisodeIndex?: number, onClose?: () => void) => void;
1
+ import { FeatureProps } from "../types/VideoPlayerTypes";
2
+ export declare const useVideoTracking: (tracking?: FeatureProps["tracking"], episodeList?: FeatureProps["episodeList"], currentEpisodeIndex?: number, onClose?: () => void) => void;
@@ -0,0 +1,33 @@
1
+ export type AdType = "pre-roll" | "mid-roll" | "post-roll" | "overlay";
2
+ export interface AdBreak {
3
+ id: string;
4
+ type: AdType;
5
+ time: number;
6
+ adUrl: string;
7
+ skipable?: boolean;
8
+ skipAfter?: number;
9
+ duration?: number;
10
+ sponsoredUrl?: string;
11
+ }
12
+ export interface AdConfig {
13
+ preRoll?: AdBreak;
14
+ midRoll?: AdBreak[];
15
+ postRoll?: AdBreak;
16
+ overlay?: {
17
+ imageUrl: string;
18
+ clickUrl?: string;
19
+ showDuration: number;
20
+ position?: "top-left" | "top-right" | "bottom-left" | "bottom-right";
21
+ };
22
+ smartPlacement?: {
23
+ enabled: boolean;
24
+ minVideoDuration?: number;
25
+ minGapBetweenAds?: number;
26
+ avoidNearEnd?: number;
27
+ preferNaturalBreaks?: boolean;
28
+ };
29
+ onAdStart?: (adBreak: AdBreak) => void;
30
+ onAdEnd?: (adBreak: AdBreak) => void;
31
+ onAdSkip?: (adBreak: AdBreak) => void;
32
+ onAdError?: (adBreak: AdBreak, error: Error) => void;
33
+ }
@@ -1,20 +1,38 @@
1
- import { TimeCode } from "../_components/TimeLine/TimeLine";
1
+ import { TimeCode } from "../components/time-line/TimeLine";
2
2
  import { IOnWatchTimeUpdated } from "../../types";
3
3
  import { SubtitleStyleConfig } from "../hooks/useSubtitleStyling";
4
- export interface VideoPlayerProps {
5
- trackSrc: string;
4
+ import { AdConfig } from "./AdTypes";
5
+ export interface WatchHistoryData {
6
+ currentTime: number;
7
+ duration: number;
8
+ progress: number;
9
+ isCompleted: boolean;
10
+ watchedAt: number;
11
+ }
12
+ export interface VideoProps {
13
+ src: string;
14
+ title?: string;
15
+ poster?: string;
16
+ type?: "hls" | "dash" | "mp4" | "other" | "youtube" | undefined;
17
+ isTrailer?: boolean;
6
18
  showControls?: boolean;
7
19
  isMute?: boolean;
8
- onEnded?: (e: React.SyntheticEvent<HTMLVideoElement>) => void;
9
- onError?: (e?: React.SyntheticEvent<HTMLVideoElement, Event>) => void;
10
- trackTitle?: string;
11
- trackPoster?: string;
12
- isTrailer?: boolean;
20
+ startFrom?: number;
21
+ }
22
+ export interface StyleProps {
13
23
  className?: string;
14
- type?: "hls" | "mp4" | "other" | "youtube" | undefined;
15
24
  width?: string;
16
25
  height?: string;
26
+ subtitleStyle?: SubtitleStyleConfig;
27
+ }
28
+ export interface EventProps {
29
+ onEnded?: (e: React.SyntheticEvent<HTMLVideoElement>) => void;
30
+ onError?: (e?: React.SyntheticEvent<HTMLVideoElement, Event>) => void;
17
31
  onClose?: () => void;
32
+ /** Called when player closes with watch progress data for history tracking */
33
+ onWatchHistoryUpdate?: (data: WatchHistoryData) => void;
34
+ }
35
+ export interface FeatureProps {
18
36
  timeCodes?: TimeCode[];
19
37
  getPreviewScreenUrl?: (hoverTimeValue: number) => string;
20
38
  tracking?: {
@@ -40,7 +58,13 @@ export interface VideoPlayerProps {
40
58
  showAtTime?: number;
41
59
  showAtEnd?: boolean;
42
60
  };
43
- subtitleStyle?: SubtitleStyleConfig;
61
+ ads?: AdConfig;
62
+ }
63
+ export interface VideoPlayerProps {
64
+ video: VideoProps;
65
+ style?: StyleProps;
66
+ events?: EventProps;
67
+ features?: FeatureProps;
44
68
  }
45
69
  export type { SubtitleTrack, Episode } from "../../store/types/StoreTypes";
46
70
  export interface IntroConfig {
@@ -27,4 +27,4 @@ export declare const millisecondsToSeconds: (milliseconds: number) => number;
27
27
  * @returns
28
28
  */
29
29
  export declare const getExtensionFromUrl: (url: string) => string | undefined;
30
- export { QualityManager } from './qualityManager';
30
+ export { QualityManager } from "./qualityManager";
@@ -1,16 +1,6 @@
1
- import Hls from 'hls.js';
2
- import * as dashjs from 'dashjs';
3
- export type StreamType = 'hls' | 'dash' | 'mp4' | 'other';
4
- /**
5
- * Video Quality Management Utility
6
- * Provides a unified interface for quality switching across HLS.js and DASH.js
7
- *
8
- * This utility follows OTT-grade best practices for smooth quality switching:
9
- * - Immediate quality changes without playback interruption
10
- * - Proper ABR (Adaptive Bitrate) control
11
- * - Error handling and fallback mechanisms
12
- * - Support for both manual and auto quality modes
13
- */
1
+ import Hls from "hls.js";
2
+ import * as dashjs from "dashjs";
3
+ import { StreamType } from "../../store/types/StoreTypes";
14
4
  export declare class QualityManager {
15
5
  /**
16
6
  * Set video quality for HLS streams with OTT-grade smoothness
@@ -26,21 +16,12 @@ export declare class QualityManager {
26
16
  */
27
17
  static setHlsQuality(hlsInstance: Hls | null | undefined, levelIndex: number): void;
28
18
  /**
29
- * Set video quality for DASH streams with OTT-grade smoothness
30
- *
31
- * Best practices implemented:
32
- * 1. Use autoSwitchBitrate settings to control ABR behavior
33
- * 2. Use setRepresentationForTypeById for immediate quality change
34
- * 3. Handle representation discovery and selection properly
35
- * 4. Provide visual feedback through console logs
36
- *
19
+
37
20
  * @param dashInstance DASH.js instance
38
21
  * @param qualityId Quality level ID (undefined/null for auto)
39
22
  */
40
- static setDashQuality(dashInstance: dashjs.MediaPlayerClass, qualityId: string | null | undefined): void;
23
+ static setDashQuality(dashInstance: dashjs.MediaPlayerClass | undefined | null, qualityIndex: number | null | undefined): void;
41
24
  /**
42
- * Get available quality levels for HLS with proper error handling
43
- *
44
25
  * @param hlsInstance HLS.js instance
45
26
  * @returns Array of quality level objects
46
27
  */
@@ -50,8 +31,6 @@ export declare class QualityManager {
50
31
  originalIndex: number;
51
32
  }>;
52
33
  /**
53
- * Get available quality levels for DASH with proper error handling
54
- *
55
34
  * @param dashInstance DASH.js instance
56
35
  * @returns Array of quality level objects
57
36
  */
@@ -61,16 +40,11 @@ export declare class QualityManager {
61
40
  id: string;
62
41
  }>;
63
42
  /**
64
- * Unified quality setting function that works with both HLS and DASH
65
- * Provides a single interface for quality management across streaming technologies
66
- *
67
43
  * @param streamType Type of stream (hls, dash, etc.)
68
44
  * @param qualityIdentifier Quality level identifier (index for HLS, ID for DASH)
69
45
  */
70
- static setQuality(streamType: StreamType, qualityIdentifier: string | number): void;
46
+ static setQuality(streamType: StreamType, qualityIdentifier: string): void;
71
47
  /**
72
- * Enable auto quality switching for the current stream type
73
- *
74
48
  * @param streamType Type of stream (hls, dash, etc.)
75
49
  */
76
50
  static setAutoQuality(streamType: StreamType): void;
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import "../../VideoPlayer/_components/styles/video-controls.css";
2
+ import "../../VideoPlayer/components/styles/video-controls.css";
3
3
  interface FullScreenToggleProps {
4
4
  isFullScreen: boolean;
5
5
  onClick?: () => void;
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import "../../VideoPlayer/_components/styles/video-controls.css";
2
+ import "../../VideoPlayer/components/styles/video-controls.css";
3
3
  interface PiPictureInPictureToggleProps {
4
4
  onClick?: () => void;
5
5
  className?: string;
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import "./index.css";
2
2
  export { default as VideoPlayer } from "./VideoPlayer/VideoPlayer";
3
3
  export { useVideoStore } from "./store/VideoState";
4
- export type { VideoPlayerProps, Episode, SubtitleTrack, IntroConfig, NextEpisodeConfig, } from "./VideoPlayer/types/VideoPlayerTypes";
4
+ export type { VideoPlayerProps, Episode, SubtitleTrack, IntroConfig, NextEpisodeConfig, WatchHistoryData, } from "./VideoPlayer/types/VideoPlayerTypes";
5
5
  export type { SubtitleStyleConfig } from "./VideoPlayer/hooks/useSubtitleStyling";
6
6
  export type { VideoState, VideoRefsState, VideoPlaybackState, VideoTimingState, VideoControlsState, VideoQualityState, SubtitlesState, EpisodesState, IntroState, } from "./store/types/StoreTypes";