@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
package/src/index.ts ADDED
@@ -0,0 +1,216 @@
1
+ // ========================================
2
+ // 🎯 BaroiPlayer - Primary Components
3
+ // ========================================
4
+ // Main media player components - use these for most cases
5
+
6
+ // Primary All-in-One Players (Recommended)
7
+ export { MediaPlayer } from "./components/media-player"
8
+ export { VideoPlayer } from "./components/video-player"
9
+ export { AudioPlayer } from "./components/audio-player"
10
+
11
+ // Modern Compound Components (Advanced)
12
+ export { MediaPlayerRoot } from "./components/media-player-root"
13
+ export type { MediaPlayerRootProps } from "./components/media-player-root"
14
+
15
+ // Enhanced Player (React 19 Optimized)
16
+ export { EnhancedMediaPlayer } from "./components/enhanced/media-player-enhanced"
17
+
18
+ // ========================================
19
+ // 🎨 Component Variants
20
+ // ========================================
21
+ // Specialized player variants for different use cases
22
+
23
+ // Minimal Player (Clean & Simple)
24
+ export {
25
+ MinimalMediaPlayer,
26
+ SimpleMinimalPlayer
27
+ } from "./components/variants/minimal"
28
+ export type { MinimalMediaPlayerProps } from "./components/variants/minimal"
29
+
30
+ // ========================================
31
+ // 🛠️ Advanced Features
32
+ // ========================================
33
+ // Advanced components for specific requirements
34
+
35
+ // HLS Streaming
36
+ export { MediaPlayerHLS } from "./components/media-player-hls"
37
+
38
+ // Enhanced Controls & Features
39
+ export {
40
+ ChaptersPanel,
41
+ PictureInPictureButton,
42
+ PlaybackSpeedSelector,
43
+ QualitySelector,
44
+ SubtitleSelector
45
+ } from "./components/enhanced/advanced-features"
46
+
47
+ // Enhanced Controls
48
+ export {
49
+ EnhancedPlayButton,
50
+ EnhancedSeekBar,
51
+ EnhancedTimeDisplay,
52
+ EnhancedVolumeControl,
53
+ EnhancedControlBar
54
+ } from "./components/enhanced/enhanced-controls"
55
+
56
+ // React 19 Concurrent Features
57
+ export {
58
+ ConcurrentMedia,
59
+ MediaSuspense,
60
+ MediaLoading,
61
+ MediaErrorBoundary,
62
+ useDeferredMediaLoading
63
+ } from "./components/media-suspense"
64
+
65
+ // ========================================
66
+ // 🎣 Core Hooks
67
+ // ========================================
68
+ // React hooks for media player functionality
69
+
70
+ // Core Hooks (Most Used)
71
+ export { useMediaPlayer } from "./hooks/use-media-player"
72
+ export { useMediaState } from "./hooks/use-media-state"
73
+ export { useMediaControls } from "./hooks/useMediaControls"
74
+
75
+ // React 19 Enhanced Hooks
76
+ export { useEnhancedMediaPlayer } from "./hooks/use-enhanced-media-player"
77
+ export { useMediaActions } from "./hooks/use-media-actions"
78
+ export { useMediaActionState } from "./hooks/use-media-actions"
79
+
80
+ // Performance & Optimization Hooks
81
+ export {
82
+ useIntelligentPreloading
83
+ } from "./hooks/use-intelligent-preloading"
84
+
85
+ // Specialized Hooks
86
+ export {
87
+ useKeyboardControls
88
+ } from "./hooks/use-keyboard-controls"
89
+
90
+ export {
91
+ useTouchGestures
92
+ } from "./hooks/use-touch-gestures"
93
+
94
+ export { useScreenshot } from "./hooks/useScreenshot"
95
+ export { useSubtitles } from "./hooks/useSubtitles"
96
+
97
+ // ========================================
98
+ // 🔧 Utilities & Types
99
+ // ========================================
100
+ // Utilities, types, and helper functions
101
+
102
+ // Core Utilities
103
+ export { formatTime, parseTime } from "./lib/format-time"
104
+ export { cn } from "./lib/utils"
105
+
106
+ // Media Type Detection
107
+ export {
108
+ getMediaTypeFromUrl,
109
+ getMimeTypeFromUrl,
110
+ SUPPORTED_AUDIO_FORMATS,
111
+ SUPPORTED_VIDEO_FORMATS,
112
+ AUDIO_MIME_TYPES,
113
+ VIDEO_MIME_TYPES
114
+ } from "./types"
115
+
116
+ // Performance Monitoring
117
+ export {
118
+ PerformanceMonitor
119
+ } from "./core/performance"
120
+
121
+ // ========================================
122
+ // 📚 Context & State
123
+ // ========================================
124
+ // React context and state management
125
+
126
+ // Media Context
127
+ export {
128
+ MediaProvider
129
+ } from "./context/media-provider"
130
+
131
+ export {
132
+ useMediaContext,
133
+ useMediaDispatch,
134
+ useMediaSelector,
135
+ useOptimisticMediaSelector
136
+ } from "./context/media-context"
137
+
138
+ // Enhanced State Management (React 19)
139
+ export {
140
+ createEnhancedMediaStore
141
+ } from "./context/media-store"
142
+
143
+ // ========================================
144
+ // 🎨 Icons & Styling
145
+ // ========================================
146
+ // Icon components and styling utilities
147
+
148
+ // Icon Sets
149
+ export {
150
+ defaultMinimalIcons,
151
+ MinimalPlayIcon,
152
+ MinimalPauseIcon,
153
+ MinimalVolumeIcon,
154
+ MinimalFullscreenIcon
155
+ } from "./components/icons"
156
+ export type { IconProps, IconSet } from "./components/icons"
157
+
158
+ // ========================================
159
+ // ⚠️ Legacy Exports (Deprecated)
160
+ // ========================================
161
+ // These will be removed in v2.0 - migrate to the APIs above
162
+ // Each usage will show a deprecation warning in the console
163
+
164
+ // Legacy Components (with deprecation warnings)
165
+ export {
166
+ ModernMediaPlayer,
167
+ SimpleVideoPlayer,
168
+ LegacyPlayButton as PlayButton,
169
+ LegacySeekBar as SeekBar,
170
+ LegacyTimeDisplay as TimeDisplay,
171
+ LegacyVolumeControl as VolumeControl,
172
+ LegacyFullscreenButton as FullscreenButton
173
+ } from "./components/legacy"
174
+
175
+ // Legacy Hooks (with deprecation warnings)
176
+ export {
177
+ useVideoPlayer,
178
+ useEnhancedSubtitles
179
+ } from "./hooks/legacy"
180
+
181
+ // ========================================
182
+ // 🔒 Development Tools
183
+ // ========================================
184
+ // Development and debugging tools (dev only)
185
+
186
+ export { DebugPanel } from "./components/enhanced/debug-panel"
187
+ export { MediaResourcePreloader } from "./components/ui/media-resource-preloader"
188
+
189
+ // ========================================
190
+ // 📖 Type Exports
191
+ // ========================================
192
+ // Complete type definitions
193
+
194
+ export type {
195
+ // Core Media Types
196
+ MediaSource,
197
+ MediaFormat,
198
+ MediaPlayerConfig,
199
+ MediaPlayerState,
200
+ MediaCapabilities,
201
+
202
+ // Event Types
203
+ MediaEventMap,
204
+ MediaEventType,
205
+ MediaErrorEvent,
206
+ MediaProgressEvent,
207
+ MediaTimeUpdateEvent,
208
+ MediaVolumeChangeEvent,
209
+
210
+ // Component Props
211
+ VideoFormat,
212
+ AudioFormat,
213
+ VideoMimeType,
214
+ AudioMimeType,
215
+
216
+ } from "./types"
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Deprecation warning utility
3
+ * Shows console warnings for deprecated components and hooks
4
+ */
5
+
6
+ const deprecationWarnings = new Set<string>()
7
+
8
+ export function showDeprecationWarning(
9
+ itemName: string,
10
+ replacement: string,
11
+ version: string = "2.0"
12
+ ) {
13
+ const key = `${itemName}-${replacement}-${version}`
14
+
15
+ if (deprecationWarnings.has(key)) {
16
+ return // Already shown this warning
17
+ }
18
+
19
+ deprecationWarnings.add(key)
20
+
21
+ console.warn(
22
+ `⚠️ [BaroiPlayer] DEPRECATION WARNING: ${itemName} is deprecated and will be removed in v${version}.` +
23
+ `\n Please replace it with: ${replacement}` +
24
+ `\n See https://github.com/baroi/baroiplayer/blob/main/MIGRATION.md for migration guide.`
25
+ )
26
+ }
27
+
28
+ export function createDeprecatedComponent<T>(
29
+ ComponentName: string,
30
+ replacement: string,
31
+ component: T
32
+ ): T {
33
+ const DeprecatedComponent = component as any
34
+
35
+ // Add deprecation warning to the component
36
+ if (typeof DeprecatedComponent === 'function') {
37
+ const originalComponent = DeprecatedComponent
38
+ const WrappedComponent = function (props: any) {
39
+ showDeprecationWarning(ComponentName, replacement)
40
+ return originalComponent(props)
41
+ }
42
+
43
+ // Copy over displayName and other properties
44
+ Object.setPrototypeOf(WrappedComponent, originalComponent)
45
+ WrappedComponent.displayName = `Deprecated(${ComponentName})`
46
+
47
+ return WrappedComponent as T
48
+ }
49
+
50
+ return component
51
+ }
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Formats time in seconds to a human-readable string (MM:SS or HH:MM:SS)
3
+ */
4
+ export function formatTime(seconds: number): string {
5
+ if (isNaN(seconds) || !isFinite(seconds)) {
6
+ return "0:00"
7
+ }
8
+
9
+ const hours = Math.floor(seconds / 3600)
10
+ const minutes = Math.floor((seconds % 3600) / 60)
11
+ const secs = Math.floor(seconds % 60)
12
+
13
+ if (hours > 0) {
14
+ return `${hours}:${minutes.toString().padStart(2, "0")}:${secs.toString().padStart(2, "0")}`
15
+ }
16
+
17
+ return `${minutes}:${secs.toString().padStart(2, "0")}`
18
+ }
19
+
20
+ /**
21
+ * Parses a time string (MM:SS or HH:MM:SS) to seconds
22
+ */
23
+ export function parseTime(timeString: string): number {
24
+ const parts = timeString.split(":").map(Number)
25
+
26
+ if (parts.length === 2) {
27
+ // MM:SS format
28
+ const [minutes = 0, seconds = 0] = parts
29
+ return minutes * 60 + seconds
30
+ } else if (parts.length === 3) {
31
+ // HH:MM:SS format
32
+ const [hours = 0, minutes = 0, seconds = 0] = parts
33
+ return hours * 3600 + minutes * 60 + seconds
34
+ }
35
+
36
+ return 0
37
+ }
@@ -0,0 +1,3 @@
1
+ // Utility functions
2
+ export { formatTime, parseTime } from "./format-time";
3
+ export { cn } from "./utils";
@@ -0,0 +1,6 @@
1
+ import { type ClassValue, clsx } from 'clsx';
2
+ import { twMerge } from 'tailwind-merge';
3
+
4
+ export function cn(...inputs: ClassValue[]) {
5
+ return twMerge(clsx(inputs));
6
+ }