@therealtinhtute/baroiplayer 1.0.6 → 1.0.8

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 (597) hide show
  1. package/dist/index.d.ts +1 -1
  2. package/dist/index.js +1 -7
  3. package/dist/index.mjs +1 -2
  4. package/dist/package.json +1 -1
  5. package/package.json +1 -1
  6. package/dist/context/media.js +0 -2
  7. package/dist/context/media.js.map +0 -1
  8. package/dist/context/media.mjs +0 -15
  9. package/dist/context/media.mjs.map +0 -1
  10. package/dist/context/store.js +0 -2
  11. package/dist/context/store.js.map +0 -1
  12. package/dist/context/store.mjs +0 -5
  13. package/dist/context/store.mjs.map +0 -1
  14. package/dist/context-Af84FynT.js +0 -1179
  15. package/dist/context-Af84FynT.js.map +0 -1
  16. package/dist/context-CwZnPdz0.cjs +0 -23
  17. package/dist/context-CwZnPdz0.cjs.map +0 -1
  18. package/dist/core-events-B5W_j8yU.js +0 -480
  19. package/dist/core-events-B5W_j8yU.js.map +0 -1
  20. package/dist/core-events-CN0-Vhhq.cjs +0 -2
  21. package/dist/core-events-CN0-Vhhq.cjs.map +0 -1
  22. package/dist/core-plugins-Bq9KLany.js +0 -696
  23. package/dist/core-plugins-Bq9KLany.js.map +0 -1
  24. package/dist/core-plugins-CPDSHMiQ.cjs +0 -2
  25. package/dist/core-plugins-CPDSHMiQ.cjs.map +0 -1
  26. package/dist/core.js +0 -37
  27. package/dist/core.js.map +0 -1
  28. package/dist/core.mjs +0 -1217
  29. package/dist/core.mjs.map +0 -1
  30. package/dist/enhanced-components-CXnYiOt6.cjs +0 -2
  31. package/dist/enhanced-components-CXnYiOt6.cjs.map +0 -1
  32. package/dist/enhanced-components-Da0TSvKe.js +0 -1073
  33. package/dist/enhanced-components-Da0TSvKe.js.map +0 -1
  34. package/dist/hooks-BCMilGRf.cjs +0 -4
  35. package/dist/hooks-BCMilGRf.cjs.map +0 -1
  36. package/dist/hooks-BPtHV1ZT.js +0 -2042
  37. package/dist/hooks-BPtHV1ZT.js.map +0 -1
  38. package/dist/index.js.map +0 -1
  39. package/dist/index.mjs.map +0 -1
  40. package/dist/minimal-components-BHJMuaL7.cjs +0 -2
  41. package/dist/minimal-components-BHJMuaL7.cjs.map +0 -1
  42. package/dist/minimal-components-BmqRefl1.js +0 -2002
  43. package/dist/minimal-components-BmqRefl1.js.map +0 -1
  44. package/dist/mona-loading.gif +0 -0
  45. package/dist/performance-monitor--rzKTlbj.js +0 -302
  46. package/dist/performance-monitor--rzKTlbj.js.map +0 -1
  47. package/dist/performance-monitor-cjIvZE2D.cjs +0 -2
  48. package/dist/performance-monitor-cjIvZE2D.cjs.map +0 -1
  49. package/dist/src/adapters/videojs-adapter.d.ts.map +0 -1
  50. package/dist/src/adapters/videojs-adapter.js +0 -350
  51. package/dist/src/assets/mona-loading.gif +0 -0
  52. package/dist/src/components/AnimateLoading.d.ts.map +0 -1
  53. package/dist/src/components/AnimateLoading.js +0 -41
  54. package/dist/src/components/LoadingState.d.ts.map +0 -1
  55. package/dist/src/components/LoadingState.js +0 -111
  56. package/dist/src/components/accessibility/keyboard-help-overlay.d.ts.map +0 -1
  57. package/dist/src/components/accessibility/keyboard-help-overlay.js +0 -90
  58. package/dist/src/components/audio-player.d.ts.map +0 -1
  59. package/dist/src/components/audio-player.js +0 -31
  60. package/dist/src/components/basic/index.d.ts.map +0 -1
  61. package/dist/src/components/basic/index.js +0 -29
  62. package/dist/src/components/enhanced/advanced-features.d.ts.map +0 -1
  63. package/dist/src/components/enhanced/advanced-features.js +0 -64
  64. package/dist/src/components/enhanced/debug-panel.d.ts.map +0 -1
  65. package/dist/src/components/enhanced/debug-panel.js +0 -94
  66. package/dist/src/components/enhanced/enhanced-controls.d.ts.map +0 -1
  67. package/dist/src/components/enhanced/enhanced-controls.js +0 -233
  68. package/dist/src/components/enhanced/enhanced-media-player.d.ts.map +0 -1
  69. package/dist/src/components/enhanced/enhanced-media-player.js +0 -316
  70. package/dist/src/components/enhanced/error-handling.d.ts.map +0 -1
  71. package/dist/src/components/enhanced/error-handling.js +0 -153
  72. package/dist/src/components/enhanced/index.d.ts.map +0 -1
  73. package/dist/src/components/enhanced/index.js +0 -10
  74. package/dist/src/components/enhanced/media-player-enhanced.d.ts.map +0 -1
  75. package/dist/src/components/enhanced/media-player-enhanced.js +0 -250
  76. package/dist/src/components/examples/basic-video-player.d.ts.map +0 -1
  77. package/dist/src/components/examples/basic-video-player.js +0 -16
  78. package/dist/src/components/examples/custom-controls-example.d.ts.map +0 -1
  79. package/dist/src/components/examples/custom-controls-example.js +0 -12
  80. package/dist/src/components/examples/enhanced-controls-example.d.ts.map +0 -1
  81. package/dist/src/components/examples/enhanced-controls-example.js +0 -18
  82. package/dist/src/components/examples/enhanced-media-player-example.d.ts.map +0 -1
  83. package/dist/src/components/examples/enhanced-media-player-example.js +0 -13
  84. package/dist/src/components/examples/loading-states-demo.d.ts.map +0 -1
  85. package/dist/src/components/examples/loading-states-demo.js +0 -41
  86. package/dist/src/components/examples/react-19-demo.d.ts.map +0 -1
  87. package/dist/src/components/examples/react-19-demo.js +0 -104
  88. package/dist/src/components/examples/volume-orientation-demo.d.ts.map +0 -1
  89. package/dist/src/components/examples/volume-orientation-demo.js +0 -31
  90. package/dist/src/components/icon-demo.d.ts.map +0 -1
  91. package/dist/src/components/icon-demo.js +0 -16
  92. package/dist/src/components/icons/index.d.ts.map +0 -1
  93. package/dist/src/components/icons/index.js +0 -59
  94. package/dist/src/components/icons/svg-icons/ArrowLeftIcon.d.ts.map +0 -1
  95. package/dist/src/components/icons/svg-icons/ArrowLeftIcon.js +0 -3
  96. package/dist/src/components/icons/svg-icons/ArrowRightIcon.d.ts.map +0 -1
  97. package/dist/src/components/icons/svg-icons/ArrowRightIcon.js +0 -3
  98. package/dist/src/components/icons/svg-icons/AudioIcon.d.ts.map +0 -1
  99. package/dist/src/components/icons/svg-icons/AudioIcon.js +0 -4
  100. package/dist/src/components/icons/svg-icons/BackwardIcon.d.ts.map +0 -1
  101. package/dist/src/components/icons/svg-icons/BackwardIcon.js +0 -3
  102. package/dist/src/components/icons/svg-icons/CameraIcon.d.ts.map +0 -1
  103. package/dist/src/components/icons/svg-icons/CameraIcon.js +0 -4
  104. package/dist/src/components/icons/svg-icons/CheckIcon.d.ts.map +0 -1
  105. package/dist/src/components/icons/svg-icons/CheckIcon.js +0 -4
  106. package/dist/src/components/icons/svg-icons/EnablePiPIcon.d.ts.map +0 -1
  107. package/dist/src/components/icons/svg-icons/EnablePiPIcon.js +0 -5
  108. package/dist/src/components/icons/svg-icons/ForwardIcon.d.ts.map +0 -1
  109. package/dist/src/components/icons/svg-icons/ForwardIcon.js +0 -3
  110. package/dist/src/components/icons/svg-icons/FullscreenEnterIcon.d.ts.map +0 -1
  111. package/dist/src/components/icons/svg-icons/FullscreenEnterIcon.js +0 -3
  112. package/dist/src/components/icons/svg-icons/FullscreenExitIcon.d.ts.map +0 -1
  113. package/dist/src/components/icons/svg-icons/FullscreenExitIcon.js +0 -3
  114. package/dist/src/components/icons/svg-icons/LoadingIcon.d.ts.map +0 -1
  115. package/dist/src/components/icons/svg-icons/LoadingIcon.js +0 -3
  116. package/dist/src/components/icons/svg-icons/PauseIcon.d.ts.map +0 -1
  117. package/dist/src/components/icons/svg-icons/PauseIcon.js +0 -3
  118. package/dist/src/components/icons/svg-icons/PlayIcon.d.ts.map +0 -1
  119. package/dist/src/components/icons/svg-icons/PlayIcon.js +0 -3
  120. package/dist/src/components/icons/svg-icons/PlaybackSpeedIcon.d.ts.map +0 -1
  121. package/dist/src/components/icons/svg-icons/PlaybackSpeedIcon.js +0 -3
  122. package/dist/src/components/icons/svg-icons/QualityIcon.d.ts.map +0 -1
  123. package/dist/src/components/icons/svg-icons/QualityIcon.js +0 -3
  124. package/dist/src/components/icons/svg-icons/SettingsIcon.d.ts.map +0 -1
  125. package/dist/src/components/icons/svg-icons/SettingsIcon.js +0 -3
  126. package/dist/src/components/icons/svg-icons/SliderIcon.d.ts.map +0 -1
  127. package/dist/src/components/icons/svg-icons/SliderIcon.js +0 -3
  128. package/dist/src/components/icons/svg-icons/SubtitleIcon.d.ts.map +0 -1
  129. package/dist/src/components/icons/svg-icons/SubtitleIcon.js +0 -3
  130. package/dist/src/components/icons/svg-icons/SubtitleOffIcon.d.ts.map +0 -1
  131. package/dist/src/components/icons/svg-icons/SubtitleOffIcon.js +0 -3
  132. package/dist/src/components/icons/svg-icons/UnPiPIcon.d.ts.map +0 -1
  133. package/dist/src/components/icons/svg-icons/UnPiPIcon.js +0 -5
  134. package/dist/src/components/icons/svg-icons/VolumeMutedIcon.d.ts.map +0 -1
  135. package/dist/src/components/icons/svg-icons/VolumeMutedIcon.js +0 -3
  136. package/dist/src/components/icons/svg-icons/VolumeOneIcon.d.ts.map +0 -1
  137. package/dist/src/components/icons/svg-icons/VolumeOneIcon.js +0 -3
  138. package/dist/src/components/icons/svg-icons/VolumeThreeIcon.d.ts.map +0 -1
  139. package/dist/src/components/icons/svg-icons/VolumeThreeIcon.js +0 -3
  140. package/dist/src/components/icons/svg-icons/VolumeTwoIcon.d.ts.map +0 -1
  141. package/dist/src/components/icons/svg-icons/VolumeTwoIcon.js +0 -3
  142. package/dist/src/components/legacy.d.ts.map +0 -1
  143. package/dist/src/components/legacy.js +0 -52
  144. package/dist/src/components/media-metadata-display.d.ts.map +0 -1
  145. package/dist/src/components/media-metadata-display.js +0 -20
  146. package/dist/src/components/media-player-audio.d.ts.map +0 -1
  147. package/dist/src/components/media-player-audio.js +0 -18
  148. package/dist/src/components/media-player-controls.d.ts.map +0 -1
  149. package/dist/src/components/media-player-controls.js +0 -150
  150. package/dist/src/components/media-player-error.d.ts.map +0 -1
  151. package/dist/src/components/media-player-error.js +0 -85
  152. package/dist/src/components/media-player-fullscreen.d.ts.map +0 -1
  153. package/dist/src/components/media-player-fullscreen.js +0 -68
  154. package/dist/src/components/media-player-hls.d.ts.map +0 -1
  155. package/dist/src/components/media-player-hls.js +0 -20
  156. package/dist/src/components/media-player-loading.d.ts.map +0 -1
  157. package/dist/src/components/media-player-loading.js +0 -53
  158. package/dist/src/components/media-player-play.d.ts.map +0 -1
  159. package/dist/src/components/media-player-play.js +0 -44
  160. package/dist/src/components/media-player-root.d.ts.map +0 -1
  161. package/dist/src/components/media-player-root.js +0 -243
  162. package/dist/src/components/media-player-seek.d.ts.map +0 -1
  163. package/dist/src/components/media-player-seek.js +0 -92
  164. package/dist/src/components/media-player-time.d.ts.map +0 -1
  165. package/dist/src/components/media-player-time.js +0 -57
  166. package/dist/src/components/media-player-tooltip.d.ts.map +0 -1
  167. package/dist/src/components/media-player-tooltip.js +0 -14
  168. package/dist/src/components/media-player-video.d.ts.map +0 -1
  169. package/dist/src/components/media-player-video.js +0 -18
  170. package/dist/src/components/media-player-volume.d.ts.map +0 -1
  171. package/dist/src/components/media-player-volume.js +0 -88
  172. package/dist/src/components/media-player.d.ts.map +0 -1
  173. package/dist/src/components/media-player.js +0 -67
  174. package/dist/src/components/media-suspense.d.ts.map +0 -1
  175. package/dist/src/components/media-suspense.js +0 -173
  176. package/dist/src/components/player-settings-form.d.ts.map +0 -1
  177. package/dist/src/components/player-settings-form.js +0 -46
  178. package/dist/src/components/react-player-wrapper.d.ts.map +0 -1
  179. package/dist/src/components/react-player-wrapper.js +0 -163
  180. package/dist/src/components/simple-video-player.d.ts.map +0 -1
  181. package/dist/src/components/simple-video-player.js +0 -41
  182. package/dist/src/components/ui/enhanced-seek-bar.d.ts.map +0 -1
  183. package/dist/src/components/ui/enhanced-seek-bar.js +0 -112
  184. package/dist/src/components/ui/fullscreen-button.d.ts.map +0 -1
  185. package/dist/src/components/ui/fullscreen-button.js +0 -21
  186. package/dist/src/components/ui/media-resource-preloader.d.ts.map +0 -1
  187. package/dist/src/components/ui/media-resource-preloader.js +0 -295
  188. package/dist/src/components/ui/play-button.d.ts.map +0 -1
  189. package/dist/src/components/ui/play-button.js +0 -26
  190. package/dist/src/components/ui/seek-bar.d.ts.map +0 -1
  191. package/dist/src/components/ui/seek-bar.js +0 -54
  192. package/dist/src/components/ui/time-display.d.ts.map +0 -1
  193. package/dist/src/components/ui/time-display.js +0 -18
  194. package/dist/src/components/ui/volume-control.d.ts.map +0 -1
  195. package/dist/src/components/ui/volume-control.js +0 -71
  196. package/dist/src/components/unified/base-media-player.d.ts.map +0 -1
  197. package/dist/src/components/unified/base-media-player.js +0 -104
  198. package/dist/src/components/unified/media-player.d.ts.map +0 -1
  199. package/dist/src/components/unified/media-player.js +0 -41
  200. package/dist/src/components/variants/minimal/AccessibleMinimalPlayer.d.ts.map +0 -1
  201. package/dist/src/components/variants/minimal/AccessibleMinimalPlayer.js +0 -322
  202. package/dist/src/components/variants/minimal/EnhancedMinimalMediaPlayer.d.ts.map +0 -1
  203. package/dist/src/components/variants/minimal/EnhancedMinimalMediaPlayer.js +0 -280
  204. package/dist/src/components/variants/minimal/MinimalControls.d.ts.map +0 -1
  205. package/dist/src/components/variants/minimal/MinimalControls.js +0 -19
  206. package/dist/src/components/variants/minimal/MinimalLoading.d.ts.map +0 -1
  207. package/dist/src/components/variants/minimal/MinimalLoading.js +0 -6
  208. package/dist/src/components/variants/minimal/MinimalMediaPlayer.d.ts.map +0 -1
  209. package/dist/src/components/variants/minimal/MinimalMediaPlayer.js +0 -135
  210. package/dist/src/components/variants/minimal/MinimalOverlay.d.ts.map +0 -1
  211. package/dist/src/components/variants/minimal/MinimalOverlay.js +0 -15
  212. package/dist/src/components/variants/minimal/MinimalPlayButton.d.ts.map +0 -1
  213. package/dist/src/components/variants/minimal/MinimalPlayButton.js +0 -29
  214. package/dist/src/components/variants/minimal/MinimalSeekBar.d.ts.map +0 -1
  215. package/dist/src/components/variants/minimal/MinimalSeekBar.js +0 -73
  216. package/dist/src/components/variants/minimal/MinimalVolumeControl.d.ts.map +0 -1
  217. package/dist/src/components/variants/minimal/MinimalVolumeControl.js +0 -29
  218. package/dist/src/components/variants/minimal/SimpleMinimalPlayer.d.ts.map +0 -1
  219. package/dist/src/components/variants/minimal/SimpleMinimalPlayer.js +0 -51
  220. package/dist/src/components/variants/minimal/components/CenterPlayButton.d.ts.map +0 -1
  221. package/dist/src/components/variants/minimal/components/CenterPlayButton.js +0 -8
  222. package/dist/src/components/variants/minimal/components/ControlBar.d.ts.map +0 -1
  223. package/dist/src/components/variants/minimal/components/ControlBar.js +0 -10
  224. package/dist/src/components/variants/minimal/components/EnhancedSettingsMenu.d.ts.map +0 -1
  225. package/dist/src/components/variants/minimal/components/EnhancedSettingsMenu.js +0 -68
  226. package/dist/src/components/variants/minimal/components/PlaybackControls.d.ts.map +0 -1
  227. package/dist/src/components/variants/minimal/components/PlaybackControls.js +0 -9
  228. package/dist/src/components/variants/minimal/components/RightControls.d.ts.map +0 -1
  229. package/dist/src/components/variants/minimal/components/RightControls.js +0 -40
  230. package/dist/src/components/variants/minimal/components/SeekBar.d.ts.map +0 -1
  231. package/dist/src/components/variants/minimal/components/SeekBar.js +0 -43
  232. package/dist/src/components/variants/minimal/components/SettingsDropdown.d.ts.map +0 -1
  233. package/dist/src/components/variants/minimal/components/SettingsDropdown.js +0 -18
  234. package/dist/src/components/variants/minimal/components/SubtitleDisplay.d.ts.map +0 -1
  235. package/dist/src/components/variants/minimal/components/SubtitleDisplay.js +0 -6
  236. package/dist/src/components/variants/minimal/components/TimeDisplay.d.ts.map +0 -1
  237. package/dist/src/components/variants/minimal/components/TimeDisplay.js +0 -5
  238. package/dist/src/components/variants/minimal/components/VideoElement.d.ts.map +0 -1
  239. package/dist/src/components/variants/minimal/components/VideoElement.js +0 -4
  240. package/dist/src/components/variants/minimal/components/VolumeControl.d.ts.map +0 -1
  241. package/dist/src/components/variants/minimal/components/VolumeControl.js +0 -99
  242. package/dist/src/components/variants/minimal/index.d.ts.map +0 -1
  243. package/dist/src/components/variants/minimal/index.js +0 -8
  244. package/dist/src/components/video-player.d.ts.map +0 -1
  245. package/dist/src/components/video-player.js +0 -38
  246. package/dist/src/context/error-handling.d.ts.map +0 -1
  247. package/dist/src/context/error-handling.js +0 -300
  248. package/dist/src/context/media-context.d.ts.map +0 -1
  249. package/dist/src/context/media-context.js +0 -121
  250. package/dist/src/context/media-provider.d.ts.map +0 -1
  251. package/dist/src/context/media-provider.js +0 -164
  252. package/dist/src/context/media-store.d.ts.map +0 -1
  253. package/dist/src/context/media-store.js +0 -273
  254. package/dist/src/context/persistence.d.ts.map +0 -1
  255. package/dist/src/context/persistence.js +0 -356
  256. package/dist/src/core/events/event-system.d.ts.map +0 -1
  257. package/dist/src/core/events/event-system.js +0 -288
  258. package/dist/src/core/events/hooks.d.ts.map +0 -1
  259. package/dist/src/core/events/hooks.js +0 -198
  260. package/dist/src/core/events/index.d.ts.map +0 -1
  261. package/dist/src/core/events/index.js +0 -7
  262. package/dist/src/core/events/middleware.d.ts.map +0 -1
  263. package/dist/src/core/events/middleware.js +0 -219
  264. package/dist/src/core/index.d.ts.map +0 -1
  265. package/dist/src/core/index.js +0 -15
  266. package/dist/src/core/optimization/bundle-optimizer.d.ts.map +0 -1
  267. package/dist/src/core/optimization/bundle-optimizer.js +0 -217
  268. package/dist/src/core/performance/cicd.d.ts.map +0 -1
  269. package/dist/src/core/performance/cicd.js +0 -83
  270. package/dist/src/core/performance/index.d.ts.map +0 -1
  271. package/dist/src/core/performance/index.js +0 -14
  272. package/dist/src/core/performance/media-loading-optimizer.d.ts.map +0 -1
  273. package/dist/src/core/performance/media-loading-optimizer.js +0 -404
  274. package/dist/src/core/performance/performance-budgets.d.ts.map +0 -1
  275. package/dist/src/core/performance/performance-budgets.js +0 -326
  276. package/dist/src/core/performance/performance-monitor.d.ts.map +0 -1
  277. package/dist/src/core/performance/performance-monitor.js +0 -297
  278. package/dist/src/core/performance/performance-testing.d.ts.map +0 -1
  279. package/dist/src/core/performance/performance-testing.js +0 -314
  280. package/dist/src/core/plugins/base-plugin.d.ts.map +0 -1
  281. package/dist/src/core/plugins/base-plugin.js +0 -151
  282. package/dist/src/core/plugins/enhanced-plugin-system.d.ts.map +0 -1
  283. package/dist/src/core/plugins/enhanced-plugin-system.js +0 -305
  284. package/dist/src/core/plugins/examples/analytics-plugin.d.ts.map +0 -1
  285. package/dist/src/core/plugins/examples/analytics-plugin.js +0 -191
  286. package/dist/src/core/plugins/index.d.ts.map +0 -1
  287. package/dist/src/core/plugins/index.js +0 -9
  288. package/dist/src/core/plugins/registry.d.ts.map +0 -1
  289. package/dist/src/core/plugins/registry.js +0 -261
  290. package/dist/src/core/plugins/types.d.ts.map +0 -1
  291. package/dist/src/core/plugins/types.js +0 -31
  292. package/dist/src/core/plugins/utils.d.ts.map +0 -1
  293. package/dist/src/core/plugins/utils.js +0 -274
  294. package/dist/src/core/progressive-loading.d.ts.map +0 -1
  295. package/dist/src/core/progressive-loading.js +0 -239
  296. package/dist/src/core/providers/enhanced-hls-provider.d.ts.map +0 -1
  297. package/dist/src/core/providers/enhanced-hls-provider.js +0 -273
  298. package/dist/src/core/providers/service-provider.d.ts.map +0 -1
  299. package/dist/src/core/providers/service-provider.js +0 -105
  300. package/dist/src/core/utils.d.ts.map +0 -1
  301. package/dist/src/core/utils.js +0 -21
  302. package/dist/src/features/media-session/media-session-manager.d.ts.map +0 -1
  303. package/dist/src/features/media-session/media-session-manager.js +0 -331
  304. package/dist/src/features/picture-in-picture/pip-manager.d.ts.map +0 -1
  305. package/dist/src/features/picture-in-picture/pip-manager.js +0 -353
  306. package/dist/src/features/playlist/playlist-manager.d.ts.map +0 -1
  307. package/dist/src/features/playlist/playlist-manager.js +0 -475
  308. package/dist/src/features/subtitles/subtitle-manager.d.ts.map +0 -1
  309. package/dist/src/features/subtitles/subtitle-manager.js +0 -335
  310. package/dist/src/features/subtitles/subtitle-parser.d.ts.map +0 -1
  311. package/dist/src/features/subtitles/subtitle-parser.js +0 -217
  312. package/dist/src/features/thumbnails/thumbnail-generator.d.ts.map +0 -1
  313. package/dist/src/features/thumbnails/thumbnail-generator.js +0 -388
  314. package/dist/src/hooks/accessibility/index.d.ts.map +0 -1
  315. package/dist/src/hooks/accessibility/index.js +0 -4
  316. package/dist/src/hooks/accessibility/use-accessibility-preferences.d.ts.map +0 -1
  317. package/dist/src/hooks/accessibility/use-accessibility-preferences.js +0 -156
  318. package/dist/src/hooks/accessibility/use-focus-management.d.ts.map +0 -1
  319. package/dist/src/hooks/accessibility/use-focus-management.js +0 -142
  320. package/dist/src/hooks/accessibility/use-keyboard-shortcuts.d.ts.map +0 -1
  321. package/dist/src/hooks/accessibility/use-keyboard-shortcuts.js +0 -101
  322. package/dist/src/hooks/accessibility/use-screen-reader.d.ts.map +0 -1
  323. package/dist/src/hooks/accessibility/use-screen-reader.js +0 -148
  324. package/dist/src/hooks/core/index.d.ts.map +0 -1
  325. package/dist/src/hooks/core/index.js +0 -19
  326. package/dist/src/hooks/legacy.d.ts.map +0 -1
  327. package/dist/src/hooks/legacy.js +0 -17
  328. package/dist/src/hooks/use-enhanced-media-player.d.ts.map +0 -1
  329. package/dist/src/hooks/use-enhanced-media-player.js +0 -395
  330. package/dist/src/hooks/use-intelligent-preloading.d.ts.map +0 -1
  331. package/dist/src/hooks/use-intelligent-preloading.js +0 -258
  332. package/dist/src/hooks/use-keyboard-controls.d.ts.map +0 -1
  333. package/dist/src/hooks/use-keyboard-controls.js +0 -83
  334. package/dist/src/hooks/use-media-actions.d.ts.map +0 -1
  335. package/dist/src/hooks/use-media-actions.js +0 -121
  336. package/dist/src/hooks/use-media-metadata.d.ts.map +0 -1
  337. package/dist/src/hooks/use-media-metadata.js +0 -74
  338. package/dist/src/hooks/use-media-optimistic.d.ts.map +0 -1
  339. package/dist/src/hooks/use-media-optimistic.js +0 -205
  340. package/dist/src/hooks/use-media-player.d.ts.map +0 -1
  341. package/dist/src/hooks/use-media-player.js +0 -251
  342. package/dist/src/hooks/use-media-state.d.ts.map +0 -1
  343. package/dist/src/hooks/use-media-state.js +0 -162
  344. package/dist/src/hooks/use-memory-optimization.d.ts.map +0 -1
  345. package/dist/src/hooks/use-memory-optimization.js +0 -288
  346. package/dist/src/hooks/use-optimistic-controls.d.ts.map +0 -1
  347. package/dist/src/hooks/use-optimistic-controls.js +0 -60
  348. package/dist/src/hooks/use-optimized-media.d.ts.map +0 -1
  349. package/dist/src/hooks/use-optimized-media.js +0 -211
  350. package/dist/src/hooks/use-touch-gestures.d.ts.map +0 -1
  351. package/dist/src/hooks/use-touch-gestures.js +0 -289
  352. package/dist/src/hooks/useEnhancedSubtitles.d.ts.map +0 -1
  353. package/dist/src/hooks/useEnhancedSubtitles.js +0 -205
  354. package/dist/src/hooks/useKeyboardShortcuts.d.ts.map +0 -1
  355. package/dist/src/hooks/useKeyboardShortcuts.js +0 -59
  356. package/dist/src/hooks/useMediaControls.d.ts.map +0 -1
  357. package/dist/src/hooks/useMediaControls.js +0 -44
  358. package/dist/src/hooks/useScreenshot.d.ts.map +0 -1
  359. package/dist/src/hooks/useScreenshot.js +0 -56
  360. package/dist/src/hooks/useSubtitles.d.ts.map +0 -1
  361. package/dist/src/hooks/useSubtitles.js +0 -73
  362. package/dist/src/hooks/useVideoPlayer.d.ts.map +0 -1
  363. package/dist/src/hooks/useVideoPlayer.js +0 -184
  364. package/dist/src/icons/components/FullscreenIcon.d.ts.map +0 -1
  365. package/dist/src/icons/components/FullscreenIcon.js +0 -11
  366. package/dist/src/icons/components/SettingsIcon.d.ts.map +0 -1
  367. package/dist/src/icons/components/SettingsIcon.js +0 -11
  368. package/dist/src/icons/components/animated/LoadingIcon.d.ts.map +0 -1
  369. package/dist/src/icons/components/animated/LoadingIcon.js +0 -11
  370. package/dist/src/icons/components/animated/PlayPauseIcon.d.ts.map +0 -1
  371. package/dist/src/icons/components/animated/PlayPauseIcon.js +0 -9
  372. package/dist/src/icons/components/media/PauseIcon.d.ts.map +0 -1
  373. package/dist/src/icons/components/media/PauseIcon.js +0 -12
  374. package/dist/src/icons/components/media/PlayIcon.d.ts.map +0 -1
  375. package/dist/src/icons/components/media/PlayIcon.js +0 -12
  376. package/dist/src/icons/components/volume/VolumeIcon.d.ts.map +0 -1
  377. package/dist/src/icons/components/volume/VolumeIcon.js +0 -11
  378. package/dist/src/icons/components/volume/VolumeOffIcon.d.ts.map +0 -1
  379. package/dist/src/icons/components/volume/VolumeOffIcon.js +0 -11
  380. package/dist/src/icons/index.d.ts.map +0 -1
  381. package/dist/src/icons/index.js +0 -45
  382. package/dist/src/icons/provider.d.ts.map +0 -1
  383. package/dist/src/icons/provider.js +0 -37
  384. package/dist/src/icons/types.d.ts.map +0 -1
  385. package/dist/src/icons/types.js +0 -1
  386. package/dist/src/index-enhanced.d.ts.map +0 -1
  387. package/dist/src/index-enhanced.js +0 -16
  388. package/dist/src/index-legacy.d.ts.map +0 -1
  389. package/dist/src/index-legacy.js +0 -97
  390. package/dist/src/index.d.ts.map +0 -1
  391. package/dist/src/index.js +0 -90
  392. package/dist/src/index.minimal.d.ts.map +0 -1
  393. package/dist/src/index.minimal.js +0 -3
  394. package/dist/src/lib/deprecation.d.ts.map +0 -1
  395. package/dist/src/lib/deprecation.js +0 -31
  396. package/dist/src/lib/format-time.d.ts.map +0 -1
  397. package/dist/src/lib/format-time.js +0 -32
  398. package/dist/src/lib/index.d.ts.map +0 -1
  399. package/dist/src/lib/index.js +0 -3
  400. package/dist/src/lib/utils.d.ts.map +0 -1
  401. package/dist/src/lib/utils.js +0 -5
  402. package/dist/src/test/setup.d.ts.map +0 -1
  403. package/dist/src/test/setup.js +0 -65
  404. package/dist/src/types/events.d.ts.map +0 -1
  405. package/dist/src/types/events.js +0 -2
  406. package/dist/src/types/formats.d.ts.map +0 -1
  407. package/dist/src/types/formats.js +0 -63
  408. package/dist/src/types/index.d.ts.map +0 -1
  409. package/dist/src/types/index.js +0 -4
  410. package/dist/utils-Db13763z.cjs +0 -9
  411. package/dist/utils-Db13763z.cjs.map +0 -1
  412. package/dist/utils-nTO4AnHo.js +0 -2809
  413. package/dist/utils-nTO4AnHo.js.map +0 -1
  414. package/dist/utils.js +0 -2
  415. package/dist/utils.js.map +0 -1
  416. package/dist/utils.mjs +0 -7
  417. package/dist/utils.mjs.map +0 -1
  418. package/src/adapters/videojs-adapter.js +0 -350
  419. package/src/components/AnimateLoading.js +0 -41
  420. package/src/components/LoadingState.js +0 -111
  421. package/src/components/accessibility/keyboard-help-overlay.js +0 -90
  422. package/src/components/audio-player.js +0 -31
  423. package/src/components/basic/index.js +0 -29
  424. package/src/components/enhanced/advanced-features.js +0 -64
  425. package/src/components/enhanced/debug-panel.js +0 -94
  426. package/src/components/enhanced/enhanced-controls.js +0 -233
  427. package/src/components/enhanced/enhanced-media-player.js +0 -316
  428. package/src/components/enhanced/error-handling.js +0 -153
  429. package/src/components/enhanced/index.js +0 -10
  430. package/src/components/enhanced/media-player-enhanced.js +0 -250
  431. package/src/components/examples/basic-video-player.js +0 -16
  432. package/src/components/examples/custom-controls-example.js +0 -12
  433. package/src/components/examples/enhanced-controls-example.js +0 -18
  434. package/src/components/examples/enhanced-media-player-example.js +0 -13
  435. package/src/components/examples/loading-states-demo.js +0 -41
  436. package/src/components/examples/react-19-demo.js +0 -104
  437. package/src/components/examples/volume-orientation-demo.js +0 -31
  438. package/src/components/icon-demo.js +0 -16
  439. package/src/components/icons/index.js +0 -59
  440. package/src/components/icons/svg-icons/ArrowLeftIcon.js +0 -3
  441. package/src/components/icons/svg-icons/ArrowRightIcon.js +0 -3
  442. package/src/components/icons/svg-icons/AudioIcon.js +0 -4
  443. package/src/components/icons/svg-icons/BackwardIcon.js +0 -3
  444. package/src/components/icons/svg-icons/CameraIcon.js +0 -4
  445. package/src/components/icons/svg-icons/CheckIcon.js +0 -4
  446. package/src/components/icons/svg-icons/EnablePiPIcon.js +0 -5
  447. package/src/components/icons/svg-icons/ForwardIcon.js +0 -3
  448. package/src/components/icons/svg-icons/FullscreenEnterIcon.js +0 -3
  449. package/src/components/icons/svg-icons/FullscreenExitIcon.js +0 -3
  450. package/src/components/icons/svg-icons/LoadingIcon.js +0 -3
  451. package/src/components/icons/svg-icons/PauseIcon.js +0 -3
  452. package/src/components/icons/svg-icons/PlayIcon.js +0 -3
  453. package/src/components/icons/svg-icons/PlaybackSpeedIcon.js +0 -3
  454. package/src/components/icons/svg-icons/QualityIcon.js +0 -3
  455. package/src/components/icons/svg-icons/SettingsIcon.js +0 -3
  456. package/src/components/icons/svg-icons/SliderIcon.js +0 -3
  457. package/src/components/icons/svg-icons/SubtitleIcon.js +0 -3
  458. package/src/components/icons/svg-icons/SubtitleOffIcon.js +0 -3
  459. package/src/components/icons/svg-icons/UnPiPIcon.js +0 -5
  460. package/src/components/icons/svg-icons/VolumeMutedIcon.js +0 -3
  461. package/src/components/icons/svg-icons/VolumeOneIcon.js +0 -3
  462. package/src/components/icons/svg-icons/VolumeThreeIcon.js +0 -3
  463. package/src/components/icons/svg-icons/VolumeTwoIcon.js +0 -3
  464. package/src/components/legacy.js +0 -52
  465. package/src/components/media-metadata-display.js +0 -20
  466. package/src/components/media-player-audio.js +0 -18
  467. package/src/components/media-player-controls.js +0 -150
  468. package/src/components/media-player-error.js +0 -85
  469. package/src/components/media-player-fullscreen.js +0 -68
  470. package/src/components/media-player-hls.js +0 -20
  471. package/src/components/media-player-loading.js +0 -53
  472. package/src/components/media-player-play.js +0 -44
  473. package/src/components/media-player-root.js +0 -243
  474. package/src/components/media-player-seek.js +0 -92
  475. package/src/components/media-player-time.js +0 -57
  476. package/src/components/media-player-tooltip.js +0 -14
  477. package/src/components/media-player-video.js +0 -18
  478. package/src/components/media-player-volume.js +0 -88
  479. package/src/components/media-player.js +0 -67
  480. package/src/components/media-suspense.js +0 -173
  481. package/src/components/player-settings-form.js +0 -46
  482. package/src/components/react-player-wrapper.js +0 -163
  483. package/src/components/simple-video-player.js +0 -41
  484. package/src/components/ui/enhanced-seek-bar.js +0 -112
  485. package/src/components/ui/fullscreen-button.js +0 -21
  486. package/src/components/ui/media-resource-preloader.js +0 -295
  487. package/src/components/ui/play-button.js +0 -26
  488. package/src/components/ui/seek-bar.js +0 -54
  489. package/src/components/ui/time-display.js +0 -18
  490. package/src/components/ui/volume-control.js +0 -71
  491. package/src/components/unified/base-media-player.js +0 -104
  492. package/src/components/unified/media-player.js +0 -41
  493. package/src/components/variants/minimal/AccessibleMinimalPlayer.js +0 -322
  494. package/src/components/variants/minimal/EnhancedMinimalMediaPlayer.js +0 -280
  495. package/src/components/variants/minimal/MinimalControls.js +0 -19
  496. package/src/components/variants/minimal/MinimalLoading.js +0 -6
  497. package/src/components/variants/minimal/MinimalMediaPlayer.js +0 -135
  498. package/src/components/variants/minimal/MinimalOverlay.js +0 -15
  499. package/src/components/variants/minimal/MinimalPlayButton.js +0 -29
  500. package/src/components/variants/minimal/MinimalSeekBar.js +0 -73
  501. package/src/components/variants/minimal/MinimalVolumeControl.js +0 -29
  502. package/src/components/variants/minimal/SimpleMinimalPlayer.js +0 -51
  503. package/src/components/variants/minimal/components/CenterPlayButton.js +0 -8
  504. package/src/components/variants/minimal/components/ControlBar.js +0 -10
  505. package/src/components/variants/minimal/components/EnhancedSettingsMenu.js +0 -68
  506. package/src/components/variants/minimal/components/PlaybackControls.js +0 -9
  507. package/src/components/variants/minimal/components/RightControls.js +0 -40
  508. package/src/components/variants/minimal/components/SeekBar.js +0 -43
  509. package/src/components/variants/minimal/components/SettingsDropdown.js +0 -18
  510. package/src/components/variants/minimal/components/SubtitleDisplay.js +0 -6
  511. package/src/components/variants/minimal/components/TimeDisplay.js +0 -5
  512. package/src/components/variants/minimal/components/VideoElement.js +0 -4
  513. package/src/components/variants/minimal/components/VolumeControl.js +0 -99
  514. package/src/components/variants/minimal/index.js +0 -8
  515. package/src/components/video-player.js +0 -38
  516. package/src/context/error-handling.js +0 -300
  517. package/src/context/media-context.js +0 -121
  518. package/src/context/media-provider.js +0 -164
  519. package/src/context/media-store.js +0 -273
  520. package/src/context/persistence.js +0 -356
  521. package/src/core/events/event-system.js +0 -288
  522. package/src/core/events/hooks.js +0 -198
  523. package/src/core/events/index.js +0 -7
  524. package/src/core/events/middleware.js +0 -219
  525. package/src/core/index.js +0 -15
  526. package/src/core/optimization/bundle-optimizer.js +0 -217
  527. package/src/core/performance/cicd.js +0 -83
  528. package/src/core/performance/index.js +0 -14
  529. package/src/core/performance/media-loading-optimizer.js +0 -404
  530. package/src/core/performance/performance-budgets.js +0 -326
  531. package/src/core/performance/performance-monitor.js +0 -297
  532. package/src/core/performance/performance-testing.js +0 -314
  533. package/src/core/plugins/base-plugin.js +0 -151
  534. package/src/core/plugins/enhanced-plugin-system.js +0 -305
  535. package/src/core/plugins/examples/analytics-plugin.js +0 -191
  536. package/src/core/plugins/index.js +0 -9
  537. package/src/core/plugins/registry.js +0 -261
  538. package/src/core/plugins/types.js +0 -31
  539. package/src/core/plugins/utils.js +0 -274
  540. package/src/core/progressive-loading.js +0 -239
  541. package/src/core/providers/enhanced-hls-provider.js +0 -273
  542. package/src/core/providers/service-provider.js +0 -105
  543. package/src/core/utils.js +0 -21
  544. package/src/features/media-session/media-session-manager.js +0 -331
  545. package/src/features/picture-in-picture/pip-manager.js +0 -353
  546. package/src/features/playlist/playlist-manager.js +0 -475
  547. package/src/features/subtitles/subtitle-manager.js +0 -335
  548. package/src/features/subtitles/subtitle-parser.js +0 -217
  549. package/src/features/thumbnails/thumbnail-generator.js +0 -388
  550. package/src/hooks/accessibility/index.js +0 -4
  551. package/src/hooks/accessibility/use-accessibility-preferences.js +0 -156
  552. package/src/hooks/accessibility/use-focus-management.js +0 -142
  553. package/src/hooks/accessibility/use-keyboard-shortcuts.js +0 -101
  554. package/src/hooks/accessibility/use-screen-reader.js +0 -148
  555. package/src/hooks/core/index.js +0 -19
  556. package/src/hooks/legacy.js +0 -17
  557. package/src/hooks/use-enhanced-media-player.js +0 -395
  558. package/src/hooks/use-intelligent-preloading.js +0 -258
  559. package/src/hooks/use-keyboard-controls.js +0 -83
  560. package/src/hooks/use-media-actions.js +0 -121
  561. package/src/hooks/use-media-metadata.js +0 -74
  562. package/src/hooks/use-media-optimistic.js +0 -205
  563. package/src/hooks/use-media-player.js +0 -251
  564. package/src/hooks/use-media-state.js +0 -162
  565. package/src/hooks/use-memory-optimization.js +0 -288
  566. package/src/hooks/use-optimistic-controls.js +0 -60
  567. package/src/hooks/use-optimized-media.js +0 -211
  568. package/src/hooks/use-touch-gestures.js +0 -289
  569. package/src/hooks/useEnhancedSubtitles.js +0 -205
  570. package/src/hooks/useKeyboardShortcuts.js +0 -59
  571. package/src/hooks/useMediaControls.js +0 -44
  572. package/src/hooks/useScreenshot.js +0 -56
  573. package/src/hooks/useSubtitles.js +0 -73
  574. package/src/hooks/useVideoPlayer.js +0 -184
  575. package/src/icons/components/FullscreenIcon.js +0 -11
  576. package/src/icons/components/SettingsIcon.js +0 -11
  577. package/src/icons/components/animated/LoadingIcon.js +0 -11
  578. package/src/icons/components/animated/PlayPauseIcon.js +0 -9
  579. package/src/icons/components/media/PauseIcon.js +0 -12
  580. package/src/icons/components/media/PlayIcon.js +0 -12
  581. package/src/icons/components/volume/VolumeIcon.js +0 -11
  582. package/src/icons/components/volume/VolumeOffIcon.js +0 -11
  583. package/src/icons/index.js +0 -45
  584. package/src/icons/provider.js +0 -37
  585. package/src/icons/types.js +0 -1
  586. package/src/index-enhanced.js +0 -16
  587. package/src/index-legacy.js +0 -97
  588. package/src/index.js +0 -90
  589. package/src/index.minimal.js +0 -3
  590. package/src/lib/deprecation.js +0 -31
  591. package/src/lib/format-time.js +0 -32
  592. package/src/lib/index.js +0 -3
  593. package/src/lib/utils.js +0 -5
  594. package/src/test/setup.js +0 -65
  595. package/src/types/events.js +0 -2
  596. package/src/types/formats.js +0 -63
  597. package/src/types/index.js +0 -4
@@ -1,88 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { Button } from "../components/ui/button";
4
- import { Slider } from "../components/ui/slider";
5
- import { Volume1Icon, Volume2Icon, VolumeXIcon } from "lucide-react";
6
- import React from "react";
7
- import { MediaActionTypes, useMediaContext, useMediaDispatch, useMediaSelector } from "../context/media-context";
8
- import { cn } from "../lib/utils";
9
- import { MediaPlayerTooltip } from "./media-player-tooltip";
10
- export function MediaPlayerVolume({ className, disabled = false, asChild = false, expandable = true, children, ...props }) {
11
- const context = useMediaContext();
12
- const dispatch = useMediaDispatch();
13
- const volume = useMediaSelector((state) => state.volume);
14
- const isMuted = useMediaSelector((state) => state.isMuted);
15
- const isDisabled = disabled || useMediaSelector((state) => state.error !== null);
16
- // Determine volume level for icon
17
- const volumeLevel = React.useMemo(() => {
18
- if (isMuted || volume === 0)
19
- return 0;
20
- if (volume < 0.5)
21
- return 1;
22
- return 2;
23
- }, [volume, isMuted]);
24
- const handleMuteToggle = React.useCallback(() => {
25
- dispatch({
26
- type: MediaActionTypes.TOGGLE_MUTE
27
- });
28
- }, [dispatch]);
29
- const handleVolumeChange = React.useCallback((values) => {
30
- const newVolume = values[0];
31
- dispatch({
32
- type: MediaActionTypes.SET_VOLUME,
33
- detail: newVolume
34
- });
35
- }, [dispatch]);
36
- const handleVolumeCommit = React.useCallback((values) => {
37
- const newVolume = values[0];
38
- dispatch({
39
- type: MediaActionTypes.SET_VOLUME,
40
- detail: newVolume
41
- });
42
- }, [dispatch]);
43
- const VolumeIcon = volumeLevel === 0 ? VolumeXIcon : volumeLevel === 1 ? Volume1Icon : Volume2Icon;
44
- const containerProps = {
45
- "data-disabled": isDisabled ? "" : undefined,
46
- "data-slot": "media-player-volume",
47
- className: cn("group flex items-center", expandable ? "gap-2 transition-all duration-200 hover:gap-3" : "gap-2", className),
48
- ...props
49
- };
50
- const buttonProps = {
51
- type: "button",
52
- "aria-controls": context.mediaId,
53
- "aria-label": isMuted ? "Unmute" : "Mute",
54
- "aria-pressed": isMuted,
55
- "data-slot": "media-player-volume-button",
56
- "data-state": isMuted ? "muted" : "unmuted",
57
- variant: "ghost",
58
- size: "icon",
59
- className: "size-8 shrink-0",
60
- disabled: isDisabled,
61
- onClick: handleMuteToggle
62
- };
63
- const sliderProps = {
64
- "aria-controls": context.mediaId,
65
- "aria-valuetext": `Volume ${Math.round(volume * 100)}%`,
66
- "data-slot": "media-player-volume-slider",
67
- min: 0,
68
- max: 1,
69
- step: 0.01,
70
- value: [isMuted ? 0 : volume],
71
- onValueChange: handleVolumeChange,
72
- onValueCommit: handleVolumeCommit,
73
- disabled: isDisabled,
74
- className: cn("relative flex touch-none select-none items-center", expandable
75
- ? "w-0 opacity-0 transition-all duration-200 group-hover:w-20 group-hover:opacity-100"
76
- : "w-20", "data-[disabled]:pointer-events-none data-[disabled]:opacity-50")
77
- };
78
- const content = (_jsxs("div", { ...containerProps, children: [_jsx(MediaPlayerTooltip, { tooltip: isMuted ? "Unmute" : "Mute", shortcut: "M", children: _jsx(Button, { ...buttonProps, children: _jsx(VolumeIcon, { className: "size-4" }) }) }), _jsxs(Slider, { ...sliderProps, children: [_jsx("div", { className: "relative h-2 w-full grow overflow-hidden rounded-full bg-secondary", children: _jsx("div", { className: "h-full bg-primary transition-all", style: { width: `${(isMuted ? 0 : volume) * 100}%` } }) }), _jsx("div", { className: "block h-4 w-4 rounded-full border-2 border-primary bg-background ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", style: {
79
- transform: `translateX(-50%)`,
80
- left: `${(isMuted ? 0 : volume) * 100}%`
81
- } })] })] }));
82
- if (asChild) {
83
- const child = React.Children.only(children);
84
- return React.cloneElement(child, containerProps, content);
85
- }
86
- return content;
87
- }
88
- MediaPlayerVolume.displayName = "MediaPlayerVolume";
@@ -1,67 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { forwardRef, useMemo, useTransition } from "react";
4
- import { useKeyboardControls } from "../hooks/use-keyboard-controls";
5
- import { useEnhancedMediaPlayer } from "../hooks/use-enhanced-media-player";
6
- import { useMemoryOptimization } from "../hooks/use-memory-optimization";
7
- import { EnhancedMediaWrapper } from "./media-suspense";
8
- import { cn } from "../lib/utils";
9
- export const MediaPlayer = forwardRef(({ src, className, children, keyboardControls = true, showControls = true, customControls = false, crossOrigin, enablePerformanceMonitoring = true, bufferingStrategy = "adaptive", preloadStrategy = "progressive", enableOptimizations = true, ...options }, ref) => {
10
- // React 19 concurrent features
11
- const [isPending] = useTransition();
12
- // Enhanced media player with optimizations
13
- const { state, controls, mediaRef, containerRef, performanceMetrics, isEnhanced } = useEnhancedMediaPlayer({
14
- src,
15
- crossOrigin,
16
- enablePerformanceMonitoring,
17
- bufferingStrategy,
18
- preloadStrategy,
19
- enableTimeUpdateThrottling: true,
20
- timeUpdateThrottleMs: 100,
21
- enableSeekPreview: true,
22
- ...options
23
- });
24
- // Memory optimization
25
- const { memoryStats, addEventListener } = useMemoryOptimization({
26
- maxMemoryUsage: 50, // 50MB for media player
27
- cleanupInterval: 15000, // 15 seconds
28
- enableGC: true,
29
- monitorMemory: enableOptimizations
30
- });
31
- // Keyboard controls with performance optimization
32
- useKeyboardControls({
33
- enabled: keyboardControls,
34
- state,
35
- controls
36
- });
37
- // Memoize media type detection
38
- const isVideo = useMemo(() => {
39
- return Array.isArray(src)
40
- ? src.some((s) => /\.(mp4|webm|ogv|mov|avi)$/i.test(s))
41
- : /\.(mp4|webm|ogv|mov|avi)$/i.test(src);
42
- }, [src]);
43
- // Memoize source rendering
44
- const renderSources = useMemo(() => {
45
- if (!Array.isArray(src))
46
- return null;
47
- return src.map((source, index) => (_jsx("source", { src: source }, `${source}-${index}`)));
48
- }, [src]);
49
- // Memoize common props
50
- const commonProps = useMemo(() => ({
51
- controls: showControls && !customControls,
52
- className: cn("w-full transition-all duration-300", isVideo && "aspect-video", "bg-[color:var(--media-bg)] rounded-lg", state.isTransitioning && "opacity-90"),
53
- preload: preloadStrategy === "eager" ? "auto" : "metadata",
54
- crossOrigin,
55
- ...(Array.isArray(src) ? {} : { src })
56
- }), [showControls, customControls, isVideo, state.isTransitioning, preloadStrategy, crossOrigin, src]);
57
- return (_jsx(EnhancedMediaWrapper, { priority: "high", errorFallback: ({ error, resetError }) => (_jsx("div", { className: cn("absolute inset-0 flex items-center justify-center", "glass-strong animate-enter rounded-lg", "bg-[color:var(--color-error)]/10 backdrop-blur-md"), children: _jsxs("div", { className: "space-y-2 text-center text-[color:var(--media-text)]", children: [_jsx("div", { className: "mx-auto w-fit rounded-full bg-[color:var(--color-error)]/20 p-3", children: _jsx("svg", { className: "size-6 text-[color:var(--color-error)]", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" }) }) }), _jsx("p", { className: "font-semibold text-lg", children: "Playback Error" }), _jsx("p", { className: "max-w-xs text-[color:var(--media-text-secondary)] text-sm", children: error.message || state.error }), _jsx("button", { onClick: resetError, className: "mt-2 rounded bg-[color:var(--color-brand-primary)] px-4 py-2 text-sm text-white transition-colors hover:bg-[color:var(--color-brand-accent)]", children: "Try Again" })] }) })), loadingFallback: _jsx("div", { className: cn("absolute inset-0 flex items-center justify-center", "glass animate-enter rounded-lg", "bg-[color:var(--media-bg)]/20 backdrop-blur-sm"), children: _jsxs("div", { className: "space-y-4 text-center text-[color:var(--media-text)]", children: [_jsxs("div", { className: "relative", children: [_jsx("div", { className: cn("size-12 animate-spin rounded-full border-2", "border-[color:var(--color-brand-accent)]/30", "border-t-[color:var(--color-brand-accent)]") }), _jsx("div", { className: cn("absolute inset-0 size-12 rounded-full", "bg-gradient-to-r from-[color:var(--color-brand-primary)] to-[color:var(--color-brand-accent)]", "animate-pulse opacity-20 blur-sm") })] }), _jsx("p", { className: "font-medium text-[color:var(--media-text-secondary)] text-sm", children: "Loading media..." })] }) }), children: _jsxs("div", { ref: ref || containerRef, className: cn("media-container relative overflow-hidden contain-strict", "bg-[color:var(--media-bg)] focus-within:outline-none", "rounded-xl border border-[color:var(--media-border)]/30", "shadow-2xl shadow-[color:var(--media-bg)]/50", "transition-all duration-300 ease-out", "hover:border-[color:var(--media-border)]/50", "hover:shadow-3xl hover:shadow-[color:var(--media-bg)]/60",
58
- // Performance optimizations
59
- "will-change-transform", state.isTransitioning && "cursor-wait", className), tabIndex: 0,
60
- // Performance attributes
61
- role: "application", "aria-label": isVideo ? "Video player" : "Audio player", "aria-busy": state.isLoading || state.isBuffering, children: [isVideo ? (_jsxs("video", { ref: mediaRef, ...commonProps,
62
- // Performance optimizations
63
- disablePictureInPicture: false, playsInline: true, "x-webkit-airplay": "allow", style: { willChange: 'transform' }, children: [renderSources(), "Your browser does not support the video element."] })) : (_jsxs("audio", { ref: mediaRef, ...commonProps,
64
- // Performance optimizations
65
- preload: preloadStrategy === "eager" ? "auto" : "metadata", children: [renderSources(), "Your browser does not support the audio element."] })), state.error && (_jsx("div", { className: cn("absolute inset-0 flex items-center justify-center", "glass-strong animate-enter rounded-lg", "bg-[color:var(--color-error)]/10 backdrop-blur-md"), children: _jsxs("div", { className: "space-y-2 text-center text-[color:var(--media-text)]", children: [_jsx("div", { className: "mx-auto w-fit rounded-full bg-[color:var(--color-error)]/20 p-3", children: _jsx("svg", { className: "size-6 text-[color:var(--color-error)]", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" }) }) }), _jsx("p", { className: "font-semibold text-lg", children: "Playback Error" }), _jsx("p", { className: "max-w-xs text-[color:var(--media-text-secondary)] text-sm", children: state.error })] }) })), state.isLoading && (_jsx("div", { className: cn("absolute inset-0 flex items-center justify-center", "glass animate-enter rounded-lg", "bg-[color:var(--media-bg)]/20 backdrop-blur-sm"), children: _jsxs("div", { className: "space-y-4 text-center text-[color:var(--media-text)]", children: [_jsxs("div", { className: "relative", children: [_jsx("div", { className: cn("size-12 animate-spin rounded-full border-2", "border-[color:var(--color-brand-accent)]/30", "border-t-[color:var(--color-brand-accent)]") }), _jsx("div", { className: cn("absolute inset-0 size-12 rounded-full", "bg-gradient-to-r from-[color:var(--color-brand-primary)] to-[color:var(--color-brand-accent)]", "animate-pulse opacity-20 blur-sm") })] }), _jsx("p", { className: "font-medium text-[color:var(--media-text-secondary)] text-sm", children: state.isBuffering ? "Buffering..." : "Loading media..." })] }) })), customControls && typeof children === "function" && (_jsx("div", { className: "pointer-events-auto absolute inset-0 z-50", children: children({ state, controls }) })), customControls && typeof children !== "function" && (_jsx("div", { className: "pointer-events-auto absolute inset-0 z-50", children: children })), process.env.NODE_ENV === 'development' && enablePerformanceMonitoring && (_jsxs("div", { className: "absolute bottom-2 left-2 rounded bg-black/50 px-2 py-1 text-white text-xs", children: [_jsxs("div", { children: ["FPS: ", performanceMetrics.frameRate || 0] }), _jsxs("div", { children: ["Memory: ", memoryStats.usage.toFixed(1), "MB"] }), isEnhanced && _jsx("div", { children: "Enhanced \u2713" })] }))] }) }));
66
- });
67
- MediaPlayer.displayName = "MediaPlayer";
@@ -1,173 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import React, { Suspense } from "react";
4
- import { cn } from "../lib/utils";
5
- export function MediaLoading({ children, className, size = "md", variant = "spinner" }) {
6
- const sizeClasses = {
7
- sm: "w-4 h-4",
8
- md: "w-8 h-8",
9
- lg: "w-12 h-12"
10
- };
11
- if (variant === "spinner") {
12
- return (_jsxs("div", { className: cn("flex items-center justify-center", className), children: [_jsx("div", { className: cn("animate-spin rounded-full border-2 border-current border-t-transparent", sizeClasses[size]) }), children && (_jsx("span", { className: "ml-2 text-muted-foreground text-sm", children: children }))] }));
13
- }
14
- if (variant === "skeleton") {
15
- return (_jsx("div", { className: cn("animate-pulse rounded bg-muted", sizeClasses[size], className) }));
16
- }
17
- // Pulse variant
18
- return (_jsx("div", { className: cn("animate-pulse bg-gradient-to-r bg-pos-0 bg-size-200 from-muted via-muted/50 to-muted", "animate-shimmer rounded", sizeClasses[size], className) }));
19
- }
20
- export function MediaSuspense({ children, fallback = _jsx(MediaLoading, {}), className }) {
21
- return (_jsx("div", { className: className, children: _jsx(Suspense, { fallback: fallback, children: children }) }));
22
- }
23
- // Lazy loading wrapper for heavy media components
24
- export function withMediaSuspense(Component, loadingComponent) {
25
- const WrappedComponent = React.forwardRef((props, ref) => {
26
- const LoadingComp = loadingComponent;
27
- return (_jsx(MediaSuspense, { fallback: LoadingComp ? _jsx(LoadingComp, {}) : _jsx(MediaLoading, {}), children: _jsx(Component, { ...props, ref: ref }) }));
28
- });
29
- WrappedComponent.displayName = `withMediaSuspense(${Component.displayName || Component.name})`;
30
- return WrappedComponent;
31
- }
32
- // Hook for managing concurrent state updates
33
- export function useMediaConcurrent() {
34
- const [isPending, startTransition] = React.useTransition();
35
- // Wrap state updates in transitions for better performance
36
- const updateWithTransition = React.useCallback((updateFn) => {
37
- return new Promise((resolve) => {
38
- startTransition(() => {
39
- const result = updateFn();
40
- resolve(result);
41
- });
42
- });
43
- }, [startTransition]);
44
- // Batch multiple updates together
45
- const batchUpdates = React.useCallback((updates) => {
46
- return new Promise((resolve) => {
47
- startTransition(() => {
48
- const results = updates.map(update => update());
49
- resolve(results);
50
- });
51
- });
52
- }, [startTransition]);
53
- return {
54
- isPending,
55
- updateWithTransition,
56
- batchUpdates
57
- };
58
- }
59
- // Default error fallback component
60
- function DefaultErrorFallback({ error, resetError }) {
61
- return (_jsxs("div", { className: "flex flex-col items-center justify-center rounded-lg border border-destructive/20 bg-destructive/10 p-6", children: [_jsx("div", { className: "mb-2 font-semibold text-destructive text-lg", children: "Media Player Error" }), _jsx("div", { className: "mb-4 text-center text-muted-foreground text-sm", children: error.message }), _jsx("button", { onClick: resetError, className: "rounded bg-primary px-4 py-2 text-primary-foreground transition-colors hover:bg-primary/90", children: "Try Again" })] }));
62
- }
63
- export class MediaErrorBoundary extends React.Component {
64
- constructor(props) {
65
- super(props);
66
- this.state = { hasError: false, error: null };
67
- }
68
- static getDerivedStateFromError(error) {
69
- return { hasError: true, error };
70
- }
71
- componentDidCatch(error, errorInfo) {
72
- this.props.onError?.(error, errorInfo);
73
- console.error('MediaErrorBoundary caught an error:', error, errorInfo);
74
- }
75
- resetError = () => {
76
- this.setState({ hasError: false, error: null });
77
- };
78
- render() {
79
- if (this.state.hasError && this.state.error) {
80
- const FallbackComponent = this.props.fallback || DefaultErrorFallback;
81
- return _jsx(FallbackComponent, { error: this.state.error, resetError: this.resetError });
82
- }
83
- return this.props.children;
84
- }
85
- }
86
- export function ConcurrentMedia({ children, priority = "normal", deferredMs = 0 }) {
87
- const [isDeferred, setIsDeferred] = React.useState(deferredMs > 0);
88
- React.useEffect(() => {
89
- if (deferredMs > 0) {
90
- const timer = setTimeout(() => {
91
- setIsDeferred(false);
92
- }, deferredMs);
93
- return () => clearTimeout(timer);
94
- }
95
- }, [deferredMs]);
96
- if (isDeferred) {
97
- return _jsx(MediaLoading, { variant: "skeleton" });
98
- }
99
- // Use different rendering strategies based on priority
100
- if (priority === "high") {
101
- // Render immediately without deferring
102
- return _jsx(_Fragment, { children: children });
103
- }
104
- if (priority === "low") {
105
- // Use deferred value for lower priority updates
106
- const deferredChildren = React.useDeferredValue(children);
107
- return _jsx(_Fragment, { children: deferredChildren });
108
- }
109
- // Normal priority - use transition
110
- return (_jsx(React.Suspense, { fallback: _jsx(MediaLoading, {}), children: children }));
111
- }
112
- // Hook for deferred loading of media resources
113
- export function useDeferredMediaLoading(delay = 100) {
114
- const [isReady, setIsReady] = React.useState(false);
115
- const deferredIsReady = React.useDeferredValue(isReady);
116
- React.useEffect(() => {
117
- const timer = setTimeout(() => {
118
- setIsReady(true);
119
- }, delay);
120
- return () => clearTimeout(timer);
121
- }, [delay]);
122
- return {
123
- isReady: deferredIsReady,
124
- actualIsReady: isReady
125
- };
126
- }
127
- export function EnhancedMediaWrapper({ children, className, loadingFallback = _jsx(MediaLoading, {}), errorFallback, priority = "normal", deferredMs = 0, onError }) {
128
- return (_jsx("div", { className: className, children: _jsx(MediaErrorBoundary, { fallback: errorFallback, onError: onError, children: _jsx(MediaSuspense, { fallback: loadingFallback, children: _jsx(ConcurrentMedia, { priority: priority, deferredMs: deferredMs, children: children }) }) }) }));
129
- }
130
- // Export enhanced components with concurrent features
131
- export const EnhancedMediaSuspense = MediaSuspense;
132
- export const EnhancedMediaLoading = MediaLoading;
133
- // Performance monitoring hook for concurrent features
134
- export function useMediaPerformance() {
135
- const [metrics, setMetrics] = React.useState({
136
- renderTime: 0,
137
- suspenseCount: 0,
138
- errorCount: 0,
139
- transitionCount: 0
140
- });
141
- const recordRenderTime = React.useCallback((startTime) => {
142
- const renderTime = performance.now() - startTime;
143
- setMetrics(prev => ({
144
- ...prev,
145
- renderTime: Math.round(renderTime * 100) / 100
146
- }));
147
- }, []);
148
- const incrementSuspense = React.useCallback(() => {
149
- setMetrics(prev => ({
150
- ...prev,
151
- suspenseCount: prev.suspenseCount + 1
152
- }));
153
- }, []);
154
- const incrementError = React.useCallback(() => {
155
- setMetrics(prev => ({
156
- ...prev,
157
- errorCount: prev.errorCount + 1
158
- }));
159
- }, []);
160
- const incrementTransition = React.useCallback(() => {
161
- setMetrics(prev => ({
162
- ...prev,
163
- transitionCount: prev.transitionCount + 1
164
- }));
165
- }, []);
166
- return {
167
- metrics,
168
- recordRenderTime,
169
- incrementSuspense,
170
- incrementError,
171
- incrementTransition
172
- };
173
- }
@@ -1,46 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useActionState } from 'react';
3
- const defaultSettings = {
4
- volume: 0.8,
5
- quality: 'auto',
6
- subtitles: false,
7
- playbackRate: 1
8
- };
9
- async function updateSettings(prevState, formData) {
10
- try {
11
- // Simulate async operation
12
- await new Promise(resolve => setTimeout(resolve, 500));
13
- const settings = {
14
- volume: Number(formData.get('volume')) || 0.8,
15
- quality: formData.get('quality') || 'auto',
16
- subtitles: formData.get('subtitles') === 'on',
17
- playbackRate: Number(formData.get('playbackRate')) || 1
18
- };
19
- // Validate settings
20
- if (settings.volume < 0 || settings.volume > 1) {
21
- throw new Error('Volume must be between 0 and 1');
22
- }
23
- if (settings.playbackRate < 0.25 || settings.playbackRate > 2) {
24
- throw new Error('Playback rate must be between 0.25 and 2');
25
- }
26
- // Save to localStorage or send to server
27
- localStorage.setItem('player-settings', JSON.stringify(settings));
28
- return {
29
- values: settings,
30
- success: true
31
- };
32
- }
33
- catch (error) {
34
- return {
35
- values: prevState.values,
36
- error: error instanceof Error ? error.message : 'Unknown error'
37
- };
38
- }
39
- }
40
- export function PlayerSettingsForm() {
41
- const [state, submitAction, isPending] = useActionState(updateSettings, {
42
- values: defaultSettings,
43
- success: false
44
- });
45
- return (_jsxs("div", { className: "mx-auto w-full max-w-md", children: [_jsx("h3", { className: "mb-4 font-semibold text-lg text-white", children: "Player Settings" }), _jsxs("form", { action: submitAction, className: "space-y-4", children: [state.error && (_jsx("div", { className: "rounded-lg border border-red-700 bg-red-900/20 p-3", children: _jsx("p", { className: "text-red-400 text-sm", children: state.error }) })), state.success && (_jsx("div", { className: "rounded-lg border border-green-700 bg-green-900/20 p-3", children: _jsx("p", { className: "text-green-400 text-sm", children: "Settings saved successfully!" }) })), _jsxs("fieldset", { disabled: isPending, className: "space-y-4 disabled:opacity-50", children: [_jsxs("div", { children: [_jsxs("label", { htmlFor: "volume", className: "mb-2 block font-medium text-sm text-white", children: ["Volume: ", Math.round(state.values.volume * 100), "%"] }), _jsx("input", { type: "range", id: "volume", name: "volume", min: "0", max: "1", step: "0.01", defaultValue: state.values.volume, className: "h-2 w-full cursor-pointer appearance-none rounded-lg bg-gray-700" })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "quality", className: "mb-2 block font-medium text-sm text-white", children: "Quality" }), _jsxs("select", { id: "quality", name: "quality", defaultValue: state.values.quality, className: "w-full rounded-lg border border-gray-600 bg-gray-700 p-2 text-white focus:ring-2 focus:ring-blue-500", children: [_jsx("option", { value: "auto", children: "Auto" }), _jsx("option", { value: "1080p", children: "1080p" }), _jsx("option", { value: "720p", children: "720p" }), _jsx("option", { value: "480p", children: "480p" }), _jsx("option", { value: "360p", children: "360p" })] })] }), _jsxs("div", { children: [_jsxs("label", { htmlFor: "playbackRate", className: "mb-2 block font-medium text-sm text-white", children: ["Playback Rate: ", state.values.playbackRate, "x"] }), _jsx("input", { type: "range", id: "playbackRate", name: "playbackRate", min: "0.25", max: "2", step: "0.25", defaultValue: state.values.playbackRate, className: "h-2 w-full cursor-pointer appearance-none rounded-lg bg-gray-700" })] }), _jsxs("div", { className: "flex items-center", children: [_jsx("input", { type: "checkbox", id: "subtitles", name: "subtitles", defaultChecked: state.values.subtitles, className: "h-4 w-4 rounded border-gray-600 bg-gray-700 text-blue-600 focus:ring-blue-500" }), _jsx("label", { htmlFor: "subtitles", className: "ml-2 font-medium text-sm text-white", children: "Enable Subtitles" })] }), _jsx("button", { type: "submit", disabled: isPending, className: "w-full rounded-lg bg-blue-600 px-4 py-2 font-medium text-white transition-colors hover:bg-blue-700 focus:ring-2 focus:ring-blue-500 disabled:bg-gray-600", children: isPending ? 'Saving...' : 'Save Settings' })] })] })] }));
46
- }
@@ -1,163 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import "../styles/pixel-art.css";
4
- import { Button } from "../components/ui/button";
5
- import { DownloadIcon, ExitFullscreenIcon, Forward10Icon, FullscreenIcon, LoadingIcon, MuteIcon, PauseIcon, PictureInPictureIcon, PlayIcon, QualityIcon, Rewind10Icon, ShareIcon, SpeedIcon, SubtitlesIcon, VolumeIcon } from "../components/ui/icons";
6
- import { Slider } from "../components/ui/slider";
7
- import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger } from "../components/ui/dropdown-menu";
8
- import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "../components/ui/tooltip";
9
- import { useState, useRef, useEffect, Suspense, lazy } from "react";
10
- // Dynamic import for lazy loading
11
- const ReactPlayer = lazy(() => import("react-player"));
12
- import { cn } from "../lib/utils";
13
- export function ModernMediaPlayer({ className, containerClassName, url, playing = false, volume = 1, muted = false, controls = false, light = false, loop = false, playbackRate = 1, width = "100%", height = "100%", style, progressInterval = 1000, playsinline = true, pip = false, stopOnUnmount = true, fallback = _jsx(LoadingIcon, { className: "size-12 text-white" }), wrapper = "div", config, showDownload = false, showShare = false, showSubtitles = false, showQuality = false, onDownload, onShare, qualityOptions = [
14
- { label: "1080p", value: "1080" },
15
- { label: "720p", value: "720" },
16
- { label: "480p", value: "480" },
17
- { label: "360p", value: "360" }
18
- ], subtitleTracks = [], onReady, onStart, onPlay, onProgress, onDuration, onPause, onBuffer, onBufferEnd, onSeek, onPlaybackRateChange, onEnded, onError, onClickPreview, onEnablePIP, onDisablePIP, ...props }) {
19
- const [isPlaying, setIsPlaying] = useState(playing);
20
- const [currentVolume, setCurrentVolume] = useState(volume);
21
- const [isMuted, setIsMuted] = useState(muted);
22
- const [duration, setDuration] = useState(0);
23
- const [currentTime, setCurrentTime] = useState(0);
24
- const [buffered, setBuffered] = useState(0);
25
- const [isFullscreen, setIsFullscreen] = useState(false);
26
- const [isPiP, setIsPiP] = useState(pip);
27
- const [currentRate, setCurrentRate] = useState(playbackRate);
28
- const [showControls, setShowControls] = useState(true);
29
- const [isLoading, setIsLoading] = useState(true);
30
- const [selectedQuality, setSelectedQuality] = useState(qualityOptions[0]?.value || "720");
31
- const [selectedSubtitle, setSelectedSubtitle] = useState(null);
32
- const playerRef = useRef(null);
33
- const containerRef = useRef(null);
34
- const controlsTimeoutRef = useRef(null);
35
- // Format time helper
36
- const formatTime = (seconds) => {
37
- const date = new Date(seconds * 1000);
38
- const hh = date.getUTCHours();
39
- const mm = date.getUTCMinutes();
40
- const ss = date.getUTCSeconds().toString().padStart(2, "0");
41
- if (hh) {
42
- return `${hh}:${mm.toString().padStart(2, "0")}:${ss}`;
43
- }
44
- return `${mm}:${ss}`;
45
- };
46
- // Handle mouse movement for auto-hiding controls
47
- const handleMouseMove = () => {
48
- setShowControls(true);
49
- if (controlsTimeoutRef.current) {
50
- clearTimeout(controlsTimeoutRef.current);
51
- }
52
- if (isPlaying) {
53
- controlsTimeoutRef.current = setTimeout(() => {
54
- setShowControls(false);
55
- }, 3000);
56
- }
57
- };
58
- useEffect(() => {
59
- return () => {
60
- if (controlsTimeoutRef.current) {
61
- clearTimeout(controlsTimeoutRef.current);
62
- }
63
- };
64
- }, []);
65
- // Fullscreen handling
66
- const toggleFullscreen = () => {
67
- if (!document.fullscreenElement) {
68
- containerRef.current?.requestFullscreen();
69
- setIsFullscreen(true);
70
- }
71
- else {
72
- document.exitFullscreen();
73
- setIsFullscreen(false);
74
- }
75
- };
76
- // Keyboard shortcuts
77
- useEffect(() => {
78
- const handleKeyPress = (e) => {
79
- if (!containerRef.current?.contains(document.activeElement))
80
- return;
81
- switch (e.key.toLowerCase()) {
82
- case " ":
83
- case "k":
84
- e.preventDefault();
85
- setIsPlaying(!isPlaying);
86
- break;
87
- case "f":
88
- e.preventDefault();
89
- toggleFullscreen();
90
- break;
91
- case "m":
92
- e.preventDefault();
93
- setIsMuted(!isMuted);
94
- break;
95
- case "arrowleft":
96
- e.preventDefault();
97
- playerRef.current?.seekTo(currentTime - 10);
98
- break;
99
- case "arrowright":
100
- e.preventDefault();
101
- playerRef.current?.seekTo(currentTime + 10);
102
- break;
103
- case "arrowup":
104
- e.preventDefault();
105
- setCurrentVolume(Math.min(1, currentVolume + 0.1));
106
- break;
107
- case "arrowdown":
108
- e.preventDefault();
109
- setCurrentVolume(Math.max(0, currentVolume - 0.1));
110
- break;
111
- }
112
- };
113
- window.addEventListener("keydown", handleKeyPress);
114
- return () => window.removeEventListener("keydown", handleKeyPress);
115
- }, [isPlaying, isMuted, currentTime, currentVolume, toggleFullscreen]);
116
- const playbackRates = [0.5, 0.75, 1, 1.25, 1.5, 2];
117
- return (_jsx(TooltipProvider, { children: _jsxs("div", { ref: containerRef, className: cn("relative overflow-hidden rounded-lg bg-black", "focus-within:outline-none", containerClassName), onMouseMove: handleMouseMove, onMouseLeave: () => isPlaying && setShowControls(false), tabIndex: 0, children: [_jsx(Suspense, { fallback: fallback, children: _jsx(ReactPlayer, { ref: playerRef, url: url, playing: isPlaying, volume: isMuted ? 0 : currentVolume, muted: isMuted, controls: false, light: light, loop: loop, playbackRate: currentRate, width: width, height: height, style: { ...style, aspectRatio: "16/9" }, progressInterval: progressInterval, playsinline: playsinline, pip: isPiP, stopOnUnmount: stopOnUnmount, fallback: fallback, wrapper: wrapper, config: config, className: cn("aspect-video", className), onReady: () => {
118
- setIsLoading(false);
119
- onReady?.();
120
- }, onStart: () => {
121
- setIsLoading(false);
122
- onStart?.();
123
- }, onPlay: () => {
124
- setIsPlaying(true);
125
- onPlay?.();
126
- }, onPause: () => {
127
- setIsPlaying(false);
128
- onPause?.();
129
- }, ...{
130
- onProgress: (state) => {
131
- setCurrentTime(state.playedSeconds);
132
- setBuffered(state.loaded);
133
- onProgress?.(state);
134
- }
135
- }, onDuration: (dur) => {
136
- setDuration(dur);
137
- onDuration?.(dur);
138
- }, onBuffer: () => {
139
- setIsLoading(true);
140
- onBuffer?.();
141
- }, onBufferEnd: () => {
142
- setIsLoading(false);
143
- onBufferEnd?.();
144
- }, onSeek: onSeek, onPlaybackRateChange: (rate) => {
145
- setCurrentRate(rate);
146
- onPlaybackRateChange?.(rate);
147
- }, onEnded: onEnded, onError: onError, onClickPreview: onClickPreview, onEnablePIP: () => {
148
- setIsPiP(true);
149
- onEnablePIP?.();
150
- }, onDisablePIP: () => {
151
- setIsPiP(false);
152
- onDisablePIP?.();
153
- }, ...props }) }), isLoading && (_jsx("div", { className: "absolute inset-0 flex items-center justify-center bg-black/50", children: _jsx(LoadingIcon, { className: "size-12 text-white" }) })), _jsxs("div", { className: cn("absolute inset-0 bg-gradient-to-t from-black/80 via-transparent to-black/20", "transition-opacity duration-300", showControls ? "opacity-100" : "pointer-events-none opacity-0"), children: [_jsxs("div", { className: "absolute top-0 right-0 left-0 flex items-center justify-between p-4", children: [_jsx("h3", { className: "font-medium text-lg text-white", children: "Media Player" }), _jsxs("div", { className: "flex items-center gap-2", children: [showShare && (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon", className: "pixel-button rounded-none border border-gray-600/50 bg-gray-800/80 text-white shadow-lg transition-all duration-150 hover:border-gray-500 hover:bg-gray-700/80 active:scale-95", onClick: onShare, children: _jsx(ShareIcon, { className: "size-5" }) }) }), _jsx(TooltipContent, { children: "Share" })] })), showDownload && (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon", className: "pixel-button rounded-none border border-gray-600/50 bg-gray-800/80 text-white shadow-lg transition-all duration-150 hover:border-gray-500 hover:bg-gray-700/80 active:scale-95", onClick: onDownload, children: _jsx(DownloadIcon, { className: "size-5" }) }) }), _jsx(TooltipContent, { children: "Download" })] }))] })] }), _jsx("div", { className: "absolute inset-0 flex items-center justify-center", children: _jsx(Button, { variant: "ghost", size: "icon", className: "pixel-button size-20 rounded-none border-2 border-gray-600 bg-gray-800/90 text-white shadow-xl transition-all duration-200 hover:scale-105 hover:border-gray-500 hover:bg-gray-700/90 active:scale-95", onClick: () => setIsPlaying(!isPlaying), children: isPlaying ? _jsx(PauseIcon, { className: "size-10" }) : _jsx(PlayIcon, { className: "size-10" }) }) }), _jsxs("div", { className: "absolute right-0 bottom-0 left-0 space-y-2 p-4", children: [_jsxs("div", { className: "relative", children: [_jsx(Slider, { value: [currentTime], max: duration, step: 1, onValueChange: ([value]) => {
154
- if (typeof value !== "number")
155
- return;
156
- playerRef.current?.seekTo(value);
157
- }, className: "pixel-progress cursor-pointer [&>span]:rounded-none [&>span]:border [&>span]:border-gray-600 [&>span]:bg-gray-800 [&>span]:shadow-lg [&_[role=slider]]:size-4 [&_[role=slider]]:rounded-none [&_[role=slider]]:border-2 [&_[role=slider]]:border-gray-400 [&_[role=slider]]:bg-white [&_[role=slider]]:shadow-md" }), _jsx("div", { className: "pointer-events-none absolute top-0 left-0 h-full rounded-none border border-gray-500/30 bg-white/20", style: { width: `${buffered * 100}%` } })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon", className: "pixel-button rounded-none border border-gray-600/50 bg-gray-800/80 text-white shadow-lg transition-all duration-150 hover:border-gray-500 hover:bg-gray-700/80 active:scale-95", onClick: () => setIsPlaying(!isPlaying), children: isPlaying ? (_jsx(PauseIcon, { className: "size-6" })) : (_jsx(PlayIcon, { className: "size-6" })) }) }), _jsx(TooltipContent, { children: isPlaying ? "Pause (k)" : "Play (k)" })] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon", className: "pixel-button rounded-none border border-gray-600/50 bg-gray-800/80 text-white shadow-lg transition-all duration-150 hover:border-gray-500 hover:bg-gray-700/80 active:scale-95", onClick: () => playerRef.current?.seekTo(currentTime - 10), children: _jsx(Rewind10Icon, { className: "size-6" }) }) }), _jsx(TooltipContent, { children: "Back 10s (\u2190)" })] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon", className: "pixel-button rounded-none border border-gray-600/50 bg-gray-800/80 text-white shadow-lg transition-all duration-150 hover:border-gray-500 hover:bg-gray-700/80 active:scale-95", onClick: () => playerRef.current?.seekTo(currentTime + 10), children: _jsx(Forward10Icon, { className: "size-6" }) }) }), _jsx(TooltipContent, { children: "Forward 10s (\u2192)" })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon", className: "pixel-button rounded-none border border-gray-600/50 bg-gray-800/80 text-white shadow-lg transition-all duration-150 hover:border-gray-500 hover:bg-gray-700/80 active:scale-95", onClick: () => setIsMuted(!isMuted), children: isMuted || currentVolume === 0 ? (_jsx(MuteIcon, { className: "size-6" })) : (_jsx(VolumeIcon, { className: "size-6" })) }) }), _jsx(TooltipContent, { children: isMuted ? "Unmute (m)" : "Mute (m)" })] }), _jsx(Slider, { value: [isMuted ? 0 : currentVolume], max: 1, step: 0.05, onValueChange: ([value]) => {
158
- if (typeof value !== "number")
159
- return;
160
- setCurrentVolume(value);
161
- setIsMuted(value === 0);
162
- }, className: "pixel-progress w-20 cursor-pointer [&>span]:rounded-none [&>span]:border [&>span]:border-gray-600 [&>span]:bg-gray-800 [&>span]:shadow-lg [&_[role=slider]]:size-3 [&_[role=slider]]:rounded-none [&_[role=slider]]:border-2 [&_[role=slider]]:border-gray-400 [&_[role=slider]]:bg-white [&_[role=slider]]:shadow-md" })] }), _jsxs("span", { className: "pixel-time-display rounded-none border border-gray-600/50 bg-gray-900/80 px-2 py-1 font-mono text-sm text-white shadow-lg", children: [formatTime(currentTime), " / ", formatTime(duration)] })] }), _jsxs("div", { className: "flex items-center gap-2", children: [showSubtitles && subtitleTracks.length > 0 && (_jsxs(DropdownMenu, { children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon", className: "pixel-button rounded-none border border-gray-600/50 bg-gray-800/80 text-white shadow-lg transition-all duration-150 hover:border-gray-500 hover:bg-gray-700/80 active:scale-95", children: _jsx(SubtitlesIcon, { className: "size-6" }) }) }) }), _jsx(TooltipContent, { children: "Subtitles" })] }), _jsxs(DropdownMenuContent, { children: [_jsx(DropdownMenuLabel, { children: "Subtitles" }), _jsx(DropdownMenuSeparator, {}), _jsx(DropdownMenuItem, { onClick: () => setSelectedSubtitle(null), children: "Off" }), subtitleTracks.map((track) => (_jsx(DropdownMenuItem, { onClick: () => setSelectedSubtitle(track.value), children: track.label }, track.value)))] })] })), showQuality && (_jsxs(DropdownMenu, { children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon", className: "pixel-button rounded-none border border-gray-600/50 bg-gray-800/80 text-white shadow-lg transition-all duration-150 hover:border-gray-500 hover:bg-gray-700/80 active:scale-95", children: _jsx(QualityIcon, { className: "size-6" }) }) }) }), _jsx(TooltipContent, { children: "Quality" })] }), _jsxs(DropdownMenuContent, { children: [_jsx(DropdownMenuLabel, { children: "Quality" }), _jsx(DropdownMenuSeparator, {}), qualityOptions.map((option) => (_jsxs(DropdownMenuItem, { onClick: () => setSelectedQuality(option.value), children: [option.label, " ", selectedQuality === option.value && "✓"] }, option.value)))] })] })), _jsxs(DropdownMenu, { children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon", className: "pixel-button rounded-none border border-gray-600/50 bg-gray-800/80 text-white shadow-lg transition-all duration-150 hover:border-gray-500 hover:bg-gray-700/80 active:scale-95", children: _jsx(SpeedIcon, { className: "size-6" }) }) }) }), _jsx(TooltipContent, { children: "Playback Speed" })] }), _jsxs(DropdownMenuContent, { children: [_jsx(DropdownMenuLabel, { children: "Speed" }), _jsx(DropdownMenuSeparator, {}), playbackRates.map((rate) => (_jsxs(DropdownMenuItem, { onClick: () => setCurrentRate(rate), children: [rate, "x ", currentRate === rate && "✓"] }, rate)))] })] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon", className: "pixel-button rounded-none border border-gray-600/50 bg-gray-800/80 text-white shadow-lg transition-all duration-150 hover:border-gray-500 hover:bg-gray-700/80 active:scale-95", onClick: () => setIsPiP(!isPiP), children: _jsx(PictureInPictureIcon, { className: "size-6" }) }) }), _jsx(TooltipContent, { children: "Picture in Picture" })] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon", className: "pixel-button rounded-none border border-gray-600/50 bg-gray-800/80 text-white shadow-lg transition-all duration-150 hover:border-gray-500 hover:bg-gray-700/80 active:scale-95", onClick: toggleFullscreen, children: isFullscreen ? (_jsx(ExitFullscreenIcon, { className: "size-6" })) : (_jsx(FullscreenIcon, { className: "size-6" })) }) }), _jsx(TooltipContent, { children: isFullscreen ? "Exit Fullscreen (f)" : "Fullscreen (f)" })] })] })] })] })] })] }) }));
163
- }
@@ -1,41 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import { useEffect, useRef } from "react";
4
- import "video.js/dist/video-js.css";
5
- export function SimpleVideoPlayer({ src, type = "video/mp4" }) {
6
- const videoRef = useRef(null);
7
- const playerRef = useRef(null);
8
- useEffect(() => {
9
- const loadPlayer = async () => {
10
- if (!videoRef.current || playerRef.current)
11
- return;
12
- // Dynamically import video.js
13
- const videojs = (await import("video.js")).default;
14
- // Initialize player
15
- const player = videojs(videoRef.current, {
16
- controls: true,
17
- autoplay: false,
18
- preload: 'auto',
19
- fluid: true,
20
- sources: [{
21
- src: src,
22
- type: type
23
- }]
24
- });
25
- playerRef.current = player;
26
- player.ready(() => {
27
- console.log("Player is ready!");
28
- });
29
- };
30
- loadPlayer();
31
- // Cleanup
32
- return () => {
33
- if (playerRef.current) {
34
- playerRef.current.dispose();
35
- playerRef.current = null;
36
- }
37
- };
38
- }, [src, type]);
39
- return (_jsx("div", { className: "w-full", children: _jsx("div", { "data-vjs-player": true, children: _jsx("video", { ref: videoRef, className: "video-js vjs-big-play-centered vjs-default-skin w-full", playsInline: true }) }) }));
40
- }
41
- SimpleVideoPlayer.displayName = "SimpleVideoPlayer";