@therealtinhtute/baroiplayer 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (244) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +384 -0
  3. package/dist/context/media.js +2 -0
  4. package/dist/context/media.js.map +1 -0
  5. package/dist/context/media.mjs +15 -0
  6. package/dist/context/media.mjs.map +1 -0
  7. package/dist/context/store.js +2 -0
  8. package/dist/context/store.js.map +1 -0
  9. package/dist/context/store.mjs +5 -0
  10. package/dist/context/store.mjs.map +1 -0
  11. package/dist/context-BMteAJDN.js +1140 -0
  12. package/dist/context-BMteAJDN.js.map +1 -0
  13. package/dist/context-DCJ_scmO.cjs +23 -0
  14. package/dist/context-DCJ_scmO.cjs.map +1 -0
  15. package/dist/core-events-B5W_j8yU.js +480 -0
  16. package/dist/core-events-B5W_j8yU.js.map +1 -0
  17. package/dist/core-events-CN0-Vhhq.cjs +2 -0
  18. package/dist/core-events-CN0-Vhhq.cjs.map +1 -0
  19. package/dist/core-plugins-Bq9KLany.js +696 -0
  20. package/dist/core-plugins-Bq9KLany.js.map +1 -0
  21. package/dist/core-plugins-CPDSHMiQ.cjs +2 -0
  22. package/dist/core-plugins-CPDSHMiQ.cjs.map +1 -0
  23. package/dist/core.js +37 -0
  24. package/dist/core.js.map +1 -0
  25. package/dist/core.mjs +1217 -0
  26. package/dist/core.mjs.map +1 -0
  27. package/dist/enhanced-components-DHv0MFvG.js +1073 -0
  28. package/dist/enhanced-components-DHv0MFvG.js.map +1 -0
  29. package/dist/enhanced-components-DTIObgB7.cjs +2 -0
  30. package/dist/enhanced-components-DTIObgB7.cjs.map +1 -0
  31. package/dist/hooks-C_r8wexn.cjs +4 -0
  32. package/dist/hooks-C_r8wexn.cjs.map +1 -0
  33. package/dist/hooks-Da2wVXlF.js +1630 -0
  34. package/dist/hooks-Da2wVXlF.js.map +1 -0
  35. package/dist/index.css +1 -0
  36. package/dist/index.js +112 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/index.mjs +6126 -0
  39. package/dist/index.mjs.map +1 -0
  40. package/dist/minimal-components-DSq5sQpy.js +2002 -0
  41. package/dist/minimal-components-DSq5sQpy.js.map +1 -0
  42. package/dist/minimal-components-DflWiihN.cjs +2 -0
  43. package/dist/minimal-components-DflWiihN.cjs.map +1 -0
  44. package/dist/minimal-components.css +1 -0
  45. package/dist/mona-loading.gif +0 -0
  46. package/dist/performance-monitor-CUW6f5ll.cjs +2 -0
  47. package/dist/performance-monitor-CUW6f5ll.cjs.map +1 -0
  48. package/dist/performance-monitor-rMW1RgV3.js +302 -0
  49. package/dist/performance-monitor-rMW1RgV3.js.map +1 -0
  50. package/dist/utils-BnscpYYd.js +2798 -0
  51. package/dist/utils-BnscpYYd.js.map +1 -0
  52. package/dist/utils-D_czS_0K.cjs +9 -0
  53. package/dist/utils-D_czS_0K.cjs.map +1 -0
  54. package/dist/utils.js +2 -0
  55. package/dist/utils.js.map +1 -0
  56. package/dist/utils.mjs +7 -0
  57. package/dist/utils.mjs.map +1 -0
  58. package/package.json +114 -0
  59. package/src/adapters/videojs-adapter.tsx +470 -0
  60. package/src/assets/mona-loading.gif +0 -0
  61. package/src/components/AnimateLoading.tsx +115 -0
  62. package/src/components/LoadingState.tsx +248 -0
  63. package/src/components/accessibility/keyboard-help-overlay.tsx +213 -0
  64. package/src/components/audio-player.tsx +85 -0
  65. package/src/components/basic/index.ts +37 -0
  66. package/src/components/enhanced/advanced-features.tsx +316 -0
  67. package/src/components/enhanced/debug-panel.tsx +422 -0
  68. package/src/components/enhanced/enhanced-controls.tsx +600 -0
  69. package/src/components/enhanced/enhanced-media-player.tsx +509 -0
  70. package/src/components/enhanced/error-handling.tsx +345 -0
  71. package/src/components/enhanced/index.ts +39 -0
  72. package/src/components/enhanced/media-player-enhanced.tsx +349 -0
  73. package/src/components/examples/basic-video-player.tsx +55 -0
  74. package/src/components/examples/custom-controls-example.tsx +63 -0
  75. package/src/components/examples/enhanced-controls-example.tsx +114 -0
  76. package/src/components/examples/enhanced-media-player-example.tsx +293 -0
  77. package/src/components/examples/loading-states-demo.tsx +142 -0
  78. package/src/components/examples/react-19-demo.tsx +381 -0
  79. package/src/components/examples/volume-orientation-demo.tsx +114 -0
  80. package/src/components/icon-demo.tsx +209 -0
  81. package/src/components/icons/index.tsx +166 -0
  82. package/src/components/icons/svg-icons/ArrowLeftIcon.tsx +18 -0
  83. package/src/components/icons/svg-icons/ArrowRightIcon.tsx +18 -0
  84. package/src/components/icons/svg-icons/AudioIcon.tsx +22 -0
  85. package/src/components/icons/svg-icons/BackwardIcon.tsx +12 -0
  86. package/src/components/icons/svg-icons/CameraIcon.tsx +19 -0
  87. package/src/components/icons/svg-icons/CheckIcon.tsx +19 -0
  88. package/src/components/icons/svg-icons/EnablePiPIcon.tsx +17 -0
  89. package/src/components/icons/svg-icons/ForwardIcon.tsx +12 -0
  90. package/src/components/icons/svg-icons/FullscreenEnterIcon.tsx +23 -0
  91. package/src/components/icons/svg-icons/FullscreenExitIcon.tsx +23 -0
  92. package/src/components/icons/svg-icons/LoadingIcon.tsx +32 -0
  93. package/src/components/icons/svg-icons/PauseIcon.tsx +23 -0
  94. package/src/components/icons/svg-icons/PlayIcon.tsx +21 -0
  95. package/src/components/icons/svg-icons/PlaybackSpeedIcon.tsx +23 -0
  96. package/src/components/icons/svg-icons/QualityIcon.tsx +21 -0
  97. package/src/components/icons/svg-icons/SettingsIcon.tsx +12 -0
  98. package/src/components/icons/svg-icons/SliderIcon.tsx +21 -0
  99. package/src/components/icons/svg-icons/SubtitleIcon.tsx +21 -0
  100. package/src/components/icons/svg-icons/SubtitleOffIcon.tsx +25 -0
  101. package/src/components/icons/svg-icons/UnPiPIcon.tsx +17 -0
  102. package/src/components/icons/svg-icons/VolumeMutedIcon.tsx +16 -0
  103. package/src/components/icons/svg-icons/VolumeOneIcon.tsx +22 -0
  104. package/src/components/icons/svg-icons/VolumeThreeIcon.tsx +16 -0
  105. package/src/components/icons/svg-icons/VolumeTwoIcon.tsx +16 -0
  106. package/src/components/legacy.tsx +93 -0
  107. package/src/components/media-metadata-display.tsx +100 -0
  108. package/src/components/media-player-audio.tsx +39 -0
  109. package/src/components/media-player-controls.tsx +226 -0
  110. package/src/components/media-player-error.tsx +163 -0
  111. package/src/components/media-player-fullscreen.tsx +109 -0
  112. package/src/components/media-player-hls.tsx +111 -0
  113. package/src/components/media-player-loading.tsx +76 -0
  114. package/src/components/media-player-play.tsx +75 -0
  115. package/src/components/media-player-root.tsx +340 -0
  116. package/src/components/media-player-seek.tsx +168 -0
  117. package/src/components/media-player-time.tsx +99 -0
  118. package/src/components/media-player-tooltip.tsx +58 -0
  119. package/src/components/media-player-video.tsx +39 -0
  120. package/src/components/media-player-volume.tsx +155 -0
  121. package/src/components/media-player.tsx +257 -0
  122. package/src/components/media-suspense.tsx +362 -0
  123. package/src/components/player-settings-form.tsx +163 -0
  124. package/src/components/react-player-wrapper.tsx +651 -0
  125. package/src/components/simple-video-player.tsx +60 -0
  126. package/src/components/ui/enhanced-seek-bar.tsx +235 -0
  127. package/src/components/ui/fullscreen-button.tsx +60 -0
  128. package/src/components/ui/media-resource-preloader.tsx +395 -0
  129. package/src/components/ui/play-button.tsx +107 -0
  130. package/src/components/ui/seek-bar.tsx +161 -0
  131. package/src/components/ui/time-display.tsx +40 -0
  132. package/src/components/ui/volume-control.tsx +143 -0
  133. package/src/components/unified/base-media-player.tsx +246 -0
  134. package/src/components/unified/media-player.tsx +75 -0
  135. package/src/components/variants/minimal/AccessibleMinimalPlayer.tsx +561 -0
  136. package/src/components/variants/minimal/EnhancedMinimalMediaPlayer.tsx +552 -0
  137. package/src/components/variants/minimal/MinimalControls.tsx +142 -0
  138. package/src/components/variants/minimal/MinimalLoading.tsx +32 -0
  139. package/src/components/variants/minimal/MinimalMediaPlayer.tsx +315 -0
  140. package/src/components/variants/minimal/MinimalOverlay.tsx +64 -0
  141. package/src/components/variants/minimal/MinimalPlayButton.tsx +65 -0
  142. package/src/components/variants/minimal/MinimalSeekBar.tsx +150 -0
  143. package/src/components/variants/minimal/MinimalVolumeControl.tsx +80 -0
  144. package/src/components/variants/minimal/SimpleMinimalPlayer.tsx +210 -0
  145. package/src/components/variants/minimal/components/CenterPlayButton.tsx +22 -0
  146. package/src/components/variants/minimal/components/ControlBar.tsx +146 -0
  147. package/src/components/variants/minimal/components/EnhancedSettingsMenu.tsx +361 -0
  148. package/src/components/variants/minimal/components/PlaybackControls.tsx +51 -0
  149. package/src/components/variants/minimal/components/RightControls.tsx +173 -0
  150. package/src/components/variants/minimal/components/SeekBar.tsx +131 -0
  151. package/src/components/variants/minimal/components/SettingsDropdown.tsx +70 -0
  152. package/src/components/variants/minimal/components/SubtitleDisplay.tsx +21 -0
  153. package/src/components/variants/minimal/components/TimeDisplay.tsx +18 -0
  154. package/src/components/variants/minimal/components/VideoElement.tsx +40 -0
  155. package/src/components/variants/minimal/components/VolumeControl.tsx +217 -0
  156. package/src/components/variants/minimal/index.ts +23 -0
  157. package/src/components/video-player.tsx +100 -0
  158. package/src/context/error-handling.ts +394 -0
  159. package/src/context/media-context.tsx +208 -0
  160. package/src/context/media-provider.tsx +265 -0
  161. package/src/context/media-store.ts +379 -0
  162. package/src/context/persistence.ts +453 -0
  163. package/src/core/events/event-system.ts +442 -0
  164. package/src/core/events/hooks.ts +302 -0
  165. package/src/core/events/index.ts +22 -0
  166. package/src/core/events/middleware.ts +269 -0
  167. package/src/core/index.ts +22 -0
  168. package/src/core/optimization/bundle-optimizer.tsx +308 -0
  169. package/src/core/performance/cicd.ts +96 -0
  170. package/src/core/performance/index.ts +38 -0
  171. package/src/core/performance/media-loading-optimizer.ts +538 -0
  172. package/src/core/performance/performance-budgets.ts +432 -0
  173. package/src/core/performance/performance-monitor.tsx +476 -0
  174. package/src/core/performance/performance-testing.ts +459 -0
  175. package/src/core/plugins/base-plugin.ts +224 -0
  176. package/src/core/plugins/enhanced-plugin-system.ts +411 -0
  177. package/src/core/plugins/examples/analytics-plugin.ts +242 -0
  178. package/src/core/plugins/index.ts +39 -0
  179. package/src/core/plugins/registry.ts +327 -0
  180. package/src/core/plugins/types.ts +159 -0
  181. package/src/core/plugins/utils.ts +316 -0
  182. package/src/core/progressive-loading.tsx +322 -0
  183. package/src/core/providers/enhanced-hls-provider.ts +339 -0
  184. package/src/core/providers/service-provider.tsx +168 -0
  185. package/src/core/utils.tsx +38 -0
  186. package/src/features/media-session/media-session-manager.ts +429 -0
  187. package/src/features/picture-in-picture/pip-manager.ts +429 -0
  188. package/src/features/playlist/playlist-manager.ts +606 -0
  189. package/src/features/subtitles/subtitle-manager.ts +441 -0
  190. package/src/features/subtitles/subtitle-parser.ts +280 -0
  191. package/src/features/thumbnails/thumbnail-generator.ts +519 -0
  192. package/src/hooks/accessibility/index.ts +27 -0
  193. package/src/hooks/accessibility/use-accessibility-preferences.ts +188 -0
  194. package/src/hooks/accessibility/use-focus-management.ts +176 -0
  195. package/src/hooks/accessibility/use-keyboard-shortcuts.ts +144 -0
  196. package/src/hooks/accessibility/use-screen-reader.ts +182 -0
  197. package/src/hooks/core/index.ts +47 -0
  198. package/src/hooks/legacy.ts +27 -0
  199. package/src/hooks/use-enhanced-media-player.ts +468 -0
  200. package/src/hooks/use-intelligent-preloading.ts +358 -0
  201. package/src/hooks/use-keyboard-controls.ts +115 -0
  202. package/src/hooks/use-media-actions.ts +175 -0
  203. package/src/hooks/use-media-metadata.ts +89 -0
  204. package/src/hooks/use-media-optimistic.ts +270 -0
  205. package/src/hooks/use-media-player.ts +312 -0
  206. package/src/hooks/use-media-state.ts +190 -0
  207. package/src/hooks/use-memory-optimization.ts +358 -0
  208. package/src/hooks/use-optimistic-controls.ts +92 -0
  209. package/src/hooks/use-optimized-media.ts +263 -0
  210. package/src/hooks/use-touch-gestures.ts +417 -0
  211. package/src/hooks/useEnhancedSubtitles.ts +258 -0
  212. package/src/hooks/useKeyboardShortcuts.ts +74 -0
  213. package/src/hooks/useMediaControls.ts +52 -0
  214. package/src/hooks/useScreenshot.ts +57 -0
  215. package/src/hooks/useSubtitles.ts +91 -0
  216. package/src/hooks/useVideoPlayer.ts +232 -0
  217. package/src/icons/components/FullscreenIcon.tsx +37 -0
  218. package/src/icons/components/SettingsIcon.tsx +38 -0
  219. package/src/icons/components/animated/LoadingIcon.tsx +43 -0
  220. package/src/icons/components/animated/PlayPauseIcon.tsx +50 -0
  221. package/src/icons/components/media/PauseIcon.tsx +39 -0
  222. package/src/icons/components/media/PlayIcon.tsx +38 -0
  223. package/src/icons/components/volume/VolumeIcon.tsx +39 -0
  224. package/src/icons/components/volume/VolumeOffIcon.tsx +39 -0
  225. package/src/icons/index.ts +56 -0
  226. package/src/icons/provider.tsx +64 -0
  227. package/src/icons/types.ts +40 -0
  228. package/src/index-enhanced.ts +35 -0
  229. package/src/index-legacy.ts +326 -0
  230. package/src/index.css +102 -0
  231. package/src/index.ts +216 -0
  232. package/src/lib/deprecation.ts +51 -0
  233. package/src/lib/format-time.ts +37 -0
  234. package/src/lib/index.ts +3 -0
  235. package/src/lib/utils.ts +6 -0
  236. package/src/styles/globals.css +462 -0
  237. package/src/styles/minimal-player.css +589 -0
  238. package/src/styles/pixel-art.css +46 -0
  239. package/src/styles/videojs.css +100 -0
  240. package/src/test/setup.ts +79 -0
  241. package/src/types/events.ts +47 -0
  242. package/src/types/formats.ts +95 -0
  243. package/src/types/index.ts +190 -0
  244. package/src/types/videojs-plugins.d.ts +14 -0
@@ -0,0 +1,79 @@
1
+ import "@testing-library/jest-dom"
2
+ import { vi } from "vitest"
3
+
4
+ // Mock HTMLMediaElement methods that are not implemented in jsdom
5
+ Object.defineProperty(HTMLMediaElement.prototype, "play", {
6
+ writable: true,
7
+ value: vi.fn().mockImplementation(() => Promise.resolve())
8
+ })
9
+
10
+ Object.defineProperty(HTMLMediaElement.prototype, "pause", {
11
+ writable: true,
12
+ value: vi.fn()
13
+ })
14
+
15
+ Object.defineProperty(HTMLMediaElement.prototype, "load", {
16
+ writable: true,
17
+ value: vi.fn()
18
+ })
19
+
20
+ // Mock media properties
21
+ Object.defineProperty(HTMLMediaElement.prototype, "currentTime", {
22
+ writable: true,
23
+ value: 0
24
+ })
25
+
26
+ Object.defineProperty(HTMLMediaElement.prototype, "duration", {
27
+ writable: true,
28
+ value: 100
29
+ })
30
+
31
+ Object.defineProperty(HTMLMediaElement.prototype, "volume", {
32
+ writable: true,
33
+ value: 1
34
+ })
35
+
36
+ Object.defineProperty(HTMLMediaElement.prototype, "muted", {
37
+ writable: true,
38
+ value: false
39
+ })
40
+
41
+ Object.defineProperty(HTMLMediaElement.prototype, "paused", {
42
+ writable: true,
43
+ value: true
44
+ })
45
+
46
+ Object.defineProperty(HTMLMediaElement.prototype, "ended", {
47
+ writable: true,
48
+ value: false
49
+ })
50
+
51
+ Object.defineProperty(HTMLMediaElement.prototype, "buffered", {
52
+ writable: true,
53
+ value: {
54
+ length: 0,
55
+ start: () => 0,
56
+ end: () => 0
57
+ }
58
+ })
59
+
60
+ // Mock fullscreen API
61
+ Object.defineProperty(document, "fullscreenEnabled", {
62
+ writable: true,
63
+ value: true
64
+ })
65
+
66
+ Object.defineProperty(document, "fullscreenElement", {
67
+ writable: true,
68
+ value: null
69
+ })
70
+
71
+ Object.defineProperty(Element.prototype, "requestFullscreen", {
72
+ writable: true,
73
+ value: vi.fn().mockImplementation(() => Promise.resolve())
74
+ })
75
+
76
+ Object.defineProperty(document, "exitFullscreen", {
77
+ writable: true,
78
+ value: vi.fn().mockImplementation(() => Promise.resolve())
79
+ })
@@ -0,0 +1,47 @@
1
+ // Media event types for better type safety
2
+
3
+ export interface MediaEventMap {
4
+ play: Event;
5
+ pause: Event;
6
+ timeupdate: Event;
7
+ durationchange: Event;
8
+ volumechange: Event;
9
+ loadstart: Event;
10
+ loadeddata: Event;
11
+ loadedmetadata: Event;
12
+ canplay: Event;
13
+ canplaythrough: Event;
14
+ seeking: Event;
15
+ seeked: Event;
16
+ ended: Event;
17
+ error: Event;
18
+ progress: Event;
19
+ stalled: Event;
20
+ suspend: Event;
21
+ waiting: Event;
22
+ ratechange: Event;
23
+ resize: Event;
24
+ fullscreenchange: Event;
25
+ }
26
+
27
+ export type MediaEventType = keyof MediaEventMap;
28
+
29
+ export interface MediaErrorEvent extends Event {
30
+ error: MediaError | null;
31
+ }
32
+
33
+ export interface MediaTimeUpdateEvent extends Event {
34
+ currentTime: number;
35
+ duration: number;
36
+ }
37
+
38
+ export interface MediaVolumeChangeEvent extends Event {
39
+ volume: number;
40
+ muted: boolean;
41
+ }
42
+
43
+ export interface MediaProgressEvent extends Event {
44
+ buffered: TimeRanges;
45
+ loaded: number;
46
+ total: number;
47
+ }
@@ -0,0 +1,95 @@
1
+ // Supported media formats and MIME types
2
+
3
+ export const SUPPORTED_VIDEO_FORMATS = [
4
+ 'mp4',
5
+ 'webm',
6
+ 'ogv',
7
+ 'mov',
8
+ 'avi',
9
+ 'm4v',
10
+ 'mkv',
11
+ ] as const;
12
+
13
+ export const SUPPORTED_AUDIO_FORMATS = [
14
+ 'mp3',
15
+ 'aac',
16
+ 'ogg',
17
+ 'wav',
18
+ 'flac',
19
+ 'm4a',
20
+ 'weba',
21
+ ] as const;
22
+
23
+ export const VIDEO_MIME_TYPES = {
24
+ mp4: 'video/mp4',
25
+ webm: 'video/webm',
26
+ ogv: 'video/ogg',
27
+ mov: 'video/quicktime',
28
+ avi: 'video/x-msvideo',
29
+ m4v: 'video/x-m4v',
30
+ mkv: 'video/x-matroska',
31
+ } as const;
32
+
33
+ export const AUDIO_MIME_TYPES = {
34
+ mp3: 'audio/mpeg',
35
+ aac: 'audio/aac',
36
+ ogg: 'audio/ogg',
37
+ wav: 'audio/wav',
38
+ flac: 'audio/flac',
39
+ m4a: 'audio/mp4',
40
+ weba: 'audio/webm',
41
+ } as const;
42
+
43
+ export type VideoFormat = typeof SUPPORTED_VIDEO_FORMATS[number];
44
+ export type AudioFormat = typeof SUPPORTED_AUDIO_FORMATS[number];
45
+ export type MediaFormat = VideoFormat | AudioFormat;
46
+
47
+ export type VideoMimeType = typeof VIDEO_MIME_TYPES[keyof typeof VIDEO_MIME_TYPES];
48
+ export type AudioMimeType = typeof AUDIO_MIME_TYPES[keyof typeof AUDIO_MIME_TYPES];
49
+ export type MediaMimeType = VideoMimeType | AudioMimeType;
50
+
51
+ export interface MediaSource {
52
+ src: string;
53
+ type?: MediaMimeType;
54
+ media?: string; // Media query for responsive sources
55
+ }
56
+
57
+ export interface MediaCapabilities {
58
+ canPlayType: (type: string) => '' | 'maybe' | 'probably';
59
+ supportsFormat: (format: MediaFormat) => boolean;
60
+ supportsMimeType: (mimeType: MediaMimeType) => boolean;
61
+ }
62
+
63
+ /**
64
+ * Utility function to detect media type from file extension
65
+ */
66
+ export function getMediaTypeFromUrl(url: string): 'video' | 'audio' | 'unknown' {
67
+ const extension = url.split('.').pop()?.toLowerCase();
68
+
69
+ if (extension && SUPPORTED_VIDEO_FORMATS.includes(extension as VideoFormat)) {
70
+ return 'video';
71
+ }
72
+
73
+ if (extension && SUPPORTED_AUDIO_FORMATS.includes(extension as AudioFormat)) {
74
+ return 'audio';
75
+ }
76
+
77
+ return 'unknown';
78
+ }
79
+
80
+ /**
81
+ * Utility function to get MIME type from file extension
82
+ */
83
+ export function getMimeTypeFromUrl(url: string): MediaMimeType | undefined {
84
+ const extension = url.split('.').pop()?.toLowerCase();
85
+
86
+ if (extension && extension in VIDEO_MIME_TYPES) {
87
+ return VIDEO_MIME_TYPES[extension as keyof typeof VIDEO_MIME_TYPES];
88
+ }
89
+
90
+ if (extension && extension in AUDIO_MIME_TYPES) {
91
+ return AUDIO_MIME_TYPES[extension as keyof typeof AUDIO_MIME_TYPES];
92
+ }
93
+
94
+ return undefined;
95
+ }
@@ -0,0 +1,190 @@
1
+ import type { ReactNode } from "react"
2
+
3
+ // Re-export event types
4
+ export type {
5
+ MediaErrorEvent,
6
+ MediaEventMap,
7
+ MediaEventType,
8
+ MediaProgressEvent,
9
+ MediaTimeUpdateEvent,
10
+ MediaVolumeChangeEvent
11
+ } from "./events"
12
+ // Re-export format types
13
+ export {
14
+ AUDIO_MIME_TYPES,
15
+ getMediaTypeFromUrl,
16
+ getMimeTypeFromUrl,
17
+ SUPPORTED_AUDIO_FORMATS,
18
+ SUPPORTED_VIDEO_FORMATS,
19
+ VIDEO_MIME_TYPES
20
+ } from "./formats"
21
+ export type {
22
+ AudioFormat,
23
+ AudioMimeType,
24
+ MediaCapabilities,
25
+ MediaFormat,
26
+ MediaMimeType,
27
+ MediaSource,
28
+ VideoFormat,
29
+ VideoMimeType
30
+ } from "./formats"
31
+
32
+ // Re-export loading state types
33
+ export type {
34
+ LoadingVariant,
35
+ LoadingContext,
36
+ LoadingSize,
37
+ LoadingStateProps,
38
+ CustomLoadingProps
39
+ } from "../components/LoadingState"
40
+
41
+ // Re-export AnimateLoadingWrapper for external use
42
+ export { AnimateLoadingWrapper } from "../components/LoadingState"
43
+
44
+ // Re-export video player types
45
+ export type {
46
+ BufferedRange,
47
+ VideoState as EnhancedVideoState,
48
+ VideoControls
49
+ } from "../hooks/useVideoPlayer"
50
+
51
+ export interface MediaPlayerState {
52
+ isPlaying: boolean
53
+ currentTime: number
54
+ duration: number
55
+ volume: number
56
+ isMuted: boolean
57
+ isLoading: boolean
58
+ isFullscreen: boolean
59
+ error: string | null
60
+ buffered: TimeRanges | null
61
+ // New loading states
62
+ isSeeking?: boolean
63
+ isBuffering?: boolean
64
+ bufferedRanges?: BufferedRange[]
65
+ }
66
+
67
+ export interface MediaPlayerControls {
68
+ play: () => void
69
+ pause: () => void
70
+ toggle: () => void
71
+ seek: (time: number) => void
72
+ setVolume: (volume: number) => void
73
+ mute: () => void
74
+ unmute: () => void
75
+ toggleMute: () => void
76
+ enterFullscreen: () => void
77
+ exitFullscreen: () => void
78
+ toggleFullscreen: () => void
79
+ }
80
+
81
+ export interface MediaPlayerConfig {
82
+ autoPlay?: boolean
83
+ loop?: boolean
84
+ muted?: boolean
85
+ volume?: number
86
+ preload?: "none" | "metadata" | "auto"
87
+ crossOrigin?: "anonymous" | "use-credentials"
88
+ playbackRates?: number[]
89
+ keyboardControls?: boolean
90
+ showControls?: boolean
91
+ customControls?: boolean
92
+ }
93
+
94
+ export interface MediaPlayerProps extends MediaPlayerConfig {
95
+ src: string | string[]
96
+ poster?: string
97
+ className?: string
98
+ children?:
99
+ | ReactNode
100
+ | ((props: { state: MediaPlayerState; controls: MediaPlayerControls }) => ReactNode)
101
+ onPlay?: () => void
102
+ onPause?: () => void
103
+ onTimeUpdate?: (currentTime: number) => void
104
+ onDurationChange?: (duration: number) => void
105
+ onVolumeChange?: (volume: number) => void
106
+ onError?: (error: string) => void
107
+ onLoadStart?: () => void
108
+ onLoadedData?: () => void
109
+ onEnded?: () => void
110
+ }
111
+
112
+ export interface VideoPlayerProps extends MediaPlayerProps {
113
+ width?: number | string
114
+ height?: number | string
115
+ aspectRatio?: string
116
+ }
117
+
118
+ export interface AudioPlayerProps extends MediaPlayerProps {
119
+ // Audio-specific props can be added here
120
+ }
121
+
122
+ export interface SupportedFormats {
123
+ video: string[]
124
+ audio: string[]
125
+ }
126
+
127
+ export interface PlayButtonProps {
128
+ isPlaying: boolean
129
+ onToggle: () => void
130
+ disabled?: boolean
131
+ size?: "sm" | "md" | "lg" | "xl"
132
+ className?: string
133
+ }
134
+
135
+ export interface VolumeControlProps {
136
+ volume: number
137
+ isMuted: boolean
138
+ onVolumeChange: (volume: number) => void
139
+ onToggleMute: () => void
140
+ size?: "md" | "lg" | "xl"
141
+ className?: string
142
+ }
143
+
144
+ export interface SeekBarProps {
145
+ currentTime: number
146
+ duration: number
147
+ buffered?: TimeRanges | null
148
+ onSeek: (time: number) => void
149
+ size?: "md" | "lg" | "xl"
150
+ className?: string
151
+ }
152
+
153
+ export interface TimeDisplayProps {
154
+ currentTime: number
155
+ duration: number
156
+ showRemaining?: boolean
157
+ size?: "sm" | "md" | "lg" | "xl"
158
+ className?: string
159
+ }
160
+
161
+ export interface FullscreenButtonProps {
162
+ isFullscreen: boolean
163
+ onToggle: () => void
164
+ disabled?: boolean
165
+ size?: "md" | "lg" | "xl"
166
+ className?: string
167
+ }
168
+
169
+ // Subtitle track definition
170
+ export interface SubtitleTrack {
171
+ id: string
172
+ label: string
173
+ language?: string
174
+ src?: string
175
+ kind?: "subtitles" | "captions" | "descriptions" | "chapters" | "metadata"
176
+ default?: boolean
177
+ }
178
+
179
+ // Custom loading component props
180
+ export interface CustomLoadingComponentProps {
181
+ context: "initial" | "seeking" | "buffering"
182
+ message?: string
183
+ progress?: number
184
+ }
185
+
186
+ // Volume orientation type
187
+ export type VolumeOrientation = "horizontal" | "vertical"
188
+
189
+ // Import BufferedRange type for external use
190
+ import type { BufferedRange } from "../hooks/useVideoPlayer"
@@ -0,0 +1,14 @@
1
+ declare module "@videojs/http-streaming" {
2
+ const httpStreaming: any
3
+ export default httpStreaming
4
+ }
5
+
6
+ declare module "videojs-contrib-quality-levels" {
7
+ const qualityLevels: any
8
+ export default qualityLevels
9
+ }
10
+
11
+ declare module "videojs-hls-quality-selector" {
12
+ const hlsQualitySelector: any
13
+ export default hlsQualitySelector
14
+ }